drivers/unix/unix.c
changeset 151 ebf4bd44f282
parent 149 fe50ada8020b
child 155 746b49869cbc
equal deleted inserted replaced
150:d2fc5d5f8a36 151:ebf4bd44f282
    25 
    25 
    26 #ifndef NOT_USE_DYNAMIC_LOADING
    26 #ifndef NOT_USE_DYNAMIC_LOADING
    27 #define DLL_CALL(funcname) (* funcname##_driver)
    27 #define DLL_CALL(funcname) (* funcname##_driver)
    28 #define FCT_PTR_INIT =NULL
    28 #define FCT_PTR_INIT =NULL
    29 
    29 
    30 #ifdef WIN32
       
    31 #define DLSYM(name)\
       
    32     *(void **) (&_##name) = GetProcAddress(handle, TEXT(#name"_driver"));\
       
    33 	if (name##_driver == NULL)  {\
       
    34 		fprintf (stderr, "Error loading symbol %s\n",#name"_driver");\
       
    35 		UnLoadCanDriver(handle);\
       
    36 		return NULL;\
       
    37 	}
       
    38  
       
    39 #else
       
    40 #define DLSYM(name)\
    30 #define DLSYM(name)\
    41 	*(void **) (&name##_driver) = dlsym(handle, #name"_driver");\
    31 	*(void **) (&name##_driver) = dlsym(handle, #name"_driver");\
    42 	if ((error = dlerror()) != NULL)  {\
    32 	if ((error = dlerror()) != NULL)  {\
    43 		fprintf (stderr, "%s\n", error);\
    33 		fprintf (stderr, "%s\n", error);\
    44 		UnLoadCanDriver(handle);\
    34 		UnLoadCanDriver(handle);\
    45 		return NULL;\
    35 		return NULL;\
    46 	}
    36 	}
    47 #endif
       
    48 
    37 
    49 #else /*NOT_USE_DYNAMIC_LOADING*/
    38 #else /*NOT_USE_DYNAMIC_LOADING*/
    50 
    39 
    51 /*Function call is direct*/
    40 /*Function call is direct*/
    52 #define DLL_CALL(funcname) funcname##_driver
    41 #define DLL_CALL(funcname) funcname##_driver
    81 /*UnLoads the dll*/
    70 /*UnLoads the dll*/
    82 UNS8 UnLoadCanDriver(LIB_HANDLE handle)
    71 UNS8 UnLoadCanDriver(LIB_HANDLE handle)
    83 {
    72 {
    84 	if(handle!=NULL)
    73 	if(handle!=NULL)
    85 	{
    74 	{
    86 #ifdef WIN32
       
    87 	        FreeLibrary(handle);    
       
    88 #else
       
    89 		dlclose(handle);
    75 		dlclose(handle);
    90 #endif
    76 
    91 		handle=NULL;
    77 		handle=NULL;
    92 		return 0;
    78 		return 0;
    93 	}
    79 	}
    94 	return -1;
    80 	return -1;
    95 }
    81 }
    98 LIB_HANDLE LoadCanDriver(char* driver_name)
    84 LIB_HANDLE LoadCanDriver(char* driver_name)
    99 {
    85 {
   100 	LIB_HANDLE handle = NULL;
    86 	LIB_HANDLE handle = NULL;
   101 	char *error;
    87 	char *error;
   102 	
    88 	
   103 #ifdef WIN32
       
   104 
    89 
   105 	if(handle==NULL)
       
   106 	{
       
   107 		handle = LoadLibrary(driver_name);
       
   108 	}
       
   109  
       
   110 	if (handle == NULL) {
       
   111         	fprintf(stderr,"Error loading Can Driver dll \n");
       
   112         	return -1;
       
   113 	}
       
   114 
       
   115 #else
       
   116 	if(handle==NULL)
    90 	if(handle==NULL)
   117 	{
    91 	{
   118 		handle = dlopen(driver_name, RTLD_LAZY);
    92 		handle = dlopen(driver_name, RTLD_LAZY);
   119 	}
    93 	}
   120 
    94 
   121 	if (!handle) {
    95 	if (!handle) {
   122 		fprintf (stderr, "%s\n", dlerror());
    96 		fprintf (stderr, "%s\n", dlerror());
   123         	return NULL;
    97         	return NULL;
   124 	}
    98 	}
   125 #endif
       
   126  
    99  
   127 	/*Get function ptr*/
   100 	/*Get function ptr*/
   128 	DLSYM(canReceive)
   101 	DLSYM(canReceive)
   129 	DLSYM(canSend)
   102 	DLSYM(canSend)
   130 	DLSYM(canOpen)
   103 	DLSYM(canOpen)