<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to C Serial Driver tutorial sources</title><link>https://sourceforge.net/p/coronissdk/wiki/C%2520Serial%2520Driver%2520tutorial%2520sources/</link><description>Recent changes to C Serial Driver tutorial sources</description><atom:link href="https://sourceforge.net/p/coronissdk/wiki/C%20Serial%20Driver%20tutorial%20sources/feed" rel="self"/><language>en</language><lastBuildDate>Fri, 29 Jun 2012 14:48:17 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/coronissdk/wiki/C%20Serial%20Driver%20tutorial%20sources/feed" rel="self" type="application/rss+xml"/><item><title>WikiPage C Serial Driver tutorial sources modified by Thierry CHOMAUD</title><link>https://sourceforge.net/p/coronissdk/wiki/C%2520Serial%2520Driver%2520tutorial%2520sources/</link><description>&lt;pre&gt;--- v5
+++ v6
@@ -2,83 +2,101 @@
 -------
 
 ~~~~~~~~~~~~
-#include &lt;Windows.h&gt;
 #include &lt;stdio.h&gt;
-#include &lt;tchar.h&gt;
-#include "custom_loader.h"
-
-#include &lt;serial_frame.h&gt;
-#include &lt;generic_constants.h&gt;
-
+#include &lt;memory.h&gt;
+#ifdef _WINDOWS
+#include &lt;time.h&gt;
+#else
+#include &lt;time.h&gt;
+#include &lt;sys/time.h&gt;
+#endif
+// serial driver api include
 #include &lt;serial_driver_event.h&gt;
 #include &lt;serial_driver_status.h&gt;
+// domain include
+#include &lt;loader_serial_driver.h&gt;
+#include &lt;serial_driver_types.h&gt;
 
-#ifdef  _WINDOWS
-    #define RS232DRIVER_NAME "rs232driver.dll"
-#else
-    #define RS232DRIVER_NAME "./librs232driver.so"
-#endif//_WINDOWS
 SerialDriverLoader driverHandler;
 void*              rs232DriverInstance;
 
 char portId[256] = "COM4";
-SerialFrame mySerialFrame = { { 0x50, 0x05, 0x0 }, 2};
+SerialExchangeData serialExchangedData;
 
