亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? modemgtm900.c

?? 華為GSM modem GTM900B的驅動代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/****************************************Copyright(c)**************************
**                               
**                               
**--------------文件信息-------------------------------------------------------
**文   件   名: modemGTM900.c
**創   建   人: 楊林軍
**最 新 版  本: 1.0
**最后修改日期: 
**描        述: 華為modemGTM900模塊的驅動,包含GPRS。
**
**--------------歷史版本信息---------------------------------------------------
** 創建人: 楊林軍
** 版  本: 1.0
** 日 期: 
** 描 述: 原始版本
**
**--------------當前版本修訂---------------------------------------------------
** 修改人: 
** 日 期: 
** 描 述: 
**
**-----------------------------------------------------------------------------
******************************************************************************/
#define MODEM_GLOBAL
#include "config.h"
#include <stdlib.h>
#define  GSM_8BIT   0x04
#define  GSM_7BIT   0x00

static void 	TaskEXTUARTARcv(void *pdata);

INT8U   SMSDelCnt;
//static INT32U gResetHot;          //熱啟動標志
INT8U   modemState,modemStatePrv;

#define GPRSBUF_LEN    512
#ifndef EXTUARTATASK_STK_SIZE
#define  EXTUARTATASK_STK_SIZE         1024
#endif
static OS_STK   TaskEXTUARTAStk[EXTUARTATASK_STK_SIZE];

/*******************************************************************************
*                         設置Modem狀態
*
* Description: 設置Modem狀態
*
* Arguments  : enum state
*
* Returns    : 無
*******************************************************************************/
void setModemStat(INT8U mState)
{
	modemStatePrv = modemState;
	modemState = mState;
}
/*******************************************************************************
*                         查詢Modem狀態
*
* Description: 查詢Modem狀態
*
* Arguments  : enum state
*
* Returns    : 無
*******************************************************************************/
INT8U GetModemStat(void)
{
	#if EQUIP_TYPE == SLAVE
	return MODEM_SMS;					//對于從設備,總是設定modem狀態為sms狀態
	#endif
	return modemState;
}

/*******************************************************************************
* Description:  modem initialize
*
* Arguments  : none
*
* Returns    : none
*
* Note       : 
*******************************************************************************/
void ModemInit(void)
{
	INT8U err;
	
	setModemStat(MODEM_INVALID);
	FlagModemSmsRcv = 0;
	SMSDelCnt = 0;
	SMSSendDelay = 0;
	SmsSendSpan = 5;
	DataFlag = 0;
	while(EXTUARTAInit(9600,UART_NONE) == FALSE);
	
	err = OSTaskCreate(TaskEXTUARTARcv,(void *)0,					//創建擴展串口A接收任務	
	                   &TaskEXTUARTAStk[EXTUARTATASK_STK_SIZE-1],
	                   EXTUART_RCV_TASK_PRIO);
	while(err != OS_NO_ERR);

	ResetSem = OSSemCreate(NULL);
	while( ResetSem == NULL);
}

