📄 tskwicr.c
字号:
#include <p18cxxx.h>
#include "includes.h"
#include "event.h"
#include "funcfile.h"
#include "funcfontlib.h"
//When the response of module are changed, the following data have to be modified
#define NUM_OF_RESP 29 //25 //define the number of all the responses
//definations of responses ID
#define RESP_OK 0
#define RESP_ERROR 1
#define RESP_BUSY 2
#define RESP_NOCARRIER 3
#define RESP_RING 4
#define RESP_CLIP 5
#define RESP_CLCK 6
#define RESP_COPS 7
#define RESP_CGSN 8
#define RESP_CCLK 9
#define RESP_CIMI 10
#define RESP_CNUM 11
#define RESP_CSQ 12
#define RESP_CSCS 13
#define RESP_CREG 14
#define RESP_CRING 15
#define RESP_CPIN 16
#define RESP_CPWD 17
#define RESP_CAD 18
#define RESP_CBC 19
#define RESP_CMT 20
#define RESP_WIND 21
#define RESP_WCNT 22
#define RESP_WEND 23
#define RESP_PROMPT 24
#define RESP_CONNECT 25
#define RESP_CDS 26
#define RESP_CME 27
#define RESP_CCWA 28
#pragma romdata CCODE
unsigned char rom chrResp[][20]={
"OK", //0
"ERROR", //1
"BUSY", //2
"NO CARRIER", //3
"RING", //4
"+CLIP", //5
"+CLCK", //6
"+COPS", //7
"+CGSN", //8
"+CCLK", //9
"+CIMI", //10
"+CNUM", //11
"+CSQ", //12
"+CSCS", //13
"+CREG", //14
"+CRING", //15
"+CPIN:", //16
"+CPWD", //17
"+CAD", //18
"+CBC", //19
"+CMT", //20
"+WIND", //21
"+WCNT", //22
"+WEND", //23
">", //24
"CONNECT", //25
"+CDS", //26
"+CME", //27
"+CCWA" //28
};
//End of response associated data
//Local definations
#define M_COMMAND 0
#define M_DATA 1
struct S_R{ //The structure to return the response search result
INT16U Pos; //The position of response, point to the end of response head
INT8U R_Num; //The ID of response
};
extern OS_MEM *pMemSml;
extern OS_MEM *pMemLge;
extern unsigned char DebugContent[48];
//extern MCNM_FILE SystemFile;
extern INT8U DebugContent[48];
extern INT8U DebugReadLength;
//extern void Func_Clear_Msg(INT8U rom * pMsg);
extern INT8U MFunc_SaveSM(INT8U rom * psm, INT8U type);
void ProcessResp(void);
void Make_Index_Table(void);
struct S_R Search_ch(void);
INT8U Save_SM(INT8U start, INT8U len);
#pragma romdata EXTRAM
INT8U rom chrWICWorkBuf[0x400]; //1k work buffer for response process
INT16U WICWorkBufPTR; //input index of work buffer
INT8U rom ModuleMode; //Current module work mode, M_COMMAND or M_DATA
#pragma code MYCODE
void tskWICResp(void * data){
void rom * pMsg;
INT8U rom * ptrTemp;
INT16U i;
INT8U err;
INT8U j; //for test
ModuleMode = M_COMMAND;
WICWorkBufPTR = 0;
Make_Index_Table();
for(;;){
pMsg = OSQPend(peventWICResp, 0, &err);
if(err == OS_NO_ERR){
if((INT24U)pMsg >= PTR_MAX){
switch ((INT24U)pMsg){
}
}
else{
switch (((MSG_HEAD *)pMsg)->Msg_ID){
case MSG_MODULE_RECEIVE:
if(ModuleMode == M_COMMAND){
ptrTemp = ((MSG_HEAD *)pMsg)->pMem;
for(i=0;i<((MSG_HEAD *)pMsg)->LenOfAttach;i++){
if((*ptrTemp == 0x0d) || (*ptrTemp == '>')){
chrWICWorkBuf[WICWorkBufPTR] = *ptrTemp++;
WICWorkBufPTR++;
if(WICWorkBufPTR >= 1){
ProcessResp();
}
}
else{
chrWICWorkBuf[WICWorkBufPTR] = *ptrTemp++;
WICWorkBufPTR++;
}
}
}
else{
}
break;
}
Func_Clear_Msg(pMsg);
}
}
}
}
/*****************************************************************************************************/
/* Wireless module AT command responses process procedure */
/*****************************************************************************************************/
//This section of code is suit for process responses of Wavecom CDMA module: Q2358C
INT16U Func_Search_Char(INT16U Start, INT16U End, INT8U chrX);
extern void Display_Signal_Qual(unsigned char S_Q);
extern void Display_Bat_Lvl(unsigned char B_L);
void ProcessResp(void){
//INT16U Index;
INT16U i,j,k,l;
INT24U s;
INT8U err,chrT;
INT8U rom * ptrT1;
INT8U rom * ptrT2;
struct S_R Search;
Search = Search_ch();
switch (Search.R_Num){
case RESP_OK:
WICWorkBufPTR = 0;
OSQPost(peventWIC, (OS_EVENT *)MSG_WICRESP_OK);
break;
case RESP_ERROR:
WICWorkBufPTR = 0;
OSQPost(peventWIC, (OS_EVENT *)MSG_WICRESP_ERROR);
break;
case RESP_BUSY:
WICWorkBufPTR = 0;
OSQPost(peventWIC, (OS_EVENT *)MSG_WICRESP_BUSY);
break;
case RESP_NOCARRIER:
WICWorkBufPTR = 0;
OSQPost(peventWIC, (OS_EVENT *)MSG_WICRESP_NOCARRIER);
break;
case RESP_RING:
WICWorkBufPTR = 0;
OSQPost(peventDVS, (OS_EVENT *)MSG_WICRESP_RING);
break;
case RESP_CLIP:
CLIP_PROCESS:
i = Func_Search_Char(Search.Pos, WICWorkBufPTR, '"');
if(i != 0xffff){
ptrT1 = OSMemGet(pMemSml, &err);
if (err == OS_NO_ERR){
ptrT2 = OSMemGet(pMemSml, &err);
if (err == OS_NO_ERR){
((MSG_HEAD *)ptrT1)->Msg_ID = MSG_WICRESP_CLIP;
((MSG_HEAD *)ptrT1)->Origin = peventWICResp;
((MSG_HEAD *)ptrT1)->pmemME = pMemSml;
((MSG_HEAD *)ptrT1)->Attached = TRUE;
j = Func_Search_Char(i+1, WICWorkBufPTR, '"');
((MSG_HEAD *)ptrT1)->LenOfAttach = j-i-1;
((MSG_HEAD *)ptrT1)->pMem = ptrT2;
((MSG_HEAD *)ptrT1)->pmemATT = pMemSml;
//make the body
for(k = i+1; k< j; k++){
*ptrT2++ = chrWICWorkBuf[k];
}
OSQPost(peventDVS, (OS_EVENT *)ptrT1);
}
}
}
WICWorkBufPTR = 0;
break;
case RESP_CLCK:
WICWorkBufPTR = 0;
break;
case RESP_COPS:
WICWorkBufPTR = 0;
break;
case RESP_CGSN:
WICWorkBufPTR = 0;
break;
case RESP_CCLK:
ptrT1 = OSMemGet(pMemSml,&err);
if(err == OS_NO_ERR){
((MSG_HEAD *)ptrT1)->Msg_ID = MSG_TIME_CORRECTION;
((MSG_HEAD *)ptrT1)->Origin = peventWICResp;
((MSG_HEAD *)ptrT1)->pmemME = pMemSml;
((MSG_HEAD *)ptrT1)->Attached = FALSE;
((MSG_HEAD *)ptrT1)->LenOfBody = 6;
i = Func_Search_Char(Search.Pos, WICWorkBufPTR, '"');
j = Func_Search_Char(i+1, WICWorkBufPTR, '/');
if(i==0xffff || 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;
}
((MSG_TIMERPT *)ptrT1)-> Year = k;
i = j;
j = Func_Search_Char(i+1, WICWorkBufPTR, '/');
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;
}
((MSG_TIMERPT *)ptrT1)-> Month = k;
i = j;
j = Func_Search_Char(i+1, WICWorkBufPTR, ',');
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;
}
((MSG_TIMERPT *)ptrT1)-> Date = k;
i = j;
j = Func_Search_Char(i+1, WICWorkBufPTR, ':');
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;
}
s = ((INT24U)k)*3600;
i = j;
j = Func_Search_Char(i+1, WICWorkBufPTR, ':');
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;
}
s = s + k*60;
i = j;
j = Func_Search_Char(i+1, WICWorkBufPTR, '"');
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;
}
s = s+k;
((MSG_TIMERPT *)ptrT1)-> Second = s;
OSQPost(peventSysTime, (OS_EVENT *) ptrT1);
}
WICWorkBufPTR = 0;
break;
case RESP_CIMI:
WICWorkBufPTR = 0;
break;
case RESP_CNUM:
WICWorkBufPTR = 0;
break;
case RESP_CSQ:
i = Func_Search_Char(Search.Pos, WICWorkBufPTR, ',');
k = 0;
for(j = Search.Pos; j< i; j++){
if((chrWICWorkBuf[j] >= '0') && (chrWICWorkBuf[j]<='9')){
k = k*10 + chrWICWorkBuf[j] - '0';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -