#include "includes.h"

POC_DEF sutPocStatus;
MY_CLOCK My_Clock;



unsigned long long htoi(char s[])  
{  
	int i = 0;  
	unsigned long long n = 0; 
	if (s[0] == '0' && (s[1]=='x' || s[1]=='X')) i = 2; 
	else  i = 0;  
  for (; (s[i] >= '0' && s[i] <= '9') || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >='A' && s[i] <= 'Z');++i){  
      if (tolower(s[i]) > '9')  n = 16 * n + (10 + tolower(s[i]) - 'a');  
      else  n = 16 * n + (tolower(s[i]) - '0');  
  }
  return n;  
}


void pocDataInit(void){
	memset((unsigned char *)&sutPocStatus, 0, sizeof(POC_DEF));
}


/*
MakeStringToUpperCap
����data�����Ǵ�д��ĸת�ɴ�д��ĸ
*/
void MakeStringToUpperCap(T_UINT8 *data, T_UINT16 len){
  T_UINT16 i;

  for(i=0;i<len;i++)
  {
    if(data[i] >= 'a' && data[i] <= 'z')
		data[i] -= 0x20;
  }
}

/*控制查询POC设置状�?
dly:接口被调用的频率,单位ms*/
void pocProCtl(int dly){
	//3秒查询一�?
	static unsigned short cnt=0;
	if(sutApp.gtMode!=0) return;//GT模式后不再查�?

	if(++cnt<(5*1000/dly)) return;
	cnt=0;
	if(getAppObjStatus(ASLEEP_POC)==0) return;//POC休眠时,不发指令
	//if(sutApp.pocParaDone==0) msgAtSend("AT+POC=020000\r\n");//用于检测并设置POC参数
	if(sutApp.PocGetTime==0&&sutPocStatus.logined) msgAtSend("AT+POC=280000\r\n");//��ȡ����ʱ��
	msgAtSend("AT+COPS?\r\n");
	msgAtSend("AT+CTEC?\r\n");//查询当前网络制式
	msgAtSend("AT+CSQ\r\n");//查询信号强度
}

static void micPro(int mic);
static void spkPro(int spk);
static void pocStartMsg(void);
static void pro80Msg(char *msg);
static void pro81Msg(char *msg);
static void pro82Msg(char *msg);
static void pro83Msg(char *msg); 
static void pro84Msg(char *msg);
static void pro86Msg(char *msg);
static void pro3dMsg(char *msg);
static void pro3eMsg(char *msg);
static void pro0eMsg(char *msg);
static void pro1eMsg(char *msg);
static void pro1dMsg(char *msg);
static void pocGetVer(char *msg);
static void pocGetPpp(char *msg);
static void proGauthMsg(char *msg);
static void proNoteMsg(char *msg);
static void proNetMode(char *msg);
static void proSimMode(char *msg);
static void proPwrMode(char *msg);
static void proFotaMsg(char *msg);
static void proGmrMsg(char *msg);
static void proSmsMsg(char *msg);
static void proAlarmMsg(void);
static void proPendMsg(void);
static void proToneMsg(char *msg);
static void proGPIPMsg(char *msg);
static void proGGIPMsg(char *msg);
static void proCsqMsg(char *msg);
static void proMicSpk(int mic, int spk);
static void proCopsMsg(char *msg);
static void proHeadSet(char *msg);
static void pro96Msg(char *msg);
static void pro28Msg(char *msg);
static void pro0dMsg(char *msg);
static void pro3bMsg (char *msg);



void cmdsProcess(char *msg, int len){//已去掉回车换�?
	int i,j;
	char buf[10];
	if(sutApp.pocInitStatus==0) sutApp.pocInitStatus=1;
	if(sutApp.gtMode==0){
		appSleepCtl(ASLEEP_POC, 1);
		tryWakeupApp();
		MSG_INFO(1,"POC->app:%s",msg);
		if(msgCmp(msg, "PocSleep")){//POC休眠�?
			appSleepCtl(ASLEEP_POC, 0);
		}else if(msgCmp(msg, "+POC:WAKEUP")){//POC唤醒�?
		}else if(msgCmp(msg, "+POC:8B")){
			buf[0]=msg[7];buf[1]=msg[8];buf[2]=0;
			i=atoi(buf);
			buf[0]=msg[9];buf[1]=msg[10];buf[2]=0;
			j=atoi(buf);
			proMicSpk(i, j);
		}else if(msgCmp(msg, "+LSHTTS: END")){
			sutPocStatus.TTS=0;
		}else if(msgCmp(msg, "+HTTS: START")){
			paControl(true);
			sutPocStatus.TTS=1;
		}else if(msgCmp(msg, "+POC:02000000")) setPocPara(msg+13,len-13);
		else if(msgCmp(msg,"+POC:9600")) pro96Msg(msg);
		else if(msgCmp(msg, "+POC:82")) pro82Msg(msg);
		else if(msgCmp(msg, "+POC:START")) pocStartMsg();
		else if(msgCmp(msg, "+POC:86")) pro86Msg(msg);
		else if(msgCmp(msg, "+POC:83")) pro83Msg(msg);
		else if(msgCmp(msg, "+CTEC:")) proNetMode(msg+7);
		else if(msgCmp(msg, "+CSQ: ")) proCsqMsg(msg+6);
		else if(msgCmp(msg, "+SIMCROSS:")) proSimMode(msg+10);
		else if(msgCmp(msg, "+COPS:")) proCopsMsg(msg);
		else if(msgCmp(msg, "+CPIN: READY")) sutApp.cardStatus=1;
		else if(msgCmp(msg, "+POC:28")) pro28Msg(msg);
		else if(msgCmp(msg, "+POC:80")) pro80Msg(msg);
		else if(msgCmp(msg, "+POC:81")) pro81Msg(msg);
		 else if(msgCmp(msg, "+POC:0D")) pro0dMsg(msg);
		else if(msgCmp(msg, "+POC:3B")) pro3bMsg(msg);
		
		
		else if(msgCmp(msg, "+CGPS:")) proGpsMsg(msg+6);
		else if(msgCmp(msg, "+TONE:")) proToneMsg(msg+6);
		else if(msgCmp(msg, "+UDP:")) proPwrMode(msg+5);
		else if(msgCmp(msg, "+POC:3D")) pro3dMsg(msg+7);
		else if(msgCmp(msg, "+POC:3E")) pro3eMsg(msg+7);
		
		else if(msgCmp(msg, "+POC:1E")) pro1eMsg(msg+7);

		else if(msgCmp(msg, "+POC:84")) pro84Msg(msg+7);
		else if(msgCmp(msg, "+POC:0E")) pro0eMsg(msg+7);
		else if(msgCmp(msg, "+POC:1D")) pro1dMsg(msg+7);
		else if(msgCmp(msg, "+HEADSET:")) proHeadSet(msg+9);
		
		else if(msgCmp(msg, "+POC_VER:")) pocGetVer(msg+9);
		else if(msgCmp(msg, "+POC_PPP:")) pocGetPpp(msg+9);
		else if(msgCmp(msg, "+GAUTH:")) proGauthMsg(msg+7);
		else if(msgCmp(msg, "+NOTE:")) proNoteMsg(msg+6);
		
		else if(msgCmp(msg, "+FOTA:")) proFotaMsg(msg+6);
		else if(msgCmp(msg, "+CGPS:")) proGpsMsg(msg+6);
		else if(msgCmp(msg, "+GPIP:")) proGPIPMsg(msg+6);
		else if(msgCmp(msg, "+GGIP:")) proGGIPMsg(msg+6);
		else if(msgCmp(msg, "SV")) proGmrMsg(msg);
		else if(msgCmp(msg, "+SMS:")) proSmsMsg(msg+5);
		else if(msgCmp(msg, "+ALARM")) proAlarmMsg();
		else if(msgCmp(msg, "+POC:PEND")) proPendMsg();
	
		else MSG_INFO(1, "skip:%d,%s", len,msg);
	}
}
//处理POC模块信息
void pocCmdHandler(unsigned char *msg, int len){
	//有消息进来,如果不是+POC:SLEEP,POC都唤醒了
	static char tmp[300],ch;
	static int k=0;
	unsigned int j;
	if(sutApp.authReady==0) return;
	if(sutApp.gtMode !=0 && sutApp.gtTMode != 0){
		usbOutPut(msg, len);//TM模式下直接透传
		return;
	}
	for(j=0;j<len;j++){//过滤
		if(k>=sizeof(tmp)) k=0;
		tmp[k++]=msg[j];
		if(ch=='\r' && msg[j]=='\n'){
			if(k!=2){
				//处理
				k -=2;tmp[k]=0;//去掉回车换行
				MakeStringToUpperCap(tmp, k);
				cmdsProcess(tmp,k);
			}
			k=0;
		}
		ch=msg[j];
	}
}

