00001
00002
00010
00011
00013
00015 #include <memory.h>
00016 #include <string.h>
00017 #include "cvt_V812.h"
00018
00020
00022
00023
00025
00027
00029
00034
00035 static const cvt_reg_table CVT_V812_REG_TABLE[]=
00036 {
00037 { CVT_V812_THRESHOLD_0_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00038 { CVT_V812_THRESHOLD_1_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00039 { CVT_V812_THRESHOLD_2_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00040 { CVT_V812_THRESHOLD_3_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00041 { CVT_V812_THRESHOLD_4_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00042 { CVT_V812_THRESHOLD_5_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00043 { CVT_V812_THRESHOLD_6_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00044 { CVT_V812_THRESHOLD_7_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00045 { CVT_V812_THRESHOLD_8_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00046 { CVT_V812_THRESHOLD_9_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00047 { CVT_V812_THRESHOLD_10_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00048 { CVT_V812_THRESHOLD_11_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00049 { CVT_V812_THRESHOLD_12_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00050 { CVT_V812_THRESHOLD_13_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00051 { CVT_V812_THRESHOLD_14_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00052 { CVT_V812_THRESHOLD_15_ADD, CVT_V812_THRESHOLD_AM, CVT_V812_THRESHOLD_DATA_SIZE},
00053 { CVT_V812_OUT_WIDTH_0_7_ADD, CVT_V812_OUT_WIDTH_0_7_AM, CVT_V812_OUT_WIDTH_0_7_DATA_SIZE},
00054 { CVT_V812_OUT_WIDTH_8_15_ADD, CVT_V812_OUT_WIDTH_8_15_AM, CVT_V812_OUT_WIDTH_8_15_DATA_SIZE},
00055 { CVT_V812_DEAD_TIME_0_7_ADD, CVT_V812_DEAD_TIME_0_7_AM, CVT_V812_DEAD_TIME_0_7_DATA_SIZE},
00056 { CVT_V812_DEAD_TIME_8_15_ADD, CVT_V812_DEAD_TIME_8_15_AM, CVT_V812_DEAD_TIME_8_15_DATA_SIZE},
00057 { CVT_V812_MAJORITY_ADD, CVT_V812_MAJORITY_AM, CVT_V812_MAJORITY_DATA_SIZE},
00058 { CVT_V812_PATTERN_INHIBIT_ADD, CVT_V812_PATTERN_INHIBIT_AM,CVT_V812_PATTERN_INHIBIT_DATA_SIZE},
00059 { CVT_V812_TEST_PULSE_ADD, CVT_V812_TEST_PULSE_AM, CVT_V812_TEST_PULSE_DATA_SIZE},
00060 { CVT_V812_FIXED_CODE_ADD, CVT_V812_FIXED_CODE_AM, CVT_V812_FIXED_CODE_DATA_SIZE},
00061 { CVT_V812_MANUFACTURER_ADD, CVT_V812_MANUFACTURER_AM, CVT_V812_MANUFACTURER_DATA_SIZE},
00062 { CVT_V812_VERSION_ADD, CVT_V812_VERSION_AM, CVT_V812_VERSION_DATA_SIZE},
00063 };
00065
00067
00069
00071
00073
00074
00075
00077
00079
00081 BOOL cvt_V812_open( cvt_V812_data* p_data, UINT16 base_address, long vme_handle)
00082 {
00083 memset( p_data, 0, sizeof( cvt_V812_data));
00084
00085 if( !cvt_board_open( &p_data->m_common_data, base_address, vme_handle, CVT_V812_REG_TABLE))
00086 return FALSE;
00087
00088
00089 return TRUE;
00090 }
00091
00093
00095 BOOL cvt_V812_close( cvt_V812_data* p_data)
00096 {
00097 if( !cvt_board_close( &p_data->m_common_data))
00098 return FALSE;
00099 return TRUE;
00100 }
00101
00103
00104
00105
00107
00109
00110
00111
00113
00114
00116
00118 BOOL cvt_V812_set_threshold( cvt_V812_data* p_data, cvt_V812_threshold_id threshold_id, UINT16 value)
00119 {
00120 UINT16 reg_value= value;
00121
00122 switch( threshold_id)
00123 {
00124 case CVT_V812_THRESHOLD_ALL:
00125 {
00126
00127 int i;
00128 for( i= CVT_V812_THRESHOLD_0; i< CVT_V812_MAX_THRESHOLD; i++)
00129 {
00130 if( !cvt_write_reg( &p_data->m_common_data, CVT_V812_THRESHOLD_0_INDEX+ (i- CVT_V812_THRESHOLD_0), ®_value))
00131 {
00132 TRACE1( "V812 THRESHOLD %i write failed !\n", i- CVT_V812_THRESHOLD_0);
00133 return FALSE;
00134 }
00135 }
00136 }
00137 break;
00138 case CVT_V812_THRESHOLD_0:
00139 case CVT_V812_THRESHOLD_1:
00140 case CVT_V812_THRESHOLD_2:
00141 case CVT_V812_THRESHOLD_3:
00142 case CVT_V812_THRESHOLD_4:
00143 case CVT_V812_THRESHOLD_5:
00144 case CVT_V812_THRESHOLD_6:
00145 case CVT_V812_THRESHOLD_7:
00146 case CVT_V812_THRESHOLD_8:
00147 case CVT_V812_THRESHOLD_9:
00148 case CVT_V812_THRESHOLD_10:
00149 case CVT_V812_THRESHOLD_11:
00150 case CVT_V812_THRESHOLD_12:
00151 case CVT_V812_THRESHOLD_13:
00152 case CVT_V812_THRESHOLD_14:
00153 case CVT_V812_THRESHOLD_15:
00154
00155 if( !cvt_write_reg( &p_data->m_common_data, CVT_V812_THRESHOLD_0_INDEX+ ( threshold_id- CVT_V812_THRESHOLD_0), ®_value))
00156 {
00157 TRACE1( "V812 THRESHOLD %i write failed !\n", threshold_id- CVT_V812_THRESHOLD_0);
00158 return FALSE;
00159 }
00160 default:
00161 TRACE1( "V812 Unhandled threshold id %i !\n", threshold_id);
00162 return FALSE;
00163 }
00164 return TRUE;
00165 }
00166
00168
00170 BOOL cvt_V812_set_output_width( cvt_V812_data* p_data, UINT8 value)
00171 {
00172 UINT16 reg_value= value;
00173
00174 if( !cvt_write_reg( &p_data->m_common_data, CVT_V812_OUT_WIDTH_0_7_INDEX, ®_value))
00175 {
00176 TRACE( "V812 OUT_WIDTH_0_7 write failed !\n");
00177 return FALSE;
00178 }
00179 if( !cvt_write_reg( &p_data->m_common_data, CVT_V812_OUT_WIDTH_8_15_INDEX, ®_value))
00180 {
00181 TRACE( "V812 OUT_WIDTH_8_15 write failed !\n");
00182 return FALSE;
00183 }
00184 return TRUE;
00185 }
00186
00188
00190 BOOL cvt_V812_set_dead_time( cvt_V812_data* p_data, UINT8 value)
00191 {
00192 UINT16 reg_value= value;
00193
00194 if( !cvt_write_reg( &p_data->m_common_data, CVT_V812_DEAD_TIME_0_7_INDEX, ®_value))
00195 {
00196 TRACE( "V812 CVT_V812_DEAD_TIME_0_7 write failed !\n");
00197 return FALSE;
00198 }
00199 if( !cvt_write_reg( &p_data->m_common_data, CVT_V812_DEAD_TIME_8_15_INDEX, ®_value))
00200 {
00201 TRACE( "V812 CVT_V812_DEAD_TIME_8_15 write failed !\n");
00202 return FALSE;
00203 }
00204 return TRUE;
00205 }
00206
00208
00210 BOOL cvt_V812_set_majority_threshold( cvt_V812_data* p_data, UINT8 value)
00211 {
00212 UINT16 reg_value= value;
00213
00214 if( !cvt_write_reg( &p_data->m_common_data, CVT_V812_MAJORITY_INDEX, ®_value))
00215 {
00216 TRACE( "V812 CVT_V812_MAJORITY write failed !\n");
00217 return FALSE;
00218 }
00219 return TRUE;
00220 }
00221
00223
00225 BOOL cvt_V812_set_pattern_inhibit( cvt_V812_data* p_data, UINT16 value)
00226 {
00227 UINT16 reg_value= value;
00228
00229 if( !cvt_write_reg( &p_data->m_common_data, CVT_V812_PATTERN_INHIBIT_INDEX, ®_value))
00230 {
00231 TRACE( "V812 CVT_V812_PATTERN_INHIBIT write failed !\n");
00232 return FALSE;
00233 }
00234 return TRUE;
00235 }
00236
00238
00240 BOOL cvt_V812_set_test_pulse( cvt_V812_data* p_data)
00241 {
00242 UINT16 reg_value= 0;
00243
00244 if( !cvt_write_reg( &p_data->m_common_data, CVT_V812_TEST_PULSE_INDEX, ®_value))
00245 {
00246 TRACE( "V812 CVT_V812_TEST_PULSE write failed !\n");
00247 return FALSE;
00248 }
00249 return TRUE;
00250 }
00251
00253
00255 BOOL cvt_V812_get_fixed_code( cvt_V812_data* p_data, UINT16 *p_value)
00256 {
00257 UINT16 reg_value= 0;
00258
00259 if( !cvt_read_reg( &p_data->m_common_data, CVT_V812_FIXED_CODE_INDEX, ®_value))
00260 {
00261 TRACE( "V812 CVT_V812_FIXED_CODE read failed !\n");
00262 return FALSE;
00263 }
00264 *p_value= reg_value;
00265 return TRUE;
00266 }
00267
00269
00271 BOOL cvt_V812_get_manufacturer_number( cvt_V812_data* p_data, UINT8 *p_value)
00272 {
00273 UINT16 reg_value= 0;
00274
00275 if( !cvt_read_reg( &p_data->m_common_data, CVT_V812_MANUFACTURER_INDEX, ®_value))
00276 {
00277 TRACE( "V812 CVT_V812_MANUFACTURER_NUMBER read failed !\n");
00278 return FALSE;
00279 }
00280 *p_value= (UINT8)( ((UINT16)(reg_value>> 10))& 0x3f);
00281 return TRUE;
00282 }
00283
00285
00287 BOOL cvt_V812_get_module_type( cvt_V812_data* p_data, UINT16 *p_value)
00288 {
00289 UINT16 reg_value= 0;
00290
00291 if( !cvt_read_reg( &p_data->m_common_data, CVT_V812_MANUFACTURER_INDEX, ®_value))
00292 {
00293 TRACE( "V812 CVT_V812_MODULE_TYPE read failed !\n");
00294 return FALSE;
00295 }
00296 *p_value= (UINT16)( reg_value& 0x03ff);
00297 return TRUE;
00298 }
00299
00301
00303 BOOL cvt_V812_get_version( cvt_V812_data* p_data, UINT8 *p_value)
00304 {
00305 UINT16 reg_value= 0;
00306
00307 if( !cvt_read_reg( &p_data->m_common_data, CVT_V812_VERSION_INDEX, ®_value))
00308 {
00309 TRACE( "V812 CVT_V812_VERSION read failed !\n");
00310 return FALSE;
00311 }
00312 *p_value= (UINT8)( ((UINT16)(reg_value>> 12))& 0x0f);
00313 return TRUE;
00314 }
00315
00317
00319 BOOL cvt_V812_get_serial_number( cvt_V812_data* p_data, UINT16 *p_value)
00320 {
00321 UINT16 reg_value= 0;
00322
00323 if( !cvt_read_reg( &p_data->m_common_data, CVT_V812_VERSION_INDEX, ®_value))
00324 {
00325 TRACE( "V812 CVT_V812_SERIAL_NUMBER read failed !\n");
00326 return FALSE;
00327 }
00328 *p_value= (UINT16)( reg_value& 0x0fff);
00329 return TRUE;
00330 }
00331
00332
00334
00335
00336
00338