⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tskwicresp.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 26	 //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

 
#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
};

//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);

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);
			}
		}
	}
} 

//Internal functions
/*****************************************************************************************************/
/*                       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:
			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';
				}
				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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -