MC8332Mode.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. /**********************************************************************************
  2. * File Name: MC8332Mode.c
  3. * Function Describe: Header file for MC8332Mode.c
  4. * Function Describe:device for modem
  5. * Relate Module:
  6. * Explain: the modem must be using ZTE MC8332
  7. * Date: 2016-3-11
  8. ***********************************************************************************/
  9. #include "includes.h"
  10. int ModemCheckUIM(void)
  11. {
  12. unsigned char t,round=0;
  13. int i,len,ver;
  14. char cmd[10];
  15. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  16. ver=0;
  17. for(i=0;i<30;i++)
  18. {
  19. t=50;
  20. if(round==0)
  21. {
  22. round=1;
  23. ModemSendAT("AT+QCPIN?\r\n");
  24. snprintf(cmd, sizeof(cmd), "+QCPIN:");
  25. }else{
  26. round=0;
  27. ModemSendAT("AT+CPIN?\r\n");
  28. snprintf(cmd, sizeof(cmd), "+CPIN:");
  29. }
  30. while(t--)
  31. {
  32. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  33. {
  34. if(0==ModemStrCmp((char *)pMsg->MsgData,cmd))
  35. {//+QCPIN: READY
  36. //+CPIN: READY
  37. if(pMsg->MsgData[7+round]=='R' && pMsg->MsgData[9+round]=='A'){
  38. return 1;
  39. }
  40. }
  41. }else
  42. os_dly_wait(1);
  43. }
  44. }
  45. return 0;
  46. }
  47. /********************************************************************
  48. *return 1 重写
  49. *return 0 不用重写
  50. *********************************************************************/
  51. int ModemSetMC8332APN(char *pApnName,char *pApnPass)
  52. {
  53. //先读APN
  54. //AT+ZPIDPWD?
  55. //+ZPIDPWD: card,card
  56. int t;
  57. char name[31];
  58. char pass[31];
  59. char buf[100];
  60. char *pTemp,finished;
  61. int i,len;
  62. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  63. finished=0;
  64. for(i=0;i<50;i++){
  65. ModemSendAT("AT+ZPIDPWD?\r\n");//+ZPIDPWD: card,card
  66. t=50;
  67. while(t--)
  68. {
  69. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  70. {
  71. if(0==ModemStrCmp((char *)pMsg->MsgData,"+ZPIDPWD:"))
  72. {
  73. //get name
  74. pTemp=(char *)&(pMsg->MsgData[10]);
  75. memset(name,0,sizeof(name));
  76. for(i=0;i<31;i++)
  77. {
  78. if(*pTemp==',')
  79. {
  80. pTemp++;
  81. break;
  82. }else
  83. name[i]=*pTemp++;
  84. }
  85. //get password
  86. memset(pass, 0, sizeof(pass));
  87. for(i=0;i<31;i++){
  88. if(*pTemp<0x20)break;
  89. else
  90. pass[i]=*pTemp++;
  91. }
  92. finished=1;
  93. break;
  94. }
  95. }else
  96. os_dly_wait(1);
  97. }
  98. if(finished) break;
  99. }
  100. if(finished==0){
  101. SlwTrace(INF,"Read APN Timeout!",1);
  102. return 0;
  103. }
  104. snprintf(buf, sizeof(buf), "RAPN:%s,%s", name,pass);
  105. SlwTrace(INF,buf,1);
  106. //--比较,不同则重写
  107. if(0!=strcmp(pApnName,name) || 0!=strcmp(pApnPass,pass))
  108. {
  109. snprintf(buf, sizeof(buf),"AT+ZPIDPWD=%s,%s\r\n", pApnName, pApnPass);
  110. ModemSendAT(buf);
  111. snprintf(buf, sizeof(buf), "RstApn->%s,%s", pApnName, pApnPass);
  112. SlwTrace(INF, buf,1);
  113. return 1;
  114. }
  115. return 0;
  116. }
  117. /********************************************************************
  118. CDMA
  119. *********************************************************************/
  120. int MC8332ModemWaitRegistered(void)
  121. {
  122. int i,j,k;
  123. char buffer[2];
  124. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  125. //wait CREG OK
  126. for(i=0;i<10;i++){
  127. if(ModemSendAT2WaitAckMsg("AT+CREG?\r\n","+CREG:",&pMsg,100)){
  128. //if(MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))){
  129. if(pMsg->MsgData[9]=='1' || pMsg->MsgData[9]=='5'){
  130. //_free_box(AtMpool,pMsg);
  131. break;
  132. }else{
  133. //_free_box(AtMpool,pMsg);
  134. }
  135. }
  136. os_dly_wait(200);
  137. }
  138. if(i==10){
  139. SlwTrace(INF,"Network not registered!!",1);
  140. return 0;
  141. }
  142. SlwTrace(INF,"Network Registered!!",1);
  143. }
  144. void MC8332ModemSendTcpData(unsigned char socket,unsigned char *pData,unsigned short len)
  145. {
  146. M9507CSendTcpData(socket, pData, len);
  147. PrintBufferData(pData,len);
  148. if(socket == GPS_DATA_SOCKET)
  149. if(g_ucModemSentTcpCt<255)g_ucModemSentTcpCt++;
  150. if(socket == GPS_DATA_SOCKET)
  151. sutGpsInfo.isServerLogin = OPEN;
  152. }
  153. /*******************************************************************
  154. *ModemGetIMEI
  155. 返回:0--未获取 1--获取成功
  156. ********************************************************************/
  157. int ModemGetMEID(void)
  158. {
  159. #if 0
  160. int t,j;
  161. int i,len;
  162. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  163. for(i=0;i<50;i++)
  164. {
  165. t=50;
  166. ModemSendAT("AT^MEID\r\n");//有MEID时返回:0xA100005B114142
  167. //没MEID时返回:0x80459924 只有4个字节长度
  168. while(t--)
  169. {
  170. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  171. {
  172. len=strlen((char*)pMsg->MsgData);
  173. if(pMsg->MsgLen == 19) j= 14;
  174. else if(pMsg->MsgLen == 20) j=15;
  175. else continue;
  176. memcpy(sutProductPara.MEID, &pMsg->MsgData[2], j);
  177. if(j<sizeof(sutProductPara.MEID))
  178. sutProductPara.MEID[j]=0;
  179. return 1;
  180. }else
  181. os_dly_wait(1);
  182. }
  183. }
  184. return 0;
  185. #else
  186. //////////////////////
  187. int t,j;
  188. int i,len;
  189. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  190. for(i=0;i<50;i++){
  191. ModemSendAT("AT^MEID\r\n");//有MEID时返回:0xA100005B114142
  192. //没MEID时返回:0x80459924 只有4个字节长度
  193. t=50;
  194. while(t--)
  195. {
  196. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  197. {
  198. if(0==ModemStrCmp((char *)pMsg->MsgData,"0x"))
  199. {
  200. for(j=0;j<strlen(&pMsg->MsgData[2]);j++)
  201. {
  202. if(pMsg->MsgData[2+j] == '\r')
  203. {
  204. if(j < sizeof(sutProductPara.MEID)) sutProductPara.MEID[j]=0;
  205. j=1000;
  206. }else
  207. {
  208. if(j < sizeof(sutProductPara.MEID))
  209. sutProductPara.MEID[j]=pMsg->MsgData[2+j];
  210. }
  211. }
  212. return 1;
  213. }
  214. }else
  215. os_dly_wait(1);
  216. }
  217. }
  218. return 0;
  219. #endif
  220. }