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

📄 control.c

📁 uccos2的的源码文件
💻 C
📖 第 1 页 / 共 2 页
字号:
AT+CMGF 短信格式。分为Text模式和PDU模式AT+CNMI 设置新短消息通知电脑端AT+CSCA 短信中心AT+IPR? 显示串口波特率AT+IPR=19200更改串口波特率为19200AT&W    保存设置*/char cmd[16];       // 命令串char pdu[512];      // PDU串char ans[16];int gsmSendMessage(SM_PARAM* pSrc){	int nPduLength;		// PDU串长度	unsigned char nSmscLength;	// SMSC串长度	int nLength;		// 串口收到的数据长度	nPduLength = gsmEncodePdu(pSrc, pdu);	// 根据PDU参数,编码PDU串	strcat(pdu, "\x01a");		// 以Ctrl-Z结束//	TRACE("%s", pdu);  //zhao	gsmString2Bytes(pdu, &nSmscLength, 2);	// 取PDU串中的SMSC信息长度	nSmscLength++;		// 加上长度字节本身	// 命令中的长度,不包括SMSC信息长度,以数据字节计	sprintf(cmd, "AT+CMGS=%d\r", nPduLength / 2 - nSmscLength);	// 生成命令	SendGprsCmd(cmd,ans,sizeof(ans),1000);	// 先输出命令串	SendGprsCmd(pdu,ans,sizeof(ans),1000);		// 得到肯定回答,继续输出PDU串	return 1;}#define FL_DEL_ADD  (1<<4)#define FL_DEL_0    (1<<3)#define FL_86 		  (1<<0)#define FL_106  		(1<<1)int PreNumber(char* number){	if( number[0] == '1' && number[1] == '0' && number[2] == '6') // 小灵通号码		 return 1;	if( number[0] == '8' && number[1] == '6' )		 return 1;	return 0;}int	GprsSendMessage(const char * oldnumber,const char *message){	char buffer[128];	char number[20];	SM_PARAM src;	strcpy(number,oldnumber);	if( 1 != PreNumber(number) )	{		return 0;	}#if 0 // TEXT	SendGprsCmd("AT+CMGF=1\r\n",buffer,sizeof(buffer),1000);	sprintf(buffer,"AT+CMGS=\"%s\"\r\n",number);	SendGprsCmd(buffer,buffer,sizeof(buffer),1000);	sprintf(buffer,"%s\x1a",message);	SendGprsCmd(buffer,buffer,sizeof(buffer),1000);#else	// PDU	SendGprsCmd("AT+CMGF=0\r\n",buffer,sizeof(buffer),1000);	memset(&src,0,sizeof(src));	//strcpy(src.SCA,"8613800200500");	strcpy(src.TPA,number);	strcpy(src.TP_UD,message);	src.TP_DCS = GSM_UCS2;	gsmSendMessage(&src);#endif //	return 0;}char	GPS_HandleData(char* buffer);int GetGPSViewString(char* str,int len){    int ret; 	ret = GPS_HandleData(str); 	switch(ret) 	{ 		case 1: // $GPGGA,121252.000,3937.3032,N,11611.6046,E,1,05,2.0,45.9,M,-5.7,M,,0000*77#if 0sprintf(str,"UTC: %02d:%02d:%02d::%03d\r\n"						"%s %d.%d'%d\"\r\n%s %d.%d'%d\"\r\n"						"Satellites:%d\r\n"						"Altitude:%g meters\r\n",				GPS_DATA.Time.Hour,GPS_DATA.Time.Min,GPS_DATA.Time.Sec,GPS_DATA.Time.ms,    			GPS_DATA.Latitude.Indicator == 'N' ? "North" : "South",				GPS_DATA.Latitude.dd,GPS_DATA.Latitude.mm,GPS_DATA.Latitude.mmmm,				GPS_DATA.Longtitude.Indicator == 'E' ? "East" : "West",				GPS_DATA.Longtitude.ddd,GPS_DATA.Longtitude.mm,GPS_DATA.Longtitude.mmmm,				GPS_DATA.StlUsed,((long)GPS_DATA.Altitude)*0.01				);#elsesprintf(str,"世界时间: %02d:%02d:%02d::%03d\r\n"						"%s %d°%d'%d\"\r\n%s %d°%d'%d\"\r\n"						"使用卫星:%d\r\n"						"海拔高度:%g m\r\n",				GPS_DATA.Time.Hour,GPS_DATA.Time.Min,GPS_DATA.Time.Sec,GPS_DATA.Time.ms,    			GPS_DATA.Latitude.Indicator == 'N' ? "北纬" : "南纬",				GPS_DATA.Latitude.dd,GPS_DATA.Latitude.mm,GPS_DATA.Latitude.mmmm,				GPS_DATA.Longtitude.Indicator == 'E' ? "东经" : "西经",				GPS_DATA.Longtitude.ddd,GPS_DATA.Longtitude.mm,GPS_DATA.Longtitude.mmmm,				GPS_DATA.StlUsed,((long)GPS_DATA.Altitude)*0.01				);#endif 			break; 		default: ret = -1 ; break; 	} return ret;}//// GPSchar * startchar(char * str,char endch ){	int i=0;	char * Ptr;	Ptr=str;	while(str[i])	{		if(str[i]==endch)		{			str[i]=0;			return Ptr;		}		i++;		if(i>30)			break;	}	return NULL;}unsigned short StrTOUINT(char * str,char DBits){	char	i=0;	unsigned short	j=0;	if( DBits <= 5 )	{		do		{			if(str[i] != '.')			{				j=(str[i]-0x30)+j*10;				DBits--;			}			i++;		}while(DBits > 0);	}	return j;}unsigned long str2i(char * str){	unsigned long	v = 0;     while(*str)     {        if( *str < '0' || *str > '9')          str++;        else            break;     }    while(*str)    {       if( *str < '0' || *str > '9')         break;       v = v*10 + (*str-'0');       str++;    }	return v;}const char	GGA_DATA_L[] = GGA_DATA;const char	GLL_DATA_L[] = GLL_DATA;const char	GSA_DATA_L[] = GSA_DATA;const char	GSV_DATA_L[] = GSV_DATA;const char	RMC_DATA_L[] = RMC_DATA;const char	VTG_DATA_L[] = VTG_DATA;GPSDataQ_TYPE	GPSDataQ[1];GPS_DATA_TYPE	GPS_DATA;char	GPS_HandleData(char* buffer){	unsigned char i,err,temp8,j;	unsigned short temp16;	char * temptr;	char index;			i = err = temp8 = j = 0;			index = -1;			temptr = buffer;            temptr = strstr(temptr,GGA_DATA_L);            if( temptr == 0 )                return -1;#define Search_Split()\if( 0 == startchar(temptr,',') );\if( temptr[0] == 0 )  return 1;\			if(strncmp(temptr,GGA_DATA_L,strlen(GGA_DATA_L)) == 0)			{                memset(&GPS_DATA,0,sizeof(GPS_DATA));				index=1;				Search_Split();				temptr = temptr+strlen(temptr)+1;//$GPGGA,				//UTC				Search_Split();				GPS_DATA.Time.Hour = (U8)(StrTOUINT(temptr,2));                if( GPS_DATA.Time.Hour > 23 ) return -1;				GPS_DATA.Time.Min = (U8)(StrTOUINT(temptr+2,2));                if( GPS_DATA.Time.Hour > 59 ) return -1;				GPS_DATA.Time.Sec = (U8)(StrTOUINT(temptr+4,2));                if( GPS_DATA.Time.Hour > 59 ) return -1;				GPS_DATA.Time.ms = StrTOUINT(temptr+7,strlen(temptr+7)); //.sss                if( GPS_DATA.Time.Hour > 999 ) return -1;				temptr = temptr + strlen(temptr)+1;//hhmmss.sss,				//Latitude				Search_Split();				GPS_DATA.Latitude.dd = (U8)(StrTOUINT(temptr,2));				GPS_DATA.Latitude.mm = (U8)(StrTOUINT(temptr+2,2));				GPS_DATA.Latitude.mmmm = StrTOUINT(temptr+5,4);//.mmmm				temptr = temptr + 10;//ddmm.mmmm,				//N/S Latitude				Search_Split();				GPS_DATA.Latitude.Indicator = temptr[0];				temptr = temptr + 2;//N,				//Longtitude				Search_Split();				GPS_DATA.Longtitude.ddd = StrTOUINT(temptr,3);				GPS_DATA.Longtitude.mm = (U8)(StrTOUINT(temptr+3,2));				GPS_DATA.Longtitude.mmmm = StrTOUINT(temptr+6,4);//.mmmm				temptr = temptr + 11;//dddmm.mmmm,				//E/W Longtitude				Search_Split();				GPS_DATA.Longtitude.Indicator = temptr[0];				temptr = temptr + 2;//E,				//Fix Indicator				Search_Split();				GPS_DATA.Status = (U8)(StrTOUINT(temptr,1) << 4);				temptr = temptr + 2;//1,				//Satellites Used				Search_Split();				GPS_DATA.StlUsed = (U8)(StrTOUINT(temptr,2));				temptr = temptr + 3;//07,				//HDOP				temptr = startchar( temptr,',' );				GPS_DATA.HDOP = (U8)( StrTOUINT(temptr, strlen(temptr)-1) );				temptr = temptr+strlen(temptr) + 1;//1.0,				//Altitude				temptr = startchar( temptr,',' );				if(temptr[0] ==  '-' )//负数				{					float f;					temptr++;					sscanf(temptr,"%f,",&f);					GPS_DATA.Altitude = f * 100;					GPS_DATA.Altitude = 0-GPS_DATA.Altitude;				}				else				{					float f;					sscanf(temptr,"%f,",&f);					GPS_DATA.Altitude = f * 100;				}			}#if 0			else if(strncmp(temptr,GLL_DATA_L,strlen(GLL_DATA_L)) == 0)			{				index=0;				GPSDataQ[i].State = 0;			}			else if(strncmp(temptr,GSA_DATA_L,strlen(GSA_DATA_L)) == 0)			{				index=3;				startchar(temptr,',');				temptr = temptr+strlen(temptr)+3;//$GPGSA,A,				//MODE				temp8 = (U8)(StrTOUINT(temptr,1));				GPS_DATA.Status = (GPS_DATA.Status & 0XF0) + temp8;				temptr = temptr+2;//3,				//Satellite				for(j = 0; j < MAXSATELLITE; j++)				{					temptr = startchar( temptr,',' );					if(strlen(temptr) > 0)					{						GPS_DATA.Satellite[j].ID = (U8)( StrTOUINT(temptr, strlen(temptr)) );					}					temptr = temptr + strlen(temptr) + 1;//07,//,,				}				//PDOP				temptr = startchar( temptr,',' );				//GPS_DATA.PDOP = (U8)( StrTOUINT(temptr, strlen(temptr)-1) );				temptr = temptr + strlen(temptr) + 1;//1.0,				//HDOP				temptr = startchar( temptr,',' );				GPS_DATA.HDOP = (U8)( StrTOUINT(temptr, strlen(temptr)-1) );				temptr = temptr + strlen(temptr) + 1;//1.0,				//VDOP				temptr = startchar( temptr,'*' );				GPS_DATA.VDOP = (U8)( StrTOUINT(temptr, strlen(temptr)-1) );			}			else if(strncmp(temptr,GSV_DATA_L,strlen(GSV_DATA_L)) == 0)			{				index=4;				startchar(temptr,',');				temptr = temptr + strlen(temptr)+3;//$GPGSV,2,				temp8 = (U8)(StrTOUINT(temptr,1));				temp8 --;				for(j = 0; j < 4; j++)				{					GPS_DATA.Satellite[temp8 * 4 + j].SNR = 0;				}				temptr = temptr + 2;//1,				//Stl Use				err = (U8)( StrTOUINT(temptr, 2 ));				err = 12 - (temp8 * 4) ;				err = ( err > 4 ) ? 4 : err;				temptr = temptr + 3;//07,				//Satellite message				for(j = 0; j < err; j++)				{					//ID					GPS_DATA.Satellite[temp8 * 4 + j].ID = (U8)( StrTOUINT(temptr, 2 ));					temptr = temptr + 3;//07,					//Elevation					GPS_DATA.Satellite[temp8 * 4 + j].AZnEL = (U16)( StrTOUINT(temptr, 2 ));					temptr = temptr + 3;//79,					//Azimuth					temp16 = (U16)( StrTOUINT(temptr, 3 ));					temp16 = temp16 * 100;					GPS_DATA.Satellite[temp8 * 4 + j].AZnEL = GPS_DATA.Satellite[temp8 * 4 + j].AZnEL + temp16;					temptr = temptr + 4;//035,					//SNR					GPS_DATA.Satellite[temp8 * 4 + j].SNR = (U16)( StrTOUINT(temptr, 2 ));					temptr = temptr + 3;//42,				}			}			else if(strncmp(temptr,RMC_DATA_L,strlen(RMC_DATA_L)) == 0)			{				index=5;				startchar(temptr,',');				temptr = temptr + strlen(temptr)+12;//$GPRMC,HHMMSS.SSS,				//data flag				GPS_DATA.Time.Flag = temptr[0];				temptr = temptr + 27;//A,DDMM.MMMM,N,DDDMM.MMMM,W,				startchar(temptr,',');				temptr = temptr + strlen(temptr) + 1;//0.13,				startchar(temptr,',');				temptr = temptr + strlen(temptr) + 1;//306.62,				GPS_DATA.Time.Day = (U8)( StrTOUINT(temptr, 2 ));				temptr = temptr + 2;//dd;				GPS_DATA.Time.Mon = (U8)( StrTOUINT(temptr, 2 ));				temptr = temptr + 2;//mm;				GPS_DATA.Time.Year = (U8)( StrTOUINT(temptr, 2 ));				temptr = temptr + 2;//yy;			}			else if(strncmp(temptr,VTG_DATA_L,strlen(VTG_DATA_L)) == 0)			{				index=6;				startchar(temptr,',');				temptr = temptr + strlen(temptr)+1;//$GPVTG,				startchar(temptr,',');				temptr = temptr + strlen(temptr)+1;//309.62,				startchar(temptr,',');				temptr = temptr + strlen(temptr)+1;//T,				startchar(temptr,',');				temptr = temptr + strlen(temptr)+1;//,				startchar(temptr,',');				temptr = temptr + strlen(temptr)+1;//M,				startchar(temptr,',');				temptr = temptr + strlen(temptr)+1;//0.13,				startchar(temptr,',');				temptr = temptr + strlen(temptr)+1;//N,				startchar(temptr,',');				GPS_DATA.Speed = StrTOUINT( temptr, strlen(temptr)-1) ;			}#endif	return index;}// CANint g_canfd = -1;int g_canid = 0x123456;int CAN_Open(int canid){}int CAN_Send(stcSJA1000_BufInfo* Buf){}int CAN_Read(stcSJA1000_BufInfo* Buf){	 return 0;}char* debugcanframe(char* str,stcSJA1000_BufInfo* Buf){	int i;	char* ptr = str;	ptr += sprintf(ptr,"ID=%d Length=%d Extend=%d\r\n",			Buf->FrID,Buf->FrIf.Bits.DLC,Buf->FrIf.Bits.FF);  for( i = 0; i < Buf->FrIf.Bits.DLC; i++)    ptr += sprintf(ptr,"%02x ",Buf->DA[i]);  ptr += sprintf(ptr,"\r\n");  return str;}

⌨️ 快捷键说明

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