| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- /**********************************************************************************
- * File Name: Poc.c
- * Function Describe:device for Poc
- * Relate Module:
-
- * Explain: the modem must be using ZTE MC8332
- * Writer: ShiLiangWen
- * Date: 2015.7.10
- ***********************************************************************************/
- #define THIS_FILE_ID 15
- /***********************************************************************************/
- #include "includes.h"
- SUT_POC_STATUS sutPocStatus;
- OS_TID idPocTask=0;
- U64 stkPocTask[POC_TASK_STK_SIZE];
- unsigned char g_GroupNameLen=0;
- int g_iModemVer=0;
- int g_iPocVer=0;
- /*********************************************************************
- *添加组内成员状态列表
- Data[]="0x0x0x..."
- x='1'
- **********************************************************************/
- void PocAddUserStatusToList(char *Data)
- {
-
- char buf[50];
- int i=0;
- int j=0;
- char s;
- unsigned short index=0;
- for(i=0;i<POC_USER_ONLINE_LIST_LEN;i++){
- s=Data[j];
- if(s<'0' || s>'3')break;
- j++;
- s=Data[j];
- if(s<'0' || s>'3')break;
- if(s=='3'){
- //sutPocStatus.UserOnLineList[index++]=j/2;
- index++;
- }
- j++;
- }
- sutPocStatus.UserOnLineNum=index;
- sprintf(buf,"[OLUser=%d]",index);
- SlwTrace(DEBUG,buf,1);
- }
- /*************************************************************/
- int GBKTostr(char *src,char *dec,short maxlen)
- {
-
- char Temp[3];
- char *p=src;
- char *q=dec;
- int relen=0;
- long data;
- Temp[2]=0;
- while(*p && relen<(maxlen-1)){
- Temp[0]=*p++;
- Temp[1]=*p++;
- data=strtol(Temp,NULL,16);
- q[relen++]=data;
- }
- return relen;
-
- }
- /********************************************************************
- PocHandle
- 处理"+POC消息
- *********************************************************************/
- char PocHandle(char *msg)
- {
- char buf[100];
- char *pName;
- static unsigned char getNameFlag=0;
- unsigned char len,type;
- #if(SPECALL_CTR==1)
- static char noSpeakFlag=0;
- #endif
- //=============+LSHTTS: END
- if(msg[1]=='L' && msg[2]=='S' && msg[3]=='H' && msg[4]=='T' && msg[9]=='E'){
- sutPocStatus.TTS=0;
- if(sutPocStatus.Speaker==0)SpeakerDisable();
- return 1;
- }
- //+POC:0BXXYYYY
- //请求PTT返回
- //XX:00请求成功,可以不处理,因为同时有8Bxxyy回来处理打开喇叭
- //XX:FF请求失败,播报特tone音,与抢麦失败一样
- //YYYY:操作ID,不处理
- if(msg[5] == '0' && msg[6] == 'B')
- {
- if(msg[7] == 'F' && msg[8] == 'F')
- {
- // snprintf(buf,sizeof(buf),"1=%d 2=%d 3=%d................",sutPocStatus.PPPedCt,sutPocStatus.FirstLogined,sutPocStatus.PPPed);
- // SlwTrace(INF,buf,1);
- if(sutPocStatus.PPPedCt>3 && sutPocStatus.report1Lock==0 && sutPocStatus.FirstLogined==0 && sutPocStatus.PPPed==0)
- {
- //SlwTrace(INF,"BFFFFFFFFFFFFFF",1);
- MeSpeak(ENCODE_GBK, "CEDECDF8C2E7C1ACBDD3", 0);
- return 0;
- }
- // else if( sutPocStatus.FirstLogined==0 && sutPocStatus.PPPed==1){
- // MeSpeak(ENCODE_GBK, "CEDEB7A8C1ACBDD3", 0);
- // return 0;
- // }
-
- #if(SPECALL_CTR==1)
- noSpeakFlag=0;
- #endif
- SpeakerEnable();
- SetBeep(1176,12);
- }
- #if(SPECALL_CTR==1)
- else if(msg[7] == '0' && msg[8] == '0')
- {
- sutPocStatus.Mic=1;
- noSpeakFlag=1;
- SpeakerEnable();
- SetBeep(878,12);
- //SlwTrace(INF, "Speak",1);
- }
- #endif
- return 1;
- }
- //+POC:8bxxyy
- //xx--mic控制 01--打开MIC
- // 00--关闭MIC
- //yy--speaker控制
- // 00--关闭speaker并要产生成功的滴音
- // 01--对方说话,打开speaker,并产生成功的滴音
- // 13--抢麦失败,打开speaker,并产生失败的滴音
- if(msg[5]=='8' && msg[6]=='B' && msg[7]=='0')
- {
- if(msg[8]=='1')//xx == 01
- {
- sutPocStatus.Mic=1;
- MicEnable();
- sutPocStatus.Speaker=0;
- SpeakerDisable();
- sutPocStatus.Logined=1;
- }else if(msg[8]=='0')//xx == 00
- {
- sutPocStatus.Mic=0;
- MicDisable();
- }
-
- if(msg[9]=='0' && msg[10] == '0')
- {//yy == 00 对方说话结束或本地讲话开始,滴音
- #if(SPECALL_CTR==1)
- if(noSpeakFlag == 1)
- {
- noSpeakFlag=0;
- if(sutPocStatus.Speaker)sutPocStatus.Speaker=0;
- return 1;
- }
- #endif
- sutPocStatus.Speaker=0;
- SpeakerEnable();
- SetBeep(878,12);
- }else if(msg[9]=='0' && msg[10] == '1')
- {//yy == 00 对方说话开始
- sutPocStatus.Logined=1;
- sutPocStatus.Speaker=1;
- SpeakerEnable();
- SetBeep(878,12);
- }else if(msg[9]=='1' && msg[10]=='3')
- {//yy == 13 抢麦不成功滴音
- #if(SPECALL_CTR==1)
- //防止A讲话,B按了一下PTT,后A结果,B灯还是绿的
- if(noSpeakFlag == 1) noSpeakFlag=0;
- #endif
- sutPocStatus.Speaker=1;//3;
- SpeakerEnable();
- SetBeep(1176,12);
- }
- return 1;
- }
- //==============+POC:xxxx=============
- //+POC:820100000000 +POC:8201ffffffff
- //+POC:82 02 00002c8d 4b6dd58b3100300032000000 登陆成功,提示“测试102”
- //+POC:82 02 0000D590 B5E7C1BFB2E2CAD432 登陆成功 提示"电量测试2"
- if(msg[5]=='8' && msg[6]=='2')
- {
- buf[0] = msg[7];
- buf[1] = msg[8];
- buf[2] = 0;
- type = atoi(buf);
- switch(type)
- {
- case 0://离线 ID无效
- if(sutPocStatus.Logined) HigosStartCnt(1);
- sutPocStatus.Logined=0;
- sutGpsInfo.isGpsAuthOk=0;
- sprintf(buf,"[msg]");
- if(msg[17] == 'B' && msg[18]== '5' && msg[25] == 'C' && msg[26] == 'A')
- {//帐号信息错误
- pocTimeOutTime=5;
- if(sutPocStatus.FirstLogined==0 && CSQ_flag==0)
- {//从来没登陆过,来一次播报一次
- MeSpeak(ENCODE_GBK, "D5CABAC5D0C5CFA2B4EDCEF3", 0);
- sutPocStatus.report1Lock=1;
- }else
- {
- if(sutPocStatus.reportTimeCnt1 >= 60)
- {
- sutPocStatus.reportTimeCnt1=0;
- //MeSpeak(ENCODE_GBK, "D5CABAC5D0C5CFA2B4EDCEF3", 0);
- sutPocStatus.report1Lock=1;
- }
- }
-
- strcat(buf, "Login failed");
- }
- else
- if(msg[17] == 'C' && msg[18]== 'E' && msg[25] == 'C' && msg[26] == '2' )
- {//无网络连接
- if(sutPocStatus.FirstLogined==0)
- {//从来没登陆过,来一次播报一次
-
- //sutGpsStatus.PPPStatus
- if(sutPocStatus.report1Lock==0 && CSQ_flag==0){
- if(sutPocStatus.PPPed==0) {MeSpeak(ENCODE_GBK, "CEDECDF8C2E7C1ACBDD3", 0);}
- else if(sutPocStatus.PPPed==1){
- MeSpeak(ENCODE_GBK, "CEDEB7A8C1ACBDD3", 0);
- }
- }
- }else
- {
- if(sutPocStatus.reportTimeCnt2 >= 60 && sutPocStatus.report1Lock==0)
- {
- sutPocStatus.reportTimeCnt2=0;
- //MeSpeak(ENCODE_GBK, "CEDECDF8C2E7C1ACBDD3", 0);
- }
- }
- strcat(buf, "No network");
- }
- else strcat(buf, "No login");
- SlwTrace(INF, buf, 1);
- break;
- case 1://登陆中 ID无效
- SlwTrace(INF, "login ing",1);
- break;
- case 2://登陆成功 ID为用户ID
- len = strlen(&msg[17])-2;
- if(len >= POC_USER_NAME_LEN) len = POC_USER_NAME_LEN;
- strncpy(sutPocStatus.UserName,&msg[17],len);
- if(len < POC_USER_NAME_LEN) sutPocStatus.UserName[len]=0;
- msg[17]=0;
- strncpy(sutPocStatus.UserId,&msg[9],POC_USER_ID_LEN);
- SlwTrace(INF, "login ok",1);
- getNameFlag=1;//登陆成功时,获取过了用户名字,后面可以播报了
-
- break;
- case 3://注销中 ID无效
- SlwTrace(INF, "logout ing",1);
- break;
- }
- return 1;
- }
- //+POC:86 00 000000dc a47fc47e3300 0000 进入群组,提示“群组3”(群组ID为000000dc,群组名为“群组3”即a47fc47e3300)
- // 86 00 0000009a d89ea48ba47fc47e0000 默认群组
- //+POC:86 00 00000BFC D1D0B7A2B2E2CAD4D7E93033
- if(msg[5]=='8' && msg[6]=='6')
- {
- HigosStopCnt();//正常登陆了,停止计数
- sutPocStatus.Logined=1;
- pocTimeOutTime=30;
- if(msg[8] == '0')
- {//GB2312
- len = strlen(&msg[17])-2;
- if(len >= POC_GROUP_NAME_LEN) len = POC_GROUP_NAME_LEN;
- strncpy(sutPocStatus.GroupName,&msg[17],len);
- if(len < POC_GROUP_NAME_LEN) sutPocStatus.GroupName[len]=0;
- msg[17]=0;
- strncpy(sutPocStatus.GroupId,&msg[9],POC_GROUP_ID_LEN);
- if(sutPocStatus.FirstLogined==0)
- {//登陆成功用户名群组名只播报一次
- if(getNameFlag == 0)
- sprintf(buf, "%s",sutPocStatus.GroupName);
- else
- {
- getNameFlag=0;
- sprintf(buf, "%s2CD2D1B5C7C2BD2C%s",sutPocStatus.UserName,sutPocStatus.GroupName);
- }
- MeSpeak(ENCODE_GBK, buf,0);
- }else
- {//其它形式进入
- if(g_ucEnterGroupFlag==1)
- {
- g_ucEnterGroupFlag=0;
- sprintf(buf, "BDF8C8EB2C%s",sutPocStatus.GroupName);
- MeSpeak(ENCODE_GBK, buf,0);
- }else {
- //V13011版本去除 临时拉群组嘟音
- //嘟嘟嘟
- // SpeakerEnable();
- // SetBeep(300,10);
- // os_dly_wait(110);
- // SpeakerEnable();
- // SetBeep(300,10);
- // os_dly_wait(110);
- // SpeakerEnable();
- // SetBeep(300,10);
- // os_dly_wait(110);
-
- printf("SetBeep..............\r\n");
-
- }
-
- }
- }
- sutPocStatus.FirstLogined=1;
- return 1;
- }
-
- //+POC:830000002e650000 对方话语权
- if(msg[5]=='8' && msg[6]=='3' && msg[7]=='0' && msg[8]=='0'){
- //最新POC版本快速短按PTT放开会只发这条过来,实际是没有请麦来的,因此目前忽视
- // sutPocStatus.Speaker=1;
- // SpeakerEnable();
- return 1;
- }
- //+POC:8301ffffffff0000 对方释放话语权
- if(msg[5]=='8' && msg[6]=='3' && msg[7]=='0' && msg[8]=='1'){
- //最新POC版本目前没有这条指令,也忽视吧
- // sutPocStatus.Speaker=0;
- // SpeakerDisable();
- return 1;
- }
- //+POC:91010103
- if(msg[5]=='9' && msg[6]=='1'){
- PocAddUserStatusToList(&msg[7]);
- return 1;
- }
- //+POC:0E00 0000 0003
- //+POC:0e00 0000 0009
- if(msg[5]=='0' && msg[6]=='e')
- {
- return 1;
- }
- //+POC:84 00 xxx //单呼提示
- //+POC:84 00 BAF4BDD0B3C9B9A6
- if(msg[5]=='8' && msg[6]=='4'){
- MakeStrEndByNewLine(msg);
- MeSpeak(ENCODE_GBK , &msg[9],0);
- return 1;
- }
- //+POC:21 000000 00002f25 2875376233000000
- //+POC:21 000000 0000D590 B5E7C1BFB2E2CAD432
- // 关键字 保留 UID 名称
- if(msg[5]=='2' && msg[6]=='1'){
- MakeStrEndByNewLine(msg);
- MeSpeak(ENCODE_GBK , &msg[21],0);
- msg[21]=0;
- strncpy(sutPocStatus.UserIdTemp,&msg[13],POC_USER_ID_LEN);
- return 1;
- }
-
- //+POC:1000000007 0004 00000BF9 0003 D1D0B7A2B2E2CAD4D7E93030
- //+POC:1000000008 0004 00000BF9 0003 D1D0B7A2B2E2CAD4D7E93030
- // 组索引 组ID 成员数 组名字
- //xxxxxxxx 4字节ID
- //nnnnnnnn 名称
- if(msg[5] == '1' &&
- msg[7] == '0' &&
- (msg[14] == '7' || msg[14] == '8'))
- {
- memset(sutPocStatus.GroupIdTemp, 0, POC_GROUP_ID_LEN);
- memcpy(sutPocStatus.GroupIdTemp, &msg[19], POC_GROUP_ID_LEN);
- MakeStrEndByNewLine(msg);
- MeSpeak(ENCODE_GBK, &msg[31],0);
- return 1;
- }
-
- return 0;
- }
|