static void proMicSpk(int mic, int spk){
	if(mic==0 && spk==0){//0000
		if(newPara.KeySound!=0) pttBeepStart(false);
		sutPocStatus.spk=0;
		sutPocStatus.mic=0;
		sutPocStatus.TONE=0;
	}else if(mic==1 && spk==0){//0100
		if(newPara.KeySound!=0) pttBeepStart(false);
		sutPocStatus.mic=1;
	}else if(mic==0 && spk==1){//0001
		if(newPara.KeySound!=0) paControl(true);//pttBeepStart(false);
		else paControl(true);//关闭提示音时,也要打开喇叭
		sutPocStatus.spk=1;
		sutPocStatus.mic=0;
	}else if(mic==0 && spk==13){//0013
		if(newPara.KeySound!=0) beepStart(TONE_SPECIAL);
	}else if(mic==0 && spk==2){
		paControl(true);
		sutPocStatus.TONE=1;
	}
}
static void micPro(int mic){
	switch(mic){
		case 0://关闭mic
			sutPocStatus.mic=0;
			break;
		case 1://打开mic
			if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
			sutPocStatus.mic=1;
			//sutPocStatus.spk=0;
			break;
	}
}

static void spkPro(int spk){
	switch(spk){
		case 0://tone音后关闭spk
			if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
			sutPocStatus.spk=0;
			break;
		case 1://tone音后保持spk打开
			if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
			paControl(true);
			sutPocStatus.spk=1;
			sutPocStatus.mic=0;
			break;
		case 2://播放TTS
			paControl(true);
			sutPocStatus.TTS=1;
			break;
		case 13://抢麦失败,可以tone特殊�?
			if(newPara.KeySound!=0) beepStart(TONE_SPECIAL);
			break;
	}
}
/*POC已启动成�?*/
static void pocStartMsg(void){
	sutApp.pocInitStatus=1;
}
/*当前账号所属群组列表信�?一次性获取所�?
不同应用采用不同需求指�?
从不在线到登录会主动上报一次列�?
发AT+POC=0D0000也会上报一次列�?
msg:000000,iiii(组列表索�?,dddddddd(组ID),nnnn(组成员数),mmmmmm(组名�?*/
static void pro80Msg(char *msg){

	char Groupname[POC_GROUP_USER_NAME_LEN*2];
	char len;

	len=strlen(&msg[29+8]);
	memcpy(Groupname, &msg[29+8], len);

	//MakeStrEndByNewLine(msg);
	memset(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name,0,POC_GROUP_USER_NAME_LEN*2);

	msg[25+8]=0;
	sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID=htoi(&msg[17+8]);
	
	
	if(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF)return;
	if(sutPocStatus.ListFillIndex>0){
		if(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID==sutPocStatus.AllGroups[sutPocStatus.ListFillIndex-1].ID){
			
				MSG_INFO(1,"id===chongfu==================%d\r\n",sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID);	
					return;
			}
	}
	
	if(msg[29+8]==0) sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[0]=' ';
	else {
		LwEndingToBiEndingStr(Groupname,len);
		unicodeToGbk(Groupname, sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name, &len);
	}
	//msg[29+8]=0;
	
	MSG_INFO(1,"AllGroups===%s,%d,%d\r\n",sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name,sutPocStatus.ExceptionReadNum,sutPocStatus.ListFillIndex);
	sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].status=2;
	sutPocStatus.ListFillIndex++;
	MSG_INFO(1,"get groups end\r\n");
			if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
			sutPocStatus.ListGetOneFlag=1;
		}
}
/*所在组成员信息列表
发AT+POC=0E0000xxxxxxxx查询
msg:010000,iiii(成员列表索引),dddddddd(成员ID),mmmmmmmm(成员名称)*/
static void pro81Msg(char *msg){

	char Username[POC_GROUP_USER_NAME_LEN*2];
	char len;

	len=strlen(&msg[25+8]);
	memcpy(Username, &msg[25+8], len);

	//MakeStrEndByNewLine(msg);
	
	memset(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name,0,POC_GROUP_USER_NAME_LEN*2);
	msg[25+8]=0;
		sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID=htoi(&msg[17+8]);
		
		
		if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF)return;
		if(sutPocStatus.ListFillIndex>0){
			if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID==sutPocStatus.AllUsers[sutPocStatus.ListFillIndex-1].ID){
				
			MSG_INFO(1,"id===chongfu==================%d\r\n",sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID);	
				return;
				}
		}
		
		if(msg[29+8]==0) sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[0]=' ';
		else {
			LwEndingToBiEndingStr(Username,len);
			unicodeToGbk(Username, sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name, &len);
		}
		//msg[29+8]=0;
		
		MSG_INFO(1,"AllUsers===%s,%d,%d\r\n",sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name,sutPocStatus.ExceptionReadNum,sutPocStatus.ListFillIndex);
		sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].status=msg[8]-0x30;
		sutPocStatus.ListFillIndex++;
		MSG_INFO(1,"get groups end\r\n");
				if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
				sutPocStatus.ListGetOneFlag=1;
			}


}
/*登录状态信�?
msg:ss(00未登�?02已登�?,dddddddd(成员id),mmmmmmmm(状态信息内�?
		00								  CEDECDF8C2E7C1ACBDD3 表示不在线,输出信息�?无网络连�?拨号�?成功)
		00								  CEDEB7A8C1ACBDD3 表示不在线,输出信息�?无法连接(IP 不对或定 向卡)
		00								  C3BBD3D0B7FECEF1 表示不在线,输出信息�?没有服务(没注�?
		00								  B5C7C2BDCAA7B0DC 表示不在线,输出信息�?登陆失败(账号错误)
		00								  0D5CBBAC5D0C5CFA2B4EDCEF3 账号信息错误
		02				0001A750		  B2E2CAD431BAC5(测试 1 �?,*/
static void pro82Msg(char *msg){
	char buf[3],*pName;
	int type,len,i;
	char Username[POC_GROUP_USER_NAME_LEN*2];
	buf[0]=msg[7];buf[1]=msg[8];buf[2]=0;
	type=atoi(buf);
	switch(type){
		case 0:
			sutPocStatus.logined=0;
//			if(0==memcmp(msg+10, "CEDECDF8C2E7C1ACBDD3",20)) sutPocStatus.PocLineOffReason=1;
//			else if(0==memcmp(msg+10, "CEDEB7A8C1ACBDD3",16)) sutPocStatus.PocLineOffReason=2;
//			else if(0==memcmp(msg+10, "C3BBD3D0B7FECEF1",16)) sutPocStatus.PocLineOffReason=3;
//			else if(0==memcmp(msg+10, "B5C7C2BDCAA7B0DC",16)) sutPocStatus.PocLineOffReason=4;
			break;
		case 2:
			/*
			sutPocStatus.PocLineOffReason=0;
			len=strlen(msg+10);
			if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN;
			memcpy(Username, msg+10,len);
			Username[len]=0;
			StrAsciiToHex(Username, sutPocStatus.LocalUser.name);
			msg[10]=0;
			sutPocStatus.LocalUser.ID=strtol(&msg[2], &pName, 16);
			MSG_INFO(1, "Login ok");
			sutPocStatus.loginResult=3;
			*/
			sutPocStatus.PocLineOffReason=0;
			len = strlen(&msg[17+8]);
			memcpy(Username,&msg[17+8],len);
			Username[len]=0;
			LwEndingToBiEndingStr(Username,len);
			unicodeToGbk(Username,sutPocStatus.LocalUser.name,&len);
			msg[17+8]=0;
			sutPocStatus.LocalUser.ID=strtol(&msg[9+8],&pName,16);
			MSG_INFO(1, "Login ok");
			//getNameFlag=1;//
			sutPocStatus.loginResult=3;		
			break;
	}
}
/*有人说话
msg:00,dddddddd(成员id),nnnnnnnn(成员名称)*/
static void pro83Msg(char *msg){
	int len;
	char callerName[POC_GROUP_USER_NAME_LEN*2];
	char *pName;
	backLightReset();//鏀跺埌鏈変汉璇磋瘽
	len=strlen(msg+25);//17
	if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN;
	//else i++;//�����0 Ҳ��������
	
	memcpy(callerName,&msg[17+8],len);
	
	LwEndingToBiEndingStr(callerName,len);
	unicodeToGbk(callerName, sutPocStatus.CallName, &len);
	//StrUnicodeToAnsiBig(sutPocStatus.Callname,i,&msg[17+8]);
	*(msg+17+8) = 0;
	sutPocStatus.CallID = strtol(&msg[9+8],&pName,16);
	msg[17+8]=0;

	
//	memcpy(callerName, msg+10,len);
//	callerName[len]=0;
//	if(0!=memcmp(callerName, sutPocStatus.CallName,len)) StrAsciiToHex(callerName, sutPocStatus.CallName);


}
/*单呼响应信息
msg:00,mmmmmmmmmm(单呼结果信息)
	   BAF4BDD0B3C9B9A6 表示 呼叫成功
	   BAF4BDD0CAA7B0DC 表示 呼叫失败
	   CDCBB3F6C1D9CAB1BAF4BDD0 表示 退出临时呼�?
	   C1D9CAB1BAF4BDD031BAC5BBFA 表示 临时呼叫 1 号机*/
static void pro84Msg(char *msg){
	//unsigned char danhureport[POC_GROUP_USER_NAME_LEN+1];
	//StrAsciiToHex(msg+2, danhureport);
	ttsPlay(ENCODE_USER_GBK, msg+2);
	if(0==memcmp(msg+2, "C1D9CAB1", 8)) sutPocStatus.danHuStatus=1;
	else if(0==memcmp(msg+2, "CDCBB3F6", 8)) sutPocStatus.danHuStatus=0;
	else if(0==memcmp(msg+2, "BAF4BDD0B3C9B9A6", 16)) sutPocStatus.danHuStatus=1;
}
/*切换群组完成指令(表示已登�?
msg:00,dddddddd(组id),nnnnnnnn(组名�?*/
static void pro86Msg(char *msg){
	char buf[POC_GROUP_USER_NAME_LEN*4+40],*pName;
	int len,i;
	char GroupName[POC_GROUP_USER_NAME_LEN*2]={0};
	char tmp[POC_GROUP_USER_NAME_LEN*2+20]={0};
	char needTTs=0;

	if(msg[9]=='F'&&msg[10]=='F')return ;	
	
	sutPocStatus.logined=1;

	if(msg[8]=='0'){
		len = strlen(&msg[17+8]);
		MSG_INFO(1,"len====%d",len);
		memcpy(GroupName,&msg[17+8],len);
		GroupName[len]=0;
		msg[17+8]=0;
		sutPocStatus.LocalGroup.ID=strtol(&msg[9+8],&pName,16);	
		LwEndingToBiEndingStr(GroupName,len);
		unicodeToGbk(GroupName, sutPocStatus.LocalGroup.name, &len);
		
		MSG_INFO(1,"groupnamelen======%d",len);
		MSG_INFO(1,"groupname======%s",sutPocStatus.LocalGroup.name);
		sutPocStatus.danHuStatus=0;

	}else if(msg[8]=='1'){
	//����ģʽ	

		
		sutPocStatus.danHuStatus=1;
	

	}



	/*
	len=strlen(msg+17)-2;
	if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN;
	memcpy(GroupName, msg+10,len);
	GroupName[len]=0;
	msg[17]=0;
	sutPocStatus.LocalGroup.ID=strtol(msg+2+9, &pName,16);
	StrAsciiToHex(GroupName, sutPocStatus.LocalGroup.name);
	if(sutPocStatus.firstLogin==0){
		snprintf(tmp, sizeof(tmp), "%s,�ѵ�¼,%s", sutPocStatus.LocalUser.name,sutPocStatus.LocalGroup.name);
		backLightReset();//第一次登录时,保持屏亮起�?
		needTTs=1;
	}else{
		snprintf(tmp, sizeof(tmp), "����,%s",sutPocStatus.LocalGroup.name);
		if(sutApp.groupTTSEnable!=0){
			needTTs=1;
			sutApp.groupTTSEnable=0;
		}
	}
	if(needTTs!=0){
		memset(buf, 0, sizeof(buf));
		for(i=0;i<strlen(tmp);i++){
			snprintf(GroupName, sizeof(GroupName), "%02x", tmp[i]);
			strcat(buf, GroupName);
		}
		ttsPlay(ENCODE_USER_GBK, buf);
	}
	*/
	
	sutPocStatus.firstLogin=1;
}
/*查询所属群组总数的响�?
发AT+POC=3D0000获得
msg:000000,nnnn(所属多少个群组)*/
static void pro3dMsg(char *msg){
	char *pName;
	sutPocStatus.ListCurOnlineNum=strtol(&msg[6],&pName,16);
	sutPocStatus.ListUpdate=1;
	MSG_INFO(1, "groupNum:%d", sutPocStatus.ListCurOnlineNum);
}
/*查询所属在线成员总数的响�?
发AT+POC=3E0000获得
msg:000000,nnnn(所属多少个在线成员)*/
static void pro3eMsg(char *msg){
	char *pName;
	sutPocStatus.ListCurOnlineNum=strtol(&msg[6],&pName,16);
	sutPocStatus.ListUpdate=1;
	MSG_INFO(1, "userNum:%d", sutPocStatus.ListCurOnlineNum);
}
/*查询所在组成员信息时返回,得到在线成员总数
msg:000000,nnnn(在线成员总数)*/
static void pro0eMsg(char *msg){
	
}
/*定量查询所在群组中的在线成员信息响�?
发AT+POC=1E0000xxxxx获得
msg:010000,iiii(成员列表索引),dddddddd(成员ID),mmmmmmmm(成员名称)*/
static void pro1eMsg(char *msg){
	char name[POC_GROUP_USER_NAME_LEN*2+1];
	int len;
	unsigned long id;
	char *pTemp;
	
    if(!uiAssist.status)return 1;
	len = strlen(&msg[18]);
	if(len >= POC_GROUP_USER_NAME_LEN*2) len = POC_GROUP_USER_NAME_LEN*2;
	memcpy(name, &msg[18], len);
	name[len]=0;
	msg[18]=0;
	id=strtol(&msg[10],&pTemp,16);
	sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID=id;
    if(name[0]==0){
		sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[0]=' ';
		sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[1]=0;
	}else StrAsciiToHex(name, sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name);
	sutPocStatus.ListFillIndex++;
	if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
		sutPocStatus.ListGetOneFlag=1;
		sutPocStatus.ListDetailValid=1;
	}
}

