cvt_board_commons.c

Go to the documentation of this file.
00001 
00002 
00010 
00011 
00012 
00014 // File includes
00016 #include <memory.h>
00017 #include <string.h>
00018 
00019 #include "cvt_board_commons.h"
00020 
00022 // File local defines
00024 
00026 // Static variables declaration
00028 
00030 // Static methods declaration
00032 
00034 //
00036 UINT8 cvt_ror_bits( UINT8 data, int num_bits)
00037 {
00038         while( num_bits--)
00039         {
00040                 data= ( data& 0x01)? (data>> 1)|0x80: (data>> 1);
00041         }
00042         return data;
00043 }
00044 
00046 //
00048 UINT8 cvt_swap_bits( UINT8 data)
00049 {
00050         UINT8 tmp= 0x00;
00051         UINT8 msk_l, msk_r;
00052         for( msk_l= 0x80, msk_r= 0x01; msk_l; msk_l>>= 1, msk_r<<= 1)
00053         {
00054                 tmp|= (data& msk_l)? msk_r: 0x00;
00055         }
00056         return tmp;
00057 }
00058 
00060 //
00062 void cvt_delay(int msec)
00063 {
00064 #ifdef LINUX
00065   usleep( msec* 1000); 
00066 #else
00067   Sleep( msec);
00068 #endif
00069 }
00070 
00072 // Global visible variables declaration
00074 
00075 #ifdef WIN32
00076 /*
00077         -----------------------------------------------------------------------------
00078 
00079         DllMain
00080         Entry point della libreria (inizializzare qui i dati globali)
00081 
00082         -----------------------------------------------------------------------------
00083 */
00084 BOOL WINAPI DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
00085 {
00086     static int m_num_instances= 0;
00087 
00088         switch (ul_reason_for_call) {
00089         case DLL_PROCESS_ATTACH:
00090                 {
00091                                         if( !m_num_instances)
00092                                         {
00093                                         }
00094 
00095                                         ++m_num_instances;
00096                 }
00097                 break;
00098         case DLL_PROCESS_DETACH:
00099                                 --m_num_instances;
00100                                 break;
00101         case DLL_THREAD_ATTACH:
00102         case DLL_THREAD_DETACH:
00103                 break;
00104         }
00105         return TRUE;
00106 }
00107 
00108 #else   //Linux
00109 /*
00110         -----------------------------------------------------------------------------
00111 
00112         _init
00113         Library entry point
00114 
00115         -----------------------------------------------------------------------------
00116 */
00117 void _init( void )
00118 {
00119 }
00120 
00121 /*
00122         -----------------------------------------------------------------------------
00123 
00124         _fini
00125         Library exit point
00126 
00127         -----------------------------------------------------------------------------
00128 */
00129 void _fini( void )
00130 {
00131 }
00132 
00133 #endif // WIN32
00134 
00136 //
00137 //     B O A R D S   H A N D L I N G
00138 //
00140 
00142 // 
00144 BOOL cvt_board_open( cvt_board_data* p_data, UINT16 base_address, long vme_handle, const cvt_reg_table *p_reg_table)
00145 {
00146         memset( p_data, 0, sizeof( cvt_board_data));
00147 
00148         // init fields
00149         p_data->m_base_address= base_address;
00150         p_data->m_vme_handle= vme_handle;
00151         p_data->m_p_reg_table= p_reg_table;
00152         
00153         return TRUE;
00154 }
00156 //
00158 BOOL cvt_board_close( cvt_board_data* p_data)
00159 {
00160         return TRUE;
00161 }
00162 
00164 //
00165 //     L E V E L   0   A P I s
00166 //
00168 
00170 // 
00172 BOOL cvt_write( cvt_board_data* p_data, UINT16 address, const void* p_value, CVAddressModifier am, CVDataWidth data_size)
00173 {
00174         CVErrorCodes err_code;
00175         if( ( err_code= CAENVME_WriteCycle( p_data->m_vme_handle, (((UINT32)p_data->m_base_address)<< 16)| address, (void*)p_value, am, data_size))!= cvSuccess)
00176         {
00177                 TRACE( "CAENVME_WriteCycle: ");
00178                 TRACE( CAENVME_DecodeError( err_code));
00179                 TRACE( "\n");
00180                 return FALSE;
00181         }
00182         return TRUE;
00183 }
00184 
00186 // 
00188 BOOL cvt_read( cvt_board_data* p_data, UINT16 address, void* p_value, CVAddressModifier am, CVDataWidth data_size)
00189 {
00190         CVErrorCodes err_code;
00191         if( ( err_code= CAENVME_ReadCycle( p_data->m_vme_handle, (((UINT32)p_data->m_base_address)<< 16)| address, (void*)p_value, am, data_size))!= cvSuccess)
00192         {
00193                 TRACE( "CAENVME_ReadCycle: ");
00194                 TRACE( CAENVME_DecodeError( err_code));
00195                 TRACE( "\n");
00196                 return FALSE;
00197         }
00198         return TRUE;
00199 }
00200 
00202 // 
00204 BOOL cvt_set_bitmask( cvt_board_data* p_data, UINT16 address, void *p_value, CVAddressModifier am, CVDataWidth data_size)
00205 {
00206         switch( data_size) 
00207         {
00208         case cvD8:
00209                 {
00210                         UINT8 reg_value= 0;
00211                         if( !cvt_read( p_data, address, &reg_value, am, data_size))
00212                                 return FALSE;
00213                         reg_value|= *(UINT8*)p_value;
00214                         if( !cvt_write( p_data, address, &reg_value, am, data_size))
00215                                 return FALSE;
00216                 }
00217                 break;
00218         case cvD16:
00219         case cvD16_swapped:
00220                 {
00221                         UINT16 reg_value= 0;
00222                         if( !cvt_read( p_data, address, &reg_value, am, data_size))
00223                                 return FALSE;
00224                         reg_value|= *(UINT16*)p_value;
00225                         if( !cvt_write( p_data, address, &reg_value, am, data_size))
00226                                 return FALSE;
00227                 }
00228                 break;
00229         case cvD32:
00230         case cvD32_swapped:
00231                 {
00232                         UINT32 reg_value= 0;
00233                         if( !cvt_read( p_data, address, &reg_value, am, data_size))
00234                                 return FALSE;
00235                         reg_value|= *(UINT32*)p_value;
00236                         if( !cvt_write( p_data, address, &reg_value, am, data_size))
00237                                 return FALSE;
00238                 }
00239                 break;
00240         default:
00241                 return FALSE;
00242         }
00243 
00244         return TRUE;
00245 }
00246 
00248 // 
00250 BOOL cvt_clear_bitmask( cvt_board_data* p_data, UINT16 address, void* p_value, CVAddressModifier am, CVDataWidth data_size)
00251 {
00252         switch( data_size) 
00253         {
00254         case cvD8:
00255                 {
00256                         UINT8 reg_value= 0;
00257                         if( !cvt_read( p_data, address, &reg_value, am, data_size))
00258                                 return FALSE;
00259                         reg_value&= ~*(UINT8*)p_value;
00260                         if( !cvt_write( p_data, address, &reg_value, am, data_size))
00261                                 return FALSE;
00262                 }
00263                 break;
00264         case cvD16:
00265         case cvD16_swapped:
00266                 {
00267                         UINT16 reg_value= 0;
00268                         if( !cvt_read( p_data, address, &reg_value, am, data_size))
00269                                 return FALSE;
00270                         reg_value&= ~*(UINT16*)p_value;
00271                         if( !cvt_write( p_data, address, &reg_value, am, data_size))
00272                                 return FALSE;
00273                 }
00274                 break;
00275         case cvD32:
00276         case cvD32_swapped:
00277                 {
00278                         UINT32 reg_value= 0;
00279                         if( !cvt_read( p_data, address, &reg_value, am, data_size))
00280                                 return FALSE;
00281                         reg_value&= ~*(UINT32*)p_value;
00282                         if( !cvt_write( p_data, address, &reg_value, am, data_size))
00283                                 return FALSE;
00284                 }
00285                 break;
00286         default:
00287                 return FALSE;
00288         }
00289 
00290         return TRUE;
00291 }
00292 
00294 // 
00296 BOOL cvt_FIFO_BLT_read( cvt_board_data* p_data, UINT16 address, void* p_buffer, UINT32 buffer_size, UINT32 *p_read_bytes, CVAddressModifier am, CVDataWidth data_size, BOOL *p_is_berr)
00297 {
00298         CVErrorCodes err_code= CAENVME_FIFOBLTReadCycle( p_data->m_vme_handle, (((UINT32)p_data->m_base_address)<< 16)| address, (void*)p_buffer, buffer_size, am, data_size, p_read_bytes);
00299         *p_is_berr= FALSE;
00300         switch( err_code)
00301         {
00302         case cvBusError:
00303                 *p_is_berr= TRUE;
00304         case cvSuccess:
00305                 break;
00306         default:
00307                 TRACE( "CAENVME_FIFOBLTReadCycle: ");
00308                 TRACE( CAENVME_DecodeError( err_code));
00309                 TRACE( "\n");
00310                 return FALSE;
00311         }
00312         return TRUE;
00313 }
00314 
00316 // 
00318 BOOL cvt_write_reg( cvt_board_data* p_data, UINT16 reg_index, const void* p_value)
00319 {
00320         return cvt_write( p_data, p_data->m_p_reg_table[ reg_index].m_address, p_value, p_data->m_p_reg_table[ reg_index].m_am, p_data->m_p_reg_table[ reg_index].m_data_size);
00321 }
00322 
00324 // 
00326 BOOL cvt_read_reg( cvt_board_data* p_data, UINT16 reg_index, void* p_value)
00327 {
00328         return cvt_read( p_data, p_data->m_p_reg_table[ reg_index].m_address, p_value, p_data->m_p_reg_table[ reg_index].m_am, p_data->m_p_reg_table[ reg_index].m_data_size);
00329 }
00330 
00332 // 
00334 BOOL cvt_set_bitmask_reg( cvt_board_data* p_data, UINT16 reg_index, void *p_value)
00335 {
00336         return cvt_set_bitmask( p_data, p_data->m_p_reg_table[ reg_index].m_address, p_value, p_data->m_p_reg_table[ reg_index].m_am, p_data->m_p_reg_table[ reg_index].m_data_size);
00337 }
00338 
00340 // 
00342 BOOL cvt_clear_bitmask_reg( cvt_board_data* p_data, UINT16 reg_index, void* p_value)
00343 {
00344         return cvt_clear_bitmask( p_data, p_data->m_p_reg_table[ reg_index].m_address, p_value, p_data->m_p_reg_table[ reg_index].m_am, p_data->m_p_reg_table[ reg_index].m_data_size);
00345 }
00346 
00348 // 
00350 BOOL cvt_FIFO_BLT_read_reg( cvt_board_data* p_data, UINT16 reg_index, void* p_buffer, UINT32 buffer_size, UINT32 *p_read_bytes, BOOL *p_is_berr)
00351 {
00352         return cvt_FIFO_BLT_read( p_data, p_data->m_p_reg_table[ reg_index].m_address, p_buffer, buffer_size, p_read_bytes, p_data->m_p_reg_table[ reg_index].m_am, p_data->m_p_reg_table[ reg_index].m_data_size, p_is_berr);
00353 }
00354 
00356 //
00357 //     G L O B A L   A P I s
00358 //
00360 
00362 //
00364 BOOL cvt_set_MCST_CBLT( UINT8 address, cvt_board_data** board_array, UINT16 board_array_len)
00365 {
00366         MCST_CBLT_board_pos pos= MCST_CBLT_board_pos_last;
00367         while( board_array_len--)
00368         {
00369                 if( !board_array[ board_array_len]->set_MCST_CBLT)
00370                 {
00371                         TRACE1("cvt_set_MCST_CBLT: no set_MCST_CBLT method setted for board 0x%8p\n", board_array[ board_array_len]);
00372                         return FALSE;
00373                 }
00374                 if( !(board_array[ board_array_len]->set_MCST_CBLT)( board_array[ board_array_len], address, pos))
00375                 {
00376                         TRACE1("cvt_set_MCST_CBLT: set_MCST_CBLT method failure for board 0x%8p\n", board_array[ board_array_len]);
00377                         return FALSE;
00378                 }
00379                 pos= ( board_array_len- 1)? MCST_CBLT_board_pos_mid: MCST_CBLT_board_pos_first;
00380         }
00381         return TRUE;
00382 }
00384 //
00385 //     M I S C E L L A N E O U S   A P I s
00386 //
00388 
00390 //
00392 const char* cvt_SW_rev( void)
00393 {
00394         return "CAENVMETool Rev. 1.2";
00395 }

Generated on Mon Mar 19 17:13:05 2007 for CAEVMEToolLib by  doxygen 1.4.6-NO