/*
********************************************************************************
** 函數名稱: resetModem
** 功能描述: Modem復位函數,完成對modem的復位和一些默認配置方式配置
GTM900B似乎不支持熱復位,AT+CFUN的第二個參數沒有1。
** 輸 入: *pdata
       
** 輸 出: 無
**        
** 全局變量: 
** 調用模塊: 
********************************************************************************
*/
void resetModem(void)
{
	INT8U err,i = 0;

	#ifdef DEBUG_MODEM
	printf("\r\nModem reset.%s, line %u\n",__FILE__, __LINE__ );
	#endif

	for(i = 0;i < 5; i++)
	{
    {
		memset(ModemInfo,0,10);							//信源信息清0
		ModemInfo[6] = 0X80;
//		SetupBaudA(9600,UART_NONE);
		MCR_Uart_A |= 0x0a;		                        // A口RTS寫"1",引腳出"0",Modem斷電
		IO0DIR |= 1 << 17;		                        //P0.17設置為輸出,P0.17控制IGT
		IO0SET = 1 << 17;		                        //IGT高電平
        OSTimeDly(OS_TICKS_PER_SEC);			        //延時1s
        IO0CLR = 1 << 17;                               //低電平
        OSTimeDly(OS_TICKS_PER_SEC/200);			    //延時5ms
        MCR_Uart_A &= 0x09;		                        // A口RTS寫"0",引腳出"1",Modem上電
		OSTimeDly(OS_TICKS_PER_SEC/20);			        //延時50ms
		IO0SET = 1 << 17;		                        //IGT高電平
		OSTimeDly(OS_TICKS_PER_SEC/5);			        //延時200ms
		OSTimeDlyHMSM(0,0,10,0);//延時10秒
		
		OSSemPend(EXTUARTSemShareA,0,&err);
		EXTUARTWriteA((INT8U *)ST_M_IPR,strlen((const char *)ST_M_IPR));        //set modem baudrate
        #ifdef DEBUG_MODEM
        printf("send AT command: %s \n", ST_M_IPR);
        #endif
		EXTUARTPutchA(0x0a);
		OSTimeDly(OS_TICKS_PER_SEC/2);
		SetupBaudA(9600,UART_NONE);	
		EXTUARTPutchA('\r');
		EXTUARTWriteA((INT8U *)ST_M_ATAT,strlen((const char *)ST_M_ATAT));      //test AT command
        OSTimeDly(OS_TICKS_PER_SEC/20);
		while(OSSemAccept(ResetSem) != NULL);
        OSTimeDly(OS_TICKS_PER_SEC/20);
        EXTUARTWriteA((INT8U *)ST_M_V0S0,strlen((const char *)ST_M_V0S0));      //設置回顯,應答方式,接聽鈴響次數
        OSSemPost(EXTUARTSemShareA);
		OSSemPend(ResetSem, OS_TICKS_PER_SEC*3, &err);
		if(err == OS_TIMEOUT)
		{
			setModemStat(MODEM_INVALID);	
			#ifdef DEBUG_MODEM
			printf("Modem no echo。%s, line %u\n",__FILE__, __LINE__ );
			#endif			
			MCR_Uart_B = 0x08;		// B口DTR寫"0",引腳出"1",Modem斷電			
			return;
		}
		setModemStat(MODEM_INITIALIZING);	
        #ifdef DEBUG_MODEM
		printf("Modem initializing %s, line %u\n",__FILE__, __LINE__ );
		#endif
		OSTimeDlyHMSM(0,0,5,0);//延時10秒
	}
	OSSemPend(EXTUARTSemShareA,0,&err);
	OSTimeDlyHMSM(0,1,0,0);                                                //延時1分鐘
    		
        while(OSSemAccept(ResetSem) != NULL);
        EXTUARTWriteA((INT8U *)ST_EN_BAND,strlen((const char *)ST_EN_BAND));	//設置modem工作頻段	自動鎖頻到GSM900
		#ifdef DEBUG_MODEM
        printf("send AT command: %s \n", ST_EN_BAND);
        #endif
        OSSemPend(ResetSem, OS_TICKS_PER_SEC *30, &err);
        if(err == OS_TIMEOUT)
            continue;
		EXTUARTWriteA((INT8U *)ST_M_COPS,strlen((const char *)ST_M_COPS));
        #ifdef DEBUG_MODEM
        printf("send AT command: %s \n", ST_M_COPS); 
        #endif      
        OSSemPend(ResetSem, OS_TICKS_PER_SEC *30, &err);
		if(err == OS_TIMEOUT)
            continue;
        
		EXTUARTWriteA((INT8U *)ST_M_CLIP,strlen((const char *)ST_M_CLIP));	    //設置顯示主叫識別	
        OSSemPend(ResetSem, OS_TICKS_PER_SEC * 4, &err);
		if(err == OS_TIMEOUT)
		{
			continue;
		}		
        EXTUARTWriteA((INT8U *)ST_SMS_CMGF,strlen((const char *)ST_SMS_CMGF));	//設置短信格式
        OSSemPend(ResetSem, OS_TICKS_PER_SEC * 4, &err);
		if(err == OS_TIMEOUT)
		{
			continue;
		}
		EXTUARTWriteA((INT8U *)ST_SMS_CPMS,strlen((const char *)ST_SMS_CPMS));//設置短信存儲位置
		#ifdef DEBUG_MODEM
        printf("send AT command: %s \n", ST_SMS_CPMS);
        #endif
        OSSemPend(ResetSem, OS_TICKS_PER_SEC * 4, &err);
		if(err == OS_TIMEOUT)
		{
			continue;
		}        
        EXTUARTWriteA((INT8U *)ST_SMS_CNMI,strlen((const char *)ST_SMS_CNMI));//設置收到短信后modem主動向CPU發送收到的短信		
        OSSemPend(ResetSem, OS_TICKS_PER_SEC * 6, &err);
		if(err == OS_TIMEOUT)
		{
			continue;
		}
        EXTUARTWriteA((INT8U *)"AT+CNMI?\r",9);
		break;
	}
	if(i < 5)
	{
		setModemStat(MODEM_SMS);
		#ifdef DEBUG_MODEM
		printf("Modem reset sucessfully.%s, line %u\n",__FILE__, __LINE__ );
		#endif
 		OSTimeDly(OS_TICKS_PER_SEC/10);
		
	}
	else
	{
		//gResetHot = 0;
		#ifdef DEBUG_MODEM
		printf("Modem reset failed %s, line %u\n",__FILE__, __LINE__ );
		#endif
	}
	OSSemPost(EXTUARTSemShareA);
}

