示例#1
0
/*********************************************************************************
*函数名称: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;
}
示例#2
0
/*********************************************************************************
*函数名称: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;
}
示例#3
0
/*********************************************************************************
*函数名称: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);      	      
			   
	}
  }
} 
示例#5
0
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();            
			   
	}
}
示例#6
0
文件: SMS.c 项目: nathanlnw/NXCDMA
/*********************************************************************************
*函数名称: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
		{