📄 tskwicr.c
字号:
else k = 0;
}
if(k == 99) k = 0;
else if(k==0) k = 0;
else (k = k/5+1);
Display_Signal_Qual(k);
WICWorkBufPTR = 0;
break;
case RESP_CSCS:
WICWorkBufPTR = 0;
break;
case RESP_CREG:
WICWorkBufPTR = 0;
break;
case RESP_CRING:
WICWorkBufPTR = 0;
OSQPost(peventDVS, (OS_EVENT *)MSG_WICRESP_RING);
break;
case RESP_CPIN:
i = Func_Search_Char(Search.Pos, WICWorkBufPTR, 0x0d);
if(chrWICWorkBuf[i-1] == 'Y'){ //READY
OSQPost(peventWIC, (OS_EVENT *)MSG_WICRESP_UIMRDY);
}
else if (chrWICWorkBuf[i-1] == 'N'){ //UIM PIN
OSQPost(peventWIC, (OS_EVENT *)MSG_WICRESP_UIMPIN);
}
else if (chrWICWorkBuf[i-1] == 'K'){ //UIM PUK
OSQPost(peventWIC, (OS_EVENT *)MSG_WICRESP_UIMPUK);
}
WICWorkBufPTR = 0;
break;
case RESP_CPWD:
WICWorkBufPTR = 0;
break;
case RESP_CAD:
WICWorkBufPTR = 0;
break;
case RESP_CBC:
i = Func_Search_Char(Search.Pos, WICWorkBufPTR, ',');
if(i == 0xffff) {
WICWorkBufPTR = 0;
break;
}
j = Func_Search_Char(i, WICWorkBufPTR, 0x0d);
if(j == 0xffff) {
WICWorkBufPTR = 0;
break;
}
k = 0;
for(l = i+1; l< j; l++){
if((chrWICWorkBuf[l] >= '0') && (chrWICWorkBuf[l]<='9')){
k = k*10 + chrWICWorkBuf[l] - '0';
}
else k = 0;
}
//61~63 0
//64~71
//72~79
//79~85
if(k < 63) k = 0;
else if(k < 71) k = 1;
else if(k < 79) k = 2;
else k = 3;
Display_Bat_Lvl(k);
WICWorkBufPTR = 0;
break;
case RESP_WIND:
i = Func_Search_Char(Search.Pos, WICWorkBufPTR, 0x0d);
k = 0;
for(j = Search.Pos; j<i; j++){
chrT = chrWICWorkBuf[j]-'0';
if(chrT <= 9){
k = k*10 + chrT;
}
else k = 0;
}
if (k == 128){
Display_Ser(0xff);
}
else if (k == 64){
Display_Ser(1);
}
else if(k == 0){
OSQPost(peventWIC, (OS_EVENT *)MSG_WICRESP_UIMNON);
}
WICWorkBufPTR = 0;
break;
case RESP_WCNT:
i = Func_Search_Char(Search.Pos, WICWorkBufPTR, 0x0d);
k = 0;
for(j = Search.Pos; j<i; j++){
chrT = chrWICWorkBuf[j]-'0';
if(chrT <= 9){
k = k*10 + chrT;
}
else k = 0;
}
if(k == 3) OSQPost(peventDVS, (OS_EVENT *) MSG_VOICE_CONNECT);
WICWorkBufPTR = 0;
break;
case RESP_WEND:
i = Func_Search_Char(Search.Pos, WICWorkBufPTR, 0x0d);
k = 0;
for(j = Search.Pos; j<i; j++){
chrT = chrWICWorkBuf[j]-'0';
if(chrT <= 9){
k = k*10 + chrT;
}
else k = 0;
}
if(k == 6 || k == 9) OSQPost(peventDVS, (OS_EVENT *) MSG_VOICE_BUSY);
WICWorkBufPTR = 0;
break;
case RESP_PROMPT:
WICWorkBufPTR = 0;
OSQPost(peventWIC, (OS_EVENT *)MSG_WICRESP_SMPROMPT);
break;
case RESP_CMT:
//data example:
//+CMT:"13705153921","02/05/17,10:43:07",129,,,5<CR><LF>
//HELLO<CR><LF>
i = Func_Search_Char(Search.Pos, WICWorkBufPTR, 0x0d);
if(i == 0xffff){ //cann't find length field
WICWorkBufPTR = 0;
break;
}
//calculate the length
j=i-1;
for(;;){
if(chrWICWorkBuf[j] == ','){
break;
}
j--;
}
k=0;
for(j =j+1; j<i; j++){
k = k*10 + (chrWICWorkBuf[j]&0x0f);
}
if(k > 200){
WICWorkBufPTR = 0;
}
else if(i == WICWorkBufPTR - 3 - k){ //the body of SM has been received
if(Save_SM(i+2,k)==0){
Display_SM(1);
OSQPost(peventTone, (OS_EVENT *)MSG_SM_NEW);
OSQPost(peventWICCmd, (OS_EVENT *)MSG_SM_ACCEPT);
}
WICWorkBufPTR = 0;
}
else if (WICWorkBufPTR>i+3+k){ //the length is too large
WICWorkBufPTR = 0;
}
break;
case RESP_CONNECT:
OSQPost(peventWIC, (OS_EVENT *)MSG_DATA_CONSUCC);
WICWorkBufPTR = 0;
break;
case RESP_CDS:
OSQPost(peventMenu,(OS_EVENT *)MSG_SM_SENDSUCC);
WICWorkBufPTR = 0;
break;
case RESP_CME:
i = Func_Search_Char(Search.Pos, WICWorkBufPTR, 'E');
if(i != 0xffff && chrWICWorkBuf[i+1]) {
OSQPost(peventDVS, (OS_EVENT *)MSG_WICRESP_UIMNON);
}
break;
case RESP_CCWA:
goto CLIP_PROCESS;
default: //0xff
WICWorkBufPTR = 0;
break;
}
}
INT16U Func_Search_Char(INT16U Start, INT16U End, INT8U chrX){
INT16U i;
for(i=Start; i< End; i++){
if(chrWICWorkBuf[i] == chrX) return (i);
}
return (0xffff);
}
INT8U Save_SM(INT8U start, INT8U len){
INT8U i,j,k;
INT8U item;
//SM_TABLE_ITEM *p;
INT8U rom * p;
INT8U rom * pSave;
INT8U rom * pT;
if(len>140) len=140;
pT = OSMemGet(pMemLge, &i);
if(i != OS_NO_ERR) return(1);
pSave = pT;
p = pT+1; //leave the space for "length of number"
//data example:
//+CMT:"13705153921","02/05/17,10:43:07",129,0,4,5<CR><LF>
//HELLO<CR><LF>
//process the number of transmitter
j = Func_Search_Char(0,WICWorkBufPTR,'\"');
k = Func_Search_Char(j+1,WICWorkBufPTR,'\"');
j++;
i = 0;
for(;j<k;j++){
*p++ = chrWICWorkBuf[j];
i++;
}
*pT = i;
pT = p;
//process time
j = Func_Search_Char(k+1,WICWorkBufPTR,'\"');
k = Func_Search_Char(j+1,WICWorkBufPTR,'\"');
j++;
//
for(i=0; ; i++){
*pT = (chrWICWorkBuf[j]&0x0f)*10 + (chrWICWorkBuf[j+1]&0x0f);
pT++;
if(i==5) break;
else if(i>=3) j+=4;
else j+=3;
}
j++;
//The coding field
i=0;
for(;j<WICWorkBufPTR;j++){
if(chrWICWorkBuf[j] == ',') i++;
if(i==3)break;
}
j++;
*pT++ = chrWICWorkBuf[j] & 0x0f;
//the length field
*pT++ = len;
//
j=start;
for(i=0; i<len; i++){
*pT++ = chrWICWorkBuf[j];
j++;
}
//
if(MFunc_SaveSM(pSave,0) != 0xff) i = 0;
else i = 1;
OSMemPut(pMemLge, pSave);
return(i);
}
//This section of code is suit for process responses of Wavecom GSM module: Q2403A
/*************************************************************************************************************/
//How many responses are there
#define NUM_OF_NOD 100 //The number of nods. It must be larger than the actual value. The
//responses conresponding 55 nods, the number of nods will not larger than the total number of effective bytes
#define END_OF_TREE 0xff
struct TblItem{
// unsigned char ID;
// unsigned char Lvl;
unsigned char ptr[30]; //The index of next nod. if it's an end nod, it's END_OF_TREE. if a invilade value,
//it's "0", point to the root Nod.
};
#pragma romdata EXTRAM
unsigned char rom asciimap[0x80]; //+, > and "A~Z" have to be maped to a smaller region, this is the map table
struct TblItem rom Nod[NUM_OF_NOD]; //The nods itself
unsigned char nodmap[NUM_OF_NOD]; //a map to map the nod to response index
//The function to initialize tables and nod
void Make_Index_Table(void){
unsigned char curNod,curResp,curChar,t1,t2;
unsigned int i,j;
unsigned char NumOfNod;
NumOfNod = 1;
//clear the Nod's data
for(i=0;i<NUM_OF_NOD;i++){
//Nod[i].ID = 0x00;
//Nod[i].Lvl = 0;
for(j=0;j<30;j++){
Nod[i].ptr[j] = 0x0;
}
}
//make the ascii code map table
for(i=0;i<0x80;i++){
if(i>='A' && i <='Z') asciimap[i] = i-'A'+3; //ASCII code map to X - A +3
else if(i=='>') asciimap[i] = 2;
else if(i=='+') asciimap[i] = 1;
else asciimap[i]=0;
}
//make the nods
curResp = 0;
for(;;){
curNod = 0;
curChar = 0;
for(;;){
t1 = chrResp[curResp][curChar];
t1 = asciimap[t1];
if(Nod[curNod].ptr[t1] == 0){
if(chrResp[curResp][curChar+1] == '\0'){
Nod[curNod].ptr[t1] = END_OF_TREE;
nodmap[curNod] = curResp;
break;
}
Nod[curNod].ptr[t1] = NumOfNod;
//Nod[NumOfNod].ID = chrResp[curResp][curChar];
NumOfNod++;
curNod = Nod[curNod].ptr[t1];
}
else{
curNod = Nod[curNod].ptr[t1];
}
curChar++;
}
curResp++;
if(curResp == sizeof(chrResp)/20) break;
}
}
struct S_R Search_ch(void){
unsigned char i,j,x,t1;
struct S_R Result;
j=0;
for(i=0;i<WICWorkBufPTR;i++){
t1 = chrWICWorkBuf[i];
t1 = asciimap[t1];
if(Nod[j].ptr[t1] != END_OF_TREE){
j = Nod[j].ptr[t1];
if(j==0) j= Nod[j].ptr[t1];
}
else {
Result.Pos = i;
Result.R_Num = nodmap[j];
return (Result);
}
}
Result.Pos = 0;
Result.R_Num = 0xff;
return (Result);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -