wifi9113.c 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009
  1. /**
  2. ******************************************************************************
  3. * @file USART/Interrupt/main.c
  4. * @author MCD Application Team
  5. * @version V3.5.0
  6. * @date 08-April-2011
  7. * @brief Main program body
  8. ******************************************************************************
  9. * @attention
  10. *
  11. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  12. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  13. * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  14. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  15. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  16. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  17. *
  18. * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  19. ******************************************************************************
  20. */
  21. /* Includes ------------------------------------------------------------------*/
  22. #include "wifi9113.h"
  23. #include "wifi_gpio_conf.h"
  24. #include "ds1302.h"
  25. #include "Delay.h"
  26. #define FALSE false
  27. #define TRUE true
  28. char bAtSentBuff[255];
  29. char DoByteBuffer[255];
  30. char bAtRecBuff[255];
  31. unsigned char TxCounterWifi = 0x00;
  32. unsigned char RxCounterWifi = 0x00;
  33. unsigned char WifiDataToXmt = 0x00;
  34. //unsigned long wifi_start_time;
  35. unsigned char Mac_Addr[6];
  36. unsigned char Mac_Temp_Buff[17];
  37. unsigned char Wifi_Rec_Buff[255];
  38. unsigned char WifiCheckStep = 0;
  39. unsigned char WifiProcessStep = 0;
  40. unsigned char WifiConnectStep = 0;
  41. unsigned char WifiConnectNext = 0;
  42. unsigned long WifiTimeReset = 0; // Rec9113_time=0;
  43. unsigned long WifiTimeLed = 0; // Rec9113_time=0;
  44. unsigned char start = 0;
  45. unsigned char TOTAL_MAC_LENGTH = 0;
  46. bool WifiHaveRecFlag = false;
  47. unsigned char WifiDatCome = 0;
  48. unsigned char TotalRecvBytes = 0; //REC NUMBER
  49. unsigned char SERVER_IP_ADDRESS[] = SERVER_IP_ADDRESS_DEFAULT;
  50. unsigned char WIFI_LED_FLAG;
  51. unsigned int WIFI_ERROR_NUM;
  52. //unsigned char WIFI_ERROR_TIME;
  53. char sent_data_buf[255];
  54. u16 sent_data_size = 0;
  55. static uint8_t outBuffer[256];
  56. u8 Packaging_wifi_sendbuffer ( u8 type, u8 *inBuffer, u8 inSize )
  57. {
  58. uint8_t i, check_num;
  59. outBuffer[0] = 0x4B;
  60. outBuffer[1] = 0x52;
  61. outBuffer[2] = inSize + 3;
  62. outBuffer[3] = type;
  63. for ( i = 0; i < inSize; i++ )
  64. {
  65. outBuffer[4 + i] = inBuffer[i];
  66. }
  67. check_num = outBuffer[2];
  68. for ( i = 3; i < 4 + inSize; i++ )
  69. {
  70. check_num ^= outBuffer[i];
  71. }
  72. outBuffer[4 + inSize] = check_num;
  73. outBuffer[4 + inSize + 1] = 0x55;
  74. memcpy ( inBuffer, outBuffer, inSize + 6 );
  75. return ( inSize + 6 );
  76. }
  77. void AtSent ( char *SendBuff, unsigned int BuffCount )
  78. {
  79. #if 0
  80. unsigned char i;
  81. for ( i = 0; i < BuffCount; i++ )
  82. {
  83. USART_SendData ( USART9113, SendBuff[i] );
  84. // while( USART_GetFlagStatus(USART9113,USART_FLAG_TC)!= 1);
  85. while ( USART_GetFlagStatus ( USART9113, USART_FLAG_TC ) == RESET );
  86. }
  87. #else
  88. // Wait for previous xmt to complete
  89. while ( TxCounterWifi < WifiDataToXmt );
  90. // Setup next XMT
  91. memcpy ( bAtSentBuff, SendBuff, BuffCount );
  92. TxCounterWifi = 0;
  93. WifiDataToXmt = BuffCount;
  94. //USART_ITConfig(USART9113, USART_IT_RXNE, DISABLE); //发送前,关接收中断
  95. USART_ITConfig ( Wifi_UART, USART_IT_TXE, ENABLE );
  96. #endif
  97. }
  98. int HighBytetoASCII ( unsigned char Data_Byte_in )
  99. {
  100. unsigned char Data_Temp1;
  101. // byte Data_Temp2;
  102. Data_Temp1 = Data_Byte_in >> 4 & 0x0f;
  103. // Data_temp2=Data_Byte_in&0x0f;
  104. if ( Data_Temp1 > 9 )
  105. {
  106. Data_Temp1 = ( Data_Temp1 - 10 ) + 0x61;
  107. }
  108. else
  109. Data_Temp1 = Data_Temp1 + 0x30;
  110. return Data_Temp1;
  111. }
  112. int LowBytetoASCII ( unsigned char Data_Byte_in )
  113. {
  114. // byte Data_Temp1;
  115. unsigned char Data_temp2;
  116. // Data_Temp1=Data_Byte_in>>4&0x0f;
  117. Data_temp2 = Data_Byte_in & 0x0f;
  118. if ( Data_temp2 > 9 )
  119. {
  120. Data_temp2 = ( Data_temp2 - 10 ) + 0x61;
  121. }
  122. else
  123. Data_temp2 = Data_temp2 + 0x30;
  124. return Data_temp2;
  125. }
  126. void clear_bAtRecBuff ( void )
  127. {
  128. memset ( bAtRecBuff, 0, start );
  129. start = 0;
  130. }
  131. void clear_bAtSentBuff ( void )
  132. {
  133. memset ( bAtSentBuff, 0, WifiDataToXmt );
  134. }
  135. /*
  136. 查找字符串位置
  137. <=255bit
  138. */
  139. char *FindStrPos ( char *socStr, u8 socSize, char *findStr, u8 findSize )
  140. {
  141. u8 i, j, t;
  142. for ( i = 0; i < socSize; i++ )
  143. {
  144. for ( j = 0, t = 0; j < findSize; j++ )
  145. {
  146. if ( findStr[j] == socStr[i + j] )
  147. {
  148. t++;
  149. if ( t == findSize )
  150. {
  151. return ( &socStr[i] );
  152. }
  153. }
  154. else
  155. {
  156. break;
  157. }
  158. }
  159. }
  160. return NULL;
  161. }
  162. char *FindATcommd ( char *findStr )
  163. {
  164. char *p = NULL;
  165. p = FindStrPos ( bAtRecBuff, start, findStr, strlen ( findStr ) );
  166. return p;
  167. }
  168. bool CheckOK ( char *Cvalue )
  169. {
  170. #if 0
  171. if ( ( ( NULL != strstr ( bAtRecBuff, AT_REPLY_OK ) ) || ( NULL != strstr ( bAtRecBuff, AT_REPLY_NO_CHANGE ) ) ) )
  172. {
  173. return true;
  174. }
  175. else
  176. {
  177. return false;
  178. }
  179. #else
  180. if ( FindATcommd ( AT_REPLY_OK ) )
  181. {
  182. return true;
  183. }
  184. else
  185. {
  186. return false;
  187. }
  188. #endif
  189. }
  190. bool CheckERROR ( char *Cvalue )
  191. {
  192. char *p;
  193. #if 0
  194. if ( NULL != ( p = strstr ( bAtRecBuff, AT_REPLY_ERROR ) ) )
  195. {
  196. WIFI_ERROR_NUM = ( * ( p + 5 ) ) | ( * ( p + 5 + 1 ) << 8 );
  197. return true;
  198. }
  199. else
  200. {
  201. return false;
  202. }
  203. #else
  204. if ( p = FindATcommd ( AT_REPLY_ERROR ) )
  205. {
  206. WIFI_ERROR_NUM = ( * ( p + 5 ) ) | ( * ( p + 5 + 1 ) << 8 );
  207. return true;
  208. }
  209. else
  210. {
  211. return false;
  212. }
  213. #endif
  214. }
  215. bool AtCmp ( char *str0, char *str1 )
  216. {
  217. unsigned char i;
  218. for ( i = 0; i < 100; i++ )
  219. {
  220. if ( str0[i] != str1[i] )
  221. {
  222. return true;
  223. }
  224. else
  225. {
  226. if ( str0[i] == 0 )
  227. {
  228. return false;
  229. }
  230. }
  231. }
  232. return true;
  233. }
  234. bool ABCcompare ( char *Cvalue0, unsigned char *Cvalue1 )
  235. {
  236. unsigned char i;
  237. for ( i = 0; i < 100; i++ )
  238. {
  239. if ( Cvalue1[i] != 0 )
  240. {
  241. if ( Cvalue0[i] != Cvalue1[i] )
  242. return false;
  243. }
  244. }
  245. return true;
  246. }
  247. int iByteStuffing = 0;
  248. int DoByteStuffing ( char *data_out, char *data_in, int data_in_size )
  249. {
  250. int i = 0, j = 0;
  251. int TotalSize = 0;
  252. int iSet0x0A = 0;
  253. unsigned char bValue = 0;
  254. for ( i = 0; i < data_in_size; i++ )
  255. {
  256. //if ((data_in[i] == 0x0D) && (data_in_size != (i - 2)))
  257. if ( data_in[i] == 0x0D )
  258. {
  259. if ( data_in[i + 1] == 0x0A )
  260. {
  261. bValue = 0xDB;
  262. iSet0x0A = 1;
  263. }
  264. else
  265. {
  266. bValue = data_in[i];
  267. }
  268. }
  269. else if ( ( data_in[i] == 0x0A ) && ( iSet0x0A == 1 ) )
  270. {
  271. bValue = 0xDC;
  272. iSet0x0A = 0;
  273. if ( iByteStuffing < 65535 )
  274. iByteStuffing++;
  275. }
  276. else if ( data_in[i] == 0xDB )
  277. {
  278. data_out[j++] = 0xDB;
  279. bValue = 0xDD;
  280. if ( iByteStuffing < 65535 )
  281. iByteStuffing++;
  282. }
  283. else
  284. {
  285. bValue = data_in[i];
  286. }
  287. data_out[j++] = bValue;
  288. }
  289. #if 0
  290. if ( i != j )
  291. {
  292. if ( iByteStuffing < 65535 )
  293. iByteStuffing++;
  294. }
  295. #endif
  296. TotalSize = j;
  297. return TotalSize;
  298. }
  299. int DoByteStrSize = 0;
  300. void AT_command_send ( char *str, int handle, unsigned char n )
  301. {
  302. int DataSize, iTotal;
  303. int i;
  304. #if 0
  305. DataSize = n;
  306. sprintf ( ( char * ) bAtSentBuff, "%#s%#d,%#d,0,0,", AT_COMMAND_SND_CMD,
  307. handle, DataSize );
  308. iTotal = strlen ( bAtSentBuff );
  309. for ( i = 0; i < DataSize; i++ )
  310. {
  311. bAtSentBuff[iTotal + i] = str[i];
  312. }
  313. bAtSentBuff[DataSize + iTotal] = 0x0D;
  314. bAtSentBuff[DataSize + iTotal + 1] = 0x0A;
  315. bAtSentBuff[DataSize + iTotal + 2] = 0x00;
  316. iTotal += DataSize + 2;
  317. AtSent ( bAtSentBuff, iTotal );
  318. #else
  319. // 发送处理
  320. memset ( DoByteBuffer, 0, DoByteStrSize );
  321. DoByteStrSize = DoByteStuffing ( DoByteBuffer, str, n );
  322. DataSize = DoByteStrSize;
  323. sprintf ( ( char * ) bAtSentBuff, "%#s%#d,%#d,0,0,", AT_COMMAND_SND_CMD,
  324. handle, DataSize );
  325. iTotal = strlen ( bAtSentBuff );
  326. for ( i = 0; i < DataSize; i++ )
  327. {
  328. bAtSentBuff[iTotal + i] = DoByteBuffer[i];
  329. }
  330. bAtSentBuff[DataSize + iTotal] = 0x0D;
  331. bAtSentBuff[DataSize + iTotal + 1] = 0x0A;
  332. bAtSentBuff[DataSize + iTotal + 2] = 0x00;
  333. iTotal += DataSize + 2;
  334. AtSent ( bAtSentBuff, iTotal );
  335. #endif
  336. }
  337. void wifi_sent ( void )
  338. {
  339. char sendstring[50];
  340. unsigned char i;
  341. for ( i = 0; i < 6; i++ )
  342. {
  343. sendstring[i] = Mac_Addr[i];
  344. }
  345. sendstring[6] = 0x00;
  346. AT_command_send ( sendstring, 1, 6 );
  347. }
  348. char KeyString[100] = {0};
  349. char *pStr = NULL;
  350. void wifi_connect ( void )
  351. {
  352. switch ( WifiConnectStep )
  353. {
  354. case 0:
  355. clear_bAtRecBuff();
  356. WifiSoftReset();
  357. WifiConnectStep = 1;
  358. break;
  359. case 1:
  360. if ( FindATcommd ( CHECK_REPLY_Ready ) )
  361. {
  362. //net close
  363. WifiConnectStep = 2;
  364. WifiTimeReset = 0;
  365. }
  366. else if ( ( WifiTimeReset % 3000 ) == 0 ) //需要1241
  367. {
  368. WifiConnectStep = 0;
  369. }
  370. else if ( CheckERROR ( bAtRecBuff ) || ( WifiTimeReset > 6000 ) )
  371. {
  372. WifiHardReset(); //硬件没做
  373. WifiProcessStep = WIFI_STEP_CHECK;
  374. WifiCheckStep = 0;
  375. WifiTimeReset = 0;
  376. }
  377. break;
  378. case 2:
  379. clear_bAtRecBuff();
  380. strcpy ( bAtSentBuff, CONNECT_CWMODE );
  381. AtSent ( bAtSentBuff, strlen ( bAtSentBuff ) );
  382. WifiConnectStep = 3;
  383. break;
  384. case 3:
  385. if ( CheckOK ( bAtRecBuff ) ) //AtCmp(bAtRecBuff,AT_COMMAND_OK_ONLY)==0
  386. {
  387. WifiConnectStep = 4;
  388. WifiTimeReset = 0;
  389. }
  390. else if ( ( WifiTimeReset % 1000 ) == 0 )
  391. {
  392. WifiConnectStep = 2;
  393. }
  394. else if ( CheckERROR ( bAtRecBuff ) || ( WifiTimeReset > 2000 ) ) //0x3fff//需要3
  395. {
  396. WifiConnectStep = 0;
  397. WifiTimeReset = 0;
  398. }
  399. break;
  400. case 4:
  401. clear_bAtRecBuff();
  402. strcpy ( bAtSentBuff, CONNECT_CWJAP );
  403. AtSent ( bAtSentBuff, strlen ( bAtSentBuff ) );
  404. WifiConnectStep = 5;
  405. break;
  406. case 5:
  407. if ( CheckOK ( bAtRecBuff ) )
  408. {
  409. WifiConnectStep = 6;
  410. WifiTimeReset = 0;
  411. }
  412. else if ( ( WifiTimeReset % 5000 ) == 0 )
  413. {
  414. WifiConnectStep = 4;
  415. }
  416. else if ( CheckERROR ( bAtRecBuff ) || ( WifiTimeReset > 10000 ) ) //0x3fff//需要3043
  417. {
  418. WifiConnectStep = 0;
  419. WifiTimeReset = 0;
  420. }
  421. break;
  422. case 6:
  423. clear_bAtRecBuff();
  424. strcpy ( bAtSentBuff, CONNECT_CWJAP_CX );
  425. AtSent ( bAtSentBuff, strlen ( bAtSentBuff ) );
  426. WifiConnectStep = 7;
  427. break;
  428. case 7:
  429. if ( CheckOK ( bAtRecBuff ) ) //NULL != strstr(bAtRecBuff,CONNECT_CWJAP_CX_REPLY)
  430. {
  431. WIFI_LED_FLAG = WIFI_JOIN_ROUTE_OK_FLAG;
  432. WifiConnectStep = 8;
  433. WifiTimeReset = 0;
  434. }
  435. else if ( ( WifiTimeReset % 1000 ) == 0 ) //1500
  436. {
  437. WifiConnectStep = 6;
  438. }
  439. else if ( CheckERROR ( bAtRecBuff ) || ( WifiTimeReset > 2000 ) ) //0x17ffff//需要1132
  440. {
  441. WifiConnectStep = 0;
  442. WifiTimeReset = 0;
  443. }
  444. break;
  445. case 8:
  446. clear_bAtRecBuff();
  447. strcpy ( bAtSentBuff, CONNECT_CIPMUX );
  448. AtSent ( bAtSentBuff, strlen ( bAtSentBuff ) ); //AT_COMMAND_PSK_LENGTH+10
  449. //GetDis(bAtSentBuff);
  450. WifiConnectStep = 9;
  451. break;
  452. case 9:
  453. if ( CheckOK ( bAtRecBuff ) )
  454. {
  455. WifiConnectStep = 10;
  456. WifiTimeReset = 0;
  457. }
  458. else if ( ( WifiTimeReset % 1000 ) == 0 )
  459. {
  460. WifiConnectStep = 8;
  461. }
  462. else if ( CheckERROR ( bAtRecBuff ) || ( WifiTimeReset > 2000 ) ) //0xffff//需要11
  463. {
  464. WifiConnectStep = 0;
  465. WifiTimeReset = 0;
  466. }
  467. break;
  468. case 10:
  469. clear_bAtRecBuff();
  470. strcpy ( bAtSentBuff, CONNECT_CIPSTART );
  471. AtSent ( bAtSentBuff, strlen ( bAtSentBuff ) ); //USB_AT_COMMAND_JOIN_LENGTH+14
  472. //GetDis(bAtSentBuff);
  473. WifiConnectStep = 11;
  474. break;
  475. case 11:
  476. if ( FindATcommd ( CONNECT_CIPSTART_Port ) && \
  477. ( pStr = FindATcommd ( CONNECT_CIPSTART_NOWis ) ) )
  478. {
  479. Refresh_DS1302_Time ( pStr );
  480. WifiConnectStep = 20;
  481. WifiTimeReset = 0;
  482. }
  483. else if ( ( WifiTimeReset % 6000 ) == 0 ) //7500//8244
  484. {
  485. WifiConnectStep = 10;
  486. }
  487. else if ( CheckERROR ( bAtRecBuff ) || ( WifiTimeReset > 12000 ) ) //0x1fffff//需要7127
  488. {
  489. WifiConnectStep = 0;
  490. WifiTimeReset = 0;
  491. }
  492. break;
  493. /*
  494. //作为服务端
  495. 12.配置IP
  496. 14.打开端口
  497. */
  498. case 20:
  499. clear_bAtRecBuff();
  500. strcpy ( bAtSentBuff, CONNECT_CIFSR );
  501. AtSent ( bAtSentBuff, sizeof ( CONNECT_CIFSR ) );
  502. // GetDis(bAtSentBuff);
  503. WifiConnectStep = 21;
  504. break;
  505. case 21:
  506. //if(NULL != (p = strstr(bAtRecBuff,CONNECT_STAMAC)))
  507. if ( NULL != ( pStr = FindATcommd ( CONNECT_STAMAC ) ) )
  508. {
  509. memcpy ( Mac_Temp_Buff, &pStr[strlen ( CONNECT_STAMAC )], sizeof ( Mac_Temp_Buff ) );
  510. WifiConnectStep = 22;
  511. WifiTimeReset = 0;
  512. }
  513. else if ( ( WifiTimeReset % 4000 ) == 0 ) //7500//8244
  514. {
  515. WifiConnectStep = 20;
  516. }
  517. else if ( CheckERROR ( bAtRecBuff ) || ( WifiTimeReset > 8000 ) ) //0x1fffff//需要7127
  518. {
  519. WifiConnectStep = 0;
  520. WifiTimeReset = 0;
  521. }
  522. break;
  523. case 22:
  524. clear_bAtRecBuff();
  525. reg_server0824 ( REGMY_ID, Mac_Temp_Buff, sizeof ( Mac_Temp_Buff ) );
  526. //GetDis(bAtSentBuff);
  527. WifiConnectStep = 23;
  528. break;
  529. case 23:
  530. if ( FindATcommd ( "OK:reg" ) )
  531. {
  532. WIFI_LED_FLAG = WIFI_LOAD_DONE_FLAG;
  533. WifiProcessStep = WIFI_STEP_CHAT;
  534. WifiTimeReset = 0;
  535. clear_bAtRecBuff();
  536. }
  537. else if ( ( WifiTimeReset % 4000 ) == 0 ) //7500//8244
  538. {
  539. WifiConnectStep = 22;
  540. }
  541. else if ( CheckERROR ( bAtRecBuff ) || ( WifiTimeReset > 8000 ) ) //0x1fffff//需要7127
  542. {
  543. WifiConnectStep = 0;
  544. WifiTimeReset = 0;
  545. }
  546. break;
  547. default:
  548. WifiConnectStep = 0;
  549. break;
  550. }
  551. }
  552. char get_mac ( char *wifi_data )
  553. {
  554. char *str_p;
  555. if ( NULL != ( str_p = strstr ( wifi_data, CONNECT_STAMAC ) ) )
  556. {
  557. memcpy ( Mac_Temp_Buff, &str_p[8], sizeof ( Mac_Temp_Buff ) );
  558. return 1;
  559. }
  560. else
  561. {
  562. return 0;
  563. }
  564. }
  565. unsigned char scan_wifi ( char *wifi_data )
  566. {
  567. unsigned char count;
  568. count = 0;
  569. //if(wifi_data[0]!= 0xab || wifi_data[0] != 0xaa)
  570. // return 0;
  571. for ( count = 0; count < 60; count++ )
  572. {
  573. if ( wifi_data[count] == 0x00 )
  574. {
  575. break;
  576. }
  577. }
  578. if ( count == 60 )
  579. return 0;
  580. return count;
  581. }
  582. void receive_deal ( char * Rdata, char Totalbytes )
  583. {
  584. }
  585. void wifi_check ( void )
  586. {
  587. //char commd;
  588. switch ( WifiCheckStep )
  589. {
  590. case 0:
  591. WifiCheckStep = 1;
  592. WifiTimeReset = 0;
  593. WifiLedOff;
  594. break;
  595. case 1:
  596. if ( WifiTimeReset > 100 ) //等待100ms
  597. {
  598. WifiCheckStep = 2;
  599. }
  600. break;
  601. case 2:
  602. if ( WifiHaveRecFlag )
  603. {
  604. WifiHaveRecFlag = false;
  605. if ( FindATcommd ( CHECK_REPLY_Ready ) )
  606. {
  607. WifiCheckStep = 3;
  608. }
  609. else if ( CheckERROR ( bAtRecBuff ) )
  610. {
  611. WifiCheckStep = 3;
  612. }
  613. }
  614. else
  615. {
  616. if ( WifiTimeReset > 1000 ) //8000
  617. {
  618. WifiCheckStep = 3;
  619. }
  620. }
  621. break;
  622. case 3: //正常启动,或超时启动
  623. WifiTimeReset = 0;
  624. WifiProcessStep = WIFI_STEP_CONNECT;
  625. WifiConnectStep = 2;
  626. clear_bAtRecBuff();
  627. break;
  628. default:
  629. WifiCheckStep = 0;
  630. break;
  631. }
  632. }
  633. /*
  634. Now is: 2015-07-26 17:37:35
  635. 去掉Now is: 20
  636. 15-07-26 17:37:35
  637. 星期计算:
  638. 最著名的是蔡勒(Zeller)公式。
  639. 即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
  640. 以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:
  641. 蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
  642. =49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1
  643. =49+[12.25]+5-40+[28.6]
  644. =49+12+5-40+28
  645. =54 (除以7余5)
  646. 即2049年10月1日(100周年国庆)是星期5。
  647. */
  648. #define CalDay(y,c,m,d) ((y+y/4+c/4-2*c+26*(m+1)/10+d-1)%7)
  649. void Refresh_DS1302_Time ( char data[] )
  650. {
  651. char *p;
  652. char dataBuff[18] = {0};
  653. memcpy ( dataBuff, &data[10], sizeof ( dataBuff ) - 1 );
  654. p = strtok ( dataBuff, "-" );
  655. DS1302_DateTime.Year = atoi ( dataBuff );
  656. p = strtok ( NULL, "-" );
  657. DS1302_DateTime.Month = atoi ( p );
  658. p = strtok ( NULL, " " );
  659. DS1302_DateTime.Date = atoi ( p );
  660. p = strtok ( NULL, ":" );
  661. DS1302_DateTime.Hour = atoi ( p );
  662. p = strtok ( NULL, ":" );
  663. DS1302_DateTime.Minute = atoi ( p );
  664. p = strtok ( NULL, " " );
  665. DS1302_DateTime.Second = atoi ( p );
  666. DS1302_DateTime.Day = GetDayFromDate ( DS1302_DateTime.Year, DS1302_DateTime.Month, DS1302_DateTime.Date );
  667. DS1302_DateTime.HourMode = _24_hours;
  668. DS1302_DateTime.AM_PM = pm;
  669. sys_rtc_time = Date_TO_Sec ( DS1302_DateTime.Year, DS1302_DateTime.Month, DS1302_DateTime.Date, DS1302_DateTime.Hour, DS1302_DateTime.Minute, DS1302_DateTime.Second );
  670. #if DS1302_def
  671. DS1302_SetDateTime();
  672. #endif
  673. }
  674. void esp8266_send ( void )
  675. {
  676. u8 delayTime;
  677. #ifndef CONNECT_Multiple_DEF
  678. sprintf ( bAtSentBuff, "%s%d\r\n", CONNECT_CIPSEND_N, sent_data_size );
  679. #else
  680. sprintf ( bAtSentBuff, "%s,%d\r\n", CONNECT_CIPSEND_N, sent_data_size );
  681. #endif
  682. AtSent ( bAtSentBuff, strlen ( bAtSentBuff ) );
  683. if ( sent_data_size < 64 ) delayTime = 5;
  684. else if ( sent_data_size < 128 ) delayTime = 10;
  685. else if ( sent_data_size < 256 ) delayTime = 15;
  686. else if ( sent_data_size < 512 ) delayTime = 20;
  687. else if ( sent_data_size < 1024 ) delayTime = 25;
  688. delay_ms ( delayTime );
  689. AtSent ( sent_data_buf, sent_data_size );
  690. }
  691. void reg_server0824 ( u8 regID, u8 *inBuffer, u8 inSize )
  692. {
  693. memset ( sent_data_buf, 0, 255 );
  694. memset ( DoByteBuffer, 0, 255 );
  695. //实际数据
  696. sent_data_buf[0] = regID;
  697. sent_data_buf[1] = regID;
  698. memcpy ( &sent_data_buf[2], inBuffer, inSize );
  699. sent_data_size = Packaging_wifi_sendbuffer ( COMMD_REG, ( u8 * ) sent_data_buf, inSize + 2 );
  700. //特殊处理
  701. memcpy ( DoByteBuffer, sent_data_buf, sent_data_size );
  702. sent_data_size = DoByteStuffing ( sent_data_buf, DoByteBuffer, sent_data_size );
  703. //加后缀
  704. sent_data_buf[sent_data_size + 0] = 0x0D;
  705. sent_data_buf[sent_data_size + 1] = 0x0A;
  706. sent_data_size = sent_data_size + 2;
  707. //发送
  708. esp8266_send();
  709. }
  710. void sendto_server0824 ( u8 aimID, u8 myID, u8 *inBuffer, u8 inSize )
  711. {
  712. memset ( sent_data_buf, 0, 255 );
  713. memset ( DoByteBuffer, 0, 255 );
  714. //实际数据
  715. sent_data_buf[0] = aimID;
  716. sent_data_buf[1] = myID;
  717. memcpy ( &sent_data_buf[2], inBuffer, inSize );
  718. sent_data_size = Packaging_wifi_sendbuffer ( COMMD_TRANSMIT, ( u8 * ) sent_data_buf, inSize + 2 );
  719. //特殊处理
  720. memcpy ( DoByteBuffer, sent_data_buf, sent_data_size );
  721. sent_data_size = DoByteStuffing ( sent_data_buf, DoByteBuffer, sent_data_size );
  722. //加后缀
  723. sent_data_buf[sent_data_size + 0] = 0x0D;
  724. sent_data_buf[sent_data_size + 1] = 0x0A;
  725. sent_data_size = sent_data_size + 2;
  726. //发送
  727. esp8266_send();
  728. }
  729. void wifi_chat ( void )
  730. {
  731. char *p;
  732. if ( WifiHaveRecFlag )
  733. {
  734. WifiHaveRecFlag = false;
  735. //if(NULL != FindATcommd(AT_COMMAND_READ))
  736. //符合krain格式,则进入处理
  737. if ( NULL != ( p = FindATcommd ( "KR" ) ) )
  738. {
  739. TotalRecvBytes = p[2] + 3;
  740. if ( 0x55 == p[TotalRecvBytes - 1] )
  741. {
  742. memcpy ( Wifi_Rec_Buff, p, TotalRecvBytes );
  743. WifiDatCome = 1;
  744. WIFI_LED_FLAG = WIFI_DATA_COME_FLAG;
  745. }
  746. }
  747. else if ( FindATcommd ( AT_COMMAND_CLOSE ) || \
  748. FindATcommd ( AT_COMMAND_LINK_ERROR ) || \
  749. FindATcommd ( AT_COMMAND_REGID_ERROR )
  750. )
  751. {
  752. WifiProcessStep = WIFI_STEP_CONNECT;
  753. WifiConnectStep = 10;
  754. }
  755. clear_bAtRecBuff();
  756. WifiTimeLed = 0;
  757. WifiTimeReset = 0;
  758. }
  759. /*else if((WifiTimeReset > 20000) && (WifiTimeReset%2000==0))
  760. {
  761. WIFI_LED_FLAG = WIFI_CLOSE_FLAG;
  762. sendto_server0824(AIM_ID, REGMY_ID, "Msg Test!", 10);
  763. }*/
  764. }
  765. void LED_Flash_State ( void )
  766. {
  767. switch ( WIFI_LED_FLAG )
  768. {
  769. case WIFI_JOIN_ROUTE_OK_FLAG:
  770. if ( WifiTimeLed % 2000 == 0 ) WifiLedOn; //50ms
  771. else if ( WifiTimeLed % 2000 == 1000 ) WifiLedOff; //150ms
  772. break;
  773. case WIFI_LOAD_DONE_FLAG:
  774. WifiLedOn;
  775. WIFI_LED_FLAG = WIFI_MAX_FLAG;
  776. break;
  777. case WIFI_LTCP_CONNECT_FLAG:
  778. if ( WifiTimeLed < 50 ) WifiLedOn; //50ms
  779. else if ( WifiTimeLed < 200 ) WifiLedOff; //150ms
  780. else if ( WifiTimeLed < 250 ) WifiLedOn; //50ms
  781. else if ( WifiTimeLed < 550 ) WifiLedOff; //300ms
  782. else if ( WifiTimeLed < 600 ) WifiLedOn; //50ms
  783. else if ( WifiTimeLed < 750 ) WifiLedOff; //150ms
  784. else if ( WifiTimeLed < 800 ) WifiLedOn; //50ms
  785. else if ( WifiTimeLed < 850 ) WIFI_LED_FLAG = WIFI_LOAD_DONE_FLAG; //50ms
  786. break;
  787. case WIFI_DATA_COME_FLAG:
  788. if ( WifiTimeLed < 50 ) WifiLedOn; //50ms
  789. else if ( WifiTimeLed < 200 ) WifiLedOff; //150ms
  790. else if ( WifiTimeLed < 250 ) WifiLedOn; //50ms
  791. else if ( WifiTimeLed < 300 ) WIFI_LED_FLAG = WIFI_LOAD_DONE_FLAG; //50ms
  792. break;
  793. case WIFI_CLOSE_FLAG:
  794. WifiLedOff;
  795. WIFI_LED_FLAG = WIFI_MAX_FLAG;
  796. break;
  797. default:
  798. break;
  799. }
  800. }
  801. void wifi_main ( void )
  802. {
  803. #if WIFI_Uart1_def
  804. switch ( WifiProcessStep )
  805. {
  806. case WIFI_STEP_CHECK:
  807. wifi_check();
  808. break;
  809. case WIFI_STEP_CONNECT:
  810. wifi_connect();
  811. break;
  812. case WIFI_STEP_CHAT:
  813. wifi_chat();
  814. break;
  815. default:
  816. WifiProcessStep = WIFI_STEP_CONNECT;
  817. break;
  818. }
  819. LED_Flash_State();
  820. #endif
  821. }