summaryrefslogtreecommitdiff
path: root/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr
diff options
context:
space:
mode:
Diffstat (limited to 'Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr')
-rwxr-xr-xModelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_ledbin0 -> 23828 bytes
-rwxr-xr-xModelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led.hex120
-rwxr-xr-xModelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led.sh61
-rwxr-xr-xModelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led_main.c243
-rwxr-xr-xModelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_read.sh61
-rwxr-xr-xModelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/runMDD_ldr_led.mos11
-rwxr-xr-xModelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/runMDD_ldr_read.mos11
7 files changed, 507 insertions, 0 deletions
diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led
new file mode 100755
index 0000000..08ef23c
--- /dev/null
+++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led
Binary files differ
diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led.hex b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led.hex
new file mode 100755
index 0000000..cc58777
--- /dev/null
+++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led.hex
@@ -0,0 +1,120 @@
+:100000000C9434000C9451000C9451000C94510049
+:100010000C9451000C9451000C9451000C9431013B
+:100020000C9451000C9451000C9451000C9400015C
+:100030000C9451000C9451000C94CF000C9451007E
+:100040000C9451000C9451000C9451000C945100EC
+:100050000C9451000C9451000C9451000C945100DC
+:100060000C9451000C94510011241FBECFEFD8E026
+:10007000DEBFCDBF11E0A0E0B1E0E4E4F7E002C0F4
+:1000800005900D92AE31B107D9F711E0AEE1B1E0C4
+:1000900001C01D92A332B107E1F70E948B010C94BD
+:1000A000A0030C9400000F931F93CF93DF93EC01F8
+:1000B00080917C00857E856080937C0080917A00B1
+:1000C000806480937A0080917A0086FDFCCF6091F5
+:1000D00078007091790080E090E00E94870220E033
+:1000E00030E040E854E40E94190320E030EC4FE790
+:1000F00054E40E941F026C837D838E839F8301E002
+:1001000010E02E853F85488959890E9415031816ED
+:1001100014F000E010E01D870C878C8D9D8D8230DF
+:10012000910561F08330910599F00197C9F416BCEF
+:1001300080916E00826080936E0016C010928500E0
+:100140001092840080916F00826080936F000CC0D9
+:100150001092B2008091700082608093700004C0A1
+:1001600081E090E00E94A00378949FB7F89480917A
+:1001700020019FBF8823C9F310922001E88DF98DDB
+:100180008C859D85892B19F08081826002C08081D9
+:100190008D7F8083DF91CF911F910F9108951F92E2
+:1001A0000F920FB60F9211242F933F938F939F932B
+:1001B00080911E0190911F01019690931F018093E1
+:1001C0001E0180912001813091F020911E0130911B
+:1001D0001F0180912101909122012817390738F0E1
+:1001E00081E08093200110921F0110921E019F91C7
+:1001F0008F913F912F910F900FBE0F901F901895E8
+:100200001F920F920FB60F9211242F933F938F934B
+:100210009F9380911E0190911F01019690931F0161
+:1002200080931E0180912001813091F020911E0168
+:1002300030911F01809121019091220128173907E7
+:1002400038F081E08093200110921F0110921E016E
+:100250009F918F913F912F910F900FBE0F901F9004
+:1002600018951F920F920FB60F9211242F933F9360
+:100270008F939F9380911E0190911F0101969093FF
+:100280001F0180931E0180912001813091F0209107
+:100290001E0130911F0180912101909122012817A8
+:1002A000390738F081E08093200110921F011092ED
+:1002B0001E019F918F913F912F910F900FBE0F9034
+:1002C0001F901895FC01ACE7B0E08C91806C8C938A
+:1002D000AAE7B0E08C9187688C93178A168A219AD6
+:1002E00085E290E0918F808F85B5836085BD81E048
+:1002F00090E0938F828F22E030E0309322012093B0
+:10030000210124B5226024BD29EF27BD958F848F5C
+:1003100080E090E00895CF92DF92EF92FF9280E02C
+:1003200091E00E946201C12CD12C760160E070E066
+:10033000CB016093000170930101809302019093BF
+:10034000030180E091E00E9453008FEFC81AD80AA1
+:10035000E80AF80AC701B6010E9487022FE632E1D7
+:1003600043E05BE30E94190320E030E0A9010E9412
+:10037000BB01DFCF5058BB27AA270ED01CC10DD11F
+:1003800030F012D120F031F49F3F11F41EF402C17D
+:100390000EF4E095E7FBF8C0E92F1ED180F3BA1701
+:1003A000620773078407950718F071F49EF536C14C
+:1003B0000EF4E0950B2EBA2FA02D0B01B901900180
+:1003C0000C01CA01A0011124FF27591B99F0593FC4
+:1003D00050F4503E68F11A16F040A22F232F342F0C
+:1003E0004427585FF3CF469537952795A795F0405A
+:1003F0005395C9F77EF41F16BA0B620B730B840B6F
+:10040000BAF09150A1F0FF0FBB1F661F771F881F26
+:10041000C2F70EC0BA0F621F731F841F48F487957E
+:1004200077956795B795F7959E3F08F0B3CF93956D
+:10043000880F08F09927EE0F9795879508950CD0AF
+:10044000BAC0B2D040F0A9D030F021F45F3F19F02B
+:100450009BC05111E4C09EC0BFD098F39923C9F34B
+:100460005523B1F3951B550BBB27AA2762177307BA
+:10047000840738F09F5F5F4F220F331F441FAA1F6E
+:10048000A9F333D00E2E3AF0E0E830D0915050402E
+:10049000E695001CCAF729D0FE2F27D0660F771FDC
+:1004A000881FBB1F261737074807AB07B0E809F0BE
+:1004B000BB0B802DBF01FF2793585F4F2AF09E3F53
+:1004C000510568F061C0ABC05F3FECF3983EDCF3D0
+:1004D000869577956795B795F7959F5FC9F7880FCC
+:1004E000911D9695879597F90895E1E0660F771F1E
+:1004F000881FBB1F621773078407BA0720F0621BAF
+:10050000730B840BBA0BEE1F88F7E0950895E894FF
+:1005100009C097FB3EF490958095709561957F4F4B
+:100520008F4F9F4F9923A9F0F92F96E9BB279395F9
+:10053000F695879577956795B795F111F8CFFAF409
+:10054000BB0F11F460FF1BC06F5F7F4F8F4F9F4F3A
+:1005500016C0882311F096E911C0772321F09EE898
+:10056000872F762F05C0662371F096E8862F70E0FE
+:1005700060E02AF09A95660F771F881FDAF7880FD8
+:100580009695879597F9089597F99F6780E870E0A9
+:1005900060E008959FEF80EC089500240A941616F9
+:1005A000170618060906089500240A941216130661
+:1005B000140605060895092E0394000C11F48823EF
+:1005C00052F0BB0F40F4BF2B11F460FF04C06F5F0B
+:1005D0007F4F8F4F9F4F089557FD9058440F551FE1
+:1005E00059F05F3F71F04795880F97FB991F61F0B5
+:1005F0009F3F79F087950895121613061406551F2C
+:10060000F2CF4695F1DF08C0161617061806991F97
+:10061000F1CF86957105610508940895E894BB278C
+:1006200066277727CB0197F9089566D008F48FEFF6
+:1006300008950BD0C0CFB1DF28F0B6DF18F09523B6
+:1006400009F0A2CFA7CF1124EACFC6DFA0F3959F70
+:10065000D1F3950F50E0551F629FF001729FBB27A9
+:10066000F00DB11D639FAA27F00DB11DAA1F649F55
+:100670006627B00DA11D661F829F2227B00DA11D08
+:10068000621F739FB00DA11D621F839FA00D611D8E
+:10069000221F749F3327A00D611D231F849F600DAF
+:1006A000211D822F762F6A2F11249F5750408AF0E8
+:1006B000E1F088234AF0EE0FFF1FBB1F661F771F74
+:1006C000881F91505040A9F79E3F510570F05CCFB4
+:1006D000A6CF5F3FECF3983EDCF386957795679560
+:1006E000B795F795E7959F5FC1F7FE2B880F911D92
+:1006F0009695879597F90895990F0008550FAA0BBD
+:10070000E0E8FEEF16161706E807F907C0F0121624
+:100710001306E407F50798F0621B730B840B950B27
+:1007200039F40A2661F0232B242B252B21F408957C
+:100730000A2609F4A140A6958FEF811D811D089519
+:04074000F894FFCF5B
+:1007440000000000000000000000000000000000A5
+:0E07540016446F12033B00000000000000007E
+:00000001FF
diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led.sh b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led.sh
new file mode 100755
index 0000000..d968dcb
--- /dev/null
+++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+clear
+if [ "$#" -ne 2 ]; then
+ echo "Usage: $0 port baudrate" >&2
+ exit 1
+fi
+
+re='^[0-9]+$'
+if ! [[ $1 =~ $re ]] ; then
+ echo "error: $1 -> Not a number" >&2; exit 1
+fi
+
+if ! [[ $2 =~ $re ]] ; then
+ echo "error: $2-> Not a number" >&2; exit 1
+fi
+
+b_rate=$2
+
+present=`pwd`
+unamestr=`uname`
+
+if [[ "$unamestr" == 'Linux' ]]; then
+ mdd_path=($(locate Modelica_DeviceDrivers/Modelica_DeviceDrivers/Resources/Include))
+ om_path=($(locate /usr/include/omc/c))
+ port="/dev/ttyACM$1"
+ omc --simCodeTarget=ExperimentalEmbeddedC runMDD_ldr_led.mos
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+else
+ cd c:
+ om_path=($(dir -d OpenModelica*/include/omc/c/))
+ path_to_om="C:$om_path"
+ cd f:
+ mdd_path=($(dir -d */Modelica_DeviceDrivers/Modelica_DeviceDrivers/Resources/Include/))
+ if [ $? -eq 0 ]; then
+ path_to_mdd="F:/$mdd_path"
+ else
+ exit 1
+ fi
+
+ port="COM$1"
+ cd $present
+ omc --simCodeTarget=ExperimentalEmbeddedC run_ldr_led.mos
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+fi
+
+avr-gcc -Os -std=c11 -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000UL -Wl,--gc-sections ldr_led_main.c -o ldr_led -I${mdd_path[0]} -I${path_to_om} -I${path_to_mdd} -I${om_path[0]}
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+avr-objcopy -O ihex -R .eeprom ldr_led ldr_led.hex
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+avrdude -F -V -c arduino -p ATMEGA328P -P $port -b $b_rate -U flash:w:ldr_led.hex
+if [ $? -ne 0 ]; then
+ exit 1
+fi \ No newline at end of file
diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led_main.c b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led_main.c
new file mode 100755
index 0000000..3b4bcd7
--- /dev/null
+++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_led_main.c
@@ -0,0 +1,243 @@
+#define fmi2TypesPlatform_h
+
+#define fmi2TypesPlatform "default" /* Compatible */
+
+typedef struct ldr_led_fmi2Component_s* fmi2Component;
+typedef void* fmi2ComponentEnvironment; /* Pointer to FMU environment */
+typedef void* fmi2FMUstate; /* Pointer to internal FMU state */
+typedef unsigned int fmi2ValueReference;
+typedef double fmi2Real;
+typedef int fmi2Integer;
+typedef int fmi2Boolean;
+typedef char fmi2Char;
+typedef const fmi2Char* fmi2String;
+typedef char fmi2Byte;
+
+#define fmi2True 1
+#define fmi2False 0
+
+#include "fmi2/fmi2Functions.h"
+
+#include <stdint.h>
+#include <stdio.h>
+
+void ModelicaFormatMessage(const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ va_end(args);
+}
+
+typedef struct ldr_led_fmi2Component_s {
+ fmi2Real currentTime;
+ fmi2Real fmi2RealVars[1];
+ fmi2Boolean fmi2BooleanVars[3];
+ fmi2Real fmi2RealParameter[2];
+ void* extObjs[4];
+} ldr_led_fmi2Component;
+
+ldr_led_fmi2Component ldr_led_component = {
+ .fmi2RealVars = {
+ 0.0 /*adc._y*/,
+ },
+ .fmi2BooleanVars = {
+ fmi2False /*booleanExpression1._y*/,
+ fmi2False /*booleanExpression2._y*/,
+ fmi2False /*digitalWriteBoolean1._u*/,
+ },
+ .fmi2RealParameter = {
+ 600.0 /*greaterThreshold1._threshold*/,
+ 0.002 /*synchronizeRealtime1._actualInterval*/,
+ },
+};
+
+#include <math.h>
+/* TODO: Generate used builtin functions before SimCode */
+static inline double om_mod(double x, double y)
+{
+ return x-floor(x/y)*y;
+}
+
+static const char * const OMCLIT0 = "ElectricPotential";
+static const char * const OMCLIT1 = "V";
+#include "MDDAVRTimer.h"
+#include "MDDAVRRealTime.h"
+#include "MDDAVRDigital.h"
+#include "MDDAVRAnalog.h"
+
+static inline fmi2Real Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_read__voltage(fmi2Component comp, fmi2Integer om_analogPort, fmi2Real om_vref, fmi2Integer om_voltageResolution);
+static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_Init_constructor(fmi2Component comp, fmi2Integer om_divisionFactor, fmi2Integer om_referenceVoltage);
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_Init_destructor(fmi2Component comp, void* om_avr);
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_write(fmi2Component comp, void* om_port, fmi2Integer om_pin, fmi2Boolean om_value);
+static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_constructor(fmi2Component comp, fmi2Integer om_port, fmi2Integer om_pin);
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_destructor(fmi2Component comp, void* om_digital);
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_wait(fmi2Component comp, void* om_rt);
+static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_Init_constructor(fmi2Component comp, void* om_timer, fmi2Integer om_timerValue, fmi2Integer om_numTimerInterruptsPerCycle);
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_Init_destructor(fmi2Component comp, void* om_rt);
+static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Timers_Timer_constructor(fmi2Component comp, fmi2Integer om_timerSelect, fmi2Integer om_clockSelect, fmi2Boolean om_clearTimerOnMatch);
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Timers_Timer_destructor(fmi2Component comp, void* om_timer);
+
+static inline fmi2Real Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_read__voltage(fmi2Component comp, fmi2Integer om_analogPort, fmi2Real om_vref, fmi2Integer om_voltageResolution)
+{
+ fmi2Real om_value;
+ om_value = MDD_avr_analog_read(om_analogPort, om_vref, om_voltageResolution);
+ return om_value;
+}
+static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_Init_constructor(fmi2Component comp, fmi2Integer om_divisionFactor, fmi2Integer om_referenceVoltage)
+{
+ void* om_avr;
+ om_avr = MDD_avr_analog_init(om_divisionFactor, om_referenceVoltage);
+ return om_avr;
+}
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_Init_destructor(fmi2Component comp, void* om_avr)
+{
+ MDD_avr_analog_close(om_avr);
+}
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_write(fmi2Component comp, void* om_port, fmi2Integer om_pin, fmi2Boolean om_value)
+{
+ MDD_avr_digital_pin_write(om_port, om_pin, om_value);
+}
+static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_constructor(fmi2Component comp, fmi2Integer om_port, fmi2Integer om_pin)
+{
+ void* om_dig;
+ om_dig = MDD_avr_digital_pin_init(om_port, om_pin, fmi2True);
+ return om_dig;
+}
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_destructor(fmi2Component comp, void* om_digital)
+{
+ MDD_avr_digital_pin_close(om_digital);
+}
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_wait(fmi2Component comp, void* om_rt)
+{
+ MDD_avr_rt_wait(om_rt);
+}
+static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_Init_constructor(fmi2Component comp, void* om_timer, fmi2Integer om_timerValue, fmi2Integer om_numTimerInterruptsPerCycle)
+{
+ void* om_rt;
+ om_rt = MDD_avr_rt_init(om_timer, om_timerValue, om_numTimerInterruptsPerCycle);
+ return om_rt;
+}
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_Init_destructor(fmi2Component comp, void* om_rt)
+{
+ MDD_avr_rt_close(om_rt);
+}
+static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Timers_Timer_constructor(fmi2Component comp, fmi2Integer om_timerSelect, fmi2Integer om_clockSelect, fmi2Boolean om_clearTimerOnMatch)
+{
+ void* om_timer;
+ om_timer = MDD_avr_timer_init(om_timerSelect, om_clockSelect, om_clearTimerOnMatch);
+ return om_timer;
+}
+static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Timers_Timer_destructor(fmi2Component comp, void* om_timer)
+{
+ MDD_avr_timer_close(om_timer);
+}
+
+fmi2Component ldr_led_fmi2Instantiate(fmi2String name, fmi2Type ty, fmi2String GUID, fmi2String resources, const fmi2CallbackFunctions* functions, fmi2Boolean visible, fmi2Boolean loggingOn)
+{
+ static int initDone=0;
+ if (initDone) {
+ return NULL;
+ }
+ return &ldr_led_component;
+}
+
+fmi2Status ldr_led_fmi2SetupExperiment(fmi2Component comp, fmi2Boolean toleranceDefined, fmi2Real tolerance, fmi2Real startTime, fmi2Boolean stopTimeDefined, fmi2Real stopTime)
+{
+ return fmi2OK;
+}
+
+fmi2Status ldr_led_fmi2EnterInitializationMode(fmi2Component comp)
+{
+ comp->extObjs[0] /* adc._analog EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Analog.Init */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_Init_constructor(comp, 7, 4);
+ comp->extObjs[1] /* digitalWriteBoolean1._digital EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Digital.InitWrite */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_constructor(comp, 2, 2);
+ comp->extObjs[2] /* synchronizeRealtime1._clock EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Timers.Timer */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Timers_Timer_constructor(comp, 1, 4, fmi2False);
+ comp->extObjs[3] /* synchronizeRealtime1._sync EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.RealTimeSynchronization.Init */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_Init_constructor(comp, comp->extObjs[2] /* synchronizeRealtime1._clock EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Timers.Timer */, 249, 2);
+ return fmi2OK;
+}
+
+fmi2Status ldr_led_fmi2ExitInitializationMode(fmi2Component comp)
+{
+ return fmi2OK;
+}
+
+static fmi2Status ldr_led_functionODE(fmi2Component comp)
+{
+}
+
+static fmi2Status ldr_led_functionOutputs(fmi2Component comp)
+{
+ comp->fmi2RealVars[0] /* adc._y variable */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_read__voltage(comp, 6, 1024.0, 10); /* equation 6 */
+ comp->fmi2BooleanVars[2] /* digitalWriteBoolean1._u DISCRETE */ = (comp->fmi2RealVars[0] /* adc._y variable */)>(comp->fmi2RealParameter[0] /* greaterThreshold1._threshold PARAM */); /* equation 7 */Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_wait(comp, comp->extObjs[3] /* synchronizeRealtime1._sync EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.RealTimeSynchronization.Init */);Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_write(comp, comp->extObjs[1] /* digitalWriteBoolean1._digital EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Digital.InitWrite */, 2, comp->fmi2BooleanVars[2] /* digitalWriteBoolean1._u DISCRETE */);
+}
+
+fmi2Status ldr_led_fmi2DoStep(fmi2Component comp, fmi2Real currentCommunicationPoint, fmi2Real communicationStepSize, fmi2Boolean noSetFMUStatePriorToCurrentPoint)
+{
+ comp->currentTime = currentCommunicationPoint;
+ /* TODO: Calculate time/state-dependent variables here... */
+ ldr_led_functionOutputs(comp);
+ return fmi2OK;
+}
+
+int main(int argc, char **argv)
+{
+ int terminateSimulation = 0;
+ fmi2Status status = fmi2OK;
+ fmi2CallbackFunctions cbf = {
+ .logger = NULL,
+ .allocateMemory = NULL /*calloc*/,
+ .freeMemory = NULL /*free*/,
+ .stepFinished = NULL, //synchronous execution
+ .componentEnvironment = NULL
+ };
+
+ fmi2Component comp = ldr_led_fmi2Instantiate("", fmi2CoSimulation, "", "", &cbf, fmi2False, fmi2False);
+ if (comp==NULL) {
+ return 1;
+ }
+ ldr_led_fmi2SetupExperiment(comp, fmi2False, 0.0, 0.0, fmi2False, 1.0);
+ ldr_led_fmi2EnterInitializationMode(comp);
+ // Set start-values? Nah...
+ ldr_led_fmi2ExitInitializationMode(comp);
+
+ double currentTime = 0.0;
+ double h = 0.002;
+ uint32_t i = 0;
+
+ while (status == fmi2OK) {
+ //retrieve outputs
+ // fmi2GetReal(m, ..., 1, &y1);
+ //set inputs
+ // fmi2SetReal(m, ..., 1, &y2);
+
+ //call slave and check status
+ status = ldr_led_fmi2DoStep(comp, currentTime, h, fmi2True);
+ switch (status) {
+ case fmi2Discard:
+ case fmi2Error:
+ case fmi2Fatal:
+ case fmi2Pending /* Cannot happen */:
+ terminateSimulation = 1;
+ break;
+ case fmi2OK:
+ case fmi2Warning:
+ break;
+ }
+ if (terminateSimulation) {
+ break;
+ }
+ i++;
+ /* increment master time */
+ currentTime = 0.0 + h*i;
+ }
+
+#if 0
+ if ((status != fmi2Error) && (status != fmi2Fatal)) {
+ fmi2Terminate(m);
+ }
+ if (status != fmi2Fatal) {
+ fmi2FreeInstance(m);
+ }
+#endif
+}
+
diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_read.sh b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_read.sh
new file mode 100755
index 0000000..d465596
--- /dev/null
+++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/ldr_read.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+clear
+if [ "$#" -ne 2 ]; then
+ echo "Usage: $0 port baudrate" >&2
+ exit 1
+fi
+
+re='^[0-9]+$'
+if ! [[ $1 =~ $re ]] ; then
+ echo "error: $1 -> Not a number" >&2; exit 1
+fi
+
+if ! [[ $2 =~ $re ]] ; then
+ echo "error: $2-> Not a number" >&2; exit 1
+fi
+
+b_rate=$2
+
+present=`pwd`
+unamestr=`uname`
+
+if [[ "$unamestr" == 'Linux' ]]; then
+ mdd_path=($(locate Modelica_DeviceDrivers/Modelica_DeviceDrivers/Resources/Include))
+ om_path=($(locate /usr/include/omc/c))
+ port="/dev/ttyACM$1"
+ omc --simCodeTarget=ExperimentalEmbeddedC runMDD_ldr_read.mos
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+else
+ cd c:
+ om_path=($(dir -d OpenModelica*/include/omc/c/))
+ path_to_om="C:$om_path"
+ cd f:
+ mdd_path=($(dir -d */Modelica_DeviceDrivers/Modelica_DeviceDrivers/Resources/Include/))
+ if [ $? -eq 0 ]; then
+ path_to_mdd="F:/$mdd_path"
+ else
+ exit 1
+ fi
+
+ port="COM$1"
+ cd $present
+ omc --simCodeTarget=ExperimentalEmbeddedC run_ldr_read.mos
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+fi
+
+avr-gcc -Os -std=c11 -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000UL -Wl,--gc-sections ldr_read_main.c -o ldr_read -I${mdd_path[0]} -I${path_to_om} -I${path_to_mdd} -I${om_path[0]}
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+avr-objcopy -O ihex -R .eeprom ldr_read ldr_read.hex
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+avrdude -F -V -c arduino -p ATMEGA328P -P $port -b $b_rate -U flash:w:ldr_read.hex
+if [ $? -ne 0 ]; then
+ exit 1
+fi \ No newline at end of file
diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/runMDD_ldr_led.mos b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/runMDD_ldr_led.mos
new file mode 100755
index 0000000..76aef31
--- /dev/null
+++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/runMDD_ldr_led.mos
@@ -0,0 +1,11 @@
+loadModel(Modelica);
+getErrorString();
+
+loadFile("/home/souradip/Modelica_DeviceDrivers/Modelica_DeviceDrivers/package.mo");
+getErrorString();
+
+loadFile("/home/souradip/OpenModelica/Arduino.mo");
+getErrorString();
+
+translateModel(Arduino.SerialCommunication.MDD_Examples.MDD_ldr.MDD_ldr_led, fileNamePrefix="ldr_led");
+getErrorString();
diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/runMDD_ldr_read.mos b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/runMDD_ldr_read.mos
new file mode 100755
index 0000000..76aef31
--- /dev/null
+++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/ldr/runMDD_ldr_read.mos
@@ -0,0 +1,11 @@
+loadModel(Modelica);
+getErrorString();
+
+loadFile("/home/souradip/Modelica_DeviceDrivers/Modelica_DeviceDrivers/package.mo");
+getErrorString();
+
+loadFile("/home/souradip/OpenModelica/Arduino.mo");
+getErrorString();
+
+translateModel(Arduino.SerialCommunication.MDD_Examples.MDD_ldr.MDD_ldr_led, fileNamePrefix="ldr_led");
+getErrorString();