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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? modemgtm900.c

?? 華為GSM modem GTM900B的驅(qū)動代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/****************************************Copyright(c)**************************
**                               
**                               
**--------------文件信息-------------------------------------------------------
**文   件   名: modemGTM900.c
**創(chuàng)   建   人: 楊林軍
**最 新 版  本: 1.0
**最后修改日期: 
**描        述: 華為modemGTM900模塊的驅(qū)動,包含GPRS。
**
**--------------歷史版本信息---------------------------------------------------
** 創(chuàng)建人: 楊林軍
** 版  本: 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];

/*******************************************************************************
*                         設(shè)置Modem狀態(tài)
*
* Description: 設(shè)置Modem狀態(tài)
*
* Arguments  : enum state
*
* Returns    : 無
*******************************************************************************/
void setModemStat(INT8U mState)
{
	modemStatePrv = modemState;
	modemState = mState;
}
/*******************************************************************************
*                         查詢Modem狀態(tài)
*
* Description: 查詢Modem狀態(tài)
*
* Arguments  : enum state
*
* Returns    : 無
*******************************************************************************/
INT8U GetModemStat(void)
{
	#if EQUIP_TYPE == SLAVE
	return MODEM_SMS;					//對于從設(shè)備,總是設(shè)定modem狀態(tài)為sms狀態(tài)
	#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,					//創(chuàng)建擴展串口A接收任務	
	                   &TaskEXTUARTAStk[EXTUARTATASK_STK_SIZE-1],
	                   EXTUART_RCV_TASK_PRIO);
	while(err != OS_NO_ERR);

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

/*
********************************************************************************
** 函數(shù)名稱: resetModem
** 功能描述: Modem復位函數(shù),完成對modem的復位和一些默認配置方式配置
GTM900B似乎不支持熱復位,AT+CFUN的第二個參數(shù)沒有1。
** 輸 入: *pdata
       
** 輸 出: 無
**        
** 全局變量: 
** 調(diào)用模塊: 
********************************************************************************
*/
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設(shè)置為輸出,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));      //設(shè)置回顯,應答方式,接聽鈴響次數(shù)
        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));	//設(shè)置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));	    //設(shè)置顯示主叫識別	
        OSSemPend(ResetSem, OS_TICKS_PER_SEC * 4, &err);
		if(err == OS_TIMEOUT)
		{
			continue;
		}		
        EXTUARTWriteA((INT8U *)ST_SMS_CMGF,strlen((const char *)ST_SMS_CMGF));	//設(shè)置短信格式
        OSSemPend(ResetSem, OS_TICKS_PER_SEC * 4, &err);
		if(err == OS_TIMEOUT)
		{
			continue;
		}
		EXTUARTWriteA((INT8U *)ST_SMS_CPMS,strlen((const char *)ST_SMS_CPMS));//設(shè)置短信存儲位置
		#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));//設(shè)置收到短信后modem主動向CPU發(fā)送收到的短信		
        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);
}

/*******************************************************************************
**函數(shù)名稱:void ReadTel(PS_X_PACKET *pkt)
**函數(shù)功能:提取電話號碼,包括接入碼和國家代碼
**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包括接入碼和國家區(qū)號的電話號碼
		{
			Dest[j] = src[i++]; 
			if((src[i] < 0x30) || (src[i] > 0x39))
			    break;
					
		}
	}
}

/******************************************************************************
** 函數(shù)名稱: ModemSMSPro
** 功能描述: 對接收到的短信進行處理,解碼  這個函數(shù)其實應該放到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');	//查找內(nèi)容中的起始字符'X'
	if(ptr != NULL)
	{
		ptr ++;
		ptr1 = (INT8U *)strchr((const char *)ptr,'X');	//查找內(nèi)容中的結(jié)束字符'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層協(xié)議包長度,不包括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;
}

/*
********************************************************************************
** 函數(shù)名稱: ReadEquipInfo

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电影免费观看完整版| 欧美日本高清视频在线观看| 精品成人私密视频| 国产一区亚洲一区| 国产精品久久精品日日| 色综合婷婷久久| 日韩国产欧美在线观看| 日韩欧美成人午夜| 成人免费视频免费观看| 亚洲三级在线观看| 欧美喷潮久久久xxxxx| 久久97超碰国产精品超碰| 久久久久一区二区三区四区| 99久久久久久| 亚洲一区二区四区蜜桃| 日韩欧美一区二区免费| 成人午夜视频在线观看| 亚洲综合免费观看高清完整版 | 久久成人综合网| 久久久久久久久久看片| 成人app下载| 日韩激情一二三区| 欧美激情一区二区三区| 99精品视频在线观看| 亚洲v中文字幕| 久久新电视剧免费观看| 色一区在线观看| 理论电影国产精品| 综合中文字幕亚洲| 日韩欧美中文一区二区| 92国产精品观看| 日本欧美久久久久免费播放网| 国产精品人人做人人爽人人添| 欧美午夜在线观看| 国产高清视频一区| 日本成人中文字幕| 亚洲男人天堂av网| 国产清纯白嫩初高生在线观看91| 欧美色倩网站大全免费| 成人免费视频视频| 精品一区二区三区不卡| 亚洲影院理伦片| 中文字幕一区二区三区色视频| 在线播放中文字幕一区| 91网址在线看| 成人综合在线观看| 久久99国产精品久久| 香蕉影视欧美成人| 亚洲精品日韩专区silk| 国产亚洲综合在线| 欧美一区二区三区啪啪| 色久综合一二码| 99视频热这里只有精品免费| 激情图区综合网| 日韩高清在线一区| 一级特黄大欧美久久久| 国产精品视频一二三区| 久久精品一区二区| 精品剧情v国产在线观看在线| 精品视频1区2区3区| 色狠狠一区二区| 91啪九色porn原创视频在线观看| 粉嫩av一区二区三区粉嫩| 精品在线一区二区| 麻豆精品久久久| 日韩精品国产欧美| 国产女人18水真多18精品一级做| 91国在线观看| 日本福利一区二区| 色婷婷久久久久swag精品| 91视频在线看| 99国产精品国产精品毛片| av午夜精品一区二区三区| 成人中文字幕在线| 国产69精品久久久久毛片| 激情综合色播五月| 国产一区二区三区久久久 | 国产成人免费在线观看不卡| 激情欧美一区二区| 久久国产婷婷国产香蕉| 国产一区美女在线| 成人美女在线视频| 大美女一区二区三区| av在线一区二区| 一本一本久久a久久精品综合麻豆| 9人人澡人人爽人人精品| 99精品国产热久久91蜜凸| 91偷拍与自偷拍精品| 91福利在线免费观看| 欧美日韩一区小说| 不卡电影免费在线播放一区| 99精品国产一区二区三区不卡| 色狠狠色噜噜噜综合网| 欧美精品日韩一区| 777欧美精品| 欧美一区二区三区小说| 欧美va天堂va视频va在线| 久久精品欧美一区二区三区麻豆| 中文字幕一区二区三区色视频| 夜夜精品视频一区二区| 日本不卡视频一二三区| 国产精品亚洲视频| 91麻豆自制传媒国产之光| 欧美日韩的一区二区| 精品国产精品网麻豆系列| 欧美高清在线一区二区| 一区二区三区精品| 免费观看一级特黄欧美大片| 成人精品鲁一区一区二区| 欧美日韩国产综合久久| 久久免费电影网| 亚洲一区二区在线免费看| 激情文学综合网| 91久久精品国产91性色tv| 欧美va亚洲va在线观看蝴蝶网| 国产精品乱码一区二区三区软件| 夜夜精品浪潮av一区二区三区| 久久99国产精品麻豆| 色屁屁一区二区| 久久久精品一品道一区| 亚洲国产欧美日韩另类综合| 国产精品亚洲视频| 欧美精品tushy高清| 中文字幕精品综合| 日本不卡一区二区三区高清视频| 99久久精品免费| 日韩精品中午字幕| 一区二区三区免费观看| 国产99久久精品| 91精品国产高清一区二区三区蜜臀 | 欧美日韩成人一区| 日本一区二区视频在线| 日本伊人色综合网| 色av成人天堂桃色av| 久久久91精品国产一区二区三区| 亚洲v日本v欧美v久久精品| www.亚洲色图| 欧美精品一区二区三区视频 | 欧美成人一区二区三区在线观看 | 欧美亚洲一区二区在线| 欧美国产日韩精品免费观看| 美国十次了思思久久精品导航| 91丨porny丨国产入口| 久久先锋影音av| 免费在线成人网| 欧美日韩免费在线视频| 成人免费在线播放视频| 国产成人精品1024| 精品国产免费久久| 日韩国产欧美在线播放| 欧美视频在线一区二区三区| 亚洲欧洲三级电影| 国产不卡一区视频| 久久久久一区二区三区四区| 久久精品99国产精品日本| 欧美一区二区美女| 亚洲444eee在线观看| 在线观看av一区| 亚洲精选一二三| 色综合天天综合| 一区二区视频在线| 在线这里只有精品| 一区二区成人在线| 欧美又粗又大又爽| 亚欧色一区w666天堂| 欧美精品久久久久久久久老牛影院| 亚洲精品高清视频在线观看| 97久久超碰国产精品电影| 亚洲视频网在线直播| 日本乱人伦一区| 亚洲一区在线观看网站| 欧美伦理影视网| 日韩电影在线观看网站| 欧美一区二区三区四区视频| 欧美a一区二区| 久久亚洲一级片| 国产成人在线视频网址| 国产精品国产三级国产三级人妇| 成人a级免费电影| 亚洲精品视频在线看| 欧美日本一区二区| 久久99精品久久久| 日本一区二区在线不卡| 色综合视频在线观看| 亚洲第四色夜色| 日韩亚洲欧美一区| 国产成a人亚洲| 亚洲欧美日韩国产一区二区三区| 日本韩国精品一区二区在线观看| 亚洲香肠在线观看| 日韩欧美第一区| 盗摄精品av一区二区三区| 一区二区高清视频在线观看| 欧美精品久久99久久在免费线| 麻豆精品一区二区综合av| 亚洲国产精品国自产拍av| 欧美视频一二三区| 国产综合色视频| 亚洲精品国产品国语在线app| 欧美一区二区福利视频|