/*******************************************************************************
**函數名稱:void ReadTel(PS_X_PACKET *pkt)
**函數功能:提取電話號碼,包括接入碼和國家代碼
**arguments:        src   短消息源地址
                    dest  號碼存放地址

*******************************************************************************/
void ReadTel(INT8U *src,INT8U *Dest)
{
	INT16U i = 0;
	INT8U j = 0;

	memset(Dest,0x00,20);
	while((src[i] != '"' ) && (i < 30))                 //找第一個引號"
	{
		i ++;
	}
	if(i < 30)
	{
		i ++;
		for(j = 0; j < 20; j ++)                //copy包括接入碼和國家區號的電話號碼
		{
			Dest[j] = src[i++]; 
			if((src[i] < 0x30) || (src[i] > 0x39))
			    break;
					
		}
	}
}

/******************************************************************************
** 函數名稱: ModemSMSPro
** 功能描述: 對接收到的短信進行處理,解碼  這個函數其實應該放到app中
******************************************************************************/
BOOLEAN ModemSMSPro(X_PACKET *pkt,INT8U flag)
{
	INT8U i,j,tmplen,smsIndex[1][4];
	INT8U *ptr,*ptr1;
	DATACONV crc;
	i = 5;
	if(flag == 1)
	{
		memset(pkt->Info.telNum,0x00,20);
		ReadTel(&pkt->pBuf[5],pkt->Info.telNum);
	}
	else
	{
		while((pkt->pBuf[i] < 0x30) || (pkt->pBuf[i] > 0x39))
			i ++;
		for(j = 0; j < 3; j ++)			//讀取本條短信的索引號
		{
			smsIndex[SMSDelCnt][j] = pkt->pBuf[i ++];
			if(pkt->pBuf[i] == ',')    //逗號截至
			{
				smsIndex[SMSDelCnt][j + 1] = '\r';
				smsIndex[SMSDelCnt][j + 2] = '\0';
				break;	
			}
		}
		SMSDelCnt ++;;
		i += 6;	
		while(pkt->pBuf[i] != ',' )
		{
			i ++;
		}
		i ++;
		ReadTel(&pkt->pBuf[i],pkt->Info.telNum);
		
		//讀到一條短信后立刻刪除本條短信
//		OSSemPend(EXTUARTSemShareA,0,&i);
//		EXTUARTWriteA((INT8U *)ST_SMS_CMGD,strlen((const char *)ST_SMS_CMGD));	
//		EXTUARTWriteA(smsIndex,strlen((const char *)smsIndex));
//		OSSemPost(EXTUARTSemShareA);			
	}
	ptr = (INT8U *)strchr((const char *)&pkt->pBuf[20],'X');	//查找內容中的起始字符'X'
	if(ptr != NULL)
	{
		ptr ++;
		ptr1 = (INT8U *)strchr((const char *)ptr,'X');	//查找內容中的結束字符'X'
		if(ptr1 != NULL)
		{
			tmplen = (INT8U)(ptr1 - ptr);
			tmplen = (tmplen/2) * 2;
			if(tmplen >= 28)                    //命令包除頭尾標志外的最短長度
			{
				Ascii2ToHex(&pkt->pktCmd.version,ptr,24);
        		if(pkt->pktCmd.cmdId == 0x61)
        		{
					memcpy(pkt->pBuf,ptr+24,30);
					Ascii2ToHex(&pkt->pBuf[30],ptr+54,6);
        			tmplen = (tmplen - 30) / 2 - 2 + 30;    //長度不包括CRC
        		}
        		else
        		{
					Ascii2ToHex(pkt->pBuf,ptr+24,tmplen - 24);
        			tmplen = tmplen/2 - 2;	        //長度不包括CRC
        		}
				pkt->Info.bufLen = tmplen;		//該長度僅表示AP層協議包長度,不包括CRC
				ptr1 = &pkt->pktCmd.version;
				crc.chr[0] =  *(ptr1 + tmplen);
				crc.chr[1] =  *(ptr1 + tmplen + 1);
				if(crc.wrd[0] == calculateCRC(&pkt->pktCmd.version,tmplen))
				{
					if(AuthPcktBuf(pkt) == FALSE)
					{
						#ifdef DEBUG_MODEM
						printf("error phone number,discard %s, line %u\n",__FILE__, __LINE__ );
						#endif
						return FALSE;
					}
					pkt->Info.bufLen -= 2;
					return TRUE;
				}
				else
				{
					#ifdef DEBUG_MODEM
					printf("message CRC error %s, line %u\n",__FILE__, __LINE__ );
					#endif
				}
			}
		}

	}
	#ifdef DEBUG_MODEM
	printf("message content error\n");
	#endif
	return  FALSE;
}

