FreeCalypso > hg > fc-magnetite
comparison src/aci2/aci/ati_err.c @ 3:93999a60b835
src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Mon, 26 Sep 2016 00:29:36 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 2:c41a534f33c6 | 3:93999a60b835 |
|---|---|
| 1 /* | |
| 2 +----------------------------------------------------------------------------- | |
| 3 | Project : GSM-F&D (8411) | |
| 4 | Modul : ATI | |
| 5 +----------------------------------------------------------------------------- | |
| 6 | Copyright 2002 Texas Instruments Berlin, AG | |
| 7 | All rights reserved. | |
| 8 | | |
| 9 | This file is confidential and a trade secret of Texas | |
| 10 | Instruments Berlin, AG | |
| 11 | The receipt of or possession of this file does not convey | |
| 12 | any rights to reproduce or disclose its contents or to | |
| 13 | manufacture, use, or sell anything it may describe, in | |
| 14 | whole, or in part, without the specific written consent of | |
| 15 | Texas Instruments Berlin, AG. | |
| 16 +----------------------------------------------------------------------------- | |
| 17 | Purpose : AT Command Interpreter: Error handling. | |
| 18 +----------------------------------------------------------------------------- | |
| 19 */ | |
| 20 | |
| 21 /*********************************/ | |
| 22 /* General Error Handling in ACI */ | |
| 23 /*********************************/ | |
| 24 | |
| 25 #ifndef ATI_ERR_C | |
| 26 #define ATI_ERR_C | |
| 27 | |
| 28 #undef DUMMY_ATI_STRINGS | |
| 29 | |
| 30 #include "aci_all.h" | |
| 31 | |
| 32 #include "aci_cmh.h" | |
| 33 #include "ati_cmd.h" | |
| 34 #include "aci_io.h" | |
| 35 #include "aci_cmd.h" | |
| 36 #include "l4_tim.h" | |
| 37 | |
| 38 #include "aci.h" | |
| 39 #include "aci_mem.h" | |
| 40 | |
| 41 #include "aci_lst.h" | |
| 42 #include "ati_int.h" | |
| 43 | |
| 44 #ifdef FF_ATI_BAT | |
| 45 | |
| 46 #include "typedefs.h" | |
| 47 #include "gdd.h" | |
| 48 #include "bat.h" | |
| 49 | |
| 50 #include "ati_bat.h" | |
| 51 | |
| 52 #endif /*FF_ATI_BAT*/ | |
| 53 | |
| 54 LOCAL CHAR *AT_Fail_Error(void); | |
| 55 | |
| 56 EXTERN T_ACI_ERR_DESC aciErrDesc; | |
| 57 | |
| 58 LOCAL CHAR ErrBuff[MAX_CMD_LEN]; | |
| 59 | |
| 60 typedef struct | |
| 61 { | |
| 62 CHAR *msg; | |
| 63 CHAR *nmb; | |
| 64 AtErrCode code; | |
| 65 } AtErrTable; | |
| 66 | |
| 67 LOCAL const AtErrTable tabAtError[]= | |
| 68 { | |
| 69 "OK", "0", atOk, | |
| 70 "CONNECT", "1", atConnect, | |
| 71 "RING", "2", atRing, | |
| 72 "NO CARRIER", "3", atNoCarrier, | |
| 73 "NO DIALTONE", "6", atNoDialtone, | |
| 74 "BUSY", "7", atBusy, | |
| 75 "NO ANSWER", "8", atNoAnswer, | |
| 76 "CONNECT 9600","15", atConnect1, | |
| 77 /* this has to be the last entry */ | |
| 78 "ERROR", "4", atError | |
| 79 }; | |
| 80 | |
| 81 GLOBAL CHAR *disable_or_numeric(const CHAR* key,LONG e) // e is actually enum... | |
| 82 { | |
| 83 UBYTE srcId = srcId_cb; | |
| 84 | |
| 85 if(ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Disable) | |
| 86 { | |
| 87 cmdAtError(atError); | |
| 88 } | |
| 89 else if(ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Numeric) | |
| 90 { | |
| 91 sprintf(cmdErrStr,"%s ERROR: %d",key,e); | |
| 92 } | |
| 93 return cmdErrStr; | |
| 94 } | |
| 95 | |
| 96 | |
| 97 /* | |
| 98 +--------------------------------------------------------------------+ | |
| 99 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
| 100 | STATE : code ROUTINE : cmdExtError | | |
| 101 +--------------------------------------------------------------------+ | |
| 102 | |
| 103 PURPOSE : handle extended errors | |
| 104 | |
| 105 */ | |
| 106 | |
| 107 LOCAL const struct T_ATI_EXT_ERR /* error code - error message mapping */ | |
| 108 { | |
| 109 const CHAR* msg; /* error message */ | |
| 110 const T_ACI_EXT_ERR code; /* error code */ | |
| 111 const ULONG displ_code; /* error code to be display */ | |
| 112 } | |
| 113 | |
| 114 err[] = | |
| 115 { | |
| 116 "parameter not allowed", EXT_ERR_Parameter, EXT_ERR_Parameter, | |
| 117 "data corrupted", EXT_ERR_DataCorrupt, EXT_ERR_DataCorrupt, | |
| 118 "internal error", EXT_ERR_Internal, EXT_ERR_Internal, | |
| 119 "call table full", EXT_ERR_CallTabFull, EXT_ERR_CallTabFull, | |
| 120 "service table full", EXT_ERR_SrvTabFull, EXT_ERR_SrvTabFull, | |
| 121 "call not found", EXT_ERR_CallNotFound, EXT_ERR_CallNotFound, | |
| 122 "no data-call supported", EXT_ERR_NoDataCallSup, EXT_ERR_NoDataCallSup, | |
| 123 "one call on hold", EXT_ERR_OneCallOnHold, EXT_ERR_OneCallOnHold, | |
| 124 "hold call not supported for this type", EXT_ERR_CallTypeNoHold, EXT_ERR_CallTypeNoHold, | |
| 125 "number not allowed by FDN", EXT_ERR_FdnCheck, EXT_ERR_FdnCheck, | |
| 126 "number not allowed by BDN", EXT_ERR_BdnCheck, EXT_ERR_BdnCheck, | |
| 127 "parallel USSD not supported", EXT_ERR_ParallelUSSD, EXT_ERR_ParallelUSSD, | |
| 128 "fax minimum speed condition", EXT_ERR_FaxMinSpeedCond, EXT_ERR_FaxMinSpeedCond, | |
| 129 "conflict with command details", EXT_ERR_CmdDetailsSAT, EXT_ERR_CmdDetailsSAT, | |
| 130 "IMEI illegal", EXT_ERR_IMEICheck, EXT_ERR_IMEICheck, | |
| 131 "not allowed by ALS-Lock", EXT_ERR_AlsLock, EXT_ERR_AlsLock, | |
| 132 #if defined FF_EOTD | |
| 133 "Command not supported", EXT_ERR_LCS_CmdNotSup, 0, | |
| 134 "Command not recognised/out of range", EXT_ERR_LCS_CmdNotRec, 1, | |
| 135 "LCS Client ID not recognised/out of range", EXT_ERR_LCS_CLPSClientNotRec, 2, | |
| 136 "Interval attribute out of range", EXT_ERR_LCS_IntervalNotSup, 3, | |
| 137 "Repeat attribute not supported/ out of range", EXT_ERR_LCS_RepeatNotSup, 4, | |
| 138 "Send request type not recognised / out of range", EXT_ERR_LCS_SendReqTyNotRec, 2, | |
| 139 "User confirmation request type not recognised / out of range", EXT_ERR_LCS_UsConfReqTyNotRec, 3, | |
| 140 "LCS Client ID not recognised/out of range", EXT_ERR_LCS_CLSRClientIdNotRec, 4, | |
| 141 "Circuit switched call number out of range", EXT_ERR_LCS_CSCallNumNotSup, 5, | |
| 142 #endif /* FF_EOTD */ | |
| 143 "error unknown", EXT_ERR_Unknown, EXT_ERR_Unknown, | |
| 144 /* this has to be the last entry */ | |
| 145 "other error", EXT_ERR_NotPresent, EXT_ERR_NotPresent | |
| 146 }; | |
| 147 | |
| 148 GLOBAL CHAR *cmdExtError (T_ACI_EXT_ERR e) | |
| 149 { | |
| 150 SHORT idx=0; | |
| 151 T_ACI_ERR_DESC aed; | |
| 152 UBYTE srcId = srcId_cb; | |
| 153 | |
| 154 | |
| 155 if ( e EQ EXT_ERR_NotPresent ) | |
| 156 { | |
| 157 if (((aed = qAT_ErrDesc()) >> 16) EQ ACI_ERR_CLASS_Ext) | |
| 158 { | |
| 159 e = (T_ACI_EXT_ERR)(aed & 0xFFFF); | |
| 160 } | |
| 161 else | |
| 162 { | |
| 163 e = EXT_ERR_Unknown; | |
| 164 } | |
| 165 } | |
| 166 | |
| 167 *ErrBuff = '\0'; | |
| 168 cmdErrStr = ErrBuff; | |
| 169 | |
| 170 if (ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Verbose OR | |
| 171 ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Numeric) | |
| 172 { | |
| 173 /* search the array for the index of the notified failure */ | |
| 174 while ( err[idx].code NEQ EXT_ERR_NotPresent AND | |
| 175 err[idx].code NEQ e ) | |
| 176 { | |
| 177 idx++; | |
| 178 } | |
| 179 } | |
| 180 else /* Catch some Extended Error Codes and map them to more suitable codes */ | |
| 181 { | |
| 182 switch (e) | |
| 183 { | |
| 184 case EXT_ERR_CallTabFull: | |
| 185 case EXT_ERR_FdnCheck: | |
| 186 case EXT_ERR_BdnCheck: | |
| 187 return(cmdAtError(atNoCarrier)); | |
| 188 } | |
| 189 } | |
| 190 if (ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Verbose) | |
| 191 { | |
| 192 strcat(cmdErrStr,"+EXT ERROR: "); | |
| 193 strcat( cmdErrStr, err[idx].msg ); | |
| 194 } | |
| 195 return(disable_or_numeric("+EXT", err[idx].displ_code)); | |
| 196 } | |
| 197 | |
| 198 /* | |
| 199 +--------------------------------------------------------------------+ | |
| 200 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
| 201 | STATE : code ROUTINE : cmdCmeError | | |
| 202 +--------------------------------------------------------------------+ | |
| 203 | |
| 204 PURPOSE : handle Mobile Equipment Errors | |
| 205 | |
| 206 */ | |
| 207 #ifdef GPRS | |
| 208 #define GPRS_ERR(a,b) a,b, | |
| 209 #else | |
| 210 #define GPRS_ERR(a,b) | |
| 211 #endif /* GPRS */ | |
| 212 | |
| 213 LOCAL const struct T_ATI_CME_ERR /* error code - error message mapping */ | |
| 214 { | |
| 215 const CHAR* msg; /* error message */ | |
| 216 const T_ACI_CME_ERR code; /* error code */ | |
| 217 } | |
| 218 error[] = | |
| 219 { | |
| 220 "phone failure", CME_ERR_PhoneFail, | |
| 221 "no connection to phone", CME_ERR_NoConnect, | |
| 222 "phone-adaptor link reserved", CME_ERR_LinkRes, | |
| 223 "operation not allowed", CME_ERR_OpNotAllow, | |
| 224 "operation not supported", CME_ERR_OpNotSupp, | |
| 225 "PH-SIM PIN required", CME_ERR_PhSimPinReq, | |
| 226 "SIM not inserted", CME_ERR_SimNotIns, | |
| 227 "SIM PIN required", CME_ERR_SimPinReq, | |
| 228 "SIM PUK required", CME_ERR_SimPukReq, | |
| 229 "SIM failure", CME_ERR_SimFail, | |
| 230 "SIM busy", CME_ERR_SimBusy, | |
| 231 "SIM wrong", CME_ERR_SimWrong, | |
| 232 "incorrect password", CME_ERR_WrongPasswd, | |
| 233 "SIM PIN2 required", CME_ERR_SimPin2Req, | |
| 234 "SIM PUK2 required", CME_ERR_SimPuk2Req, | |
| 235 "memory full", CME_ERR_MemFull, | |
| 236 "invalid index", CME_ERR_InvIdx, | |
| 237 "not found", CME_ERR_NotFound, | |
| 238 "memory failure", CME_ERR_MemFail, | |
| 239 "text string too long", CME_ERR_TxtToLong, | |
| 240 "invalid characters in text string", CME_ERR_InvalidTxtChar, | |
| 241 "dial string too long", CME_ERR_DialToLong, | |
| 242 "invalid characters in dial string", CME_ERR_InvDialChar, | |
| 243 "no network service", CME_ERR_NoServ, | |
| 244 "network timeout", CME_ERR_Timeout, | |
| 245 "network not allowed - emergency calls only", CME_ERR_LimServ, | |
| 246 "Network lock - PIN required", CME_ERR_NetworkPersPinReq, /* PIN to change network personalisation required */ | |
| 247 "Network lock - PUK required", CME_ERR_NetworkPersPukReq, /* network personalisation PUK is required */ | |
| 248 "Subnetwork lock - PIN required", CME_ERR_NetworkSubsetPersPinReq, /* keycode to change nw subset personalisation required */ | |
| 249 "Subnetwork lock - PUK required", CME_ERR_NetworkSubsetPersPukReq, /* network subset personalisation PUK is required */ | |
| 250 "Provider lock - PIN required", CME_ERR_ProviderPersPinReq, /* keycode to change service provider personal. required */ | |
| 251 "Provider lock - PUK required", CME_ERR_ProviderPersPukReq, /* service provider personalisation PUK is required */ | |
| 252 "Corporate lock - PIN required", CME_ERR_CorporatePersPinReq, /* keycode to change corporate personalisation required */ | |
| 253 "Corporate lock - PUK required", CME_ERR_CorporatePersPukReq, /* corporate personalisation PUK is required */ | |
| 254 "unknown", CME_ERR_Unknown, /* ATTENTION! If you insert new entries before CME_ERR_Unknown, remember to increase NBR_CME_NORM_ERR */ | |
| 255 GPRS_ERR("illegal MS", CME_ERR_GPRSBadMs) | |
| 256 GPRS_ERR("illegal ME", CME_ERR_GPRSBadMe) | |
| 257 GPRS_ERR("GPRS service not allowed", CME_ERR_GPRSNoService) | |
| 258 GPRS_ERR("PLMN not allowed", CME_ERR_GPRSBadPlmn) | |
| 259 GPRS_ERR("Location not allowed", CME_ERR_GPRSBadLoc) | |
| 260 GPRS_ERR("Roaming not allowed in Location Area", CME_ERR_GPRSNoRoam) | |
| 261 GPRS_ERR("GPRS service option not supported", CME_ERR_GPRSSerOptNsup) | |
| 262 GPRS_ERR("requested service option not subscribed",CME_ERR_GPRSSerOptNsub) | |
| 263 GPRS_ERR("service option temporarily out of order",CME_ERR_GPRSSerOptOOO) | |
| 264 GPRS_ERR("unspecified GPRS error", CME_ERR_GPRSUnspec) | |
| 265 GPRS_ERR("PDP authorisation error", CME_ERR_GPRSPdpAuth) | |
| 266 GPRS_ERR("invalid module class", CME_ERR_GPRSBadModClass) | |
| 267 "failed to abort", CME_ERR_FailedToAbort, | |
| 268 "ACM reset needed", CME_ERR_AcmResetNeeded, | |
| 269 /* this has to be the last entry */ | |
| 270 "other error", CME_ERR_NotPresent | |
| 271 }; | |
| 272 | |
| 273 GLOBAL CHAR *cmdCmeError (T_ACI_CME_ERR e) | |
| 274 { | |
| 275 SHORT idx=0; | |
| 276 T_ACI_ERR_DESC aed; | |
| 277 UBYTE srcId = srcId_cb; | |
| 278 | |
| 279 *ErrBuff = '\0'; /* initialization */ | |
| 280 cmdErrStr = ErrBuff; | |
| 281 | |
| 282 if ( e EQ CME_ERR_NotPresent ) | |
| 283 { | |
| 284 if (((aed = qAT_ErrDesc()) >> 16) EQ ACI_ERR_CLASS_Cme) | |
| 285 { | |
| 286 e = (T_ACI_CME_ERR)(aed & 0xFFFF); | |
| 287 } | |
| 288 else | |
| 289 { | |
| 290 e = CME_ERR_Unknown; | |
| 291 } | |
| 292 } | |
| 293 else if( e EQ CME_ERR_Unknown ) | |
| 294 { | |
| 295 return(AT_Fail_Error()); | |
| 296 } | |
| 297 | |
| 298 if (ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Verbose) | |
| 299 { | |
| 300 strcat(cmdErrStr,"+CME ERROR: "); | |
| 301 | |
| 302 /* search for the description of the notified error */ | |
| 303 while ( error[idx].code NEQ CME_ERR_NotPresent AND | |
| 304 error[idx].code NEQ e ) | |
| 305 { | |
| 306 idx++; | |
| 307 } | |
| 308 strcat( cmdErrStr, error[idx].msg ); | |
| 309 } | |
| 310 return(disable_or_numeric("+CME",e)); | |
| 311 } | |
| 312 | |
| 313 | |
| 314 /* | |
| 315 +--------------------------------------------------------------------+ | |
| 316 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
| 317 | STATE : code ROUTINE : cmdCmsError | | |
| 318 +--------------------------------------------------------------------+ | |
| 319 | |
| 320 PURPOSE : handle Short Message Errors | |
| 321 | |
| 322 */ | |
| 323 | |
| 324 LOCAL const struct T_ATI_CMS_ERR /* error code - error message mapping */ | |
| 325 { | |
| 326 const CHAR* msg; /* error message */ | |
| 327 const T_ACI_CMS_ERR code; /* error code */ | |
| 328 } | |
| 329 cms_err[] = | |
| 330 { | |
| 331 "unassigned (unallocated) number", CMS_ERR_UnAllocNum, | |
| 332 "operator determined barring", CMS_ERR_OpDetermBarr, | |
| 333 "call barred", CMS_ERR_CallBarr, | |
| 334 "short message transfer rejected", CMS_ERR_TransReject, | |
| 335 "destination out of service", CMS_ERR_DestOutOfServ, | |
| 336 "unidentified subscriber", CMS_ERR_UnidentSubsc, | |
| 337 "facility rejected", CMS_ERR_FacReject, | |
| 338 "unknown subscriber", CMS_ERR_UnKnownSubsc, | |
| 339 "network out of order", CMS_ERR_NetOutOfOrder, | |
| 340 "temporary failure", CMS_ERR_TempFail, | |
| 341 "congestion", CMS_ERR_Congestion, | |
| 342 "resources unavailable, unspecified", CMS_ERR_ResUnAvail, | |
| 343 "requested facility not subscribed", CMS_ERR_FacNotSubscr, | |
| 344 "requested facility not implemented", CMS_ERR_FacNotImpl, | |
| 345 "invalid short message transfer ref. value", CMS_ERR_TransRefInval, | |
| 346 "semantically incorrect message", CMS_ERR_InValSM, | |
| 347 "invalid mandatory information", CMS_ERR_InValManInfo, | |
| 348 "message type non-existent or not implemented", CMS_ERR_MsgTypNotExist, | |
| 349 "message not compatible with SM protocol state", CMS_ERR_MsgNotCompatible, | |
| 350 "information element non-existent or not impl.", CMS_ERR_InfoElemNotImpl, | |
| 351 "protocol error, unspecified", CMS_ERR_ProtErr, | |
| 352 "interworking, unspecified", CMS_ERR_InterWrkUnSpec, | |
| 353 "telematic interworking not supported", CMS_ERR_TlmtkNotSup, | |
| 354 "short message type 0 not supported", CMS_ERR_SM0NotSup, | |
| 355 "cannot replace short message", CMS_ERR_CantReplceSM, | |
| 356 "unspecified TP-PID error", CMS_ERR_UnSpecPIDErr, | |
| 357 "data coding scheme (alphabet) not supported", CMS_ERR_DcsNotSup, | |
| 358 "message class not supported", CMS_ERR_MsgClassNotSup, | |
| 359 "unspecified TP-DCS error", CMS_ERR_UnSpecTpDcs, | |
| 360 "command cannot be actioned", CMS_ERR_CmdNotAct, | |
| 361 "command unsupported", CMS_ERR_CmdUnSup, | |
| 362 "unspecified TP-Command error", CMS_ERR_UnSpecTpCmd, | |
| 363 "TPDU not supported", CMS_ERR_TpduUnSup, | |
| 364 "SC busy", CMS_ERR_ScBsy, | |
| 365 "no SC subscription", CMS_ERR_NoScSubsc, | |
| 366 "SC system failure", CMS_ERR_ScSysFail, | |
| 367 "invalid SME address", CMS_ERR_InValSme, | |
| 368 "destination SME barred", CMS_ERR_DestSmeBarr, | |
| 369 "SM rejected-duplicate SM", CMS_ERR_SmRejctDuplSm, | |
| 370 "TP-VPF not supported", CMS_ERR_SmTPVPFNotSup, | |
| 371 "TP-VP not supported", CMS_ERR_SmTPVPNotSup, | |
| 372 "SIM SMS storage full", CMS_ERR_SimSmsStorFull, | |
| 373 "no SMS storage capability in SIM", CMS_ERR_NoStorInSim, | |
| 374 "error in MS", CMS_ERR_ErrInMs, | |
| 375 "memory capacity exceeded", CMS_ERR_MemCabExcee, | |
| 376 "unspecified error cause", CMS_ERR_UnSpecErr, | |
| 377 "ME failure", CMS_ERR_MeFail, | |
| 378 "SMS service of ME reserved", CMS_ERR_ServRes, | |
| 379 "operation not allowed", CMS_ERR_OpNotAllowed, | |
| 380 "operation not supported", CMS_ERR_OpNotSup, | |
| 381 "invalid PDU mode parameter", CMS_ERR_InValPduMod, | |
| 382 "invalid text mode parameter", CMS_ERR_InValTxtMod, | |
| 383 "SIM not inserted", CMS_ERR_SimNotIns, | |
| 384 "SIM PIN required", CMS_ERR_SimPinReq, | |
| 385 "PH-SIM PIN required", CMS_ERR_PhSimPinReq, | |
| 386 "SIM failure", CMS_ERR_SimFail, | |
| 387 "SIM busy", CMS_ERR_SimBsy, | |
| 388 "SIM wrong", CMS_ERR_SimWrong, | |
| 389 "SIM PUK required", CMS_ERR_SimPukReq, | |
| 390 "SIM PIN2 required", CMS_ERR_SimPin2Req, | |
| 391 "SIM PUK2 required", CMS_ERR_SimPuk2Req, | |
| 392 "memory failure", CMS_ERR_MemFail, | |
| 393 "invalid memory index", CMS_ERR_InValMemIdx, | |
| 394 "memory full", CMS_ERR_MemFull, | |
| 395 "SMSC address unknown", CMS_ERR_SmscAdrUnKnown, | |
| 396 "no network service", CMS_ERR_NoNetServ, | |
| 397 "network timeout", CMS_ERR_NetTimeOut, | |
| 398 "no +CNMA acknowledegment expected", CMS_ERR_NoCnmaAckExpect, | |
| 399 "unknown error", CMS_ERR_UnknownErr, | |
| 400 "failed to abort", CMS_ERR_FailedToAbort, | |
| 401 /* this must be the last entry */ | |
| 402 "other error", CMS_ERR_NotPresent | |
| 403 }; | |
| 404 | |
| 405 #define NBR_CMS_ERR 69 | |
| 406 #define MAX_CMS_LTH 60 | |
| 407 | |
| 408 GLOBAL char* cmdCmsError ( T_ACI_CMS_ERR e ) | |
| 409 { | |
| 410 int i = 0; | |
| 411 T_ACI_ERR_DESC aed; | |
| 412 UBYTE srcId = srcId_cb; | |
| 413 | |
| 414 if ( e EQ CMS_ERR_NotPresent ) | |
| 415 { | |
| 416 if (((aed = qAT_ErrDesc()) >> 16) EQ ACI_ERR_CLASS_Cms) | |
| 417 { | |
| 418 e = (T_ACI_CMS_ERR)(aed & 0xFFFF); | |
| 419 } | |
| 420 else /* no SMS error code */ | |
| 421 { | |
| 422 e = CMS_ERR_UnknownErr; | |
| 423 } | |
| 424 } | |
| 425 | |
| 426 { | |
| 427 *ErrBuff = '\0'; /* build message */ | |
| 428 cmdErrStr = ErrBuff; | |
| 429 | |
| 430 if ( ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Verbose ) | |
| 431 { | |
| 432 strcat( cmdErrStr, "+CMS ERROR: " ); | |
| 433 | |
| 434 while ( cms_err[i].code NEQ CMS_ERR_NotPresent AND | |
| 435 cms_err[i].code NEQ e ) | |
| 436 { | |
| 437 i++; | |
| 438 } | |
| 439 strcat( cmdErrStr, cms_err[i].msg ); | |
| 440 } | |
| 441 else if ( ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Disable ) | |
| 442 { | |
| 443 strcat ( cmdErrStr, "ERROR" ); | |
| 444 } | |
| 445 else if ( ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Numeric ) | |
| 446 { | |
| 447 sprintf ( cmdErrStr, "+CMS ERROR: %d", e ); | |
| 448 } | |
| 449 } | |
| 450 | |
| 451 return cmdErrStr; | |
| 452 } | |
| 453 | |
| 454 | |
| 455 /* | |
| 456 +--------------------------------------------------------------------+ | |
| 457 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
| 458 | STATE : code ROUTINE : atPlusCEER | | |
| 459 +--------------------------------------------------------------------+ | |
| 460 | |
| 461 PURPOSE : Extented error report | |
| 462 */ | |
| 463 | |
| 464 typedef struct | |
| 465 { | |
| 466 char * desc; | |
| 467 T_ACI_CEER rpt; | |
| 468 } CEER_TABLE; | |
| 469 | |
| 470 /* Defined by standards CEER cause description table */ | |
| 471 const CEER_TABLE StdCEERDesc[]= | |
| 472 { | |
| 473 {"unassigned number", CEER_Unassign }, | |
| 474 {"no route to destination", CEER_NoRoute }, | |
| 475 {"channel unacceptable", CEER_ChanUnaccept }, | |
| 476 {"operator determined barring", CEER_Barred }, | |
| 477 {"normal call clearing", CEER_CallClear }, | |
| 478 {"user busy", CEER_UserBusy }, | |
| 479 {"no user responding", CEER_NoResponse }, | |
| 480 {"user alerting, no answer", CEER_AlertNoAnswer }, | |
| 481 {"call rejected", CEER_CallReject }, | |
| 482 {"number changed", CEER_NumChanged }, | |
| 483 {"non selected user clearing", CEER_UserClear }, | |
| 484 {"destination out of order", CEER_DestOutOfOrder }, | |
| 485 {"invalid number format", CEER_NumFormat }, | |
| 486 {"facility rejected", CEER_FacilityReject }, | |
| 487 {"response to status enquiry", CEER_StatusEnquiry }, | |
| 488 {"normal, unspecified", CEER_Unspecified }, | |
| 489 {"no channel available", CEER_NoChanAvail }, | |
| 490 {"network out of order", CEER_NetworkOutOfOrder }, | |
| 491 {"temporary failure", CEER_TempFailure }, | |
| 492 {"switching equipment congestion", CEER_SwitchCongest }, | |
| 493 {"access information discarded", CEER_InfoDiscard }, | |
| 494 {"requested channel unavailable", CEER_ReqChanUnavail }, | |
| 495 {"recources unavailable", CEER_ResourceUnavail }, | |
| 496 {"quality of service unavailable", CEER_QOS_Unavail }, | |
| 497 {"requested facility unsubscribed", CEER_FAC_Unsubscr }, | |
| 498 {"incoming calls barred within CUG", CEER_BarredInCUG }, | |
| 499 {"bearer capability not authorized", CEER_BearerCapNotAuth }, | |
| 500 {"bearer capability not available", CEER_BearerCapUnavail }, | |
| 501 {"service not available", CEER_ServUnavail }, | |
| 502 {"bearer service not implemented", CEER_BearerNotImpl }, | |
| 503 {"ACM reached ACM maximum", CEER_ACM_Max }, | |
| 504 {"facility not implemented", CEER_FAC_NotImpl }, | |
| 505 {"only restricted bearer cap. avail.", CEER_RestrictBearerCap }, | |
| 506 {"service not implemented", CEER_ServNotImpl }, | |
| 507 {"invalid TI", CEER_InvalidTI }, | |
| 508 {"no member of CUG", CEER_UserNotInCUG }, | |
| 509 {"incompatible destination", CEER_IncompatDest }, | |
| 510 {"invalid transit network selection", CEER_InvalidTransNet }, | |
| 511 {"incorrect message", CEER_IncorrMsg }, | |
| 512 {"invalid mandatory information", CEER_InvalidMandInfo }, | |
| 513 {"message type not implemented", CEER_MsgTypeNotImpl }, | |
| 514 {"message type incompatible", CEER_MsgTypeIncomp }, | |
| 515 {"info element not implemented", CEER_InfoElemNotImpl }, | |
| 516 {"conditional info element error", CEER_CondInfoElem }, | |
| 517 {"message incompatible", CEER_MsgIncomp }, | |
| 518 {"recovery on time expiry", CEER_Timer }, | |
| 519 {"protocol error", CEER_Protocol }, | |
| 520 {"interworking error", CEER_Interworking }, | |
| 521 {"bearer service not available", CEER_ReqBearerServNotAvail }, | |
| 522 {"no TI available", CEER_NoTransIdAvail }, | |
| 523 {"timer 303 expiry", CEER_Timer303 }, | |
| 524 {"establishment failure", CEER_EstabFail }, | |
| 525 {"no error", CEER_NoError }, | |
| 526 {"operation failed", CEER_Failed }, | |
| 527 {"timeout", CEER_Timeout }, | |
| 528 {"bearer service not compatible", CEER_BearerServNotCompat }, | |
| 529 #ifdef GPRS | |
| 530 {"unsuccessful GPRS attach", CEER_FailedGPRSAttach }, | |
| 531 {"unsuccessful PDP context activation",CEER_FailedGPRSContextAct }, | |
| 532 {"GPRS detach", CEER_GPRSDetach }, | |
| 533 {"GPRS PDP context deactivation", CEER_GPRSDeactivation }, | |
| 534 #endif /* GPRS */ | |
| 535 /* these have to be the last entries */ | |
| 536 {"no error", CEER_NotPresent }, | |
| 537 /* last entry for at+ceer */ | |
| 538 { NULL, 0} | |
| 539 }; | |
| 540 | |
| 541 /* Proprietary ACI CEER cause description table */ | |
| 542 const CEER_TABLE pACI_CEERDesc[]= | |
| 543 { | |
| 544 {"ACM reached ACM maximum", P_CEER_ACMMaxReachedOrExceeded, }, | |
| 545 {"number not in FDN list", P_CEER_InvalidFDN }, | |
| 546 /* these have to be the last entries */ | |
| 547 {"no error", P_CEER_NotPresent }, | |
| 548 /* last entry for at+ceer */ | |
| 549 { NULL, 0} | |
| 550 }; | |
| 551 | |
| 552 /* Proprietary MM CEER cause description table */ | |
| 553 const CEER_TABLE pMM_CEERDesc[]= | |
| 554 { | |
| 555 {"IMSI not present in HLR", P_MM_CEER_IMSINotInHLR}, | |
| 556 {"no service", P_MM_CEER_NoService }, | |
| 557 /* these have to be the last entries */ | |
| 558 {"no error", P_MM_CEER_NotPresent }, | |
| 559 /* last entry for at+ceer */ | |
| 560 { NULL, 0} | |
| 561 }; | |
| 562 | |
| 563 /* Proprietary SS CEER cause description table */ | |
| 564 const CEER_TABLE pSS_CEERDesc[]= | |
| 565 { | |
| 566 {"Unknown Subscriber", P_SS_CEER_UnknownSubscriber }, | |
| 567 {"Illegal Subscriber", P_SS_CEER_IllegalSubscriber }, | |
| 568 {"Bearer service not provisioned", P_SS_CEER_BearerSvcNotProv }, | |
| 569 {"Teleservice not provisioned", P_SS_CEER_TeleSvcNotProv }, | |
| 570 {"Illegal Equipment", P_SS_CEER_IllegalEquipment }, | |
| 571 {"Call barred", P_SS_CEER_CallBarred }, | |
| 572 {"Illegal supplementary service operation", P_SS_CEER_IllegalSSOperation }, | |
| 573 {"SS error status", P_SS_CEER_SSerrStatus }, | |
| 574 {"SS not available", P_SS_CEER_SSNotAvail }, | |
| 575 {"SS subscript violation", P_SS_CEER_SSSubsViolation }, | |
| 576 {"SS incompatible", P_SS_CEER_SSIncomp }, | |
| 577 {"Facility not supported", P_SS_CEER_FacNotSupported }, | |
| 578 {"Absent subscriber", P_SS_CEER_AbsentSubs }, | |
| 579 {"System failure", P_SS_CEER_SystenFail }, | |
| 580 {"Data Missing", P_SS_CEER_DataMissing }, | |
| 581 {"Unexpected Data Value", P_SS_CEER_UnexpectData }, | |
| 582 {"Password registration failure", P_SS_CEER_PwdRegFail }, | |
| 583 {"Negative password check", P_SS_CEER_NegPwdCheck}, | |
| 584 {"Number of password attempts violation", P_SS_CEER_NumPwdViolation }, | |
| 585 {"Unknown alphabet", P_SS_CEER_UnknownAlpha }, | |
| 586 {"Unstructured supplementary service data busy", P_SS_CEER_UssdBusy }, | |
| 587 {"Number of multiparty participants exceeded", P_SS_CEER_MaxNumMptyExceed }, | |
| 588 {"Resource not available", P_SS_CEER_ResourceNotAvail }, | |
| 589 | |
| 590 /* these have to be the last entries */ | |
| 591 {"no error", P_SS_CEER_NotPresent }, | |
| 592 /* last entry for at+ceer */ | |
| 593 { NULL, 0} | |
| 594 }; | |
| 595 #define MAX_CEER_DESC_LTH (50) | |
| 596 #define MAX_CEER_VAL_LTH (11) | |
| 597 | |
| 598 GLOBAL void getCeerDesc(USHORT cause, char *desc) | |
| 599 { | |
| 600 SHORT idx; | |
| 601 int val; | |
| 602 | |
| 603 TRACE_FUNCTION("getCeerDesc()"); | |
| 604 | |
| 605 memset(desc,0,MAX_CEER_DESC_LTH); | |
| 606 | |
| 607 if ( GET_CAUSE_DEFBY(cause) EQ DEFBY_STD ) | |
| 608 { | |
| 609 TRACE_EVENT_P1("Cause: %d, defined by standard", cause); | |
| 610 val = GET_CAUSE_VALUE(cause); | |
| 611 | |
| 612 if ( val EQ NOT_PRESENT_8BIT ) | |
| 613 { | |
| 614 val = CEER_NotPresent; | |
| 615 } | |
| 616 TRACE_EVENT("Get desc from Standard CEER desc table"); | |
| 617 for( idx = 0; StdCEERDesc[idx].desc NEQ NULL; idx++ ) | |
| 618 { | |
| 619 if ( StdCEERDesc[idx].rpt EQ val ) | |
| 620 { | |
| 621 memcpy(desc, StdCEERDesc[idx].desc, strlen(StdCEERDesc[idx].desc) ); | |
| 622 return; | |
| 623 } | |
| 624 } | |
| 625 } | |
| 626 | |
| 627 if ( GET_CAUSE_DEFBY(cause) EQ DEFBY_CONDAT ) | |
| 628 { | |
| 629 if ( GET_CAUSE_ORIGIN_ENTITY(cause) EQ ACI_ORIGINATING_ENTITY ) | |
| 630 { | |
| 631 TRACE_EVENT_P1("Cause: %d, is ACI proprietary", cause); | |
| 632 val = GET_CAUSE_VALUE(cause); | |
| 633 | |
| 634 if ( val EQ NOT_PRESENT_8BIT ) | |
| 635 { | |
| 636 val = P_CEER_NotPresent; | |
| 637 } | |
| 638 TRACE_EVENT("Get desc from proprietary ACI CEER desc table"); | |
| 639 for( idx = 0; pACI_CEERDesc[idx].desc NEQ NULL; idx++ ) | |
| 640 { | |
| 641 if ( pACI_CEERDesc[idx].rpt EQ val ) | |
| 642 { | |
| 643 memcpy(desc, pACI_CEERDesc[idx].desc, strlen(pACI_CEERDesc[idx].desc) ); | |
| 644 return; | |
| 645 } | |
| 646 } | |
| 647 } | |
| 648 else if ( GET_CAUSE_ORIGIN_ENTITY(cause) EQ MM_ORIGINATING_ENTITY ) | |
| 649 { | |
| 650 TRACE_EVENT_P1("Cause: %d, is MM proprietary", cause); | |
| 651 val = GET_CAUSE_VALUE(cause); | |
| 652 | |
| 653 if ( val EQ NOT_PRESENT_8BIT ) | |
| 654 { | |
| 655 val = P_MM_CEER_NotPresent; | |
| 656 } | |
| 657 TRACE_EVENT("Get desc from proprietary MM CEER desc table"); | |
| 658 for( idx = 0; pMM_CEERDesc[idx].desc NEQ NULL; idx++ ) | |
| 659 { | |
| 660 if ( pMM_CEERDesc[idx].rpt EQ val ) | |
| 661 { | |
| 662 memcpy(desc, pMM_CEERDesc[idx].desc, strlen(pMM_CEERDesc[idx].desc) ); | |
| 663 return; | |
| 664 } | |
| 665 } | |
| 666 } | |
| 667 else if ( GET_CAUSE_ORIGIN_ENTITY(cause) EQ SS_ORIGINATING_ENTITY ) | |
| 668 { | |
| 669 TRACE_EVENT_P1("Cause: %d, is SS proprietary", cause); | |
| 670 val = GET_CAUSE_VALUE(cause); | |
| 671 | |
| 672 if ( val EQ NOT_PRESENT_8BIT ) | |
| 673 { | |
| 674 val = P_SS_CEER_NotPresent; | |
| 675 } | |
| 676 TRACE_EVENT("Get desc from proprietary SS CEER desc table"); | |
| 677 for( idx = 0; pSS_CEERDesc[idx].desc NEQ NULL; idx++ ) | |
| 678 { | |
| 679 if ( pSS_CEERDesc[idx].rpt EQ val ) | |
| 680 { | |
| 681 memcpy(desc, pSS_CEERDesc[idx].desc, strlen(pSS_CEERDesc[idx].desc) ); | |
| 682 return; | |
| 683 } | |
| 684 } | |
| 685 } | |
| 686 } | |
| 687 } | |
| 688 | |
| 689 | |
| 690 GLOBAL T_ATI_RSLT atPlusCEER(char *cl, UBYTE srcId) | |
| 691 { | |
| 692 TRACE_FUNCTION("atPlusCEER()"); | |
| 693 | |
| 694 #ifdef FF_ATI_BAT | |
| 695 { | |
| 696 T_BAT_cmd_send cmd; | |
| 697 T_BAT_no_parameter dummy; | |
| 698 | |
| 699 cmd.ctrl_params=BAT_CMD_SET_PLUS_CEER; | |
| 700 dummy.bat_dummy = 0xFF; | |
| 701 cmd.params.ptr_set_plus_ceer = &dummy; | |
| 702 bat_send(ati_bat_get_client(srcId), &cmd); | |
| 703 return(ATI_EXCT); | |
| 704 } | |
| 705 #else /* no FF_ATI_BAT */ | |
| 706 { | |
| 707 char desc[MAX_CEER_DESC_LTH]; | |
| 708 T_ACI_RETURN ret; | |
| 709 USHORT cause; | |
| 710 | |
| 711 ret=qAT_PlusCEER( srcId, &cause ); | |
| 712 if (ret EQ AT_CMPL) | |
| 713 { | |
| 714 /* check if description text is available*/ | |
| 715 getCeerDesc(cause, desc); | |
| 716 | |
| 717 if ( desc[0] EQ 0 ) | |
| 718 { | |
| 719 /* no description text is available */ | |
| 720 sprintf( g_sa, "+CEER: %d,%d,%d,%d", | |
| 721 GET_CAUSE_DEFBY(cause), GET_CAUSE_ORIGSIDE(cause), | |
| 722 GET_CAUSE_ORIGIN_ENTITY(cause), GET_CAUSE_VALUE(cause)); | |
| 723 } | |
| 724 else | |
| 725 { | |
| 726 /* description text is available */ | |
| 727 sprintf( g_sa, "+CEER: %d,%d,%d,%d,%s", | |
| 728 GET_CAUSE_DEFBY(cause), GET_CAUSE_ORIGSIDE(cause), | |
| 729 GET_CAUSE_ORIGIN_ENTITY(cause), GET_CAUSE_VALUE(cause), | |
| 730 desc ); | |
| 731 } | |
| 732 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
| 733 return ATI_CMPL; | |
| 734 } | |
| 735 else | |
| 736 { | |
| 737 cmdAtError(atError); | |
| 738 return ATI_FAIL; | |
| 739 } | |
| 740 } | |
| 741 #endif /* no FF_ATI_BAT */ | |
| 742 } | |
| 743 | |
| 744 /* | |
| 745 +--------------------------------------------------------------------+ | |
| 746 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
| 747 | STATE : code ROUTINE : atPercentCSSD | | |
| 748 +--------------------------------------------------------------------+ | |
| 749 | |
| 750 PURPOSE : Supplementary Service Diagnostic | |
| 751 */ | |
| 752 | |
| 753 GLOBAL T_ATI_RSLT atPercentCSSD(char *cl, UBYTE srcId) | |
| 754 { | |
| 755 T_ACI_RETURN ret; | |
| 756 UBYTE ss_diag; | |
| 757 CHAR *me = "%CSSD: "; | |
| 758 | |
| 759 TRACE_FUNCTION("atPercentCSSD()"); | |
| 760 | |
| 761 ret = qAT_PercentCSSD( srcId, &ss_diag); | |
| 762 | |
| 763 if (ret EQ AT_CMPL) | |
| 764 { | |
| 765 sprintf( g_sa, "%s%d", me, ss_diag ); | |
| 766 io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); | |
| 767 return ATI_CMPL; | |
| 768 } | |
| 769 else | |
| 770 { | |
| 771 cmdAtError(atError); | |
| 772 return ATI_FAIL; | |
| 773 } | |
| 774 | |
| 775 } | |
| 776 | |
| 777 /* | |
| 778 +--------------------------------------------------------------------+ | |
| 779 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
| 780 | STATE : code ROUTINE : cmdCeerError | | |
| 781 +--------------------------------------------------------------------+ | |
| 782 | |
| 783 PURPOSE : handle CEER Errors | |
| 784 | |
| 785 */ | |
| 786 | |
| 787 GLOBAL CHAR *cmdCeerError(USHORT cause) | |
| 788 { | |
| 789 T_ACI_ERR_DESC aed; | |
| 790 char desc[MAX_CEER_DESC_LTH]; | |
| 791 UBYTE srcId = srcId_cb; | |
| 792 | |
| 793 *ErrBuff = '\0'; /* build message */ | |
| 794 cmdErrStr = ErrBuff; | |
| 795 | |
| 796 if ( GET_CAUSE_VALUE(cause) EQ NOT_PRESENT_8BIT ) | |
| 797 { | |
| 798 if (((aed = qAT_ErrDesc()) >> 16) EQ ACI_ERR_CLASS_Ceer) | |
| 799 cause = (T_ACI_CEER)(aed & 0xFFFF); | |
| 800 else | |
| 801 cause = CAUSE_MAKE(DEFBY_STD, ORIGSIDE_MS, ACI_ORIGINATING_ENTITY, | |
| 802 CEER_NoError); | |
| 803 } | |
| 804 if (ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Verbose) | |
| 805 { | |
| 806 sprintf(cmdErrStr, "+CEER ERROR: %d,%d,%d,%d", | |
| 807 GET_CAUSE_DEFBY(cause), GET_CAUSE_ORIGSIDE(cause), | |
| 808 GET_CAUSE_ORIGIN_ENTITY(cause), GET_CAUSE_DEFBY(cause)); | |
| 809 | |
| 810 getCeerDesc(cause, desc); | |
| 811 | |
| 812 if ( desc[0] NEQ 0 ) | |
| 813 { | |
| 814 strcat( cmdErrStr, desc); | |
| 815 } | |
| 816 | |
| 817 } | |
| 818 return(disable_or_numeric("+CEER",cause)); | |
| 819 } | |
| 820 | |
| 821 /* | |
| 822 +--------------------------------------------------------------------+ | |
| 823 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
| 824 | STATE : code ROUTINE : cmdAtError | | |
| 825 +--------------------------------------------------------------------+ | |
| 826 | |
| 827 PURPOSE : handle standard AT Errors | |
| 828 | |
| 829 */ | |
| 830 | |
| 831 GLOBAL CHAR *cmdAtError (AtErrCode e) | |
| 832 { | |
| 833 SHORT idx=0; | |
| 834 | |
| 835 *ErrBuff = '\0'; | |
| 836 cmdErrStr = ErrBuff; | |
| 837 | |
| 838 /* search for the description of the notified error */ | |
| 839 while ( tabAtError[idx].code NEQ atError AND | |
| 840 tabAtError[idx].code NEQ e ) | |
| 841 { | |
| 842 idx++; | |
| 843 } | |
| 844 sprintf(cmdErrStr,(at.s1415.atV) ? tabAtError[idx].msg : tabAtError[idx].nmb); | |
| 845 return cmdErrStr; | |
| 846 } | |
| 847 | |
| 848 /* | |
| 849 +--------------------------------------------------------------------+ | |
| 850 | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | |
| 851 | STATE : code ROUTINE : AT_FailError | | |
| 852 +--------------------------------------------------------------------+ | |
| 853 | |
| 854 PURPOSE : General handling of errors (either CME CMS CEER or EXT errors) | |
| 855 when function returns AT_FAIL | |
| 856 | |
| 857 */ | |
| 858 #define ACI_GET_ERR_CLASS() ((aciErrDesc & 0xFFFF0000) >> 16) | |
| 859 #define ACI_GET_ERR_VALUE() (aciErrDesc & 0x0000FFFF) | |
| 860 #define ACI_RESET_ERR_DESC() (aciErrDesc = 0xFFFFFFFF) | |
| 861 #define ACI_VALID_ERR_DESC() (aciErrDesc NEQ 0xFFFFFFFF) | |
| 862 | |
| 863 LOCAL CHAR *AT_Fail_Error(void) | |
| 864 { | |
| 865 T_ACI_ERR_CLASS err_class; | |
| 866 | |
| 867 if ( ACI_VALID_ERR_DESC() ) | |
| 868 { | |
| 869 err_class = ACI_GET_ERR_CLASS(); | |
| 870 switch(err_class) | |
| 871 { | |
| 872 case(ACI_ERR_CLASS_NotPresent): | |
| 873 break; | |
| 874 case(ACI_ERR_CLASS_Cme): | |
| 875 { | |
| 876 T_ACI_CME_ERR l_err; | |
| 877 | |
| 878 l_err = ACI_GET_ERR_VALUE(); | |
| 879 ACI_RESET_ERR_DESC(); // needs to be reinitialized | |
| 880 return(cmdCmeError (l_err)); | |
| 881 } | |
| 882 case(ACI_ERR_CLASS_Cms): | |
| 883 { | |
| 884 T_ACI_CMS_ERR l_err; | |
| 885 | |
| 886 l_err = ACI_GET_ERR_VALUE(); | |
| 887 ACI_RESET_ERR_DESC(); // needs to be reinitialized | |
| 888 return(cmdCmsError (l_err)); | |
| 889 } | |
| 890 case(ACI_ERR_CLASS_Ceer): | |
| 891 { | |
| 892 T_ACI_CEER l_err; | |
| 893 | |
| 894 l_err = ACI_GET_ERR_VALUE(); | |
| 895 ACI_RESET_ERR_DESC(); // needs to be reinitialized | |
| 896 /* return(cmdCeerError((USHORT)err)); */ | |
| 897 return(cmdCeerError(l_err)); | |
| 898 } | |
| 899 case(ACI_ERR_CLASS_Ext): | |
| 900 { | |
| 901 T_ACI_EXT_ERR l_err; | |
| 902 | |
| 903 l_err = ACI_GET_ERR_VALUE(); | |
| 904 ACI_RESET_ERR_DESC(); // needs to be reinitialized | |
| 905 return(cmdExtError (l_err)); | |
| 906 } | |
| 907 default: | |
| 908 break; | |
| 909 } | |
| 910 } | |
| 911 *ErrBuff = '\0'; | |
| 912 cmdErrStr = ErrBuff; | |
| 913 | |
| 914 return (cmdCmeError(CME_ERR_NotPresent)); | |
| 915 } | |
| 916 | |
| 917 #endif /* ATI_ERR_C */ |