/*定时查询所属组信息
发AT+POC=1D0000xxxxx获得
msg:000000,iiii(组列表索�?,dddddddd(组ID),nnnn(成员个数),mmmmmmmmm(名称)*/
static void pro1dMsg(char *msg){

	unsigned short num;
	char name[POC_GROUP_USER_NAME_LEN*2+1];
	unsigned long id;
	unsigned short index;
	char *pTemp;
	int len;

	if(!uiAssist.status)return ;
	len = strlen(&msg[22]);//已去掉回车换�?
	if(len >= POC_GROUP_USER_NAME_LEN*2) len = POC_GROUP_USER_NAME_LEN*2;
	memcpy(name, &msg[22], len);
	name[len]=0;
	msg[22]=0;
	num=strtol(&msg[18],&pTemp,16);
	msg[18]=0;
	id=strtol(&msg[10],&pTemp,16);
	
	sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID=id;
	sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].usernum=num;
	if(name[0]==0){
		sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[0]=' ';
		sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[1]=0;
	}else
	  StrAsciiToHex(name, sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name);	
	  sutPocStatus.ListFillIndex++;
	  if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
	  sutPocStatus.ListGetOneFlag=1;
	  sutPocStatus.ListDetailValid=1;
	}
}

/*
+POC_VER:01027
msg=01027
*/
static void pocGetVer(char *msg){
	snprintf(sutApp.pocVersion, sizeof(sutApp.pocVersion), "%s",msg);
}
static void pocGetPpp(char *msg){
	if(msg[0]=='1') sutApp.pocPpp=1;
	else sutApp.pocPpp=0;
}
/*
+GAUTH:AD86EBCCECC4
msg=AD86EBCCECC4+回车
*/
static void proGauthMsg(char *msg){

}

