/********************************************************************************* *函数名称:u8 SMS_Tx_PDU(char *strDestNum,char *s) *功能描述:发送PDU格式的短信函数 *输 入:s 原始短信数据,strDestNum接收方号码 *输 出:none *返 回 值: 1:正常完成, 0:表示失败 *作 者:白养民 *创建日期:2013-05-29 *--------------------------------------------------------------------------------- *修 改 人: *修改日期: *修改描述: *********************************************************************************/ u8 SMS_Tx_PDU(char *strDestNum,char *s) { u16 len; u16 i; char *pstrTemp; memset(SMS_Service.SMSAtSend,0,sizeof(SMS_Service.SMSAtSend)); pstrTemp=rt_malloc(400); memset(pstrTemp,0,400); i=0; SetPhoneNumToPDU(SMS_Service.Sms_Info.TPA, strDestNum, sizeof(SMS_Service.Sms_Info.TPA)); len=AnySmsEncode_NoCenter(SMS_Service.Sms_Info.TPA,GSM_UCS2,s,strlen(s),pstrTemp); //len=strlen(pstrTemp); pstrTemp[len++]=0x1A; // message end ////// sprintf( ( char * ) SMS_Service.SMSAtSend, "AT+CMGS=%d\r\n", (len-2)/2); rt_kprintf("%s",SMS_Service.SMSAtSend); rt_hw_gsm_output( ( char * ) SMS_Service.SMSAtSend ); rt_thread_delay(50); ////// rt_device_write( &dev_vuart, 0, pstrTemp, strlen(pstrTemp) ); //rt_hw_console_output(pstrTemp); rt_hw_gsm_output_Data(pstrTemp, len); rt_free( pstrTemp ); pstrTemp=RT_NULL; return 1; }
/********************************************************************************* *函数名称:u8 SMS_Tx_Text(char *strDestNum,char *s) *功能描述:发送TEXT格式的短信函数 *输 入:s 原始短信数据,strDestNum接收方号码 *输 出:none *返 回 值: 1:正常完成, 0:表示失败 *作 者:白养民 *创建日期:2013-05-29 *--------------------------------------------------------------------------------- *修 改 人: *修改日期: *修改描述: *********************************************************************************/ u8 SMS_Tx_Text(char *strDestNum,char *s) { u16 len; char *pstrTemp; memset(SMS_Service.SMSAtSend,0,sizeof(SMS_Service.SMSAtSend)); strcpy( ( char * ) SMS_Service.SMSAtSend, "AT+CMGS=\"" ); //strcat(SMS_Service.SMSAtSend,"8613820554863");// Debug strcat(SMS_Service.SMSAtSend,strDestNum); strcat(SMS_Service.SMSAtSend,"\"\r\n"); rt_kprintf("\r\n%s",SMS_Service.SMSAtSend); rt_hw_gsm_output( ( char * ) SMS_Service.SMSAtSend ); rt_thread_delay(50); pstrTemp=rt_malloc(150); memset(pstrTemp,0,150); len=strlen(s); memcpy(pstrTemp,s,len); pstrTemp[len++]=0x1A; // message end ///发送调试信息 rt_device_write( &dev_vuart, 0, pstrTemp, len); ///发送到GSM模块 rt_hw_gsm_output_Data(pstrTemp, len); rt_free( pstrTemp ); pstrTemp=RT_NULL; return 1; }
/********************************************************************************* *函数名称:void SMS_protocol(u8 *instr,u16 len) *功能描述:短信处理函数,这个函数需要在一个线程里面调用,进行相关处理(短信读取,删除和自动发送相关) *输 入:none *输 出:none *返 回 值:none *作 者:白养民 *创建日期:2013-05-29 *--------------------------------------------------------------------------------- *修 改 人: *修改日期: *修改描述: *********************************************************************************/ void SMS_Process(void) { u16 ContentLen=0; u16 i,j,k; char *pstrTemp; if(SMS_Service.SMS_waitCounter) return; //----------- 短信处理相关 -------------------------------------------------------- //--------------------------------- if(SMS_Service.SMS_read) // 读取短信 { memset(SMS_Service.SMSAtSend,0,sizeof(SMS_Service.SMSAtSend)); /* strcpy( ( char * ) SMS_Service.SMSAtSend, "AT+CMGR=" ); if ( SMS_Service.SMIndex > 9 ) { SMS_Service.SMSAtSend[8] = ( SMS_Service.SMIndex >> 4 ) + 0x30; SMS_Service.SMSAtSend[9] = ( SMS_Service.SMIndex & 0x0f ) + 0x30; SMS_Service.SMSAtSend[10] = 0x0d; SMS_Service.SMSAtSend[11] = 0x0a; } else { SMS_Service.SMSAtSend[8] = ( SMS_Service.SMIndex & 0x0f ) + 0x30; SMS_Service.SMSAtSend[9] = 0x0d; SMS_Service.SMSAtSend[10] = 0x0a; } rt_kprintf("\r\n%s",SMS_Service.SMSAtSend); */ /// sprintf(SMS_Service.SMSAtSend,"AT+CMGR=%d\r\n",SMS_Service.SMIndex); rt_kprintf("%s",SMS_Service.SMSAtSend); /// rt_hw_gsm_output( ( char * ) SMS_Service.SMSAtSend ); SMS_Service.SMS_read--; SMS_Service.SMS_waitCounter=3; } //------------------------------- // 发送短息确认 else if(SMS_Service.SMS_sendFlag==1) { //#ifdef SMS_TYPE_PDU if(SMS_Service.SMS_come==1) { memset(SMS_Service.SMSAtSend,0,sizeof(SMS_Service.SMSAtSend)); ///申请400字节空间 pstrTemp=rt_malloc(400); memset(pstrTemp,0,400); ///将字符串格式的目的电话号码设置为PDU格式的号码 SetPhoneNumToPDU(SMS_Service.Sms_Info.TPA, SMS_Service.SMS_destNum, sizeof(SMS_Service.Sms_Info.TPA)); ///生成PDU格式短信内容 ContentLen=AnySmsEncode_NoCenter(SMS_Service.Sms_Info.TPA,GSM_UCS2,SMS_Service.SMS_sd_Content,strlen(SMS_Service.SMS_sd_Content),pstrTemp); //ContentLen=strlen(pstrTemp); ///添加短信尾部标记"esc" pstrTemp[ContentLen]=0x1A; // message end ////// sprintf( ( char * ) SMS_Service.SMSAtSend, "AT+CMGS=%d\r\n", (ContentLen-2)/2); rt_kprintf("%s",SMS_Service.SMSAtSend); rt_hw_gsm_output( ( char * ) SMS_Service.SMSAtSend ); rt_thread_delay(50); ////// //rt_kprintf("%s",pstrTemp); rt_device_write( &dev_vuart, 0, pstrTemp, strlen(pstrTemp) ); rt_hw_gsm_output_Data( ( char * ) pstrTemp, ContentLen+1); rt_free( pstrTemp ); pstrTemp=RT_NULL; } //#else else { memset(SMS_Service.SMSAtSend,0,sizeof(SMS_Service.SMSAtSend)); strcpy( ( char * ) SMS_Service.SMSAtSend, "AT+CMGS=\"" ); //strcat(SMS_Service.SMSAtSend,"8613820554863");// Debug strcat(SMS_Service.SMSAtSend,SMS_Service.SMS_destNum); strcat(SMS_Service.SMSAtSend,"\"\r\n"); rt_kprintf("\r\n%s",SMS_Service.SMSAtSend); rt_hw_gsm_output( ( char * ) SMS_Service.SMSAtSend ); rt_thread_delay(50); ContentLen=strlen(SMS_Service.SMS_sd_Content); SMS_Service.SMS_sd_Content [ContentLen]=0x1A; // message end rt_kprintf("%s",SMS_Service.SMS_sd_Content); rt_hw_gsm_output_Data( ( char * ) SMS_Service.SMS_sd_Content, ContentLen+1); } //#endif SMS_Service.SMS_sendFlag=0; // clear SMS_Service.SMS_waitCounter=3; } /* else if(SMS_Service.SMS_delALL==1) //删除短信 { memset(SMS_Service.SMSAtSend,0,sizeof(SMS_Service.SMSAtSend)); /// //sprintf(SMS_Service.SMSAtSend,"AT+CMGD=%d\r\n",SMS_Service.SMIndex); sprintf(SMS_Service.SMSAtSend,"AT+CMGD=0,4\r\n",SMS_Service.SMIndex); rt_kprintf("%s",SMS_Service.SMSAtSend); /// rt_hw_gsm_output( ( char * )SMS_Service.SMSAtSend ); SMS_Service.SMS_delALL=0; SMS_Service.SMS_waitCounter=3; } */ }
static void gsm_thread_entry(void* parameter) { u8 atd_str[25]; rt_size_t res=RT_ERROR; // finsh_init(&shell->parser); // // step 1: Init Dataflash DF_init(); APP_IOpinInit(); rt_kprintf("\r\n ---> gsm thread start !\r\n"); HardWareVerion=HardWareGet(); // step 2: process config data SysConfiguration(); // system config total_ergotic(); Gsm_RegisterInit(); // init register states ,then it will power on the module SIMID_Convert_SIMCODE(); // translate #ifdef HMI HMI_app_init(); #endif gps_init(); //-------------------------------------- while (1) { if(GSM_Working_State()) { // 1. after power on get imsi code IMSIcode_Get(); // 2. after get imsi Comm AT initial start GSM_Module_TotalInitial(); // 3. Receivce & Process Communication Module data ---- GSM_Buffer_Read_Process(); } rt_thread_delay(20); if(GSM_Working_State()==2) { DataLink_Process(); //------------------------------------------------ if (Send_DataFlag== 1) { res=rt_device_control(&Device_GSM, query_online, NULL); if(res==RT_EOK) rt_device_write(&Device_GSM, LinkNum,( const void *)GPRS_info,(rt_size_t) GPRS_infoWr_Tx); Send_DataFlag=0; } //监听 if(CallState==CallState_rdytoDialLis) { CallState=CallState_Dialing; memset(atd_str,0,sizeof(atd_str)); memcpy(atd_str,"ATD",3); memcpy(atd_str+3,JT808Conf_struct.LISTEN_Num,strlen((const char*)JT808Conf_struct.LISTEN_Num)); memcpy(atd_str+3+strlen((const char*)JT808Conf_struct.LISTEN_Num),";\r\n",3); rt_hw_gsm_output(atd_str); rt_kprintf("\r\n拨打%s\r\n",atd_str); } //--------- Step timer // Dial_step_Single_10ms_timer(); // TTS TTS_Data_Play(); // Get CSQ value if(GSM_CSQ_Query()==false) { if(Calling_ATA_flag==1) { rt_thread_delay(3); rt_hw_gsm_output("ATA\r\n"); //检查信号强度 if(DispContent) rt_kprintf(" 接听 ATA\r\n"); Calling_ATA_flag=0; } } // SMS Service SMS_Process(); rt_thread_delay(10); } } }
static void gsm_thread_entry(void* parameter) { u8 atd_str[25]; rt_size_t res=RT_ERROR; // finsh_init(&shell->parser); // // step 1: Init Dataflash DF_init(); APP_IOpinInit(); rt_kprintf("\r\n ---> gsm thread start !\r\n"); HardWareVerion=HardWareGet(); // step 2: process config data SysConfiguration(); // system config total_ergotic(); Gsm_RegisterInit(); // init register states ,then it will power on the module SIMID_Convert_SIMCODE(); // translate #ifdef HMI HMI_app_init(); #endif gps_init(); Lcd_init(); //-------------------------------------- while (1) { if((GSM_PWR.result==result_success)&&(dwlcd_contr<=5)) { if(Login_Menu_Flag!=1) { Lcd_write(Big_lcd.status,LCD_PAGE,0x15); dwlcd_contr++; } else { Lcd_write(Big_lcd.status,LCD_PAGE,0x01); dwlcd_contr++; } ; } // 1. after power on get imsi code IMSIcode_Get(); // 2. after get imsi Comm AT initial start GSM_Module_TotalInitial(); // 3. Receivce & Process Communication Module data ---- GSM_Buffer_Read_Process(); rt_thread_delay(20); DataLink_Process(); //++++++++++++++++++++++++DWLCD+++++++++++++++++++++ //_485_RxHandler_01(); if(Big_lcd.RX_enable==LCD_BUSY) { Lcd_Data_Process(); Big_lcd.RX_enable=LCD_IDLE; } /* Lcd_write(Big_lcd.status,LCD_SETSPD,0); Lcd_write(Big_lcd.status,LCD_GPSNUM,Satelite_num); Lcd_write(Big_lcd.status,LCD_GSMNUM,ModuleSQ); */ if(ModuleStatus&Status_GPS ) { if(Big_lcd.RX_enable==LCD_IDLE) { if(lcd_contrl==0) { Lcd_write(Big_lcd.status,LCD_SETTIME,0); delay_ms(5); lcd_contrl++; } } } //++++++++++++++++++++++++DWLCD+++++++++++++++++++++ if(BD1_struct.Rx_enable==RT_EOK) { BD1_RxProcess(); } //------------------------------------------------ if (Send_DataFlag== 1) { res=rt_device_control(&Device_GSM, query_online, NULL); if(res==RT_EOK) rt_device_write(&Device_GSM, LinkNum,( const void *)GPRS_info,(rt_size_t) GPRS_infoWr_Tx); Send_DataFlag=0; } //监听 if(CallState==CallState_rdytoDialLis) { CallState=CallState_Dialing; memset(atd_str,0,sizeof(atd_str)); memcpy(atd_str,"ATD",3); memcpy(atd_str+3,JT808Conf_struct.LISTEN_Num,strlen((const char*)JT808Conf_struct.LISTEN_Num)); memcpy(atd_str+3+strlen((const char*)JT808Conf_struct.LISTEN_Num),";\r\n",3); rt_hw_gsm_output(atd_str); rt_kprintf("\r\n拨打%s\r\n",atd_str); } //--------- Step timer // Dial_step_Single_10ms_timer(); // TTS TTS_Data_Play(); // Get CSQ value if(GSM_CSQ_Query()==false) { if(Calling_ATA_flag==1) { delay_ms(10); rt_hw_gsm_output("ATA\r\n"); //检查信号强度 if(DispContent) rt_kprintf(" 接听 ATA\r\n"); Calling_ATA_flag=0; } } // SMS Service SMS_Process(); } }
/********************************************************************************* *函数名称:void SMS_protocol(u8 *instr,u16 len) *功能描述:短信处理函数,这个函数需要在一个线程里面调用,进行相关处理(短信读取,删除和自动发送相关) *输 入:none *输 出:none *返 回 值:none *作 者:白养民 *创建日期:2013-05-29 *--------------------------------------------------------------------------------- *修 改 人: *修改日期: *修改描述: *********************************************************************************/ void SMS_Process(void) { u16 ContentLen=0; // u16 i,j,k; char *pstrTemp; if(SMS_Service.SMS_waitCounter) return; //----------- 短信处理相关 -------------------------------------------------------- //--------------------------------- if(SMS_Service.SMS_read) // 读取短信 { memset(SMS_Service.SMSAtSend,0,sizeof(SMS_Service.SMSAtSend)); /* strcpy( ( char * ) SMS_Service.SMSAtSend, "AT+CMGR=" ); if ( SMS_Service.SMIndex > 9 ) { SMS_Service.SMSAtSend[8] = ( SMS_Service.SMIndex >> 4 ) + 0x30; SMS_Service.SMSAtSend[9] = ( SMS_Service.SMIndex & 0x0f ) + 0x30; SMS_Service.SMSAtSend[10] = 0x0d; SMS_Service.SMSAtSend[11] = 0x0a; } else { SMS_Service.SMSAtSend[8] = ( SMS_Service.SMIndex & 0x0f ) + 0x30; SMS_Service.SMSAtSend[9] = 0x0d; SMS_Service.SMSAtSend[10] = 0x0a; } rt_kprintf("\r\n%s",SMS_Service.SMSAtSend); */ /// sprintf(SMS_Service.SMSAtSend,"AT+CMGR=%d\r\n",SMS_Service.SMIndex); rt_kprintf("%s",SMS_Service.SMSAtSend); /// rt_hw_gsm_output( ( char * ) SMS_Service.SMSAtSend ); SMS_Service.SMS_read--; SMS_Service.SMS_waitCounter=3; } //------------------------------- // 发送短息确认 else if(SMS_Service.SMS_sendFlag==1) { //#ifdef SMS_TYPE_PDU if(SMS_Service.SMS_come==1) { memset(SMS_Service.SMSAtSend,0,sizeof(SMS_Service.SMSAtSend)); ///申请400字节空间 pstrTemp=rt_malloc(400); memset(pstrTemp,0,400); #ifdef MC8332_CDMA ContentLen=CDMA_encode_PDU(SMS_Service.SMS_sd_Content,strlen(SMS_Service.SMS_sd_Content),pstrTemp); ///添加短信尾部标记"esc" pstrTemp[ContentLen]=0x1A; // message end sprintf( ( char * ) SMS_Service.SMSAtSend, "AT+CMGS=%d\r", (ContentLen>>1)); #endif rt_kprintf("%s",SMS_Service.SMSAtSend); rt_hw_gsm_output( ( char * ) SMS_Service.SMSAtSend ); rt_thread_delay(60); ////// //rt_kprintf("%s",pstrTemp); rt_device_write( &dev_vuart, 0, pstrTemp, strlen(pstrTemp) ); rt_hw_gsm_output_Data( ( char * ) pstrTemp, ContentLen+1); rt_free( pstrTemp ); pstrTemp=RT_NULL; } //#else else {