drivers/win32/drivers_win32.cpp
changeset 150 d2fc5d5f8a36
parent 149 fe50ada8020b
child 241 4ecc2f3690f4
equal deleted inserted replaced
149:fe50ada8020b 150:d2fc5d5f8a36
    32 #define DLL_CALL(funcname) (*_##funcname)
    32 #define DLL_CALL(funcname) (*_##funcname)
    33 #define FCT_PTR_INIT =NULL
    33 #define FCT_PTR_INIT =NULL
    34 #include "canfestival.h"
    34 #include "canfestival.h"
    35 #include "timer.h"
    35 #include "timer.h"
    36 
    36 
    37 #include "nvram_driver.h"
       
    38 #include "lss_driver.h"
       
    39 #include "timers_driver.h"
    37 #include "timers_driver.h"
    40    };
    38    };
    41 
    39 
    42 typedef UNS8 (*CANRECEIVE_DRIVER_PROC)(void* inst, Message *m);
    40 typedef UNS8 (*CANRECEIVE_DRIVER_PROC)(void* inst, Message *m);
    43 typedef UNS8 (*CANSEND_DRIVER_PROC)(void* inst, const Message *m);
    41 typedef UNS8 (*CANSEND_DRIVER_PROC)(void* inst, const Message *m);
    44 typedef void* (*CANOPEN_DRIVER_PROC)(s_BOARD *board);
    42 typedef void* (*CANOPEN_DRIVER_PROC)(s_BOARD *board);
    45 typedef int (*CANCLOSE_DRIVER_PROC)(void* inst);
    43 typedef int (*CANCLOSE_DRIVER_PROC)(void* inst);
    46 
    44 
    47 typedef int (*NVRAM_OPEN_PROC)(void);
       
    48 typedef void (*NVRAM_CLOSE_PROC)(void);
       
    49 typedef char (*NVRAM_WRITE_PROC)(int type, int access_attr, void *data);
       
    50 typedef char (*NVRAM_READ_PROC)(int type, int access_attr, void *data);
       
    51 
       
    52 typedef void (*LED_SET_REDGREEN_PROC)(CO_Data *d, unsigned char bits);
       
    53 
       
    54 typedef UNS8 (*BAUDRATE_VALID_PROC)(UNS32 table_index);
       
    55 typedef void (*BAUDRATE_SET_PROC)(UNS8 table_index);
       
    56 
    45 
    57 class driver_procs
    46 class driver_procs
    58    {
    47    {
    59    public:
    48    public:
    60       driver_procs();
    49       driver_procs();
    68       CANRECEIVE_DRIVER_PROC m_canReceive;
    57       CANRECEIVE_DRIVER_PROC m_canReceive;
    69       CANSEND_DRIVER_PROC m_canSend;
    58       CANSEND_DRIVER_PROC m_canSend;
    70       CANOPEN_DRIVER_PROC m_canOpen;
    59       CANOPEN_DRIVER_PROC m_canOpen;
    71       CANCLOSE_DRIVER_PROC m_canClose;
    60       CANCLOSE_DRIVER_PROC m_canClose;
    72 
    61 
    73       // nvram driver
       
    74       NVRAM_OPEN_PROC m_nvram_open;
       
    75       NVRAM_CLOSE_PROC m_nvram_close;
       
    76       NVRAM_WRITE_PROC m_nvram_write;
       
    77       NVRAM_READ_PROC m_nvram_read;
       
    78       // led driver
       
    79       LED_SET_REDGREEN_PROC m_led_set_redgreen;
       
    80       // lss driver
       
    81       BAUDRATE_VALID_PROC m_baudrate_valid;
       
    82       BAUDRATE_SET_PROC m_baudrate_set;
       
    83 
       
    84       // driver module habndle
    62       // driver module habndle
    85       HMODULE m_driver_handle;
    63       HMODULE m_driver_handle;
    86    };
    64    };
    87 
    65 
    88 driver_procs::driver_procs() : m_canReceive(0),
    66 driver_procs::driver_procs() : m_canReceive(0),
    89       m_canSend(0),
    67       m_canSend(0),
    90       m_canOpen(0),
    68       m_canOpen(0),
    91       m_canClose(0),
    69       m_canClose(0),
    92       m_nvram_open(0),
       
    93       m_nvram_close(0),
       
    94       m_nvram_write(0),
       
    95       m_nvram_read(0),
       
    96       m_led_set_redgreen(),
       
    97       m_baudrate_valid(0),
       
    98       m_baudrate_set(0),
       
    99       m_driver_handle(0)
    70       m_driver_handle(0)
   100    {}
    71    {}
   101 
    72 
   102 driver_procs::~driver_procs()
    73 driver_procs::~driver_procs()
   103    {
    74    {
   130 
   101 
   131    m_canReceive = (CANRECEIVE_DRIVER_PROC)::GetProcAddress(m_driver_handle, myTEXT("canReceive_driver"));
   102    m_canReceive = (CANRECEIVE_DRIVER_PROC)::GetProcAddress(m_driver_handle, myTEXT("canReceive_driver"));
   132    m_canSend = (CANSEND_DRIVER_PROC)::GetProcAddress(m_driver_handle, myTEXT("canSend_driver"));
   103    m_canSend = (CANSEND_DRIVER_PROC)::GetProcAddress(m_driver_handle, myTEXT("canSend_driver"));
   133    m_canOpen = (CANOPEN_DRIVER_PROC)::GetProcAddress(m_driver_handle, myTEXT("canOpen_driver"));
   104    m_canOpen = (CANOPEN_DRIVER_PROC)::GetProcAddress(m_driver_handle, myTEXT("canOpen_driver"));
   134    m_canClose = (CANCLOSE_DRIVER_PROC)::GetProcAddress(m_driver_handle, myTEXT("canClose_driver"));
   105    m_canClose = (CANCLOSE_DRIVER_PROC)::GetProcAddress(m_driver_handle, myTEXT("canClose_driver"));
   135 
       
   136    m_nvram_open = (NVRAM_OPEN_PROC)::GetProcAddress(m_driver_handle, myTEXT("nvram_open_driver"));
       
   137    m_nvram_close = (NVRAM_CLOSE_PROC)::GetProcAddress(m_driver_handle, myTEXT("nvram_close_driver"));
       
   138    m_nvram_write = (NVRAM_WRITE_PROC)::GetProcAddress(m_driver_handle, myTEXT("nvram_write_driver"));
       
   139    m_nvram_read = (NVRAM_READ_PROC)::GetProcAddress(m_driver_handle, myTEXT("nvram_read_driver"));
       
   140 
       
   141    m_led_set_redgreen = (LED_SET_REDGREEN_PROC)::GetProcAddress(m_driver_handle, myTEXT("led_set_redgreen_driver"));
       
   142 
       
   143    m_baudrate_valid = (BAUDRATE_VALID_PROC)::GetProcAddress(m_driver_handle, myTEXT("baudrate_valid_driver"));
       
   144    m_baudrate_set = (BAUDRATE_SET_PROC)::GetProcAddress(m_driver_handle, myTEXT("baudrate_set_driver"));
       
   145 
       
   146    return can_driver_valid()?m_driver_handle:NULL;
   106    return can_driver_valid()?m_driver_handle:NULL;
   147    }
   107    }
   148 
   108 
   149 struct driver_data
   109 struct driver_data
   150    {
   110    {
   231    }
   191    }
   232 
   192 
   233 /***************************************************************************/
   193 /***************************************************************************/
   234 int canClose(CO_Data * d)
   194 int canClose(CO_Data * d)
   235    {
   195    {
   236    if (fd0 != NULL && s_driver_procs.m_canClose != NULL)
   196    if (s_driver_procs.m_canClose != NULL)
   237       {
   197       {
   238       EnterMutex();
   198 		  driver_data* data;
   239       driver_data* data = (driver_data*)d->canHandle;
   199 		  EnterMutex();
   240       d->canHandle = NULL;
   200 		  if(d->canHandle != NULL){
   241       LeaveMutex();
   201 			data = (driver_data*)d->canHandle;
   242       data->continue_receive_thread = false;
   202 			d->canHandle = NULL;
   243       WaitReceiveTaskEnd(&data->receive_thread);
   203 			data->continue_receive_thread = false;}
   244       (*s_driver_procs.m_canClose)(data->inst);
   204 		  LeaveMutex();
   245       delete data;
   205 		  WaitReceiveTaskEnd(&data->receive_thread);
   246       return 0;
   206 		  (*s_driver_procs.m_canClose)(data->inst);
       
   207 		  delete data;
       
   208 		  return 0;
   247       }
   209       }
   248    return 0;
   210    return 0;
   249    }
   211    }
   250 
   212 
   251 /***************************************************************************/
   213 
   252 int nvram_open(void)
       
   253    {
       
   254    if (s_driver_procs.m_nvram_read != NULL)
       
   255       return (*s_driver_procs.m_nvram_open)();
       
   256    return -1;
       
   257    }
       
   258 
       
   259 void nvram_close(void)
       
   260    {
       
   261    if (s_driver_procs.m_nvram_close != NULL)
       
   262       (*s_driver_procs.m_nvram_close)();
       
   263    }
       
   264 
       
   265 char nvram_write(int type, int access_attr, void *data)
       
   266    {
       
   267    if (s_driver_procs.m_nvram_write != NULL)
       
   268       return (*s_driver_procs.m_nvram_write)(type, access_attr, data);
       
   269    return 0;
       
   270    }
       
   271 
       
   272 char nvram_read(int type, int access_attr, void *data)
       
   273    {
       
   274    if (s_driver_procs.m_nvram_read != NULL)
       
   275       return (*s_driver_procs.m_nvram_read)(type, access_attr, data);
       
   276    return 0;
       
   277    }
       
   278 
       
   279 /***************************************************************************/
       
   280 
       
   281 void led_set_redgreen(CO_Data *d, unsigned char bits)
       
   282    {
       
   283    if (s_driver_procs.m_led_set_redgreen != NULL)
       
   284       (*s_driver_procs.m_led_set_redgreen)(d, bits);
       
   285    }
       
   286 
       
   287 /***************************************************************************/
       
   288 
       
   289 UNS8 baudrate_valid(UNS32 table_index)
       
   290    {
       
   291    if (s_driver_procs.m_baudrate_valid != NULL)
       
   292       return (*s_driver_procs.m_baudrate_valid)(table_index);
       
   293    return 0;
       
   294    }
       
   295 
       
   296 void baudrate_set(UNS8 table_index)
       
   297    {
       
   298    if (s_driver_procs.m_baudrate_set != NULL)
       
   299       (*s_driver_procs.m_baudrate_set)(table_index);
       
   300    }