/*
********************************************************************************
** 函數名稱: ReadEquipInfo

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩午夜在线| 欧美草草影院在线视频| 风间由美一区二区三区在线观看 | 日韩欧美国产麻豆| 4438x亚洲最大成人网| 欧美喷潮久久久xxxxx| 91精品国产高清一区二区三区蜜臀| 欧美视频一区在线| 欧美日韩精品一区二区三区四区| 欧美人与禽zozo性伦| 欧美丰满一区二区免费视频| 欧美裸体一区二区三区| 91麻豆精品国产91久久久久久| 9191成人精品久久| 精品久久久网站| 国产精品女人毛片| 亚洲夂夂婷婷色拍ww47| 日韩综合一区二区| 国产一区二区毛片| 99精品国产视频| 欧美久久久影院| 精品国产第一区二区三区观看体验| 国产亚洲一二三区| 亚洲一区二区欧美激情| 玖玖九九国产精品| 成人高清av在线| 欧美精品久久一区| 欧美韩国日本不卡| 午夜精品一区在线观看| 国产精品一区一区| 欧美亚洲动漫制服丝袜| 2020日本不卡一区二区视频| 17c精品麻豆一区二区免费| 午夜久久久影院| 成人性视频免费网站| 欧美日韩国产123区| 久久精品一区二区三区不卡| 亚洲综合清纯丝袜自拍| 狠狠色2019综合网| 欧亚洲嫩模精品一区三区| 精品99999| 亚洲成人tv网| 99这里都是精品| 日韩欧美成人午夜| 一区二区三区欧美日| 国产成人在线免费| 欧美久久久久久蜜桃| 国产精品国产三级国产aⅴ入口| 日韩精品一二三区| 日本精品视频一区二区| 国产亚洲精品资源在线26u| 日韩精品电影一区亚洲| 色综合久久久久综合99| 欧美激情一区二区三区蜜桃视频| 视频一区国产视频| 欧美在线免费播放| 中文字幕制服丝袜成人av| 国产成人高清视频| 欧美精品一区二区三区四区| 丝袜美腿成人在线| 欧美优质美女网站| 最新高清无码专区| 成人福利电影精品一区二区在线观看 | 天堂蜜桃一区二区三区| 不卡的av中国片| 日本一区二区在线不卡| 国产真实乱子伦精品视频| 欧美一级二级在线观看| 日韩电影一二三区| 欧美日韩在线观看一区二区| 一区二区三区中文免费| 色哟哟欧美精品| 一区二区三区中文字幕精品精品| 91热门视频在线观看| 国产精品理伦片| 99精品在线观看视频| ...av二区三区久久精品| k8久久久一区二区三区| 国产精品久久久久aaaa| 99热精品一区二区| 亚洲黄一区二区三区| 色综合久久中文字幕综合网| 亚洲一二三级电影| 在线91免费看| 国产精品综合在线视频| 日本一区二区三区免费乱视频| 成人免费视频一区| 亚洲视频图片小说| 欧美三级中文字| 美腿丝袜亚洲一区| 国产午夜久久久久| 95精品视频在线| 亚洲成人av在线电影| 欧美一二三四在线| 国产成人精品免费一区二区| 中文字幕欧美激情一区| 欧美自拍丝袜亚洲| 日本午夜一本久久久综合| 久久久一区二区三区捆绑**| 成人av网址在线| 亚洲成人免费电影| 精品国产乱码久久久久久久| 99久久久免费精品国产一区二区| 亚洲一区二三区| 日韩视频不卡中文| eeuss鲁片一区二区三区在线观看| 亚洲三级在线免费| 精品美女一区二区| 色狠狠色噜噜噜综合网| 激情综合网天天干| 亚洲精品中文在线| 国产亚洲精久久久久久| 色域天天综合网| 国产一区在线观看视频| 亚洲电影中文字幕在线观看| 国产视频一区二区在线| 欧美三级欧美一级| 国产精品一卡二| 日本一道高清亚洲日美韩| 国产精品污污网站在线观看| 欧美精品在线视频| 91丝袜国产在线播放| 国产在线视频精品一区| 全国精品久久少妇| 一级中文字幕一区二区| 久久精品夜夜夜夜久久| 欧美高清www午色夜在线视频| 色综合色狠狠综合色| 国产一区二区三区精品欧美日韩一区二区三区 | 国产日本欧洲亚洲| 色香蕉成人二区免费| 国产精品一区三区| 日韩欧美中文一区| 色国产精品一区在线观看| 韩国欧美国产1区| 青青草一区二区三区| 樱桃国产成人精品视频| 中文天堂在线一区| 久久伊人蜜桃av一区二区| 欧美疯狂性受xxxxx喷水图片| 一本一道波多野结衣一区二区| 国产成人在线看| 国产精品亚洲一区二区三区在线| 麻豆精品久久久| 免费观看在线综合| 秋霞成人午夜伦在线观看| 亚洲成人av在线电影| 亚洲一区二区三区四区在线免费观看 | 日韩女优av电影| 7777精品伊人久久久大香线蕉| 欧美日韩一级二级| 欧美电影影音先锋| 欧美大片在线观看| 精品国产乱码91久久久久久网站| 91精品婷婷国产综合久久| 欧美日韩高清在线| 欧美一区二区三区电影| 精品久久五月天| 国产欧美视频一区二区三区| 国产日韩精品久久久| 国产精品剧情在线亚洲| 亚洲欧美一区二区三区极速播放 | 精品人在线二区三区| 精品国产免费一区二区三区四区| 精品久久久久久最新网址| 精品国精品自拍自在线| 欧美国产禁国产网站cc| 国产精品久久久久久久久久久免费看 | 成人午夜在线播放| 99久久99久久精品国产片果冻 | 精品人在线二区三区| 欧美国产精品劲爆| 亚洲午夜在线电影| 国产原创一区二区| 91网站最新网址| 欧美一区二区精品在线| 337p粉嫩大胆噜噜噜噜噜91av | 欧美一区二区美女| 亚洲国产成人在线| 亚洲成人一二三| 国产一区二区三区久久久| 91同城在线观看| 欧美va天堂va视频va在线| 中文字幕在线观看不卡| 首页国产欧美久久| 99免费精品视频| 欧美一区二区三区在线| 国产精品美女久久久久久久久久久 | gogogo免费视频观看亚洲一| 欧美午夜精品一区二区三区| 久久综合色8888| 亚洲国产一区在线观看| 国产一区二区三区在线看麻豆| 91啪九色porn原创视频在线观看| 在线不卡免费av| 亚洲日本丝袜连裤袜办公室| 蜜桃在线一区二区三区| 在线视频一区二区免费| 久久久综合网站| 日韩精品国产欧美|