00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "korebot.h"
00012
00026
00031 const char *kb_errmsg[] = {
00032 "no enough memory" ,
00033 "too many argument" ,
00034 "value %u %s out of range [ %u ; %u ]" ,
00035 "invalid value" ,
00036 "unknown command '%s'" ,
00037 "invalid identifier '%s'" ,
00038 "symbol '%s' already defined" ,
00039 "unknown device class '%s'" ,
00040 "device '%s' of class '%s' already defined" ,
00041 "invalid number '%s'" ,
00042 "unable to open file '%s'" ,
00043 "no bus found for device '%s'" ,
00044 "invalid order flags setting" ,
00045 "unable to gain exclusive access" ,
00046 "device in use" ,
00047 "unable to unlink device from bus devices" ,
00048 "unable to open '%s' bus" ,
00049 "unable to scan '%s' bus" ,
00050 "no device found with (%u,%u)" ,
00051 "unable to open directory '%s'" ,
00052 "no device found with (%s)" ,
00053 "symbol '%s' not defined" ,
00054 "no section defined ! %s '%s' must be defined in a section" ,
00055 "command '%s' requires a minimum of %d arguments" ,
00056 "command '%s' accepts a maximum of %d arguments" ,
00057 "unknow bus name '%s'",
00058 "no module bus address defined",
00059 "no module bus specified",
00060 "invalid device name '%s'",
00061 "module '%s' not initialized",
00062 "Unable to enable DUPLEX",
00063 "Unable to set fragment",
00064 "Bad FragExponent (%d!=%d)",
00065 "Unable to get IPTR",
00066 "Unable to get OPTR",
00067 "Cannot create pthread (%s)",
00068 "Bad sound file format (%s)",
00069 "Unable to map memory at 0x%lx",
00070 "Cannot open serial connexion to the LRF card as %s",
00071 "Too much data was about to be received, please update constant in sources : Nbr %d",
00072 "Timeout waiting for STX byte",
00073 "Timeout waiting for ETX byte",
00074 "Wrong STX has been received : 0x%2.2X",
00075 "Wrong ETX has been received : 0x%2.2X",
00076 "Timeout waiting for Data",
00077 "The CRC computed doesn't match expected!",
00078 "Problem sending data to the LRF",
00079 "Problem receiving certification code from LRF",
00080 "Error while sending command to LRF",
00081 "Error while receiving distances from LRF",
00082 "Error while receiving datas from LRF",
00083 "Error while receiving command from Khepera3 - Unexpected frame size format",
00084 "Error while receiving command from Khepera3 - Frame size Real(%d)!=Expected(%d)",
00085 "Error while sending command to Khepera3",
00086 "Unable to initialize the korebot library",
00087 NULL
00088 };
00089
00090
00095 const char *kb_warnmsg[] = {
00096 "no configuration file available in %s" ,
00097 "unable to open directory '%s'" ,
00098 "Handling client %s",
00099 "i/o error in reading file '%s' !",
00100 "error in playing sample errno=%d",
00101 NULL
00102 };
00103
00104 static kb_error_handler_t kb_user_error_handler = NULL;
00105 static kb_warning_handler_t kb_user_warning_handler = NULL;
00106 unsigned int kb_debug_level = 0;
00107 unsigned int kb_debug_mask = 0;
00108
00109
00115 void kb_set_debug_mask( unsigned int mask)
00116 {
00117 kb_debug_mask = mask;
00118 }
00119
00120
00126 void kb_set_debug_level( unsigned int level)
00127 {
00128 kb_debug_level = level;
00129 }
00130
00131
00137 void kb_set_error_handler( kb_error_handler_t handler )
00138 {
00139 kb_user_error_handler = handler;
00140 }
00141
00142
00149 void kb_vmsg( const char * msg , va_list argptr )
00150 {
00151 vfprintf( stdout , msg , argptr );
00152 }
00153
00154
00161 void kb_msg( const char * msg , ... )
00162 {
00163 va_list argptr;
00164
00165 va_start( argptr , msg );
00166 kb_vmsg( msg , argptr );
00167 va_end( argptr );
00168 }
00169
00170
00184 int kb_vdebug( const char * file ,
00185 unsigned int line ,
00186 const char * func ,
00187 unsigned int mask ,
00188 const char * msg ,
00189 va_list argptr )
00190 {
00191 if ( (mask & kb_debug_mask ) != 0 ) {
00192
00193 fprintf( stdout , "Debug> %s:%u:%s " , file , line , func );
00194 vfprintf( stdout , msg , argptr );
00195 fputc( '\n' , stdout );
00196 }
00197 }
00198
00199
00213 int kb_debug( const char * file ,
00214 unsigned int line ,
00215 const char * func ,
00216 unsigned int mask ,
00217 const char * msg ,
00218 ... )
00219 {
00220 va_list argptr;
00221
00222 va_start( argptr , msg );
00223 kb_vdebug( file , line , func , mask , msg , argptr );
00224 va_end( argptr );
00225 }
00226
00227
00241 int kb_verror( const char * file ,
00242 unsigned int line ,
00243 const char * func ,
00244 unsigned int error ,
00245 va_list argptr )
00246 {
00247 static int in_error = 0;
00248
00249
00250 if ( kb_user_error_handler != NULL && in_error == 0 ) {
00251
00252 in_error = 1;
00253 (*kb_user_error_handler)( file , line , func , error , argptr );
00254 in_error = 0;
00255
00256 }
00257 else {
00258 if ( kb_debug_level != 0 ) {
00259 fprintf( stderr , "Error: %s:%u:%s " , file , line , func );
00260 }
00261
00262 vfprintf( stderr , kb_errmsg[error] , argptr );
00263 fputc( '\n' , stderr );
00264 }
00265
00266 return -error;
00267 }
00268
00269
00280 int kb_error( const char * file ,
00281 unsigned int line ,
00282 const char * func ,
00283 unsigned int error , ... )
00284 {
00285 int rc;
00286 va_list argptr;
00287
00288 va_start( argptr , error );
00289 rc = kb_verror( file , line , func , error , argptr );
00290 va_end( argptr );
00291 return rc;
00292 }
00293
00294
00304 int kb_vwarning( unsigned int error , va_list argptr )
00305 {
00306 static int in_error = 0;
00307
00308 if ( kb_user_warning_handler != NULL && !in_error ) {
00309
00310 in_error = 1;
00311 (*kb_user_warning_handler)( error , argptr );
00312 in_error = 0;
00313
00314 }
00315 else {
00316 if ( kb_debug_level > 1 ) {
00317 fprintf( stderr , "Warning: " );
00318 }
00319
00320 vfprintf( stderr , kb_warnmsg[error] , argptr );
00321 fputc( '\n' , stderr );
00322 }
00323
00324 return error;
00325 }
00326
00327
00335 int kb_warning(unsigned int error , ... )
00336 {
00337 int rc;
00338 va_list argptr;
00339
00340 va_start( argptr , error );
00341 rc = kb_vwarning( error , argptr );
00342 va_end( argptr );
00343 return rc;
00344 }
00345
00346
00357 void kb_fatal( const char * file ,
00358 unsigned int line ,
00359 const char * func ,
00360 unsigned int error , ... )
00361 {
00362 va_list argptr;
00363
00364 va_start( argptr , error );
00365 kb_verror( file , line , func , error , argptr );
00366 va_end( argptr );
00367
00368 exit( KB_EXIT_ON_ERROR );
00369 }
00370