FreeCalypso > hg > fc-magnetite
view src/aci2/aci/ati_fd.c @ 581:a0a45c5eb3ef
gsmcomp.c: bumping trace partition size to 220 like in gprscomp.c
This change is safe in terms of RAM usage because all of these partition
pools have already been moved from XRAM to IRAM earlier, and our IRAM
usage in VO configs is currently quite low - the one near the limit
is XRAM on C11x.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 29 Jan 2019 03:52:49 +0000 |
parents | 93999a60b835 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : | Modul : J:\g23m-aci\aci\ati_fd.c +----------------------------------------------------------------------------- | Copyright 2002 Texas Instruments Berlin, AG | All rights reserved. | | This file is confidential and a trade secret of Texas | Instruments Berlin, AG | The receipt of or possession of this file does not convey | any rights to reproduce or disclose its contents or to | manufacture, use, or sell anything it may describe, in | whole, or in part, without the specific written consent of | Texas Instruments Berlin, AG. +----------------------------------------------------------------------------- | Purpose : +----------------------------------------------------------------------------- */ #ifndef ACI_FD_CMD_C #define ACI_FD_CMD_C #endif #include "aci_all.h" #include "dti.h" /* functionality of the dti library */ #include "aci_lst.h" #include "aci_cmh.h" #include "ati_cmd.h" #include "aci_io.h" #include "aci_cmd.h" #include "aci_fd.h" #include "aci_mem.h" #include "aci_prs.h" #include "ati_int.h" #ifdef FF_ATI_BAT #include "typedefs.h" #include "gdd.h" #include "bat.h" #include "ati_bat.h" #endif /* FF_ATI_BAT */ #define RPT_LEN (20) /* hex report length per line */ #define SIZE_TMP_BUF (5) LOCAL void OutHexReport( UBYTE srcId, USHORT len, UBYTE * buf ); EXTERN T_ATI_RSLT setflowCntr(CHAR* cl, UBYTE srcId); EXTERN T_ATI_RSLT queflowCntr(CHAR* cl, UBYTE srcId); #ifdef FF_FAX /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | STATE : code ROUTINE : atPlusFLO | +--------------------------------------------------------------------+ PURPOSE : +FLO command (DTE DCE / DCE DTE flow control) */ GLOBAL T_ATI_RSLT setatPlusFLO(char *cl, UBYTE srcId) { T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_flo my_bat_set_plus_flo; T_ACI_RX_FLOW_CTRL DCE_by_DTE = RX_FLOW_NotPresent; /* by TE: Rx flow control */ T_ACI_RX_FLOW_CTRL DTE_by_DCE = TX_FLOW_NotPresent; /* by TA: Tx flow control */ TRACE_FUNCTION("setatPlusFLO() calls bat_send() <=== as APPLICATION"); cl = parse (cl, "dd", &DCE_by_DTE, &DTE_by_DCE); if(!cl) { cmdAtError(atError); return ATI_FAIL; } memset(&my_bat_set_plus_flo, 0, sizeof(my_bat_set_plus_flo)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FLO; cmd.params.ptr_set_plus_flo = &my_bat_set_plus_flo; my_bat_set_plus_flo.flo_c = DCE_by_DTE; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFLO()"); src_params->curAtCmd = AT_CMD_FLO; return setflowCntr(cl, srcId); #endif /* no FF_ATI_BAT*/ } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | STATE : code ROUTINE : atPlusFLO | +--------------------------------------------------------------------+ PURPOSE : +FLO command (DTE DCE / DCE DTE flow control) */ GLOBAL T_ATI_RSLT queatPlusFLO(char *cl, UBYTE srcId) { T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); TRACE_FUNCTION("queatPlusFLO()"); src_params->curAtCmd = AT_CMD_FLO; return queflowCntr(cl, srcId); } #endif /************************************************************************ ************ Fax and Data only commands... ************************************************************************/ #if defined (FAX_AND_DATA) AND defined (DTI) /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_CMD | | STATE : code ROUTINE : atO | +--------------------------------------------------------------------+ PURPOSE : O command (return to online state) */ GLOBAL T_ATI_RSLT atO(char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; TRACE_FUNCTION("atO()"); return (map_aci_2_ati_rslt(sAT_O(srcId))); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusDR | +--------------------------------------------------------------------+ PURPOSE : +DR command (Select DATA Compression reporting) */ GLOBAL T_ATI_RSLT setatPlusDR (char *cl, UBYTE srcId) { SHORT val; TRACE_FUNCTION("setatPLusDR()"); switch(*cl) { case('0'): case('1'): { val=*cl - '0'; break; } default: { cmdAtError(atError); return ATI_FAIL; } } cl++; if (!(*cl EQ 0 || *cl EQ ';')) { cmdAtError(atError); return ATI_FAIL; } ati_user_output_cfg[srcId].DR_stat=(UBYTE)val; return ATI_CMPL; } GLOBAL T_ATI_RSLT queatPlusDR (char *cl, UBYTE srcId) { TRACE_FUNCTION("queatPLusDR()"); resp_disp(srcId, cl,"b",&ati_user_output_cfg[srcId].DR_stat); return ATI_CMPL; } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusDS | +--------------------------------------------------------------------+ PURPOSE : +DS command (Select DATA Compression) */ GLOBAL T_ATI_RSLT setatPlusDS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_DS_DIR dir = DS_DIR_NotPresent; T_ACI_DS_COMP comp = DS_COMP_NotPresent; LONG maxDict = ACI_NumParmNotPresent; SHORT maxStr = ACI_NumParmNotPresent ; cl = parse(cl, "dddr", &dir, &comp, &maxDict, &maxStr); if (!cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_ds my_bat_set_plus_ds; TRACE_FUNCTION("atPLusDS() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_ds, 0, sizeof(my_bat_set_plus_ds)); cmd.ctrl_params = BAT_CMD_SET_PLUS_DS; cmd.params.ptr_set_plus_ds = &my_bat_set_plus_ds; my_bat_set_plus_ds.dir = dir; my_bat_set_plus_ds.neg ; my_bat_set_plus_ds.p1; my_bat_set_plus_ds.p2; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("atPLusDS()"); ret = sAT_PlusDS(srcId,dir,comp,maxDict,maxStr); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusDS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_DS_DIR dir=DS_DIR_NotPresent; T_ACI_DS_COMP comp=DS_COMP_NotPresent; LONG maxDict=ACI_NumParmNotPresent; SHORT maxStr=ACI_NumParmNotPresent ; TRACE_FUNCTION("atPLusDS()"); ret = qAT_PlusDS(srcId,&dir,&comp,&maxDict,&maxStr); if (ret EQ AT_CMPL) { resp_disp(srcId, cl,"eels",&dir,&comp,&maxDict,&maxStr); } if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusCRLP | +--------------------------------------------------------------------+ PURPOSE : +CRLP command (Select RADIO LINK Protokoll) */ GLOBAL T_ATI_RSLT setatPlusCRLP(char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; SHORT iws =- 1, mws = -1, t1 = -1, n2 = -1; /* !!! */ cl = parse(cl, "rrrr", &iws, &mws, &t1, &n2); if (!cl) { cmdCmeError(CME_ERR_OpNotAllow); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_crlp my_bat_set_plus_crlp; TRACE_FUNCTION("setatPLusCRLP() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_crlp, 0, sizeof(my_bat_set_plus_crlp)); cmd.ctrl_params = BAT_CMD_SET_PLUS_CRLP; cmd.params.ptr_set_plus_crlp = &my_bat_set_plus_crlp; my_bat_set_plus_crlp.iws = iws; my_bat_set_plus_crlp.mws = mws; my_bat_set_plus_crlp.t1 = t1; my_bat_set_plus_crlp.n2 = n2; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPLusCRLP()"); ret = sAT_PlusCRLP(srcId,iws,mws,t1,n2); if (ret EQ AT_FAIL) { cmdCmeError(CME_ERR_Unknown); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusCRLP(char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; SHORT iws=-1,mws=-1,t1=-1,n2=-1; /* !!! */ TRACE_FUNCTION("queatPLusCRLP()"); ret = qAT_PlusCRLP(srcId,&iws,&mws,&t1,&n2); if (ret EQ AT_CMPL) { resp_disp(srcId, cl,"ssss",&iws,&mws,&t1,&n2); } if (ret EQ AT_FAIL) { cmdCmeError(CME_ERR_Unknown); } return (map_aci_2_ati_rslt(ret)); } #ifdef FF_FAX /* * * *---------------------------------------- FAX Commands ------------------------------------------ * * */ /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFAP | +--------------------------------------------------------------------+ PURPOSE : +FAP command (address and polling capabilities ) */ GLOBAL T_ATI_RSLT setatPlusFAP (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FAP_VAL sub=FAP_VAL_NotPresent, sep=FAP_VAL_NotPresent, pwd=FAP_VAL_NotPresent; cl = parse(cl,"ddd",&sub,&sep,&pwd); if (!cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fap my_bat_set_plus_fap; TRACE_FUNCTION("setatPlusFAP() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fap, 0, sizeof(my_bat_set_plus_fap)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FAP; cmd.params.ptr_set_plus_fap = &my_bat_set_plus_fap; my_bat_set_plus_fap.sub = sub; my_bat_set_plus_fap.sep = sep; my_bat_set_plus_fap.pwd = pwd; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFAP()"); ret = sAT_PlusFAP(srcId,sub,sep,pwd); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFAP (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FAP_VAL sub=FAP_VAL_NotPresent, sep=FAP_VAL_NotPresent, pwd=FAP_VAL_NotPresent; TRACE_FUNCTION("queatPlusFAP()"); ret = qAT_PlusFAP(srcId,&sub,&sep,&pwd); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FAP:%d,%d,%d",sub,sep,pwd); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFBU | +--------------------------------------------------------------------+ PURPOSE : +FBU */ GLOBAL T_ATI_RSLT setatPlusFBU(char *cl, UBYTE srcId) { SHORT fbu = -1; cl = parse(cl,"r",&fbu); if (!cl || fbu > 1) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fbu my_bat_set_plus_fbu; TRACE_FUNCTION("setatPlusFBU() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fbu, 0, sizeof(my_bat_set_plus_fbu)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FBU; cmd.params.ptr_set_plus_fbu = &my_bat_set_plus_fbu; my_bat_set_plus_fbu.value = fbu; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFBU()"); if (fbu NEQ -1) { fd.FBU_stat = (char) fbu; } return ATI_CMPL; #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFBU(char *cl, UBYTE srcId) { SHORT fbu=-1; TRACE_FUNCTION("queatPlusFBU()"); sprintf(g_sa,"+FBU:%d",fd.FBU_stat); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); return ATI_CMPL; } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFCC | +--------------------------------------------------------------------+ PURPOSE : ITU-T.32/8.5.1.1 DCE capabilities parameters, +FCC – Write syntax: +FCC=VR,BR,WD,LN,DF,EC,BF,ST,JP – Valid values: see Table 21 – Default values: set by manufacturer – Mandatory values: as required by Recommendation T.30 +FCC allows the DTE to sense and constrain the capabilities of the facsimile DCE, from the choices defined in Table 2/T.30. When +FCC is modified by the DTE, the DCE shall copy +FCC into +FIS. */ GLOBAL T_ATI_RSLT setatPlusFCC (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_F_VR vr = F_VR_NotPresent; T_ACI_F_BR br = F_BR_NotPresent; T_ACI_F_WD wd = F_WD_NotPresent; T_ACI_F_LN ln = F_LN_NotPresent; T_ACI_F_DF df = F_DF_NotPresent; T_ACI_F_EC ec = F_EC_NotPresent; T_ACI_F_BF bf = F_BF_NotPresent; T_ACI_F_ST st = F_ST_NotPresent; T_ACI_F_JP jp = F_JP_NotPresent; UBYTE bvr = NOT_PRESENT_8BIT, bbf = NOT_PRESENT_8BIT, bjp = NOT_PRESENT_8BIT; cl = parse(cl,"xdddddxdx",&bvr,&br,&wd,&ln,&df,&ec,&bbf,&st,&bjp); if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } if (bvr NEQ NOT_PRESENT_8BIT) { vr = (T_ACI_F_VR)bvr; } if (bbf NEQ NOT_PRESENT_8BIT) { bf = (T_ACI_F_BF)bbf; } if (bjp NEQ NOT_PRESENT_8BIT) { jp = (T_ACI_F_JP)bjp; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fcc my_bat_set_plus_fcc; TRACE_FUNCTION("setatPlusFCC() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fcc, 0, sizeof(my_bat_set_plus_fcc)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FCC; cmd.params.ptr_set_plus_fcc = &my_bat_set_plus_fcc; my_bat_set_plus_fcc.vr = vr; my_bat_set_plus_fcc.br = br; my_bat_set_plus_fcc.wd = wd; my_bat_set_plus_fcc.ln = ln; my_bat_set_plus_fcc.df = df; my_bat_set_plus_fcc.ec = ec; my_bat_set_plus_fcc.bf = bf; my_bat_set_plus_fcc.st = st; my_bat_set_plus_fcc.jp = jp; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFCC()"); ret = sAT_PlusFCC(srcId,vr,br,wd,ln,df,ec,bf,st,jp); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFCC (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_F_VR vr = F_VR_NotPresent; T_ACI_F_BR br = F_BR_NotPresent; T_ACI_F_WD wd = F_WD_NotPresent; T_ACI_F_LN ln = F_LN_NotPresent; T_ACI_F_DF df = F_DF_NotPresent; T_ACI_F_EC ec = F_EC_NotPresent; T_ACI_F_BF bf = F_BF_NotPresent; T_ACI_F_ST st = F_ST_NotPresent; T_ACI_F_JP jp = F_JP_NotPresent; SHORT bvr = -1, bbf = -1, bjp = -1; TRACE_FUNCTION("queatPlusFCC()"); ret = qAT_PlusFCC(srcId, &vr,&br,&wd,&ln,&df,&ec,&bf,&st,&jp); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FCC:%X,%d,%d,%d,%d,%d,%X,%d,%X",vr,br,wd,ln,df,ec,bf,st,jp); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFCLASS | +--------------------------------------------------------------------+ PURPOSE : +FCLASS command (Service Class Indication) */ GLOBAL T_ATI_RSLT setatPlusFCLASS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char val[4]="-1"; T_ACI_FCLASS_CLASS class_type = FCLASS_CLASS_NotPresent; switch (*cl) { case('0'): { cl++; class_type = FCLASS_CLASS_Data; break; } case('2'): { cl++; if (*cl EQ '.') { cl++; if (*cl EQ '0') { cl++; class_type = FCLASS_CLASS_Fax20; break; } } cmdAtError(atError); return ATI_FAIL; } case('8'): { cl++; class_type = FCLASS_CLASS_Voice; break; } default: { cmdAtError(atError); return ATI_FAIL; } } if (*cl NEQ '\0' && *cl NEQ ';') { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fclass my_bat_set_plus_fclass; TRACE_FUNCTION("setatPlusFCLASS() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fclass, 0, sizeof(my_bat_set_plus_fclass)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FCLASS; cmd.params.ptr_set_plus_fclass = &my_bat_set_plus_fclass; my_bat_set_plus_fclass.n = class_type; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFCLASS()"); ret = sAT_PlusFCLASS(srcId, class_type); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFCLASS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char val[4]="-1"; T_ACI_FCLASS_CLASS class_type = FCLASS_CLASS_NotPresent; TRACE_FUNCTION("atPlusFCLASS()"); ret = qAT_PlusFCLASS(srcId, &class_type); if (ret EQ AT_CMPL) { if (class_type EQ 20) { sprintf(g_sa,"%s","2.0"); } else { sprintf(g_sa,"%d",class_type); } io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFCQ | +--------------------------------------------------------------------+ PURPOSE : +FCQ command (quality control) */ GLOBAL T_ATI_RSLT setatPlusFCQ (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FCQ_RQ rq=FCQ_RQ_NotPresent; T_ACI_FCQ_TQ tq=FCQ_TQ_NotPresent; cl = parse(cl,"dd",&rq,&tq); if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fcq my_bat_set_plus_fcq; TRACE_FUNCTION("setatPlusFCQ() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fcq, 0, sizeof(my_bat_set_plus_fcq)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FCQ; cmd.params.ptr_set_plus_fcq = &my_bat_set_plus_fcq; my_bat_set_plus_fcq.rq = rq; my_bat_set_plus_fcq.tq = tq; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFCQ()"); ret = sAT_PlusFCQ(srcId,rq,tq); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFCQ (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FCQ_RQ rq=FCQ_RQ_NotPresent; T_ACI_FCQ_TQ tq=FCQ_TQ_NotPresent; TRACE_FUNCTION("queatPlusFCQ()"); ret = qAT_PlusFCQ(srcId, &rq,&tq); if (ret EQ AT_CMPL) { sprintf(g_sa,"%s%d,%d","+FCQ:",rq,tq); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFCR | +--------------------------------------------------------------------+ PURPOSE : +FCR command (Receive capability) */ GLOBAL T_ATI_RSLT setatPlusFCR (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FCR_VAL val = FCR_VAL_NotPresent; cl = parse(cl,"d",&val); if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fcr my_bat_set_plus_fcr; TRACE_FUNCTION("setatPlusFCR() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fcr, 0, sizeof(my_bat_set_plus_fcr)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FCR; cmd.params.ptr_set_plus_fcr = &my_bat_set_plus_fcr; my_bat_set_plus_fcr.value = val; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFCR()"); ret = sAT_PlusFCR(srcId,val); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFCR (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FCR_VAL val = FCR_VAL_NotPresent; TRACE_FUNCTION("queatPlusFCR()"); ret = qAT_PlusFCR(srcId, &val); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FCR:%d",val); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFCS | +--------------------------------------------------------------------+ PURPOSE: ITU-T.32/8.5.1.3 Current session results, +FCS – Read syntax: +FCS? – DCE response: VR,BR,WD,LN,DF,EC,BF,ST,JP – Valid values: see Table 21 – Default values: 0,0,0,0,0,0,0,0,0 – Mandatory values: as required by Recommendation T.30 The +FCS parameter is loaded with the negotiated T.30 parameters for the current session. A transmitting DCE generates DCS; a receiving DCE gets DCS from the remote station. The DTE may only read this parameter. The DCE shall set the +FCS parameter to the default values on DCE initialization, on +FIP command execution, and at the end of a session. The contents of +FCS are spontaneously reported during execution of +FDR (8.3.4) or +FDT (8.3.3) commands, by the +FCS:VR,BR,WD,LN,DF,EC,BF,ST,JP response, using the same compound parameter format. See 8.4.2.1. NOTE – The use of additional subparameters for the +FCS, in order to support future T.30 features, is for further study. */ GLOBAL T_ATI_RSLT queatPlusFCS(char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_F_VR vr; T_ACI_F_BR br; T_ACI_F_WD wd; T_ACI_F_LN ln; T_ACI_F_DF df; T_ACI_F_EC ec; T_ACI_F_BF bf; T_ACI_F_ST st; T_ACI_F_JP jp; TRACE_FUNCTION("queatPlusFCS()"); ret = qAT_PlusFCS(srcId,&vr,&br,&wd,&ln,&df,&ec,&bf,&st,&jp); if(ret EQ AT_CMPL) { sprintf(g_sa,"+FCS:%X,%d,%d,%d,%d,%d,%X,%d,%X",vr,br,wd,ln,df,ec,bf,st,jp); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFEA | +--------------------------------------------------------------------+ PURPOSE : +FEA */ GLOBAL T_ATI_RSLT setatPlusFEA(char *cl, UBYTE srcId) { SHORT fea = -1; cl = parse(cl, "r", &fea); if (!cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fea my_bat_set_plus_fea; TRACE_FUNCTION("setatPlusFEA() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fea, 0, sizeof(my_bat_set_plus_fea)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FEA; cmd.params.ptr_set_plus_fea = &my_bat_set_plus_fea; my_bat_set_plus_fea.value = fea; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFEA()"); if (fea NEQ -1) { fd.FEA_stat = (char) fea; } return ATI_CMPL; #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFEA(char *cl, UBYTE srcId) { SHORT fea=-1; TRACE_FUNCTION("queatPlusFEA()"); sprintf(g_sa,"+FEA:%d", fd.FEA_stat); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); return ATI_CMPL; } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFFC | +--------------------------------------------------------------------+ PURPOSE : +FFC command (format conversion) */ GLOBAL T_ATI_RSLT setatPlusFFC (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FFC_VRC vrc=FFC_VRC_NotPresent; T_ACI_FFC_DFC dfc=FFC_DFC_NotPresent; T_ACI_FFC_LNC lnc=FFC_LNC_NotPresent; T_ACI_FFC_WDC wdc=FFC_WDC_NotPresent; cl = parse(cl,"dddd",&vrc,&dfc,&lnc,&wdc); if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_ffc my_bat_set_plus_ffc; TRACE_FUNCTION("setatPlusFFC() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_ffc, 0, sizeof(my_bat_set_plus_ffc)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FFC; cmd.params.ptr_set_plus_ffc = &my_bat_set_plus_ffc; my_bat_set_plus_ffc.vrc = vrc; my_bat_set_plus_ffc.dfc = dfc; my_bat_set_plus_ffc.lnc = lnc; my_bat_set_plus_ffc.wdc = wdc; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFFC()"); ret = sAT_PlusFFC(srcId,vrc,dfc,lnc,wdc); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFFC (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FFC_VRC vrc=FFC_VRC_NotPresent; T_ACI_FFC_DFC dfc=FFC_DFC_NotPresent; T_ACI_FFC_LNC lnc=FFC_LNC_NotPresent; T_ACI_FFC_WDC wdc=FFC_WDC_NotPresent; TRACE_FUNCTION("atPlusFFC()"); ret = qAT_PlusFFC(srcId,&vrc,&dfc,&lnc,&wdc); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FFC:%d,%d,%d,%d",vrc,dfc,lnc,wdc); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFHS | +--------------------------------------------------------------------+ PURPOSE : +FHS command (query termination status) */ GLOBAL T_ATI_RSLT queatPlusFHS(char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FHS_STAT stat; TRACE_FUNCTION("queatPlusFHS()"); ret = qAT_PlusFHS(srcId,&stat); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FHS:%02X",stat); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFIE | +--------------------------------------------------------------------+ PURPOSE : +FIE command (procedure interrupt enable) */ GLOBAL T_ATI_RSLT setatPlusFIE (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FIE_VAL val=FIE_VAL_NotPresent; cl = parse(cl,"d",&val); if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fie my_bat_set_plus_fie; TRACE_FUNCTION("setatPlusFIE() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fie, 0, sizeof(my_bat_set_plus_fie)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FIE; cmd.params.ptr_set_plus_fie = &my_bat_set_plus_fie; my_bat_set_plus_fie.value = val; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("atPlusFIE()"); ret = sAT_PlusFIE(srcId,val); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFIE (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FIE_VAL val=FIE_VAL_NotPresent; TRACE_FUNCTION("queatPlusFIE()"); ret = qAT_PlusFIE(srcId, &val); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FIE:%d",val); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFIS | +--------------------------------------------------------------------+ PURPOSE : ITU-T.32/8.5.1.2 Current session parameters, +FIS – Write syntax: +FIS=VR,BR,WD,LN,DF,EC,BF,ST,JP – Valid values: see Table 21 – Default values: set by manufacturer – Mandatory values: as required by Recommendation T.30. The +FIS parameter allows the DTE to sense and constrain the capabilities used for the current session. The DCE uses +FIS to generate DIS or DTC messages directly, and uses +FIS and received DIS messages to generate DCS messages. The DCE shall set the +FIS parameter from the +FCC parameter on DCE initialization, upon +FIP command execution, when +FCC is written, and at the end of a session. */ GLOBAL T_ATI_RSLT setatPlusFIS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_F_VR vr = F_VR_NotPresent; T_ACI_F_BR br = F_BR_NotPresent; T_ACI_F_WD wd = F_WD_NotPresent; T_ACI_F_LN ln = F_LN_NotPresent; T_ACI_F_DF df = F_DF_NotPresent; T_ACI_F_EC ec = F_EC_NotPresent; T_ACI_F_BF bf = F_BF_NotPresent; T_ACI_F_ST st = F_ST_NotPresent; T_ACI_F_JP jp = F_JP_NotPresent; UBYTE bvr = NOT_PRESENT_8BIT, bbf = NOT_PRESENT_8BIT, bjp = NOT_PRESENT_8BIT; cl = parse(cl,"xdddddxdx",&bvr,&br,&wd,&ln,&df,&ec,&bbf,&st,&bjp); if (bvr NEQ NOT_PRESENT_8BIT) vr = (LONG)bvr; if (bbf NEQ NOT_PRESENT_8BIT) bf=(LONG)bbf; if (bjp NEQ NOT_PRESENT_8BIT) jp=(LONG)bjp; if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fis my_bat_set_plus_fis; TRACE_FUNCTION("setatPlusFIS() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fis, 0, sizeof(my_bat_set_plus_fis)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FIS; cmd.params.ptr_set_plus_fis = &my_bat_set_plus_fis; my_bat_set_plus_fis.vr = vr; my_bat_set_plus_fis.br = br; my_bat_set_plus_fis.wd = wd; my_bat_set_plus_fis.ln = ln; my_bat_set_plus_fis.df = df; my_bat_set_plus_fis.ec = ec; my_bat_set_plus_fis.bf = bf; my_bat_set_plus_fis.st = st; my_bat_set_plus_fis.jp = jp; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFIS()"); ret = sAT_PlusFIS(srcId,vr,br,wd,ln,df,ec,bf,st,jp); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFIS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_F_VR vr = F_VR_NotPresent; T_ACI_F_BR br = F_BR_NotPresent; T_ACI_F_WD wd = F_WD_NotPresent; T_ACI_F_LN ln = F_LN_NotPresent; T_ACI_F_DF df = F_DF_NotPresent; T_ACI_F_EC ec = F_EC_NotPresent; T_ACI_F_BF bf = F_BF_NotPresent; T_ACI_F_ST st = F_ST_NotPresent; T_ACI_F_JP jp = F_JP_NotPresent; SHORT bvr = -1, bbf = -1, bjp = -1; TRACE_FUNCTION("queatPlusFIS()"); ret = qAT_PlusFIS(srcId, &vr,&br,&wd,&ln,&df,&ec,&bf,&st,&jp); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FIS:%X,%d,%d,%d,%d,%d,%X,%d,%X",vr,br,wd,ln,df,ec,bf,st,jp); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFLI | +--------------------------------------------------------------------+ PURPOSE : +FLI command (Local Station ID) */ GLOBAL T_ATI_RSLT setatPlusFLI (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char idstr[MAX_ID_CHAR]={0}; cl = parse(cl, "s", (LONG)MAX_ID_CHAR, idstr); if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fli my_bat_set_plus_fli; TRACE_FUNCTION("setatPlusFLI() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fli, 0, sizeof(my_bat_set_plus_fli)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FLI; cmd.params.ptr_set_plus_fli = &my_bat_set_plus_fli; my_bat_set_plus_fli.c_id_str = strlen(idstr); memcpy(my_bat_set_plus_fli.id_str, idstr, my_bat_set_plus_fli.c_id_str); bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFLI()"); ret = sAT_PlusFLI(srcId,idstr); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFLI (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char idstr[MAX_ID_CHAR]={0}; TRACE_FUNCTION("queatPlusFLI()"); ret = qAT_PlusFLI(srcId, idstr); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FLI:\"%s\"",idstr); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFLP | +--------------------------------------------------------------------+ PURPOSE : +FLP command (document to poll indication) */ GLOBAL T_ATI_RSLT setatPlusFLP (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FLP_VAL val=FLP_VAL_NotPresent; cl = parse(cl,"d",&val); if ( !cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_flp my_bat_set_plus_flp; TRACE_FUNCTION("setatPlusFLP() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_flp, 0, sizeof(my_bat_set_plus_flp)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FLP; cmd.params.ptr_set_plus_flp = &my_bat_set_plus_flp; my_bat_set_plus_flp.value = val; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFLP()"); ret = sAT_PlusFLP(srcId,val); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFLP (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FLP_VAL val=FLP_VAL_NotPresent; TRACE_FUNCTION("queatPlusFLP()"); ret = qAT_PlusFLP(srcId, &val); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FLP:%d",val); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFMS | +--------------------------------------------------------------------+ PURPOSE : +FMS command (minimum phase C speed) */ GLOBAL T_ATI_RSLT setatPlusFMS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_F_BR val=F_BR_NotPresent; cl = parse(cl,"d",&val); if ( !cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fms my_bat_set_plus_fms; TRACE_FUNCTION("setatPlusFMS() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fms, 0, sizeof(my_bat_set_plus_fms)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FMS; cmd.params.ptr_set_plus_fms = &my_bat_set_plus_fms; my_bat_set_plus_fms.value = val; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFMS()"); ret = sAT_PlusFMS(srcId, val); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFMS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_F_BR val=F_BR_NotPresent; TRACE_FUNCTION("queatPlusFMS()"); ret=qAT_PlusFMS(srcId, &val); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FMS:%d",val); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFNR | +--------------------------------------------------------------------+ PURPOSE : +FNR */ GLOBAL T_ATI_RSLT setatPlusFNR(char *cl, UBYTE srcId) { SHORT r=-1,t=-1,i=-1,n=-1; cl = parse(cl,"rrrr",&r,&t,&i,&n); if (!cl OR r > 1 OR t > 1 OR i > 1 OR n > 1 OR (r EQ -1 AND t EQ -1 AND i EQ -1 AND n EQ -1)) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { /* T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fnr my_bat_set_plus_fnr; //??? TRACE_FUNCTION("setatPlusFNR() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fnr, 0, sizeof(my_bat_set_plus_fnr)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FNR; cmd.params.ptr_set_plus_fnr = &my_bat_set_plus_fnr; my_bat_set_plus_fnr.value = val; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; */ TRACE_EVENT("setatPlusFNR(): is obsolete ? <=== !!! consult KJF"); return ATI_FAIL; } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFNR()"); if(r NEQ -1) fd.FNR.rpr_stat = (char) r; if(t NEQ -1) fd.FNR.tpr_stat = (char) t; if(i NEQ -1) fd.FNR.idr_stat = (char) i; if(n NEQ -1) fd.FNR.nsr_stat = (char) n; return ATI_CMPL; #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFNR(char *cl, UBYTE srcId) { SHORT r=-1,t=-1,i=-1,n=-1; TRACE_FUNCTION("queatPlusFNR()"); sprintf(g_sa,"+FNR:%d,%d,%d,%d",fd.FNR.rpr_stat,fd.FNR.tpr_stat,fd.FNR.idr_stat,fd.FNR.nsr_stat); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); return ATI_CMPL; } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFND | +--------------------------------------------------------------------+ PURPOSE : +FND command (NSF message data indication) */ GLOBAL T_ATI_RSLT setatPlusFND (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FND_VAL val=FND_VAL_NotPresent; cl = parse(cl,"d",&val); if ( !cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { /* T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fnd my_bat_set_plus_fnd; //??? TRACE_FUNCTION("setatPlusFND() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fnd, 0, sizeof(my_bat_set_plus_fnd)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FND; cmd.params.ptr_set_plus_fnd = &my_bat_set_plus_fnd; my_bat_set_plus_fnd.value = val; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; */ TRACE_EVENT("setatPlusFND(): is obsolete ? <=== !!! consult KJF"); return ATI_FAIL; } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFND()"); ret = sAT_PlusFND(srcId,val); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFND (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FND_VAL val=FND_VAL_NotPresent; TRACE_FUNCTION("queatPlusFND()"); ret = qAT_PlusFND(srcId, &val); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FND:%d",val); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFNS | +--------------------------------------------------------------------+ PURPOSE : +FNS command (non standard facilities) */ GLOBAL T_ATI_RSLT setatPlusFNS (char *cl, UBYTE srcId) { char *me="+FNS:"; /* weird...!! */ T_ACI_RETURN ret = AT_FAIL; UBYTE len=0; UBYTE nsf[90]; LOCAL char nsf_str[269]={0}; char buf [3]; SHORT i=0; cl = parse(cl, "s", (LONG)269, nsf_str); if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } compact(nsf_str,(USHORT)strlen(nsf_str)); while (nsf_str[i] NEQ '\0') { buf[0]=nsf_str[i++]; buf[1]=nsf_str[i++]; buf[2]='\0'; me = parse (buf, "x", &nsf[len++]); if (!me) { cmdAtError(atError); return ATI_FAIL; } } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fns my_bat_set_plus_fns; TRACE_FUNCTION("setatPlusFNS() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fns, 0, sizeof(my_bat_set_plus_fns)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FNS; cmd.params.ptr_set_plus_fns = &my_bat_set_plus_fns; my_bat_set_plus_fns.v_nsf = TRUE; my_bat_set_plus_fns.c_nsf = len; memcpy(my_bat_set_plus_fns.nsf, nsf, len); bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFNS()"); ret = sAT_PlusFNS(srcId, len, nsf); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFNS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; UBYTE len=0; UBYTE nsf[90]; LOCAL char nsf_str[269]={0}; SHORT i=0; TRACE_FUNCTION("queatPlusFNS()"); ret=qAT_PlusFNS(srcId, &len, nsf); if (ret EQ AT_CMPL) { strcpy(g_sa,"+FNS:"); OutHexReport(srcId, (USHORT)len, nsf); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFPA | +--------------------------------------------------------------------+ PURPOSE : +FPA command (selective polling address string) */ GLOBAL T_ATI_RSLT setatPlusFPA (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char sepstr[MAX_ID_CHAR]={0}; cl =parse(cl,"s",(LONG)MAX_ID_CHAR,sepstr); if (!cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fpa my_bat_set_plus_fpa; TRACE_FUNCTION("setatPlusFPA() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fpa, 0, sizeof(my_bat_set_plus_fpa)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FPA; cmd.params.ptr_set_plus_fpa = &my_bat_set_plus_fpa; my_bat_set_plus_fpa.c_spa_str = strlen(sepstr); memcpy(my_bat_set_plus_fpa.spa_str, sepstr, my_bat_set_plus_fpa.c_spa_str); bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFPA()"); ret = sAT_PlusFPA(srcId, sepstr); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFPA (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char sepstr[MAX_ID_CHAR]={0}; TRACE_FUNCTION("atPlusFPA()"); ret = qAT_PlusFPA(srcId, sepstr); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FPA:\"%s\"",sepstr); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFPI | +--------------------------------------------------------------------+ PURPOSE : +FPI command (local fax station id string) */ GLOBAL T_ATI_RSLT setatPlusFPI (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char idstr[MAX_ID_CHAR] = {0}; cl = parse(cl, "s", (LONG)MAX_ID_CHAR, idstr); if (!cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fpi my_bat_set_plus_fpi; TRACE_FUNCTION("setatPlusFPI() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fpi, 0, sizeof(my_bat_set_plus_fpi)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FPI; cmd.params.ptr_set_plus_fpi = &my_bat_set_plus_fpi; my_bat_set_plus_fpi.c_id_str = strlen(idstr); memcpy(my_bat_set_plus_fpi.id_str, idstr, my_bat_set_plus_fpi.c_id_str); bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFPI()"); ret = sAT_PlusFPI(srcId, idstr); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFPI (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char idstr[MAX_ID_CHAR]={0}; TRACE_FUNCTION("queatPlusFPI()"); ret = qAT_PlusFPI(srcId, idstr); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FPI:\"%s\"",idstr); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFPS | +--------------------------------------------------------------------+ PURPOSE : +FPS command (page status) */ GLOBAL T_ATI_RSLT setatPlusFPS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FPS_PPR ppr=FPS_PPR_NotPresent; cl = parse(cl,"d",&ppr); if ( !cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fps my_bat_set_plus_fps; TRACE_FUNCTION("setatPlusFPS() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fps, 0, sizeof(my_bat_set_plus_fps)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FPS; cmd.params.ptr_set_plus_fps = &my_bat_set_plus_fps; my_bat_set_plus_fps.ppr = ppr; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFPS()"); ret = sAT_PlusFPS(srcId, ppr); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFPS (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FPS_PPR ppr=FPS_PPR_NotPresent; TRACE_FUNCTION("queatPlusFPS()"); ret = qAT_PlusFPS(srcId, &ppr); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FPS:%d",ppr); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFPW | +--------------------------------------------------------------------+ PURPOSE : +FPW command (password string) */ GLOBAL T_ATI_RSLT setatPlusFPW (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char pwdstr[MAX_ID_CHAR]={0}; cl = parse(cl,"s",(LONG)MAX_ID_CHAR,pwdstr); if (!cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fpw my_bat_set_plus_fpw; TRACE_FUNCTION("setatPlusFPW() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fpw, 0, sizeof(my_bat_set_plus_fpw)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FPW; cmd.params.ptr_set_plus_fpw = &my_bat_set_plus_fpw; my_bat_set_plus_fpw.c_pw_str = strlen(pwdstr); memcpy(my_bat_set_plus_fpw.pw_str, pwdstr, my_bat_set_plus_fpw.c_pw_str); bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFPW()"); ret = sAT_PlusFPW(srcId, pwdstr); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFPW (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char pwdstr[MAX_ID_CHAR]={0}; TRACE_FUNCTION("queatPlusFPW()"); ret = qAT_PlusFPW(srcId, pwdstr); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FPW:\"%s\"",pwdstr); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFRQ | +--------------------------------------------------------------------+ PURPOSE : +FRQ command (quality control) */ GLOBAL T_ATI_RSLT setatPlusFRQ (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; UBYTE pgl = NOT_PRESENT_8BIT, cbl = NOT_PRESENT_8BIT; cl = parse(cl,"xx",&pgl,&cbl); if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_frq my_bat_set_plus_frq; TRACE_FUNCTION("setatPlusFRQ() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_frq, 0, sizeof(my_bat_set_plus_frq)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FRQ; cmd.params.ptr_set_plus_frq = &my_bat_set_plus_frq; my_bat_set_plus_frq.pgl = pgl; my_bat_set_plus_frq.cbl = cbl; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFRQ()"); ret = sAT_PlusFRQ(srcId, pgl, cbl); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFRQ (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; SHORT pgl = ACI_NumParmNotPresent, cbl = ACI_NumParmNotPresent; TRACE_FUNCTION("queatPlusFRQ()"); ret = qAT_PlusFRQ(srcId, &pgl,&cbl); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FRQ:%X,%X",pgl,cbl); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFCT | +--------------------------------------------------------------------+ PURPOSE : +FCT command (phase C response timeout) */ GLOBAL T_ATI_RSLT setatPlusFCT (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; UBYTE val = NOT_PRESENT_8BIT; cl = parse(cl,"x",&val); if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fct my_bat_set_plus_fct; TRACE_FUNCTION("setatPlusFCT() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fct, 0, sizeof(my_bat_set_plus_fct)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FCT; cmd.params.ptr_set_plus_fct = &my_bat_set_plus_fct; my_bat_set_plus_fct.value = val; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFCT()"); ret = sAT_PlusFCT(srcId,val); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFCT (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; SHORT val=-1; TRACE_FUNCTION("queatPlusFCT()"); ret = qAT_PlusFCT(srcId,(SHORT*)&val); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FCT:%X",val); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFSA | +--------------------------------------------------------------------+ PURPOSE : +FSA command (destination subaddress string) */ GLOBAL T_ATI_RSLT setatPlusFSA (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char substr[MAX_ID_CHAR]={0}; cl = parse(cl,"s",(LONG)MAX_ID_CHAR,substr); if (!cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fsa my_bat_set_plus_fsa; TRACE_FUNCTION("setatPlusFSA() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fsa, 0, sizeof(my_bat_set_plus_fsa)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FSA; cmd.params.ptr_set_plus_fsa = &my_bat_set_plus_fsa; my_bat_set_plus_fsa.c_sub_str = strlen(substr); memcpy(my_bat_set_plus_fsa.sub_str, substr, my_bat_set_plus_fsa.c_sub_str); bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFSA()"); ret = sAT_PlusFSA(srcId, substr); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFSA (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; char substr[MAX_ID_CHAR]={0}; TRACE_FUNCTION("queatPlusFSA()"); ret = qAT_PlusFSA(srcId, substr); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FSA:\"%s\"",substr); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFSP | +--------------------------------------------------------------------+ PURPOSE : +FSP command (document to poll indication) */ GLOBAL T_ATI_RSLT setatPlusFSP (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FSP_VAL val=FSP_VAL_NotPresent; cl = parse(cl, "d", &val); if ( !cl ) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fsp my_bat_set_plus_fsp; TRACE_FUNCTION("setatPlusFSP() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fsp, 0, sizeof(my_bat_set_plus_fsp)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FSP; cmd.params.ptr_set_plus_fsp = &my_bat_set_plus_fsp; my_bat_set_plus_fsp.poll = val; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFSP()"); ret = sAT_PlusFSP(srcId, val); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFSP (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FSP_VAL val=FSP_VAL_NotPresent; TRACE_FUNCTION("queatPlusFSP()"); ret = qAT_PlusFSP(srcId, &val); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FSP:%d",val); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /*--------- Action Commands -------------------------------------*/ /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFDT | +--------------------------------------------------------------------+ PURPOSE : +FDT command (data transmission) */ GLOBAL T_ATI_RSLT setatPlusFDT(char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; TRACE_FUNCTION("setatPlusFDT()"); ret = sAT_PlusFDT(srcId); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFDR | +--------------------------------------------------------------------+ PURPOSE : +FDR command (data reception) */ GLOBAL T_ATI_RSLT setatPlusFDR(char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; TRACE_FUNCTION("setatPlusFDR()"); ret = sAT_PlusFDR(srcId); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFIP | +--------------------------------------------------------------------+ PURPOSE : ITU-T.32/8.3.6 Initialize facsimile parameters, +FIP – Syntax: +FIP[=<value>] The +FIP command causes the DCE to initialize all Service Class 2 Facsimile Parameters to the manufacturer determined default settings. This command does not change the setting of +FCLASS. This command has the same effect as if the DTE had issued individual parameter setting commands. Manufacturers may also provide a selection of default profiles, chosen by the optional <value>. If <value> is unspecified or 0, the parameters shall be set to those specified in this Recommendation (e.g. Appendix I). For other <value>s, the manufacturer determines the profile settings. This command may be issued during a session. The DCE shall use the new settings at the next time they are sampled; for example, a new +FIS setting would be used the next time the DCE enters Phase B. */ GLOBAL T_ATI_RSLT setatPlusFIP(char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; #ifdef FF_ATI_BAT { /* T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fip my_bat_set_plus_fip; //??? TRACE_FUNCTION("setatPlusFIP() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fip, 0, sizeof(my_bat_set_plus_fip)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FIP; cmd.params.ptr_set_plus_fip = &my_bat_set_plus_fip; my_bat_set_plus_fip.value = val; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; */ TRACE_EVENT("setatPlusFIP(): is obsolete ? <=== !!! consult KJF"); return ATI_FAIL; } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFIP()"); ret = sAT_PlusFIP(srcId); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); /* * sAT_PlusFIP always returns AT_CMPL in the present implementation * and so setatPlusFIP always results in an error .. * this happens for example in testcase ACIFD052 */ #endif /* no FF_ATI_BAT*/ } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFKS | +--------------------------------------------------------------------+ PURPOSE : +FKS command (terminate) */ GLOBAL T_ATI_RSLT setatPlusFKS(char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; /* T_BAT_cmd_set_plus_fks my_bat_set_plus_fks; //??? TRACE_FUNCTION("setatPlusFKS() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fks, 0, sizeof(my_bat_set_plus_fks)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FKS; cmd.params.ptr_set_plus_fks = &my_bat_set_plus_fks; my_bat_set_plus_fks.value = val; */ bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFKS()"); ret = sAT_PlusFKS(srcId); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFIT | +--------------------------------------------------------------------+ PURPOSE : +FIT command (inactivity timeout) */ GLOBAL T_ATI_RSLT setatPlusFIT (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FIT_ACT act = FIT_ACT_NotPresent; SHORT time = ACI_NumParmNotPresent; cl = parse(cl,"dd",&time,&act); if ( !cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fit my_bat_set_plus_fit; TRACE_FUNCTION("setatPlusFIT() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fit, 0, sizeof(my_bat_set_plus_fit)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FIT; cmd.params.ptr_set_plus_fit = &my_bat_set_plus_fit; my_bat_set_plus_fit.time = time; my_bat_set_plus_fit.action = act; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFIT()"); ret = sAT_PlusFIT(srcId, time, act); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFIT (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FIT_ACT act = FIT_ACT_NotPresent; SHORT time = ACI_NumParmNotPresent; TRACE_FUNCTION("queatPlusFIT()"); ret = qAT_PlusFIT(srcId, &time, &act); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FIT:%d,%d",time,act); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFBO | +--------------------------------------------------------------------+ PURPOSE : +FBO command (data bit order) */ GLOBAL T_ATI_RSLT setatPlusFBO (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FBO_VAL val = FBO_VAL_NotPresent; cl = parse(cl,"d",&val); if ( !cl) { cmdAtError(atError); return ATI_FAIL; } #ifdef FF_ATI_BAT { T_BAT_cmd_send cmd; T_BAT_cmd_set_plus_fbo my_bat_set_plus_fbo; TRACE_FUNCTION("setatPlusFBO() calls bat_send() <=== as APPLICATION"); memset(&my_bat_set_plus_fbo, 0, sizeof(my_bat_set_plus_fbo)); cmd.ctrl_params = BAT_CMD_SET_PLUS_FBO; cmd.params.ptr_set_plus_fbo = &my_bat_set_plus_fbo; my_bat_set_plus_fbo.value = val; bat_send(ati_bat_get_client(srcId), &cmd); return ATI_EXCT; /* executing, because response is passed by callback function */ } #else /* OLD FUNCTION BODY */ TRACE_FUNCTION("setatPlusFBO()"); ret = sAT_PlusFBO(srcId,val); if (ret EQ AT_FAIL) { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); #endif /* no FF_ATI_BAT*/ } GLOBAL T_ATI_RSLT queatPlusFBO (char *cl, UBYTE srcId) { T_ACI_RETURN ret = AT_FAIL; T_ACI_FBO_VAL val = FBO_VAL_NotPresent; TRACE_FUNCTION("queatPlusFBO()"); ret = qAT_PlusFBO(srcId, &val); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FBO:%d",val); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFBS | +--------------------------------------------------------------------+ PURPOSE : +FBS command (buffer size) */ GLOBAL T_ATI_RSLT queatPlusFBS (char *cl, UBYTE srcId) { SHORT tbs; SHORT rbs; T_ACI_RETURN ret = AT_FAIL; TRACE_FUNCTION("queatPlusFBS()"); ret = qAT_PlusFBS(srcId, &tbs,&rbs); if (ret EQ AT_CMPL) { sprintf(g_sa,"+FBS:%X,%X",tbs,rbs); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } else { cmdAtError(atError); } return (map_aci_2_ati_rslt(ret)); } /*---------------------- Call Backs -----------------------------------------*/ /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFCI | +--------------------------------------------------------------------+ PURPOSE : +FCI answer (remote ID CSI report) */ GLOBAL void rCI_PlusFCI( /*UBYTE srcId,*/ CHAR * rmtId) { UBYTE srcId = srcId_cb; if (fd.FNR.idr_stat) { if(rmtId) sprintf(g_sa,"%s\"%s\"","+FCI:",rmtId); else strcpy(g_sa,"+FCI:"); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFCO | +--------------------------------------------------------------------+ PURPOSE : +FCO answer (connect information) */ GLOBAL void rCI_PlusFCO(void) { UBYTE srcId = srcId_cb; io_sendMessage(srcId, "+FCO", ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFCS | +--------------------------------------------------------------------+ PURPOSE : +FCS answer (DCS frame information) */ GLOBAL void rCI_PlusFCS ( /*UBYTE srcId,*/ T_ACI_F_VR vr, T_ACI_F_BR br, T_ACI_F_WD wd, T_ACI_F_LN ln, T_ACI_F_DF df, T_ACI_F_EC ec, T_ACI_F_BF bf, T_ACI_F_ST st, T_ACI_F_JP jp ) { UBYTE srcId = srcId_cb; if (fd.FNR.tpr_stat) { sprintf(g_sa,"+FCS:%X,%d,%d,%d,%d,%d,%X,%d,%X",vr,br,wd,ln,df,ec,bf,st,jp); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFDM | +--------------------------------------------------------------------+ PURPOSE : +FDM answer (transition to data modem) */ GLOBAL void rCI_PlusFDM (UBYTE srcId) { io_sendMessage(srcId, "+FDM", ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : atPlusFET | +--------------------------------------------------------------------+ PURPOSE : +FET command (procedure interrupt enable) */ GLOBAL void rCI_PlusFET( /*UBYTE srcId,*/ T_ACI_FET_PPM ppm) { UBYTE srcId = srcId_cb; sprintf(g_sa,"%s%d","+FET:",ppm); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFFD | +--------------------------------------------------------------------+ PURPOSE : +FFD answer (file diagnostics) */ GLOBAL void rCI_PlusFFD (UBYTE srcId) { io_sendMessage(srcId, "+FFD", ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFHS | +--------------------------------------------------------------------+ PURPOSE : +FHS answer (hang up information) */ GLOBAL void rCI_PlusFHS( /*UBYTE srcId,*/ T_ACI_FHS_STAT stat) { UBYTE srcId = srcId_cb; sprintf(g_sa,"+FHS:%02X", stat); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFHR | +--------------------------------------------------------------------+ PURPOSE : +FHR answer (received HDLC frame reporting) */ GLOBAL void rCI_PlusFHR( /*UBYTE srcId,*/ USHORT len, UBYTE * hdlc) { UBYTE srcId = srcId_cb; if (fd.FBU_stat) { strcpy(g_sa,"+FHR:"); OutHexReport(srcId, len, hdlc); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFHT | +--------------------------------------------------------------------+ PURPOSE : +FHT answer (transmitted HDLC Frame reporting) */ GLOBAL void rCI_PlusFHT( /*UBYTE srcId,*/ USHORT len, UBYTE * hdlc) { UBYTE srcId = srcId_cb; if (fd.FBU_stat) { strcpy(g_sa,"+FHT:"); OutHexReport(srcId, len, hdlc); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFIS | +--------------------------------------------------------------------+ PURPOSE : +FIS answer (DIS frame information) */ GLOBAL void rCI_PlusFIS ( /*UBYTE srcId,*/ T_ACI_F_VR vr, T_ACI_F_BR br, T_ACI_F_WD wd, T_ACI_F_LN ln, T_ACI_F_DF df, T_ACI_F_EC ec, T_ACI_F_BF bf, T_ACI_F_ST st, T_ACI_F_JP jp ) { UBYTE srcId = srcId_cb; if (fd.FNR.rpr_stat) { sprintf(g_sa,"+FIS:%X,%d,%d,%d,%d,%d,%X,%d,%X",vr,br,wd,ln,df,ec,bf,st,jp); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFNC | +--------------------------------------------------------------------+ PURPOSE : +FNC answer (non standard command reporting) */ GLOBAL void rCI_PlusFNC( /*UBYTE srcId,*/ USHORT len, UBYTE * nsc) { UBYTE srcId = srcId_cb; if (fd.FNR.nsr_stat) { strcpy(g_sa,"+FNC:"); OutHexReport(srcId, len, nsc); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFNF | +--------------------------------------------------------------------+ PURPOSE : +FNF answer (non standard facility reporting) */ GLOBAL void rCI_PlusFNF( /*UBYTE srcId,*/ USHORT len, UBYTE * nsf) { UBYTE srcId = srcId_cb; if (fd.FNR.nsr_stat) { strcpy(g_sa,"+FNF:"); OutHexReport(srcId, len, nsf); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFNS | +--------------------------------------------------------------------+ PURPOSE : +FNS answer (non standard setup reporting) */ GLOBAL void rCI_PlusFNS( /*UBYTE srcId,*/ USHORT len, UBYTE * nss) { UBYTE srcId = srcId_cb; if (fd.FNR.nsr_stat) { strcpy(g_sa,"+FNS:"); OutHexReport(srcId, len, nss); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFPA | +--------------------------------------------------------------------+ PURPOSE : +FPA answer (report polling address) */ GLOBAL void rCI_PlusFPA (/*UBYTE srcId,*/ char *sep) { UBYTE srcId = srcId_cb; if(sep) sprintf(g_sa,"+FPA:\"%s\"",sep); else strcpy(g_sa,"+FPA:"); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFPI | +--------------------------------------------------------------------+ PURPOSE : +FPI answer (remote ID CIG report) */ GLOBAL void rCI_PlusFPI( /*UBYTE srcId,*/ CHAR *cig) { UBYTE srcId = srcId_cb; if (fd.FNR.idr_stat) { if(cig) sprintf(g_sa,"%s\"%s\"","+FPI:",cig); else strcpy(g_sa,"+FPI:"); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFPO | +--------------------------------------------------------------------+ PURPOSE : +FPO answer (polling request) */ GLOBAL void rCI_PlusFPO(void) { UBYTE srcId = srcId_cb; io_sendMessage(srcId, "+FPO", ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFPS | +--------------------------------------------------------------------+ PURPOSE : +FPS answer (DIS frame information) */ GLOBAL void rCI_PlusFPS ( /*UBYTE srcId,*/ T_ACI_FPS_PPR ppr, SHORT lc, SHORT blc, SHORT cblc, SHORT lbc ) { UBYTE srcId = srcId_cb; sprintf(g_sa,"%s%d,%d,%d,%d,%d","+FPS:",ppr,lc,blc,cblc,lbc); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFPW | +--------------------------------------------------------------------+ PURPOSE : +FPW answer (report password) */ GLOBAL void rCI_PlusFPW (/*UBYTE srcId,*/ char *pwd) { UBYTE srcId = srcId_cb; if(pwd) sprintf(g_sa,"+FPW:\"%s\"",pwd); else strcpy(g_sa,"+FPW:"); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFSA | +--------------------------------------------------------------------+ PURPOSE : +FSA answer (report subaddress) */ GLOBAL void rCI_PlusFSA (/*UBYTE srcId,*/ char *sub) { UBYTE srcId = srcId_cb; if(sub) sprintf(g_sa,"+FSA:\"%s\"",sub); else sprintf(g_sa,"+FSA:"); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFTC | +--------------------------------------------------------------------+ PURPOSE : +FTC answer (DTC frame information) */ GLOBAL void rCI_PlusFTC ( /*UBYTE srcId,*/ T_ACI_F_VR vr, T_ACI_F_BR br, T_ACI_F_WD wd, T_ACI_F_LN ln, T_ACI_F_DF df, T_ACI_F_EC ec, T_ACI_F_BF bf, T_ACI_F_ST st, T_ACI_F_JP jp ) { UBYTE srcId = srcId_cb; if (fd.FNR.rpr_stat) { sprintf(g_sa,"+FTC:%X,%d,%d,%d,%d,%d,%X,%d,%X",vr,br,wd,ln,df,ec,bf,st,jp); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFTI | +--------------------------------------------------------------------+ PURPOSE : +FTI answer (remote ID TSI report) */ GLOBAL void rCI_PlusFTI( CHAR * tsi) { UBYTE srcId = srcId_cb; if (fd.FNR.idr_stat) { if(tsi) sprintf(g_sa,"%s\"%s\"","+FTI:",tsi); else strcpy(g_sa,"+FTI:"); io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT); } } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : rCI_PlusFVO | +--------------------------------------------------------------------+ PURPOSE : +FVO answer (transition to voice) */ GLOBAL void rCI_PlusFVO(void /*UBYTE srcId*/) { UBYTE srcId = srcId_cb; io_sendMessage(srcId, "+FVO", ATI_NORMAL_OUTPUT); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-F&D (8411) MODULE : ACI_FD_CMD | | STATE : code ROUTINE : OutHexReport | +--------------------------------------------------------------------+ PURPOSE : formatted hex report output */ GLOBAL void OutHexReport( UBYTE srcId, USHORT len, UBYTE * buf ) { USHORT i; UBYTE tmpBuf[SIZE_TMP_BUF]; /* memory should be allocated before the function is called for sa !!! sa needs at most (len * SIZE_TMP_BUF + 1) for what will be used here */ for( i=0; i < len; i++ ) { sprintf((char*)tmpBuf, "%02X ", buf[i]); strcat( g_sa, (char*)tmpBuf ); } g_sa[strlen(g_sa)-1] = '\0'; /* cut off last space char */ io_sendMessage(srcId, g_sa, ATI_FORCED_OUTPUT); } #endif /* FF_FAX */ #endif /* FAX_AND_DATA */