/*
+NOTE:0,1
msg=0,1+回车
*/
static void proNoteMsg(char *msg){
	MSG_INFO(1,"authAck:%s",msg);
}



/*
+CTEC: 0,0
msg=0,0
*/
static void proNetMode(char *msg){
	unsigned char netModeValue;
	char cmd[30];
	if(msg[0]<'0' || msg[0]>'9') return;
	netModeValue=atoi(msg);
	ctecCurrentSet=netModeValue;
	if(ctecCurrentSet != newPara.netMode){
		snprintf(cmd, sizeof(cmd),"AT+CTEC=%d,%d\r\n", ctecCurrentSet, newPara.netMode);
		msgAtSend(cmd);
	}
}

/*
+COPS: 0,2,"46000",7
msg=+COPS: 0,2,"46000",7
*/
static void proCopsMsg(char *msg){
	int i,j=0,codeType;
	char w=0;
	unsigned char netModeValue;
	
	for(i=0;i<strlen(msg);i++){
		if(msg[i]==','){
			if(++j==3){
				codeType=msg[i+1]-0x30;
				if(codeType==7) codeType=4;
				if(netshowvalue!=codeType) netshowvalue=codeType;
				return;
			}
		}else if(msg[i]=='"'){
			if(++w==1){
				codeType=atoi(msg+i+1);
				if(codeType>0 && codeType != sutApp.copstype) sutApp.copstype=codeType;
			}
		}
	}
}
/*
+SIMCROSS:0
msg=0/1
*/
static void proSimMode(char *msg){
	unsigned char tmpSim;
	
	tmpSim=msg[0]-0x30;
	if(tmpSim!=0 && tmpSim!=1) return;
	sutApp.simSel=tmpSim;
}

/*
+UDP:0,5,30
msg=0,5,30
*/
static void proPwrMode(char *msg){
	int seg1,seg2;
	short i;
	char buf[15];
	
	for(i=2;i<strlen(msg);i++){
		if(msg[i]==','){
			seg1=atoi(msg+2);
			seg2=atoi(msg+i+1);
			pwrModeAckHandler(seg1,seg2);
		}
	}
}

/*
+FOTA:1,0
+FOTA:1,XXX
+FOTA:0
+FOTA:1
+FOTA:2
msg=1,xxxx
*/
static void proFotaMsg(char *msg){
	if(msg[1]==','){
		if(msg[2]=='0' && msg[3]==0){
			fotaStepSet(6);
		}else{
			strcpy(sutApp.fotaVersion, msg+2);
			fotaStepSet(9);
		}
	}else if(msg[1]==0){
		if(msg[0]=='0'){
			fotaStepSet(7);
		}else if(msg[0]=='1') showLoading();
		else if(msg[0]=='2'){
			fotaStepSet(8);
		}
	}
}

/*
SV63302_T02
msg=SV63302_T02
*/
static void proGmrMsg(char *msg){
	snprintf(sutApp.modemVer, sizeof(sutApp.modemVer), "%s", msg);
}

/*
+SMS:1,B2E2CAD4313233
msg=1,B2E2CAD4313233
*/
static void proSmsMsg(char *msg){
	unsigned char smsType=msg[0]-0x30;
	unsigned len=strlen(msg+2);
	if(len%2 || 0!=restoreDataFormatByHex(msg+2,len)){
		MSG_WARN(1, "sms data error");
		return;
	}
	len /= 2;
	sutMess.codeType=smsType;
	sutSms.smsUpdate=1;
	memcpy(sutMess.GBKMess1+4, msg+2, len);
}

/*服务器报下发报警TTS,POC已播报,本信息只提示*/
static void proAlarmMsg(void){
}

static void proPendMsg(void){
	MSG_INFO(1, "active auth now");
	msgAtSend("AT+GAUTH\r\n");//用于授权检�?
}
static void proToneMsg(char *msg){
#ifndef ENABLE_PWM_BEEP
	if(msg[0]=='1'){
		sutPocStatus.TONE=1;
		paControl(true);
	}else if(msg[0]=='0'){
		sutPocStatus.TONE=0;
	}
#endif
}