-int receiveFrameListener( void* param, const SerialFrame* frame );
+int receiveFrameListener( void* param, const pSerialExchangeData i_frame );
+int serialDriverEventListener( void* param, int notifyCode );
 const char* GetCurrentTimeString();
 
 int main(void) {
-    if ( OK == load_serial_driver( RS232DRIVER_NAME, &amp;driverHandler) )
+	printf( "%s csrs232driver example BEGIN. \n", GetCurrentTimeString() );
+    if ( OK == load_serial_driver( "csrs232driver", &amp;driverHandler) )
     {
-        printf( "%s rs232driver lib loading success. \n", 
-                GetCurrentTimeString() );
         rs232DriverInstance = driverHandler.create();
         if ( rs232DriverInstance )
         {
-            printf( "%s rs232driver creation success. \n", 
+            printf( "%s csrs232driver creation success. \n",
                 GetCurrentTimeString() );
             int status = OK_SERIALDRIVER_SUCCESS;
             status = driverHandler.init( rs232DriverInstance );
-            printf( "%s rs232driver init status: %i \n", 
+            printf( "%s csrs232driver init status: %i \n",
                 GetCurrentTimeString(), status );
             driverHandler.set_port_id( rs232DriverInstance, portId);
-            driverHandler.register_listener( rs232DriverInstance, 
-                receiveFrameListener, 0 );
+            driverHandler.add_listener( rs232DriverInstance,
+                receiveFrameListener, serialDriverEventListener, 0 );
             status = driverHandler.open( rs232DriverInstance );
-            printf( "%s rs232driver open status: %i \n", 
+            printf( "%s csrs232driver open status: %i \n",
                 GetCurrentTimeString(), status );
-            status = driverHandler.send( rs232DriverInstance, &amp;mySerialFrame );
-            printf( "%s rs232driver send status: %i \n", 
-                GetCurrentTimeString(), status );
+            // data frame creation
+            serialExchangedData = create_serial_exchange_data ((SerialFrame){ {0x50, 0x05}, 2 });
+            // data frame sending
+            status = driverHandler.send( rs232DriverInstance, &amp;serialExchangedData );
+            char hexframe[MAX_SERIALFRAME_LEN*2+1];
+            printf( "%s csrs232driver send status for frame '%s': %s \n",
+                GetCurrentTimeString(),
+                get_hex_serialexchangeddata(hexframe, sizeof(hexframe), &amp;serialExchangedData),
+                get_sending_status_name(status));
             driverHandler.destroy( rs232DriverInstance );
         }
 
         free_serial_driver( &amp;driverHandler );
+    } else {
+    	printf( "%s csrs232driver loading failure. \n", GetCurrentTimeString() );
     }
-    return EXIT_SUCCESS;
+    printf( "%s csrs232driver example END. \n", GetCurrentTimeString() );
+    return 0;
 }
 
-int receiveFrameListener( void* param, const SerialFrame* frame )
+int receiveFrameListener( void* param, const pSerialExchangeData serialData )
 {
-    printf( "%s receiveFrame: ", GetCurrentTimeString() );
-    int i = 0;
-    for ( ; frame &amp;&amp; i &lt; frame-&gt;len; ++i )
-    {
-        printf( "%02X", frame-&gt;frame[i] );
-    }
-    printf( "\n" );
+    char hexframe[MAX_SERIALFRAME_LEN*2+1];
+    printf( "%s receiveFrame: %s, \n",
+    		GetCurrentTimeString(),
+    		get_hex_serialexchangeddata(hexframe, sizeof(hexframe), serialData) );
+    return 0;
+}
+
+int serialDriverEventListener( void* param, int notifyCode )
+{
     return 0;
 }
 
 const char* GetCurrentTimeString()
 {
-    static char currTime[100] = "";
-    currTime[0] = 0;
-    SYSTEMTIME st = {0};
-    GetLocalTime(&amp;st);
-    sprintf( currTime, "[%02d:%02d:%02d:%03d]", st.wHour, st.wMinute, 
-        st.wSecond, st.wMilliseconds );
-    return currTime;
+	static char currTime[100] = "";
+	currTime[0] = 0;
+
+#ifdef _WINDOWS
+	SYSTEMTIME st = {0};
+	GetLocalTime(&amp;st);
+	sprintf( currTime, "[%02d:%02d:%02d:%03d]", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds );
+#else
+	struct timeval currentTime;
+	gettimeofday( &amp;currentTime, 0 );
+	struct tm *tm = localtime(&amp;currentTime.tv_sec);
+	sprintf( currTime, "[%02d:%02d:%02d:%03d] ", tm-&gt;tm_hour, tm-&gt;tm_min, tm-&gt;tm_sec, (int)currentTime.tv_usec / 1000 );
+#endif
+
+	return currTime;
 }
 
 ~~~~~~~~~~~~
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thierry CHOMAUD</dc:creator><pubDate>Fri, 29 Jun 2012 14:48:17 -0000</pubDate><guid>https://sourceforge.netb42e51c1a4e81a5eaa07612a693e9c4e7c6c5f0c</guid></item><item><title>WikiPage C Serial Driver tutorial sources modified by Thierry CHOMAUD</title><link>https://sourceforge.net/p/coronissdk/wiki/C%2520Serial%2520Driver%2520tutorial%2520sources/</link><description>&lt;pre&gt;--- v4 
+++ v5 
@@ -1,156 +1,3 @@
-custom_loader.h
-------------
-
-~~~~~~~~~~~~
-#ifndef CUSTOM_LOADER_H_
-#define CUSTOM_LOADER_H_
-
-#include &lt;i_serial_driver_export_types.h&gt;
-
- #include &lt;windows.h&gt;
-
- #define LOAD_LIBRARY(name)         LoadLibraryA(name)
- #define FREE_LIBRARY(handle)       FreeLibrary((HMODULE)handle)
- #define LOAD_FUNCTION(handle,name) GetProcAddress((HMODULE)handle,name)
- #define GET_ERROR()                GetLastError()
-
-typedef struct tagSerialDriverLoader {
-    char  serialDriverName[MAX_PATH];
-    void* serialDriverHandle;
-
-    driver_create_t                       create;
-    driver_destroy_t                      destroy;
-    driver_init_t                         init;
-    driver_init_from_file_t               init_from_file;
-    driver_open_t                         open;
-    driver_close_t                        close;
-    driver_is_open_t                      is_open;
-    driver_get_port_id_t                  get_port_id;
-    driver_set_port_id_t                  set_port_id;
-    driver_set_port_params_t              set_port_params;
-    driver_set_listening_period_param_t   set_listening_period_param;
-    driver_set_flow_control_mode_params_t set_flow_control_mode_params;
-    driver_send_t                         send;
-    driver_register_listener_t            register_listener;
-    driver_register_notify_listener_t     register_notify_listener;
-    driver_unregister_listener_t          unregister_listener;
-    driver_unregister_notify_listener_t   unregister_notify_listener;
-    driver_register_spy_listener_t        register_spy_listener;
-    driver_unregister_spy_listener_t      unregister_spy_listener;
-
-} SerialDriverLoader;
-
-void free_serial_driver( SerialDriverLoader* serialDriver );
-int load_serial_driver( const char* serialDriverName, SerialDriverLoader* serialDriver );
-
-#endif /* CUSTOM_LOADER_H_ */
-~~~~~~~~~~~
-
-
--------------------------------------------------------------------
-
-custom_loader.c
-------------
-
-~~~~~~~~~~~~
-#include &lt;string.h&gt;
-#include "custom_loader.h"
-
-void free_serial_driver( SerialDriverLoader* serialDriver ) {
-    FREE_LIBRARY( serialDriver-&gt;serialDriverHandle );
-    memset( serialDriver, 0, sizeof(*serialDriver) );
-}
-
-int load_serial_driver( const char* serialDriverName, SerialDriverLoader* serialDriver ) {
-    int iRet = OK;
-    
-    if ( 0 == strcmp( serialDriverName, serialDriver-&gt;serialDriverName ) ) {
-        return iRet; // this driver is already loaded
-    }
-    
-    // unload previos driver
-    if ( serialDriver-&gt;serialDriverHandle ) {
-        free_serial_driver( serialDriver );
-    }
-
-    serialDriver-&gt;serialDriverHandle = LOAD_LIBRARY(serialDriverName);
-    if ( serialDriver-&gt;serialDriverHandle == NULL ) {
-        return  (int)GET_ERROR();
-    }
-    
-    
-    if ( ((serialDriver-&gt;init = (driver_init_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_INIT)) != NULL) &amp;&amp;
-         ((serialDriver-&gt;init_from_file = (driver_init_from_file_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_INIT_FROM_FILE)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;create = (driver_create_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_CREATE)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;destroy = (driver_destroy_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_DESTROY)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;open = (driver_open_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_OPEN)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;close = (driver_close_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_CLOSE)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;is_open = (driver_is_open_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_IS_OPEN)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;get_port_id = (driver_get_port_id_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_GET_PORT_ID)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;set_port_id = (driver_set_port_id_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_SET_PORT_ID)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;set_port_params = (driver_set_port_params_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_SET_PORT_PARAMS)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;set_listening_period_param = (driver_set_listening_period_param_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_SET_LISTENING_PERIOD_PARAM)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;set_flow_control_mode_params = (driver_set_flow_control_mode_params_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_SET_FLOW_CONTROL_MODE_PARAMS)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;send = (driver_send_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_SEND)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;register_listener = (driver_register_listener_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_REGISTER_LISTENER)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;register_notify_listener = (driver_register_notify_listener_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_REGISTER_NOTIFY_LISTENER)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;unregister_listener = (driver_unregister_listener_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_UNREGISTER_LISTENER)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;unregister_notify_listener = (driver_unregister_notify_listener_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_UNREGISTER_NOTIFY_LISTENER)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;register_spy_listener = (driver_register_spy_listener_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_REGISTER_SPY_LISTENER)) != NULL ) &amp;&amp;
-         ((serialDriver-&gt;unregister_spy_listener = (driver_unregister_spy_listener_t)
-            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
-            FN_DRIVER_UNREGISTER_SPY_LISTENER) ) ) ) {
-        
-            strncpy( serialDriver-&gt;serialDriverName, serialDriverName, 
-                    min( MAX_PATH, strlen(serialDriverName) ) );
-            iRet = OK;
-            
-    } else { // LOAD_FUNCTION(s)
-        free_serial_driver( serialDriver );
-        iRet = (int)GET_ERROR();
-    }
-    
-    return iRet;
-}
-~~~~~~~~~~~~
-
--------------------------------------------------------------------
 main.c
 -------
 
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thierry CHOMAUD</dc:creator><pubDate>Mon, 14 May 2012 08:08:30 -0000</pubDate><guid>https://sourceforge.net612c5e8a42de07044934139531497416299cf1fa</guid></item><item><title>WikiPage C Serial Driver tutorial sources modified by Thierry CHOMAUD</title><link>https://sourceforge.net/p/coronissdk/wiki/C%2520Serial%2520Driver%2520tutorial%2520sources/</link><description>&lt;pre&gt;--- v3 
+++ v4 
@@ -166,18 +166,22 @@
 #include &lt;serial_driver_event.h&gt;
 #include &lt;serial_driver_status.h&gt;
 
-
+#ifdef  _WINDOWS
+    #define RS232DRIVER_NAME "rs232driver.dll"
+#else
+    #define RS232DRIVER_NAME "./librs232driver.so"
+#endif//_WINDOWS
 SerialDriverLoader driverHandler;
 void*              rs232DriverInstance;
 
 char portId[256] = "COM4";
 SerialFrame mySerialFrame = { { 0x50, 0x05, 0x0 }, 2};
 
 int receiveFrameListener( void* param, const SerialFrame* frame );
 const char* GetCurrentTimeString();
 
 int main(void) {
-    if ( OK == load_serial_driver( "rs232driver.dll", &amp;driverHandler) )
+    if ( OK == load_serial_driver( RS232DRIVER_NAME, &amp;driverHandler) )
     {
         printf( "%s rs232driver lib loading success. \n", 
                 GetCurrentTimeString() );
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thierry CHOMAUD</dc:creator><pubDate>Fri, 11 May 2012 12:25:28 -0000</pubDate><guid>https://sourceforge.net8a6cd0b000d38cb4e4eaeabd89871444b99d8f53</guid></item><item><title>WikiPage C Serial Driver tutorial sources modified by Thierry CHOMAUD</title><link>https://sourceforge.net/p/coronissdk/wiki/C%2520Serial%2520Driver%2520tutorial%2520sources/</link><description>&lt;pre&gt;--- v2 
+++ v3 
@@ -1,185 +1,186 @@
-
 custom_loader.h
 ------------
 
 ~~~~~~~~~~~~
 #ifndef CUSTOM_LOADER_H_
 #define CUSTOM_LOADER_H_
 
 #include &lt;i_serial_driver_export_types.h&gt;
 
  #include &lt;windows.h&gt;
 
  #define LOAD_LIBRARY(name)         LoadLibraryA(name)
  #define FREE_LIBRARY(handle)       FreeLibrary((HMODULE)handle)
  #define LOAD_FUNCTION(handle,name) GetProcAddress((HMODULE)handle,name)
  #define GET_ERROR()                GetLastError()
 
 typedef struct tagSerialDriverLoader {
     char  serialDriverName[MAX_PATH];
     void* serialDriverHandle;
 
     driver_create_t                       create;
     driver_destroy_t                      destroy;
     driver_init_t                         init;
     driver_init_from_file_t               init_from_file;
     driver_open_t                         open;
     driver_close_t                        close;
     driver_is_open_t                      is_open;
     driver_get_port_id_t                  get_port_id;
     driver_set_port_id_t                  set_port_id;
     driver_set_port_params_t              set_port_params;
     driver_set_listening_period_param_t   set_listening_period_param;
     driver_set_flow_control_mode_params_t set_flow_control_mode_params;
     driver_send_t                         send;
     driver_register_listener_t            register_listener;
     driver_register_notify_listener_t     register_notify_listener;
     driver_unregister_listener_t          unregister_listener;
     driver_unregister_notify_listener_t   unregister_notify_listener;
     driver_register_spy_listener_t        register_spy_listener;
     driver_unregister_spy_listener_t      unregister_spy_listener;
 
 } SerialDriverLoader;
 
 void free_serial_driver( SerialDriverLoader* serialDriver );
 int load_serial_driver( const char* serialDriverName, SerialDriverLoader* serialDriver );
 
 #endif /* CUSTOM_LOADER_H_ */
 ~~~~~~~~~~~
 
 
 -------------------------------------------------------------------
 
 custom_loader.c
 ------------
 
 ~~~~~~~~~~~~
 #include &lt;string.h&gt;
 #include "custom_loader.h"
 
 void free_serial_driver( SerialDriverLoader* serialDriver ) {
     FREE_LIBRARY( serialDriver-&gt;serialDriverHandle );
     memset( serialDriver, 0, sizeof(*serialDriver) );
 }
 
 int load_serial_driver( const char* serialDriverName, SerialDriverLoader* serialDriver ) {
     int iRet = OK;
     
     if ( 0 == strcmp( serialDriverName, serialDriver-&gt;serialDriverName ) ) {
         return iRet; // this driver is already loaded
     }
     
     // unload previos driver
     if ( serialDriver-&gt;serialDriverHandle ) {
         free_serial_driver( serialDriver );
     }
 
     serialDriver-&gt;serialDriverHandle = LOAD_LIBRARY(serialDriverName);
     if ( serialDriver-&gt;serialDriverHandle == NULL ) {
         return  (int)GET_ERROR();
     }
     
     
     if ( ((serialDriver-&gt;init = (driver_init_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_INIT)) != NULL) &amp;&amp;
          ((serialDriver-&gt;init_from_file = (driver_init_from_file_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_INIT_FROM_FILE)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;create = (driver_create_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_CREATE)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;destroy = (driver_destroy_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_DESTROY)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;open = (driver_open_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_OPEN)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;close = (driver_close_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_CLOSE)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;is_open = (driver_is_open_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_IS_OPEN)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;get_port_id = (driver_get_port_id_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_GET_PORT_ID)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;set_port_id = (driver_set_port_id_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_SET_PORT_ID)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;set_port_params = (driver_set_port_params_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_SET_PORT_PARAMS)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;set_listening_period_param = (driver_set_listening_period_param_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_SET_LISTENING_PERIOD_PARAM)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;set_flow_control_mode_params = (driver_set_flow_control_mode_params_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_SET_FLOW_CONTROL_MODE_PARAMS)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;send = (driver_send_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_SEND)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;register_listener = (driver_register_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_REGISTER_LISTENER)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;register_notify_listener = (driver_register_notify_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_REGISTER_NOTIFY_LISTENER)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;unregister_listener = (driver_unregister_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_UNREGISTER_LISTENER)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;unregister_notify_listener = (driver_unregister_notify_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_UNREGISTER_NOTIFY_LISTENER)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;register_spy_listener = (driver_register_spy_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_REGISTER_SPY_LISTENER)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;unregister_spy_listener = (driver_unregister_spy_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_UNREGISTER_SPY_LISTENER) ) ) ) {
         
             strncpy( serialDriver-&gt;serialDriverName, serialDriverName, 
                     min( MAX_PATH, strlen(serialDriverName) ) );
             iRet = OK;
             
     } else { // LOAD_FUNCTION(s)
         free_serial_driver( serialDriver );
         iRet = (int)GET_ERROR();
     }
     
     return iRet;
 }
 ~~~~~~~~~~~~
 
 -------------------------------------------------------------------
 main.c
 -------
 
 ~~~~~~~~~~~~
 #include &lt;Windows.h&gt;
 #include &lt;stdio.h&gt;
 #include &lt;tchar.h&gt;
 #include "custom_loader.h"
 
 #include &lt;serial_frame.h&gt;
 #include &lt;generic_constants.h&gt;
 
 #include &lt;serial_driver_event.h&gt;
 #include &lt;serial_driver_status.h&gt;
 
 
 SerialDriverLoader driverHandler;
 void*              rs232DriverInstance;
 
 char portId[256] = "COM4";
 SerialFrame mySerialFrame = { { 0x50, 0x05, 0x0 }, 2};
 
 int receiveFrameListener( void* param, const SerialFrame* frame );
 const char* GetCurrentTimeString();
 
 int main(void) {
     if ( OK == load_serial_driver( "rs232driver.dll", &amp;driverHandler) )
     {
+        printf( "%s rs232driver lib loading success. \n", 
+                GetCurrentTimeString() );
         rs232DriverInstance = driverHandler.create();
         if ( rs232DriverInstance )
         {
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thierry CHOMAUD</dc:creator><pubDate>Fri, 11 May 2012 12:24:14 -0000</pubDate><guid>https://sourceforge.nete1a69df22457c66312c4a4b37570dae5084d0b97</guid></item><item><title>WikiPage C Serial Driver tutorial sources modified by vmacari</title><link>https://sourceforge.net/p/coronissdk/wiki/C%2520Serial%2520Driver%2520tutorial%2520sources/</link><description>&lt;pre&gt;--- v1 
+++ v2 
@@ -1,166 +1,165 @@
 
-
-loader.h
-------------
-
-~~~~~~~~~~~~
-#ifndef LOADER_H_
-#define LOADER_H_
-
+custom_loader.h
+------------
+
+~~~~~~~~~~~~
+#ifndef CUSTOM_LOADER_H_
+#define CUSTOM_LOADER_H_
+
 #include &lt;i_serial_driver_export_types.h&gt;
 
  #include &lt;windows.h&gt;
 
  #define LOAD_LIBRARY(name)         LoadLibraryA(name)
  #define FREE_LIBRARY(handle)       FreeLibrary((HMODULE)handle)
  #define LOAD_FUNCTION(handle,name) GetProcAddress((HMODULE)handle,name)
  #define GET_ERROR()                GetLastError()
 
 typedef struct tagSerialDriverLoader {
     char  serialDriverName[MAX_PATH];
     void* serialDriverHandle;
 
     driver_create_t                       create;
     driver_destroy_t                      destroy;
     driver_init_t                         init;
     driver_init_from_file_t               init_from_file;
     driver_open_t                         open;
     driver_close_t                        close;
     driver_is_open_t                      is_open;
     driver_get_port_id_t                  get_port_id;
     driver_set_port_id_t                  set_port_id;
     driver_set_port_params_t              set_port_params;
     driver_set_listening_period_param_t   set_listening_period_param;
     driver_set_flow_control_mode_params_t set_flow_control_mode_params;
     driver_send_t                         send;
     driver_register_listener_t            register_listener;
     driver_register_notify_listener_t     register_notify_listener;
     driver_unregister_listener_t          unregister_listener;
     driver_unregister_notify_listener_t   unregister_notify_listener;
     driver_register_spy_listener_t        register_spy_listener;
     driver_unregister_spy_listener_t      unregister_spy_listener;
 
 } SerialDriverLoader;
 
 void free_serial_driver( SerialDriverLoader* serialDriver );
 int load_serial_driver( const char* serialDriverName, SerialDriverLoader* serialDriver );
 
-#endif /* LOADER_H_ */
+#endif /* CUSTOM_LOADER_H_ */
 ~~~~~~~~~~~
 
 
 -------------------------------------------------------------------
 
-loader.c
+custom_loader.c
 ------------
 
 ~~~~~~~~~~~~
 #include &lt;string.h&gt;
-#include "loader.h"
+#include "custom_loader.h"
 
 void free_serial_driver( SerialDriverLoader* serialDriver ) {
     FREE_LIBRARY( serialDriver-&gt;serialDriverHandle );
     memset( serialDriver, 0, sizeof(*serialDriver) );
 }
 
 int load_serial_driver( const char* serialDriverName, SerialDriverLoader* serialDriver ) {
     int iRet = OK;
     
     if ( 0 == strcmp( serialDriverName, serialDriver-&gt;serialDriverName ) ) {
         return iRet; // this driver is already loaded
     }
     
     // unload previos driver
     if ( serialDriver-&gt;serialDriverHandle ) {
         free_serial_driver( serialDriver );
     }
 
     serialDriver-&gt;serialDriverHandle = LOAD_LIBRARY(serialDriverName);
     if ( serialDriver-&gt;serialDriverHandle == NULL ) {
         return  (int)GET_ERROR();
     }
     
     
     if ( ((serialDriver-&gt;init = (driver_init_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_INIT)) != NULL) &amp;&amp;
          ((serialDriver-&gt;init_from_file = (driver_init_from_file_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_INIT_FROM_FILE)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;create = (driver_create_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_CREATE)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;destroy = (driver_destroy_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_DESTROY)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;open = (driver_open_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_OPEN)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;close = (driver_close_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_CLOSE)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;is_open = (driver_is_open_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_IS_OPEN)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;get_port_id = (driver_get_port_id_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_GET_PORT_ID)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;set_port_id = (driver_set_port_id_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_SET_PORT_ID)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;set_port_params = (driver_set_port_params_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_SET_PORT_PARAMS)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;set_listening_period_param = (driver_set_listening_period_param_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_SET_LISTENING_PERIOD_PARAM)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;set_flow_control_mode_params = (driver_set_flow_control_mode_params_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_SET_FLOW_CONTROL_MODE_PARAMS)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;send = (driver_send_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_SEND)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;register_listener = (driver_register_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_REGISTER_LISTENER)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;register_notify_listener = (driver_register_notify_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_REGISTER_NOTIFY_LISTENER)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;unregister_listener = (driver_unregister_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_UNREGISTER_LISTENER)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;unregister_notify_listener = (driver_unregister_notify_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_UNREGISTER_NOTIFY_LISTENER)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;register_spy_listener = (driver_register_spy_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_REGISTER_SPY_LISTENER)) != NULL ) &amp;&amp;
          ((serialDriver-&gt;unregister_spy_listener = (driver_unregister_spy_listener_t)
             LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
             FN_DRIVER_UNREGISTER_SPY_LISTENER) ) ) ) {
         
             strncpy( serialDriver-&gt;serialDriverName, serialDriverName, 
                     min( MAX_PATH, strlen(serialDriverName) ) );
             iRet = OK;
             
     } else { // LOAD_FUNCTION(s)
         free_serial_driver( serialDriver );
         iRet = (int)GET_ERROR();
     }
     
     return iRet;
 }
 ~~~~~~~~~~~~
 
 -------------------------------------------------------------------
 main.c
 -------
 
 ~~~~~~~~~~~~
 #include &lt;Windows.h&gt;
 #include &lt;stdio.h&gt;
 #include &lt;tchar.h&gt;
-#include "loader.h"
+#include "custom_loader.h"
 
 #include &lt;serial_frame.h&gt;
 #include &lt;generic_constants.h&gt;
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vmacari</dc:creator><pubDate>Thu, 10 May 2012 14:38:08 -0000</pubDate><guid>https://sourceforge.net4f91e6b895c2d9c10afa01dd40054baed26bd34e</guid></item><item><title>WikiPage C Serial Driver tutorial sources modified by vmacari</title><link>https://sourceforge.net/p/coronissdk/wiki/C%2520Serial%2520Driver%2520tutorial%2520sources/</link><description>

loader.h
------------

~~~~~~~~~~~~
#ifndef LOADER_H_
#define LOADER_H_

#include &lt;i_serial_driver_export_types.h&gt;

 #include &lt;windows.h&gt;

 #define LOAD_LIBRARY(name)         LoadLibraryA(name)
 #define FREE_LIBRARY(handle)       FreeLibrary((HMODULE)handle)
 #define LOAD_FUNCTION(handle,name) GetProcAddress((HMODULE)handle,name)
 #define GET_ERROR()                GetLastError()

typedef struct tagSerialDriverLoader {
    char  serialDriverName[MAX_PATH];
    void* serialDriverHandle;

    driver_create_t                       create;
    driver_destroy_t                      destroy;
    driver_init_t                         init;
    driver_init_from_file_t               init_from_file;
    driver_open_t                         open;
    driver_close_t                        close;
    driver_is_open_t                      is_open;
    driver_get_port_id_t                  get_port_id;
    driver_set_port_id_t                  set_port_id;
    driver_set_port_params_t              set_port_params;
    driver_set_listening_period_param_t   set_listening_period_param;
    driver_set_flow_control_mode_params_t set_flow_control_mode_params;
    driver_send_t                         send;
    driver_register_listener_t            register_listener;
    driver_register_notify_listener_t     register_notify_listener;
    driver_unregister_listener_t          unregister_listener;
    driver_unregister_notify_listener_t   unregister_notify_listener;
    driver_register_spy_listener_t        register_spy_listener;
    driver_unregister_spy_listener_t      unregister_spy_listener;

} SerialDriverLoader;

void free_serial_driver( SerialDriverLoader* serialDriver );
int load_serial_driver( const char* serialDriverName, SerialDriverLoader* serialDriver );

#endif /* LOADER_H_ */
~~~~~~~~~~~


-------------------------------------------------------------------

loader.c
------------

~~~~~~~~~~~~
#include &lt;string.h&gt;
#include "loader.h"

void free_serial_driver( SerialDriverLoader* serialDriver ) {
    FREE_LIBRARY( serialDriver-&gt;serialDriverHandle );
    memset( serialDriver, 0, sizeof(*serialDriver) );
}

int load_serial_driver( const char* serialDriverName, SerialDriverLoader* serialDriver ) {
    int iRet = OK;
    
    if ( 0 == strcmp( serialDriverName, serialDriver-&gt;serialDriverName ) ) {
        return iRet; // this driver is already loaded
    }
    
    // unload previos driver
    if ( serialDriver-&gt;serialDriverHandle ) {
        free_serial_driver( serialDriver );
    }

    serialDriver-&gt;serialDriverHandle = LOAD_LIBRARY(serialDriverName);
    if ( serialDriver-&gt;serialDriverHandle == NULL ) {
        return  (int)GET_ERROR();
    }
    
    
    if ( ((serialDriver-&gt;init = (driver_init_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_INIT)) != NULL) &amp;&amp;
         ((serialDriver-&gt;init_from_file = (driver_init_from_file_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_INIT_FROM_FILE)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;create = (driver_create_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_CREATE)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;destroy = (driver_destroy_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_DESTROY)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;open = (driver_open_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_OPEN)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;close = (driver_close_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_CLOSE)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;is_open = (driver_is_open_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_IS_OPEN)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;get_port_id = (driver_get_port_id_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_GET_PORT_ID)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;set_port_id = (driver_set_port_id_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_SET_PORT_ID)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;set_port_params = (driver_set_port_params_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_SET_PORT_PARAMS)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;set_listening_period_param = (driver_set_listening_period_param_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_SET_LISTENING_PERIOD_PARAM)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;set_flow_control_mode_params = (driver_set_flow_control_mode_params_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_SET_FLOW_CONTROL_MODE_PARAMS)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;send = (driver_send_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_SEND)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;register_listener = (driver_register_listener_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_REGISTER_LISTENER)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;register_notify_listener = (driver_register_notify_listener_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_REGISTER_NOTIFY_LISTENER)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;unregister_listener = (driver_unregister_listener_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_UNREGISTER_LISTENER)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;unregister_notify_listener = (driver_unregister_notify_listener_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_UNREGISTER_NOTIFY_LISTENER)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;register_spy_listener = (driver_register_spy_listener_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_REGISTER_SPY_LISTENER)) != NULL ) &amp;&amp;
         ((serialDriver-&gt;unregister_spy_listener = (driver_unregister_spy_listener_t)
            LOAD_FUNCTION(serialDriver-&gt;serialDriverHandle,
            FN_DRIVER_UNREGISTER_SPY_LISTENER) ) ) ) {
        
            strncpy( serialDriver-&gt;serialDriverName, serialDriverName, 
                    min( MAX_PATH, strlen(serialDriverName) ) );
            iRet = OK;
            
    } else { // LOAD_FUNCTION(s)
        free_serial_driver( serialDriver );
        iRet = (int)GET_ERROR();
    }
    
    return iRet;
}
~~~~~~~~~~~~

-------------------------------------------------------------------
main.c
-------

~~~~~~~~~~~~
#include &lt;Windows.h&gt;
#include &lt;stdio.h&gt;
#include &lt;tchar.h&gt;
#include "loader.h"

#include &lt;serial_frame.h&gt;
#include &lt;generic_constants.h&gt;

#include &lt;serial_driver_event.h&gt;
#include &lt;serial_driver_status.h&gt;


SerialDriverLoader driverHandler;
void*              rs232DriverInstance;

char portId[256] = "COM4";
SerialFrame mySerialFrame = { { 0x50, 0x05, 0x0 }, 2};

int receiveFrameListener( void* param, const SerialFrame* frame );
const char* GetCurrentTimeString();

int main(void) {
    if ( OK == load_serial_driver( "rs232driver.dll", &amp;driverHandler) )
    {
        rs232DriverInstance = driverHandler.create();
        if ( rs232DriverInstance )
        {
            printf( "%s rs232driver creation success. \n", 
                GetCurrentTimeString() );
            int status = OK_SERIALDRIVER_SUCCESS;
            status = driverHandler.init( rs232DriverInstance );
            printf( "%s rs232driver init status: %i \n", 
                GetCurrentTimeString(), status );
            driverHandler.set_port_id( rs232DriverInstance, portId);
            driverHandler.register_listener( rs232DriverInstance, 
                receiveFrameListener, 0 );
            status = driverHandler.open( rs232DriverInstance );
            printf( "%s rs232driver open status: %i \n", 
                GetCurrentTimeString(), status );
            status = driverHandler.send( rs232DriverInstance, &amp;mySerialFrame );
            printf( "%s rs232driver send status: %i \n", 
                GetCurrentTimeString(), status );
            driverHandler.destroy( rs232DriverInstance );
        }

        free_serial_driver( &amp;driverHandler );
    }
    return EXIT_SUCCESS;
}

int receiveFrameListener( void* param, const SerialFrame* frame )
{
    printf( "%s receiveFrame: ", GetCurrentTimeString() );
    int i = 0;
    for ( ; frame &amp;&amp; i &lt; frame-&gt;len; ++i )
    {
        printf( "%02X", frame-&gt;frame[i] );
    }
    printf( "\n" );
    return 0;
}

const char* GetCurrentTimeString()
{
    static char currTime[100] = "";
    currTime[0] = 0;
    SYSTEMTIME st = {0};
    GetLocalTime(&amp;st);
    sprintf( currTime, "[%02d:%02d:%02d:%03d]", st.wHour, st.wMinute, 
        st.wSecond, st.wMilliseconds );
    return currTime;
}

~~~~~~~~~~~~
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vmacari</dc:creator><pubDate>Thu, 10 May 2012 13:45:34 -0000</pubDate><guid>https://sourceforge.netc27d25e03d515bc66907d311fd70cc49c36ee3b0</guid></item></channel></rss>