From 7273bd89b307f48f1455b010bb68a2ef95a45776 Mon Sep 17 00:00:00 2001 From: sumeet14 Date: Fri, 29 Jun 2018 19:07:39 +0530 Subject: Suppot for Windows OS --- Resources/Library/win64/modelPlugFirmata.dll | Bin 0 -> 283217 bytes Source/modelPlugFirmata.dll | Bin 0 -> 283217 bytes Source/modelPlugFirmata.o | Bin 0 -> 101932 bytes Source/serial.cpp | 22 ++++++++++---------- Source/serial.h | 4 ++-- Source/serial.o | Bin 0 -> 138622 bytes modelPlugFirmata.dll | Bin 0 -> 283217 bytes package.mo | 29 ++++++++++++++------------- 8 files changed, 28 insertions(+), 27 deletions(-) create mode 100644 Resources/Library/win64/modelPlugFirmata.dll create mode 100644 Source/modelPlugFirmata.dll create mode 100644 Source/modelPlugFirmata.o create mode 100644 Source/serial.o create mode 100644 modelPlugFirmata.dll diff --git a/Resources/Library/win64/modelPlugFirmata.dll b/Resources/Library/win64/modelPlugFirmata.dll new file mode 100644 index 0000000..dd74a83 Binary files /dev/null and b/Resources/Library/win64/modelPlugFirmata.dll differ diff --git a/Source/modelPlugFirmata.dll b/Source/modelPlugFirmata.dll new file mode 100644 index 0000000..dd74a83 Binary files /dev/null and b/Source/modelPlugFirmata.dll differ diff --git a/Source/modelPlugFirmata.o b/Source/modelPlugFirmata.o new file mode 100644 index 0000000..c60e177 Binary files /dev/null and b/Source/modelPlugFirmata.o differ diff --git a/Source/serial.cpp b/Source/serial.cpp index 67e9be3..74441fe 100755 --- a/Source/serial.cpp +++ b/Source/serial.cpp @@ -52,7 +52,7 @@ #include #include #include -#elif defined(WINDOWS) +#elif defined(WIN32) #include #define win32_err(s) FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, \ GetLastError(), 0, (s), sizeof(s), NULL) @@ -166,7 +166,7 @@ int Serial::Open(const string& name) settings.c_iflag = IGNBRK | IGNPAR; Set_baud(baud_rate); tcflush(port_fd, TCIFLUSH); -#elif defined(WINDOWS) +#elif defined(WIN32) COMMCONFIG cfg; COMMTIMEOUTS timeouts; int got_default_cfg=0, port_num; @@ -292,7 +292,7 @@ void Serial::Close(void) #if defined(LINUX) || defined(MACOSX) tcsetattr(port_fd, TCSANOW, &settings_orig); close(port_fd); -#elif defined(WINDOWS) +#elif defined(WIN32) //SetCommConfig(port_handle, &port_cfg_orig, sizeof(COMMCONFIG)); CloseHandle(port_handle); #endif @@ -390,7 +390,7 @@ int Serial::Set_baud(int baud) cfsetospeed(&settings, (speed_t)baud); cfsetispeed(&settings, (speed_t)baud); if (tcsetattr(port_fd, TCSANOW, &settings) < 0) return -1; -#elif defined(WINDOWS) +#elif defined(WIN32) DWORD len = sizeof(COMMCONFIG); port_cfg.dcb.BaudRate = baud; SetCommConfig(port_handle, &port_cfg, len); @@ -425,7 +425,7 @@ int Serial::Read(void *ptr, int count) n = read(port_fd, ptr, count); if (n < 0 && (errno == EAGAIN || errno == EINTR)) return 0; return n; -#elif defined(WINDOWS) +#elif defined(WIN32) // first, we'll find out how many bytes have been received // and are currently waiting for us in the receive buffer. // http://msdn.microsoft.com/en-us/library/ms885167.aspx @@ -504,7 +504,7 @@ int Serial::Write(const void *ptr, int len) } } return written; -#elif defined(WINDOWS) +#elif defined(WIN32) DWORD num_written; OVERLAPPED ov; int r; @@ -548,7 +548,7 @@ int Serial::Input_wait(int msec) FD_ZERO(&rfds); FD_SET(port_fd, &rfds); return select(port_fd+1, &rfds, NULL, NULL, &tv); -#elif defined(WINDOWS) +#elif defined(WIN32) // http://msdn2.microsoft.com/en-us/library/aa363479(VS.85).aspx // http://msdn2.microsoft.com/en-us/library/aa363424(VS.85).aspx // http://source.winehq.org/WineAPI/WaitCommEvent.html @@ -602,7 +602,7 @@ void Serial::Input_discard(void) #if defined(LINUX) || defined(MACOSX) // does this really work properly (and is it thread safe) on Linux?? tcflush(port_fd, TCIFLUSH); -#elif defined(WINDOWS) +#elif defined(WIN32) PurgeComm(port_handle, PURGE_RXCLEAR); #endif } @@ -613,7 +613,7 @@ void Serial::Output_flush(void) if (!port_is_open) return; #if defined(LINUX) || defined(MACOSX) tcdrain(port_fd); -#elif defined(WINDOWS) +#elif defined(WIN32) FlushFileBuffers(port_handle); #endif } @@ -639,7 +639,7 @@ int Serial::Set_control(int dtr, int rts) bits &= ~TIOCM_RTS; } if (ioctl(port_fd, TIOCMSET, &bits) < 0) return -1;; -#elif defined(WINDOWS) +#elif defined(WIN32) // http://msdn.microsoft.com/en-us/library/aa363254(VS.85).aspx if (dtr == 1) { if (!EscapeCommFunction(port_handle, SETDTR)) return -1; @@ -848,7 +848,7 @@ vector Serial::port_list() &serialPortIterator) != KERN_SUCCESS) return list; macos_ports(&serialPortIterator, list); IOObjectRelease(serialPortIterator); -#elif defined(WINDOWS) +#elif defined(WIN32) // http://msdn.microsoft.com/en-us/library/aa365461(VS.85).aspx // page with 7 ways - not all of them work! // http://www.naughter.com/enumser.html diff --git a/Source/serial.h b/Source/serial.h index e49b4a7..f254c9b 100755 --- a/Source/serial.h +++ b/Source/serial.h @@ -7,7 +7,7 @@ #include #elif defined(MACOSX) #include -#elif defined(WINDOWS) +#elif defined(WIN32) #include #endif @@ -47,7 +47,7 @@ private: int port_fd; struct termios settings_orig; struct termios settings; -#elif defined(WINDOWS) +#elif defined(WIN32) HANDLE port_handle; COMMCONFIG port_cfg_orig; COMMCONFIG port_cfg; diff --git a/Source/serial.o b/Source/serial.o new file mode 100644 index 0000000..4dd1ba9 Binary files /dev/null and b/Source/serial.o differ diff --git a/modelPlugFirmata.dll b/modelPlugFirmata.dll new file mode 100644 index 0000000..dd74a83 Binary files /dev/null and b/modelPlugFirmata.dll differ diff --git a/package.mo b/package.mo index e04f7f1..dc13527 100644 --- a/package.mo +++ b/package.mo @@ -274,7 +274,7 @@ end customBoard; model BlinkLed "Basic example of blinking an LED" extends Modelica.Icons.Example; - replaceable OpenModelicaEmbedded.Boards.Arduino arduino(Port = "/dev/ttyACM0", ShowPinCapabilities = true, UseDTR = false) annotation(Placement(visible = true, transformation(origin = {30, -10}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); + replaceable OpenModelicaEmbedded.Boards.Arduino arduino(Port = "COM4", ShowPinCapabilities = true, UseDTR = false) annotation(Placement(visible = true, transformation(origin = {30, -10}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); OpenModelicaEmbedded.Pins.DigitalOutput digitalOutput(Pin = 9) annotation(Placement(visible = true, transformation(origin = {0, -10}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); Modelica_DeviceDrivers.Blocks.OperatingSystem.SynchronizeRealtime synchronizeRealtime1 annotation( Placement(visible = true, transformation(origin = {35, 15}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); @@ -1159,11 +1159,11 @@ end ArduinoExamples; Placement(visible = true, transformation(origin = {-3.55271e-15, 3.55271e-15}, extent = {{-20, -20}, {20, 20}}, rotation = 0))); OpenModelicaEmbedded.Pins.DigitalOutput digitalOutput2(Pin = 30) annotation( Placement(visible = true, transformation(origin = {-3.55271e-15, -60}, extent = {{-20, -20}, {20, 20}}, rotation = 0))); - Modelica.Blocks.Sources.BooleanPulse booleanPulse1(period = 20, startTime = 5, width = 25) annotation( + Modelica.Blocks.Sources.BooleanPulse booleanPulse1(period = 2, startTime = 0, width = 50) annotation( Placement(visible = true, transformation(origin = {-60, 3.55271e-15}, extent = {{-20, -20}, {20, 20}}, rotation = 0))); - Modelica.Blocks.Sources.BooleanPulse booleanPulse2(period = 20, startTime = 5, width = 40) annotation( + Modelica.Blocks.Sources.BooleanPulse booleanPulse2(period = 2, startTime = 1, width = 50) annotation( Placement(visible = true, transformation(origin = {-60, -60}, extent = {{-20, -20}, {20, 20}}, rotation = 0))); - OpenModelicaEmbedded.Boards.customBoard customBoard1(BoardName = "Tiva C", Port = "/dev/ttyACM0") annotation( + OpenModelicaEmbedded.Boards.customBoard customBoard1(BoardName = "Tiva C", Port = "COM6") annotation( Placement(visible = true, transformation(origin = {60, -20}, extent = {{-20, -20}, {20, 20}}, rotation = 0))); equation connect(digitalOutput1.pinConnector, customBoard1.boardConnector) annotation( @@ -1644,7 +1644,7 @@ end ArduinoExamples; input Integer adcResolution; output Real value; - external "C" value = readAnalogPin(pin, min, max, init, board, adcResolution) annotation(Include = "#include \"modelPlugFirmata.h\"", Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include", LibraryDirectory = "modelica://OpenModelicaEmbedded/Resources/Library"); + external "C" value = readAnalogPin(pin, min, max, init, board, adcResolution) annotation(Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include"); end readAnalogPin; @@ -1668,13 +1668,13 @@ end ArduinoExamples; input Boolean UseDTR; output FirmataBoardObject board; - external "C" board = boardConstructor(port, showCapabilities, samplingMs, BaudRate, UseDTR) annotation(Include = "#include \"modelPlugFirmata.h\"", Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include", LibraryDirectory = "modelica://OpenModelicaEmbedded/Resources/Library"); + external "C" board = boardConstructor(port, showCapabilities, samplingMs, BaudRate, UseDTR) annotation(Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include"); end constructor; function destructor "Function to destroy the object" input FirmataBoardObject board; - external "C" boardDestructor(board) annotation(Include = "#include \"modelPlugFirmata.h\"", Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include", LibraryDirectory = "modelica://OpenModelicaEmbedded/Resources/Library"); + external "C" boardDestructor(board) annotation(Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include"); end destructor; end FirmataBoardObject; @@ -1682,7 +1682,7 @@ end ArduinoExamples; input FirmataBoardObject board; output Integer id; - external "C" id = getBoardId(board) annotation(Include = "#include \"modelPlugFirmata.h\"", Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include", LibraryDirectory = "modelica://OpenModelicaEmbedded/Resources/Library"); + external "C" id = getBoardId(board) annotation(Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include"); end getBoardId; function readDigitalPin @@ -1691,7 +1691,7 @@ end ArduinoExamples; input Integer board; output Boolean value; - external "C" value = readDigitalPin(pin, init, board) annotation(Include = "#include \"modelPlugFirmata.h\"", Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include", LibraryDirectory = "modelica://OpenModelicaEmbedded/Resources/Library"); + external "C" value = readDigitalPin(pin, init, board) annotation(Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include"); end readDigitalPin; function writeAnalogPin @@ -1699,7 +1699,7 @@ end ArduinoExamples; input Integer board; input Real value; - external "C" writeAnalogPin(pin, board, value) annotation(Include = "#include \"modelPlugFirmata.h\"", Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include", LibraryDirectory = "modelica://OpenModelicaEmbedded/Resources/Library"); + external "C" writeAnalogPin(pin, board, value) annotation(Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include"); end writeAnalogPin; function writeDigitalPin @@ -1707,13 +1707,13 @@ end ArduinoExamples; input Integer board; input Boolean value; - external "C" writeDigitalPin(pin, board, value) annotation(Include = "#include \"modelPlugFirmata.h\"", Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include", LibraryDirectory = "modelica://OpenModelicaEmbedded/Resources/Library"); + external "C" writeDigitalPin(pin, board, value) annotation(Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include"); end writeDigitalPin; function updateBoard input Integer board; - external "C" updateBoard(board) annotation(Include = "#include \"modelPlugFirmata.h\"", Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include", LibraryDirectory = "modelica://OpenModelicaEmbedded/Resources/Library"); + external "C" updateBoard(board) annotation(Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include"); end updateBoard; function writeServoPin @@ -1723,12 +1723,13 @@ end ArduinoExamples; input Integer MinPulse; input Integer MaxPulse; - external "C" writeServoPin(pin, board, value, MinPulse, MaxPulse) annotation(Include = "#include \"modelPlugFirmata.h\"", Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include", LibraryDirectory = "modelica://OpenModelicaEmbedded/Resources/Library"); + external "C" writeServoPin(pin, board, value, MinPulse, MaxPulse) annotation(Library = "modelPlugFirmata", IncludeDirectory = "modelica://OpenModelicaEmbedded/Resources/Include"); end writeServoPin; annotation(Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {10, 10}), graphics = {Text(visible = true, origin = {11.425, 9.596}, extent = {{-101.424, -59.596}, {78.57599999999999, 40.404}}, textString = "EF")}), Documentation(info = "", revisions = ""), Diagram(coordinateSystem(extent = {{-148.5, 105}, {148.5, -105}}, preserveAspectRatio = true, initialScale = 0.1, grid = {10, 10})), Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}), graphics = {Rectangle(visible = true, fillColor = {209, 209, 209}, fillPattern = FillPattern.Solid, extent = {{-100, -100}, {75, 75}}), Polygon(visible = true, fillColor = {236, 236, 236}, fillPattern = FillPattern.Solid, points = {{-100, 75}, {-75, 100}, {100, 100}, {75, 75}}), Polygon(visible = true, fillColor = {177, 177, 177}, fillPattern = FillPattern.Solid, points = {{75, -100}, {75, 75}, {100, 100}, {100, -75}}), Text(visible = true, extent = {{-95.95, -91.88}, {63.97, 71.52}}, textString = "C")})); end ExternalFunctions; + package Types "Type and unit definitions" extends Modelica.Icons.TypesPackage; type ServoUnit = enumeration(None, Degrees, Radians); @@ -1854,4 +1855,4 @@ end ArduinoExamples;

 

 

", revisions = ""), version = "1.2", Icon(coordinateSystem( initialScale = 0.1, grid = {5, 5}), graphics = {Rectangle(fillColor = {0, 170, 255}, pattern = LinePattern.None, fillPattern = FillPattern.Solid, extent = {{-100, -100}, {100, 100}}, radius = 25), Text(origin = {-47.5, 55}, extent = {{-42.5, 15}, {137.5, -80}}, textString = "OpenModelica", textStyle = {TextStyle.Bold}), Text(origin = {2.5, -15}, extent = {{-77.5, 15}, {77.5, -15}}, textString = "Embedded", textStyle = {TextStyle.Bold})}), Diagram(coordinateSystem(extent = {{-148.5, -105}, {148.5, 105}}, preserveAspectRatio = true, initialScale = 0.1, grid = {5, 5})), uses(Modelica_DeviceDrivers(version = "1.5.0"), Modelica(version = "3.2.2"))); -end OpenModelicaEmbedded; \ No newline at end of file +end OpenModelicaEmbedded; -- cgit