| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- /**********************************************************************************
- * File Name: Modem.c
- * Function Describe:device for modem
- * Relate Module:
- * Explain: the modem must be using ZTE MC8332
- * Writer: ShiLiangWen
- * Date: 2015.1.20
- ***********************************************************************************/
- #include "includes.h"
- void ModemSendAT(char *p)
- {
- char d;
- while(*p){
- d=*p;
- USART_SendData(USART3, (uint8_t) d);
- /* Loop until the end of transmission */
- while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET){}
- p++;
- }
- }
- int ModemSendData(unsigned char *pData,unsigned short datalen)
- {
- int i;
- for(i=0;i<datalen;i++){
- USART_SendData(USART3, pData[i]);
- /* Loop until the end of transmission */
- while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);
- }
- return 1;
- }
- /**********************************************************************************
- 等待模块启动完成
- 0:成功 -1:超时
- ***********************************************************************************/
- int WaitModemIsOpened(void)
- {
- char buf[20];
- int time=100;
- while(time--){
- ModemSendAT("AT\r\n");
- if(0!=ModemWaitAckMsg("OK\r\n",buf,20,50)){
- break;
- }
- }
- if(time)return 0;
- else return -1;
- }
- void ModemPoweroff(void)
- {
- MODEM_PWRKEY_LOW;
- MODEM_RESET_LOW;
- DelayTick(50);
- MODEM_RESET_HIGH;
- DelayTick(10);
- MODEM_RESET_LOW;
- }
- void ModemCtrlInit(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- MODEM_DTR_HIGH;
- MODEM_RING_HIGH;
- MODEM_DSR_HIGH;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Pin = MODEM_DTR_PIN;
- GPIO_Init(MODEM_DTR_PORT, &GPIO_InitStructure);
- MODEM_DTR_HIGH;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Pin = MODEM_RING_PIN;
- GPIO_Init(MODEM_RING_PORT, &GPIO_InitStructure);
- MODEM_RING_HIGH;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Pin = MODEM_DSR_PIN;
- GPIO_Init(MODEM_DSR_PORT, &GPIO_InitStructure);
- MODEM_DSR_HIGH;
- MODEM_DCD_HIGH;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Pin = MODEM_DCD_PIN;
- GPIO_Init(MODEM_DCD_PORT, &GPIO_InitStructure);
- }
- /**********************************************************************************
- ModemInit
- 返回:0 初始化成功 非零-失败
- ***********************************************************************************/
- int ModemInit(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Pin = MODEM_RESET_PIN;
- GPIO_Init(MODEM_RESET_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = MODEM_PWRKEY_PIN;
- GPIO_Init(MODEM_PWRKEY_PORT, &GPIO_InitStructure);
- ModemCtrlInit();
- MODEM_RESET_HIGH;
- MODEM_PWRKEY_HIGH;
- DelayTick(10);
- MODEM_RESET_LOW;
- DelayTick(50);
- return WaitModemIsOpened();
- }
- /**********************************************************************************
- CSQ2Num
- ***********************************************************************************/
- int CSQ2Num(char *str)
- {
- int csq;
- csq=atoi(str);
- if(csq<0 || csq>99)return 99;
- else return csq;
- }
- /**********************************************************************************
- ModemStrCmp
- ***********************************************************************************/
- int ModemStrCmp(char *msg,char *str)
- {
- char *p1=str;
- char *p2=msg;
- while(*p1!=0){
- if(*p1!=*p2)return 1;
- p1++;
- p2++;
- }
- return 0;
- }
- /**********************************************************************************
- ModemCheckRecv
- if timeout return 0
- else return r
- ***********************************************************************************/
- int ModemWaitMsg(char *pMsgBuf,unsigned short MsgBufLen,int timeout)
- {
- int r;
- timeout++;
- while(timeout){
- timeout--;
- r=MsgQueueAccept(&ModemMsgQueue,pMsgBuf, MsgBufLen);
- if(r)return r;
- else{
- if(timeout)DelayTick(1);
- }
- }
- return 0;
- }
- /**********************************************************************************
- ModemWaitAckMsg
- ***********************************************************************************/
- int ModemWaitAckMsg(char *pAck,char *pMsgBuf,unsigned short MsgBufLen,int timeout)
- {
- int r;
- timeout++;
- while(timeout){
- timeout--;
- r=MsgQueueAccept(&ModemMsgQueue,pMsgBuf, MsgBufLen);
- if(r){
- if(0==ModemStrCmp(pMsgBuf,pAck))return r;
- }else{
- if(timeout)DelayTick(1);
- }
- }
- return 0;
- }
- /*
- int ModemSendTcpData(unsigned char socket,unsigned char *pData,unsigned short len)
- {
- int i;
- char buf[150];
- char tmp[5];
- unsigned char temp=0;
- int flag=0;
- sprintf(buf,"AT+ZIPSEND=%d,%d\r",socket,len);
- ModemSendAT(buf);
- //SlwTrace(INF,buf);SlwTrace(INF,"\n");
- ModemSendData(pData,len);
- // if(ModemWaitACKMsg("OK",1))flag=1;
- #if 0
- sprintf(buf,"[TCP]");
- for(i=0;i<len;i++){
- sprintf(tmp,"%02x,",pData[i]);
- strcat(buf,tmp);
- }
- strcat(buf,"\r\n");
- printf(buf);
- #endif
- return flag;
-
- }*/
- int ModemSendUdpData(unsigned char socket,unsigned char *pData,unsigned short len)
- {
- int i;
- char buf[230];
- char tmp[5];
- unsigned char temp=0;
- int flag=0;
- sprintf(buf,"AT+ZIPSENDU=%d,%d\r",socket,len);
- ModemSendAT(buf);
- ModemSendData(pData,len);
- #if 1 //DEBUG
- sprintf(buf,"[Send=%d]",len);
- if(len>70)len=70;
- //for(i=0;i<len;i++){
- // sprintf(tmp,"%02x,",pData[i]);
- // strcat(buf,tmp);
- //}
- strcat(buf,"\r\n");
- SlwTrace(buf);
- #endif
- return flag;
-
- }
- unsigned short StrToNum(char *str)
- {
- unsigned short num;
- if(str[0]>0x2f && str[0]<0x3a){
- if(str[1]>0x2f && str[1]<0x3a){
- if(str[2]>0x2f && str[2]<0x3a){
- if(str[3]>0x2f && str[3]<0x3a){
- num=1000*(str[0]-0x30);
- num+=100*(str[1]-0x30);
- num+=10*(str[2]-0x30);
- num+=(str[3]-0x30);
- }else{
- num=100*(str[0]-0x30);
- num+=10*(str[1]-0x30);
- num+=(str[2]-0x30);
- }
- }else{
- num=10*(str[0]-0x30);
- num+=(str[1]-0x30);
- }
- }else{
- num= str[0]-0x30;
- }
- }else{
- num=0;
- }
- return num;
- }
- /**********************************************************************************
- *ModemSetDTRLow
- ***********************************************************************************
- void ModemSetDtrLow(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Pin = MODEM_DTR_PIN;
- GPIO_Init(MODEM_DTR_PORT, &GPIO_InitStructure);
- MODEM_DTR_LOW;
- }*/
- /**********************************************************************************
- *ModemSetDTRInput
- ***********************************************************************************
- void ModemSetDtrInput(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Pin = MODEM_DTR_PIN;
- GPIO_Init(MODEM_DTR_PORT, &GPIO_InitStructure);
- }*/
- /**********************************************************************************
- *ModemSetRINGLow
- ***********************************************************************************
- void ModemSetRingLow(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Pin = MODEM_RING_PIN;
- GPIO_Init(MODEM_RING_PORT, &GPIO_InitStructure);
- MODEM_RING_LOW;
- }*/
- /**********************************************************************************
- *ModemSetRINGInput
- ***********************************************************************************
- void ModemSetRingInput(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Pin = MODEM_RING_PIN;
- GPIO_Init(MODEM_RING_PORT, &GPIO_InitStructure);
- }*/
- /**********************************************************************************
- *ModemSetDSRLow
- ***********************************************************************************
- void ModemSetDsrLow(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Pin = MODEM_DSR_PIN;
- GPIO_Init(MODEM_DSR_PORT, &GPIO_InitStructure);
- MODEM_DSR_LOW;
- }*/
- /**********************************************************************************
- *ModemSetDSRInput
- ***********************************************************************************
- void ModemSetDsrInput(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Pin = MODEM_DSR_PIN;
- GPIO_Init(MODEM_DSR_PORT, &GPIO_InitStructure);
- }*/
- /***********************************************************************************/
|