📄 gprs.txt
字号:
for(i=0;i<size;i++){
if(cmdstr[i]==0x3 || cmdstr[i]==0x10){
f=SFIFO_push(&gprs_senddate_f,(INT8U)0x10);
if(f)//full
systemExit(ERROR_USR+8);
}
if(cmdstr[i]=='+')//0x2b
OSTimeDlyHMSM(0, 0, 1,0);
f=SFIFO_push(&gprs_senddate_f,(INT8U)cmdstr[i]);
if(f)//full
systemExit(ERROR_USR+8);
}
OS_EXIT_CRITICAL();
//clear
cmd_head[GPRS_HEAD_FIX_SIZE]='\0';
}
//need data escape & + process
/*
1 not online
2 空间不够
*/
/*封装DATA*/
static INT8U gprshelp(char* cmdstr,INT8U size)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
INT8U i,f,ch,cl;
INT8U err;
INT32U state,s;
OSSemPend(globalEvent,0,&err);
state=g_gvv.gprs_state;
OSSemPost(globalEvent);
if(state!=GPRS_STATE_ONLINE) return 1;
if(gprs_date_flag==0) return 1;
gprsfillp(cmdstr,size);
OS_ENTER_CRITICAL();
s=SFIFO_size(&gprs_senddate_f);
if((GPRS_SENDDATE_SIZE-s)<(size*2+2)){//not date escape
OS_EXIT_CRITICAL();
return 2;
}
//date Q26 需要转义和+处理 XXX 见rawhelp
f=SFIFO_push(&gprs_senddate_f,'<');
if(f)//full
systemExit(ERROR_USR+8);
for(i=0;i<size;i++){
ch=(INT8U)cmdstr[i];
cl=ch & 0xf; ///低4位
ch>>=4; ///高4位
if(cl<10)
cl+='0';
else{
cl-=10;
cl+='A';
}
if(ch<10)
ch+='0';
else{
ch-=10;
ch+='A';
}
f=SFIFO_push(&gprs_senddate_f,ch);
if(f)//full
systemExit(ERROR_USR+8);
f=SFIFO_push(&gprs_senddate_f,cl);
if(f)//full
systemExit(ERROR_USR+8);
}
f=SFIFO_push(&gprs_senddate_f,'>');
if(f)//full
systemExit(ERROR_USR+8);
OS_EXIT_CRITICAL();
//clear
cmd_head[GPRS_HEAD_FIX_SIZE]='\0';
return 0;
}
static void gprsg(void *p) ///接收
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
INT32U s,f,full;
INT8U c;
for(;;){
OSTimeDlyHMSM(0, 0, 0,1);
selfcount[GPRSG_PRIO]=0;
OS_ENTER_CRITICAL();
for(;;){
if(!(U1LSR & (0x01<<0))) ///如果接收数据就绪
break;
c=U1RBR; ///接收器缓存寄存器 包含UART1 Rx FIFO当中最早接收到的字节
full=SFIFO_push(&gprs_rec_f,c);
//if(full)//full
//systemExit(ERROR_USR+8);
//discard overflow char
}
s=SFIFO_size(&gprs_rec_f);///接收到缓冲区的字符长度
OS_EXIT_CRITICAL();
if(s!=0 ){
f=tetunsetFlag(&reccmdflag);
if(f==MSG_FLA_ALLOW){
recmsg.cmd=GPRS_CMD_GETCHAR;
sendMsg(&recmsg,gprsEvent , NULL, MSG_BACKTYPE_FLAG,&reccmdflag);
}
}
}
}
//XXX need 流控
static void gprssendfifo(pSFIFO sfifo)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
INT8U c,err;
OS_ENTER_CRITICAL();
for(;;){
if(U1LSR & (0x01<<5)) {
c=SFIFO_pop(sfifo,&err);
if(err==1)//empty
break;
U1THR = c;
}else
break;
}
OS_EXIT_CRITICAL();
}
static void gprss(void*p)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
INT32U d;
for(;;){
OSTimeDlyHMSM(0, 0, 0,10);
selfcount[GPRSS_PRIO]=0;
OS_ENTER_CRITICAL();
d=SFIFO_size(&gprs_senddate_f);//0 empty
OS_EXIT_CRITICAL();
if(d)
gprssendfifo(&gprs_senddate_f);
}
}
static void gprs_login(void);
static INT8U gprs_pkg(INT8U reason)
{
INT32U id;
INT8U err;
V1_GPIOSTATE gp;
OSSemPend(globalEvent,0,&err);
id=g_gvv.id;
OSSemPost(globalEvent);
//bug 011
gprsbackContent[0]=0x55;//rlen-1
gprsbackContent[1]=id;
gprsbackContent[2]=id>>8;
gprsbackContent[3]=0x55;//head check
gprsbackContent[4]=0x8;//cmd
gprsbackContent[5]=reason;//reason
if(reason==1){
OSSemPend(globalEvent,0,&err);
gp.aval=g_gvv.gen_gpio_in_state.aval;
gp.state=g_gvv.gen_gpio_in_state.state;
OSSemPost(globalEvent);
gprsbackContent[6]=gp.aval;
gprsbackContent[7]=gp.aval>>8;
gprsbackContent[8]=gp.aval>>16;
gprsbackContent[9]=gp.aval>>24;
gprsbackContent[10]=gp.state;
gprsbackContent[11]=gp.state>>8;
gprsbackContent[12]=gp.state>>16;
gprsbackContent[13]=gp.state>>24;
gprsbackContent[14]=0x55;//date check
return gprshelp((char*)gprsbackContent,15);//login
}
else{
gprsbackContent[6]=0x55;//date check
return gprshelp((char*)gprsbackContent,7);//login
}
}
INT32U getnum(INT8U * st,INT8U ** end);
/*
cmd process
GPRS_STATE_INIT[n]-> ->GPRS_STATE_READY
GPRS_STATE_TRYONLINE[n]->GPRS_STATE_ONLINE
*/
void gprsGETCMDhander()
{
INT8U err;
INT32U gprs_state;
OSSemPend(globalEvent,0,&err);
gprs_state=g_gvv.gprs_state;
OSSemPost(globalEvent);
gprsorgContent[gprsorgCmdSize-1]='\0';
DPRINTS("G ");
DPRINTSN((char*)gprsorgContent,gprsorgCmdSize);
DPRINTS("\r\n");
if( gprs_state==GPRS_STATE_INIT){
if(!strstr((char*)gprsorgContent,"OK"))
return;
else{
gprsCMDhelp("at+wipcfg=1",11); ///开始TCP/IP协议
gprs_state=GPRS_STATE_INIT+1;
}
}else if( gprs_state==GPRS_STATE_INIT+1){
if(!strstr((char*)gprsorgContent,"OK"))
return;
else{
gprsCMDhelp("at+wipbr=1,6",12);///设置bearer为GPRS
gprs_state=GPRS_STATE_INIT+2;
}
}else if( gprs_state==GPRS_STATE_INIT+2){
if(!strstr((char*)gprsorgContent,"OK"))
return;
else{
gprsCMDhelp("at+wipbr=2,6,11,\"cmnet\"",23);///设置GPRS APN name为cmnet
gprs_state=GPRS_STATE_INIT+3;
}
}else if( gprs_state==GPRS_STATE_INIT+3){
if(!strstr((char*)gprsorgContent,"OK"))
return;
else{
gprsCMDhelp("at+wipbr=4,6,0",14);///start GPRS wip login
gprs_mon++;
gprs_state=GPRS_STATE_INIT+4;
}
}else if( gprs_state==GPRS_STATE_INIT+4){// 1 没钱的时候 2sim300c B06 3次 会报error
if(!strstr((char*)gprsorgContent,"OK")){
if(!strstr((char*)gprsorgContent,"ERROR")){
return;
}else{
//no sim card , money , or not ready
if(gprs_mon<10){//重发命令
OSTimeDlyHMSM(0,0,2,0);// 避免大量的调试信息
gprsCMDhelp("at+wipbr=4,6,0",14);///start GPRS wip login
gprs_mon++;
&
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -