00001
00002
00010
00011
00013
00015 #include <string.h>
00016 #include <memory.h>
00017 #include <stdlib.h>
00018 #include "N1568.h"
00019
00021
00023
00025
00027
00029
00034
00035 static const cmd_table N1568_CMD_TABLE[ ]=
00036 {
00037 { "M", 0, 16},
00038 { "N", 0, 15},
00039 { "C", 0, 255},
00040 { "W", 0, 255},
00041 { "P", 0, 255},
00042 { "g", 0, 127},
00043 { "G", 0, 3},
00044 { "S", 0, 3},
00045 { "T", 0, 3},
00046 { "I", 0, 1},
00047 { "E", 0, 1},
00048 { "X", 1, 1},
00049 };
00050
00052
00054
00056
00064
00065 static BOOL parse_channel_status( N1568_data* p_data, N1568_channel_status* channel_status)
00066 {
00067 const char* ASW_FORMAT_STRING= "CH%2d CFth=%3d CFWdt=%3d P/Z=%3d FG=%3d SH=%1d CG=%1d CGT=%1d %1sIn STR%3s";
00068 int CH, CFth, CFWdt, P_Z, FG, SH, CG, CGT;
00069 char In[ 20], STR[ 20];
00070 char *buff= ( char *)N1568_get_last_answer( p_data);
00071
00072 if( !strncmp( buff, p_data->m_common_data.m_p_last_sent_cmd, strlen( p_data->m_common_data.m_p_last_sent_cmd)))
00073 {
00074 buff+= strlen( p_data->m_common_data.m_p_last_sent_cmd);
00075 }
00076 if( *buff== '\n')
00077 ++buff;
00078 if( !strnicmp( buff, "Error", sizeof( "Error")))
00079 {
00080 return FALSE;
00081 }
00082 if( sscanf( buff, ASW_FORMAT_STRING, &CH, &CFth, &CFWdt, &P_Z, &FG, &SH, &CG, &CGT, In, STR)!= 10)
00083 {
00084 return FALSE;
00085 }
00086
00087 channel_status->m_channel_id= CH;
00088 channel_status->m_cfd_out_width= CFWdt;
00089 channel_status->m_coarse_gain= CG;
00090 channel_status->m_discr_thr= CFth;
00091 channel_status->m_fine_gain= FG;
00092 channel_status->m_gain_timing= CGT;
00093 channel_status->m_is_polarity_negative= !strnicmp( In, "N", 1);
00094 channel_status->m_is_strecher_enabled= !strnicmp( STR, "en", 2);
00095 channel_status->m_pole_zero_adj= P_Z;
00096 channel_status->m_shape_setting= SH;
00097 return TRUE;
00098 }
00099
00101
00103
00105
00106
00107
00109
00111
00113 BOOL N1568_open( N1568_data* p_data, const char *com_str)
00114 {
00115 CPLConfig cpl_config;
00116 memset( p_data, 0, sizeof( N1568_data));
00117
00118 p_data->m_p_asw_buff= malloc( ASW_BUFF_SIZE);
00119 p_data->m_p_tmp_asw_buff= malloc( ASW_BUFF_SIZE);
00120 *p_data->m_p_asw_buff= '\0';
00121 *p_data->m_p_tmp_asw_buff= '\0';
00122
00123
00124
00125 memset( &cpl_config, 0, sizeof( CPLConfig));
00126 cpl_config.m_device= CPL_COM;
00127 strncpy( cpl_config.m_device_config.m_com_device.m_com_str, com_str, sizeof( cpl_config.m_device_config.m_com_device.m_com_str)- 1);
00128 cpl_config.m_device_config.m_com_device.m_com_str[ sizeof( cpl_config.m_device_config.m_com_device.m_com_str)- 1]= '\0';
00129 cpl_config.m_device_config.m_com_device.m_baudrate= SERBAUD_9600;
00130 cpl_config.m_device_config.m_com_device.m_dataBit= DATA_EIGHT;
00131 cpl_config.m_device_config.m_com_device.m_parity= SERPARITY_NONE;
00132 cpl_config.m_device_config.m_com_device.m_DTRFlow= DTR_DISABLE;
00133 cpl_config.m_device_config.m_com_device.m_RTSFlow= RTS_HANDSHAKE;
00134 cpl_config.m_device_config.m_com_device.m_stopBit= STOP_ONE;
00135
00136
00137 if( !board_open( &p_data->m_common_data, &cpl_config, N1568_CMD_TABLE)) {
00138 free( p_data->m_p_asw_buff);
00139 p_data->m_p_asw_buff= (char*)0;
00140 free( p_data->m_p_tmp_asw_buff);
00141 p_data->m_p_tmp_asw_buff= (char*)0;
00142 return FALSE;
00143 }
00144
00145
00146 p_data->m_asw_buff_len= 0;
00147 memset( p_data->m_p_asw_buff, 0, ASW_BUFF_SIZE);
00148
00149 return TRUE;
00150 }
00151
00153
00155 BOOL N1568_close( N1568_data* p_data)
00156 {
00157 BOOL ret_val= TRUE;
00158 if( !board_close( &p_data->m_common_data)) {
00159 ret_val= FALSE;
00160 }
00161 if( p_data->m_p_asw_buff){
00162
00163 free( p_data->m_p_asw_buff);
00164 p_data->m_p_asw_buff= (char*)0;
00165 }
00166 if( p_data->m_p_tmp_asw_buff){
00167
00168 free( p_data->m_p_tmp_asw_buff);
00169 p_data->m_p_tmp_asw_buff= (char*)0;
00170 }
00171 return ret_val;
00172 }
00173
00175
00176
00177
00179
00181
00183 const char* N1568_get_last_answer( N1568_data* p_data)
00184 {
00185 int buff_len= p_data->m_asw_buff_len;
00186 char *src_buff= p_data->m_p_asw_buff;
00187 char *dest_buff= p_data->m_p_tmp_asw_buff;
00188
00189 while( buff_len--)
00190 {
00191 if( *src_buff)
00192 {
00193 *dest_buff++= *src_buff;
00194 }
00195 ++src_buff;
00196 }
00197 *dest_buff++= '\0';
00198 return p_data->m_p_tmp_asw_buff;
00199 }
00201
00203 DLL_API BOOL N1568_send_cmd( N1568_data* p_data, N1568_COMMANDS cmd, UINT8 value, N1568_channel_status* channel_status)
00204 {
00205 UINT16 asw_buff_size= ASW_BUFF_SIZE- 1;
00206
00207
00208
00209 if( !send_cmd( &p_data->m_common_data, cmd, value))
00210 {
00211 return FALSE;
00212 }
00213
00214
00215 if( !receive_buffer( &p_data->m_common_data, (UINT8*)p_data->m_p_asw_buff, &asw_buff_size, 40))
00216 {
00217 return FALSE;
00218 }
00219 p_data->m_asw_buff_len= asw_buff_size;
00220
00221
00222 if( channel_status)
00223 {
00224 if( !parse_channel_status( p_data, channel_status))
00225 {
00226 return FALSE;
00227 }
00228 }
00229 return TRUE;
00230 }
00231
00233
00234
00235
00237
00239
00241 BOOL N1568_set_module( N1568_data* p_data, UINT8 value)
00242 {
00243 UINT16 asw_buff_size= ASW_BUFF_SIZE- 1;
00244
00245
00246
00247 if( !send_cmd( &p_data->m_common_data, N1568_CMD_MOD, value))
00248 {
00249 return FALSE;
00250 }
00251
00252
00253 if( !receive_buffer( &p_data->m_common_data, (UINT8*)p_data->m_p_asw_buff, &asw_buff_size, 3000))
00254 {
00255 return FALSE;
00256 }
00257 p_data->m_asw_buff_len= asw_buff_size;
00258 return TRUE;
00259 }
00260
00262
00264 BOOL N1568_set_channel( N1568_data* p_data, UINT8 value, N1568_channel_status* channel_status)
00265 {
00266 return N1568_send_cmd( p_data, N1568_CMD_CH, value, channel_status);
00267 }
00268
00270
00272 BOOL N1568_set_input_polarity( N1568_data* p_data, BOOL negative_polarity, N1568_channel_status* channel_status)
00273 {
00274 return N1568_send_cmd( p_data, N1568_CMD_IN, negative_polarity? 1: 0, channel_status);
00275 }
00276
00278
00280 BOOL N1568_set_shape( N1568_data* p_data, UINT8 value, N1568_channel_status* channel_status)
00281 {
00282 return N1568_send_cmd( p_data, N1568_CMD_SH, value, channel_status);
00283 }
00284
00286
00288 BOOL N1568_set_pole_zero_adj( N1568_data* p_data, UINT8 value, N1568_channel_status* channel_status)
00289 {
00290 return N1568_send_cmd( p_data, N1568_CMD_PZ, value, channel_status);
00291 }
00292
00294
00296 BOOL N1568_set_fine_gain( N1568_data* p_data, UINT8 value, N1568_channel_status* channel_status)
00297 {
00298 return N1568_send_cmd( p_data, N1568_CMD_FG, value, channel_status);
00299 }
00300
00302
00304 BOOL N1568_set_coarse_gain( N1568_data* p_data, UINT8 value, N1568_channel_status* channel_status)
00305 {
00306 return N1568_send_cmd( p_data, N1568_CMD_CG, value, channel_status);
00307 }
00308
00310
00312 BOOL N1568_set_discr_thr( N1568_data* p_data, UINT8 value, N1568_channel_status* channel_status)
00313 {
00314 return N1568_send_cmd( p_data, N1568_CMD_CF_TH, value, channel_status);
00315 }
00316
00318
00320 BOOL N1568_set_gain_of_timing( N1568_data* p_data, UINT8 value, N1568_channel_status* channel_status)
00321 {
00322 return N1568_send_cmd( p_data, N1568_CMD_CGT, value, channel_status);
00323 }
00324
00326
00328 BOOL N1568_set_stretcher( N1568_data* p_data, BOOL enable, N1568_channel_status* channel_status)
00329 {
00330 return N1568_send_cmd( p_data, N1568_CMD_STR, enable? 1: 0, channel_status);
00331 }
00332
00334
00336 BOOL N1568_set_cfd_out_width( N1568_data* p_data, UINT8 value, N1568_channel_status* channel_status)
00337 {
00338 return N1568_send_cmd( p_data, N1568_CMD_CFW, value, channel_status);
00339 }
00340
00342
00344 BOOL N1568_export( N1568_data* p_data)
00345 {
00346 UINT16 asw_buff_size= ASW_BUFF_SIZE- 1;
00347
00348
00349
00350 if( !send_cmd( &p_data->m_common_data, N1568_CMD_EXP, 1))
00351 {
00352 return FALSE;
00353 }
00354
00355
00356 if( !receive_buffer( &p_data->m_common_data, (UINT8*)p_data->m_p_asw_buff, &asw_buff_size, 3000))
00357 {
00358 return FALSE;
00359 }
00360 p_data->m_asw_buff_len= asw_buff_size;
00361 return TRUE;
00362 }
00363
00365
00366
00367
00369
00371
00372
00373
00376
00378 const char* N1568_SW_rev( void)
00379 {
00380 return "N1568SDK Rev. 1.0";
00381 }