/*
+GPIP:183.131.13.10
msg=183.131.13.10
*/
static void proGPIPMsg(char *msg){
	if(strlen(msg)<7) return;
	if(strcmp(showPIP, msg)==0) return;
	snprintf(showPIP, sizeof(showPIP), "%s",msg);
	MSG_INFO(1, "updatePIP:%s", showPIP);
}
/*
+GGIP:183.131.13.6
msg=183.131.13.6
*/
static void proGGIPMsg(char *msg){
	if(strlen(msg)<7) return;
	if(strcmp(showGIP, msg)==0) return;
	snprintf(showGIP, sizeof(showGIP), "%s",msg);
	MSG_INFO(1, "updateGIP:%s", showGIP);
}

/*
+CSQ: 14,99
msg=14,99
*/
static void proCsqMsg(char *msg){
	int csq=atoi(msg);
	if(csq != sutApp.g_iCSQ) sutApp.g_iCSQ=csq;
}

static void pro96Msg(char *msg){

	if(msg[10]=='0'){
		paControl(true);	
		sutPocStatus.mic=1;
	}
	else if(msg[10]=='3'){	
		paControl(true);
//		LCDBackLight(1);
//		LcdOnTimeCt=0;	
		backLightReset();
		sutPocStatus.logined=1;
		sutPocStatus.spk=1;
		sutPocStatus.mic=0;
		
	}else if(msg[10]=='4'){
		sutPocStatus.spk=0;
		
	}else if(msg[10]=='1'){
		
		sutPocStatus.mic=0;
		//uTimerCreate(UTIMER_CYTONE,30);//hyl-210630	
	}
}


static void pro28Msg(char *msg){
	 
	char buf[20];
	if(msg[5]=='2' && msg[6]=='8'){
		//PocGetTime=1;	
	//+POC:2800000014040e10132002 	
		StrAsciiToHex(&msg[13],buf);
		My_Clock.year=buf[0];;
		My_Clock.month=buf[1];;
		My_Clock.day=buf[2];;
		My_Clock.hour=buf[3];;
		My_Clock.min=buf[4];;
		My_Clock.sec=buf[5];
		MSG_INFO(1,"NewTime:%02d-%02d-%02d %02d:%02d:%02d",
		My_Clock.year,My_Clock.month,My_Clock.day,
		My_Clock.hour,My_Clock.min,My_Clock.sec);	
		sutApp.PocGetTime=1;
		return ;
	}

}

static void pro0dMsg(char *msg){
	sutPocStatus.ListUpdate=1;		
	sutPocStatus.ListCurOnlineNum=htoi(&msg[13])-1;	
	MSG_INFO(1, "groupNum:%d", sutPocStatus.ListCurOnlineNum);
}

static void pro3bMsg (char *msg){


	if(msg[5]=='3' && msg[6]=='B'){ 		
		sutPocStatus.ListUpdate=1;		
		sutPocStatus.ListCurOnlineNum	=htoi(&msg[21]);
		MSG_INFO(1, "UserNum:%d", sutPocStatus.ListCurOnlineNum);
	}			
}

/*
+HEADSET:1
msg=1
*/
static void proHeadSet(char *msg){
	switch(msg[0]){
		case '0'://HEADSET CONNECT
			sutApp.earLev=1;
			msgAtSend("AT+AUDCH=1,3\r\n");
			sutApp.pcant=2;
			break;//HEADSET DISCONNECTED
		case '1':
			sutApp.earLev=0;
			msgAtSend("AT+AUDCH=0,0\r\n");
			sutApp.pcant=4;
			break;//HEADSET BTN PRESS
		case '2':
			micPttHandler(1);
			break;//HEADSET BTN RELEASED
		case '3':
			micPttHandler(0);
			break;
	}
}


char *ohpocGetICCID(void){

	return NULL;
}
char *ohpocGetIMEI(void){
		static char imei[16]={0};
	if(imei[0]==0){

		if(LSAPI_SIM_GetIMEI(imei)==0){

			return imei;
		}

	}

	return NULL;

}
void ohpocGetClock(MY_CLOCK *myclock){

	//current_zone_time(myclock);

}