our_service(5176).c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182
  1. /**
  2. * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA
  3. *
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without modification,
  7. * are permitted provided that the following conditions are met:
  8. *
  9. * 1. Redistributions of source code must retain the above copyright notice, this
  10. * list of conditions and the following disclaimer.
  11. *
  12. * 2. Redistributions in binary form, except as embedded into a Nordic
  13. * Semiconductor ASA integrated circuit in a product or a software update for
  14. * such product, must reproduce the above copyright notice, this list of
  15. * conditions and the following disclaimer in the documentation and/or other
  16. * materials provided with the distribution.
  17. *
  18. * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
  19. * contributors may be used to endorse or promote products derived from this
  20. * software without specific prior written permission.
  21. *
  22. * 4. This software, with or without modification, must only be used with a
  23. * Nordic Semiconductor ASA integrated circuit.
  24. *
  25. * 5. Any software provided in binary form under this license must not be reverse
  26. * engineered, decompiled, modified and/or disassembled.
  27. *
  28. * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
  29. * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  30. * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
  31. * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
  32. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  33. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
  34. * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  35. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  36. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  37. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  38. *
  39. */
  40. #include <stdint.h>
  41. #include <string.h>
  42. #include "nrf_gpio.h"
  43. #include "our_service.h"
  44. #include "ble_srv_common.h"
  45. #include "app_error.h"
  46. #include "SEGGER_RTT.h"
  47. #include "board_gpi.h"
  48. #include "nrf_log.h"
  49. #include "sysmgr.h"
  50. char SvrRxBuffer[100];
  51. int SvrRxBufferPos;
  52. char SvrEvent;
  53. stSystemTimer SystemTimer;
  54. stSystemManager SystemManager;
  55. char SvrSendBuff[50];
  56. void delete_all_begin(void);
  57. void USART_DataCheck()
  58. {
  59. if( SystemTimer.UART_LAST_RECV_TIMER > 10 && SystemManager.RxValild )
  60. {
  61. SvrRxBuffer[SvrRxBufferPos] = 0;
  62. //printf("[%d]%s\r\n", SvrRxBufferPos, SvrRxBuffer);
  63. SystemManager.RxValild = 0;
  64. if( SvrRxBufferPos == 20 )
  65. {
  66. SystemManager.RxEvent = 1;
  67. }
  68. SvrRxBufferPos = 0;
  69. }
  70. if( SystemTimer.UART_LAST_RECV_TIMER > 10 && SvrRxBufferPos )
  71. {
  72. SystemManager.RxValild = 0;
  73. SvrRxBufferPos = 0;
  74. }
  75. }
  76. void USART_Handler(void)
  77. {
  78. char ch;
  79. uint8_t cr;
  80. // SystemTimer.UART1_LAST_RECV_TIMER = 0;
  81. if( app_uart_get(&cr) == NRF_SUCCESS )
  82. {
  83. SystemManager.RxValild = 1;
  84. SvrRxBuffer[SvrRxBufferPos++] = cr;
  85. SvrRxBufferPos %= 100;
  86. SystemTimer.UART_LAST_RECV_TIMER = 0;
  87. }
  88. }
  89. #define COM_TYPE_SVR_NORMAL 0x02
  90. #define COM_TYPE_SVR_TALKING 0x03
  91. #define COM_TYPE_SVR_DISCON 0x04
  92. #define COM_TYPE_SVR_BUSY 0x05
  93. #define COM_TYPE_SVR_ALIVE 0x06
  94. #define COM_TYPE_SVR_MIC 0x07
  95. #define COM_TYPE_SVR_RECV_REG 0x08 // 서버에서 수신기에게 송신기 등록 요청
  96. #define COM_TYPE_SVR_RECV_INIT 0x0a
  97. #define COM_TYPE_SVR_RECV_LIST 0x0c // 서버에서 수신기에게 송신기 목록 요청
  98. #define COM_TYPE_SVR_VER_REQ 0x10 //
  99. #define COM_TYPE_SVR_CALL_REQ 0x12
  100. /* 이벤트 서버에서 20byte 들어왔을때 */
  101. void ParseEventServer()
  102. {
  103. int i;
  104. if( SystemManager.RxEvent == 0 )
  105. return;
  106. SystemManager.RxEvent = 0;
  107. NRF_LOG_RAW_INFO("\n\n");
  108. NRF_LOG_RAW_INFO("SERVER TO DATA : ")
  109. for( i=0; i<20; i++)
  110. {
  111. NRF_LOG_RAW_INFO("0x%02x ", SvrRxBuffer[i]);
  112. }
  113. NRF_LOG_RAW_INFO("\n\n");
  114. if(SvrRxBuffer[0] != 0x02)
  115. return;
  116. switch(SvrRxBuffer[1]){
  117. case COM_TYPE_SVR:
  118. switch(SvrRxBuffer[3]){
  119. case COM_TYPE_SVR_NORMAL:
  120. NRF_LOG_INFO("Recv : Normal");
  121. PKLedOff();
  122. PKBuzzerOff();
  123. PKMicOff();
  124. SystemManager.SwitchOn = 0;
  125. break;
  126. case COM_TYPE_SVR_TALKING:
  127. NRF_LOG_INFO("Recv : Talking");
  128. PKLedOn();
  129. PKBuzzerOff();
  130. SystemManager.SwitchOn = 0;
  131. break;
  132. case COM_TYPE_SVR_DISCON:
  133. NRF_LOG_INFO("Recv : Disconnect");
  134. SystemManager.SwitchOn = 0;
  135. //bsp_board_leds_off();
  136. break;
  137. case COM_TYPE_SVR_BUSY:
  138. NRF_LOG_INFO("Recv : Busy");
  139. break;
  140. case COM_TYPE_SVR_ALIVE:
  141. NRF_LOG_INFO("Recv : Keep Alive");
  142. break;
  143. case COM_TYPE_SVR_MIC:
  144. NRF_LOG_INFO("Recv : mic on/off");
  145. if( SvrRxBuffer[11] == 0 )
  146. {
  147. NRF_LOG_INFO("mic off");
  148. NRF_LOG_INFO("speaker off");
  149. PKSpeakerOff();
  150. PKMicOn();
  151. PKBuzzerOff();
  152. PKLedOn();
  153. SystemManager.SwitchOn = 0;
  154. }else{
  155. NRF_LOG_INFO("mic on");
  156. NRF_LOG_INFO("speaker on");
  157. PKMicOff();
  158. PKSpeakerOn();
  159. PKLedOn();
  160. }
  161. break;
  162. // 송신기 등록요청
  163. case COM_TYPE_SVR_RECV_REG:
  164. NRF_LOG_INFO("Recv : COM_TYPE_SVR_RECV_REG");
  165. SystemManager.LedBlinkRun = COM_TYPE_SVR_RECV_REG;
  166. SystemManager.RegRequst = 1;
  167. SendAck(COM_TYPE_SVR_RECV_REG+1);
  168. SystemTimer.DEV_REG_TIMER = 0;
  169. break;
  170. // 송신기 등록 초기화
  171. case COM_TYPE_SVR_RECV_INIT:
  172. NRF_LOG_INFO("Recv : COM_TYPE_SVR_RECV_INIT");
  173. // SystemManager.LedBlinkRun = COM_TYPE_SVR_RECV_INIT;
  174. // SystemManager.LedBlinkTimer = 2500;
  175. // SystemTimer.LED_TOGGLE_TIMER = 0;
  176. // SystemManager.SwitchOn = 1;
  177. SendAck(COM_TYPE_SVR_RECV_INIT+1);
  178. //for( i=0; i<RegMacPool.Count; i++)
  179. //{
  180. //RegMacDelteAll();
  181. // }
  182. memset( &RegMacPool, 0, sizeof(RegMacPool));
  183. delete_all_begin();
  184. for(i=0; i<2; i++){
  185. PKLedOn();
  186. nrf_delay_ms(300);
  187. PKLedOff();
  188. nrf_delay_ms(300);
  189. }
  190. break;
  191. // 서버로 송신기 리스트 전송
  192. case COM_TYPE_SVR_RECV_LIST:
  193. NRF_LOG_INFO("Recv : COM_TYPE_SVR_RECV_LIST");
  194. // SystemManager.LedBlinkRun = COM_TYPE_SVR_RECV_LIST;
  195. // SystemManager.LedBlinkTimer = 1500;
  196. // SystemTimer.LED_TOGGLE_TIMER = 0;
  197. // SystemManager.SwitchOn = 1;
  198. SendDevList();
  199. PKLedOn();
  200. nrf_delay_ms(300);
  201. PKLedOff();
  202. break;
  203. // 서버로 부터 통화 요청
  204. case COM_TYPE_SVR_CALL_REQ:
  205. NRF_LOG_INFO("Recv : COM_TYPE_SVR_CALL_REQ");
  206. Server_Call_Request();
  207. break;
  208. case COM_TYPE_SVR_VER_REQ:
  209. NRF_LOG_INFO("Recv : COM_TYPE_SVR_VER_REQ");
  210. Server_Ver_Request();
  211. break;
  212. }
  213. break;
  214. case COM_TYPE_BAND:
  215. break;
  216. }
  217. }
  218. void SendToEventServer(char* data, int len)
  219. {
  220. int i;
  221. NRF_LOG_RAW_INFO("SendToEventServer ==> ");
  222. for( i=0; i<len; i++)
  223. {
  224. NRF_LOG_RAW_INFO("%02x ", data[i]);
  225. }
  226. NRF_LOG_RAW_INFO("\n");
  227. for( i=0; i<len; i++)
  228. {
  229. while (app_uart_put(data[i]) != NRF_SUCCESS);
  230. }
  231. }
  232. void SendEmergency()
  233. {
  234. NRF_LOG_RAW_INFO("===> SendEmergency()\n");
  235. if( SystemManager.RegRequst == 1 )
  236. {
  237. SystemManager.RegRequst = 0;
  238. return;
  239. }
  240. SvrSendBuff[0] = COM_STX;
  241. SvrSendBuff[1] = COM_TYPE_SVR;
  242. SvrSendBuff[2] = 0;
  243. SvrSendBuff[3] = COM_TYPE_BELL_EMG;
  244. SvrSendBuff[4] = SystemManager.PeerAddr[3];
  245. SvrSendBuff[5] = SystemManager.PeerAddr[4];
  246. SvrSendBuff[6] = SystemManager.PeerAddr[5];
  247. SvrSendBuff[7] = new_ble_addr.addr[3];
  248. SvrSendBuff[8] = new_ble_addr.addr[4];
  249. SvrSendBuff[9] = new_ble_addr.addr[5];
  250. SvrSendBuff[10] = 8;
  251. SvrSendBuff[11] = 0;
  252. SvrSendBuff[12] = 0;
  253. SvrSendBuff[13] = 0;
  254. SvrSendBuff[14] = 0;
  255. SvrSendBuff[15] = 0;
  256. SvrSendBuff[16] = 0;
  257. SvrSendBuff[17] = 0;
  258. SvrSendBuff[18] = 0;
  259. SvrSendBuff[19] = COM_ETX;
  260. NRF_LOG_INFO("SendEmergency ===");
  261. SendToEventServer(&SvrSendBuff[0], 20);
  262. SystemManager.SwitchOn = 1;
  263. PKBuzzerOn();
  264. }
  265. void SendParkingApp()
  266. {
  267. int i;
  268. NRF_LOG_RAW_INFO("===> SendParkingApp()\n");
  269. SvrSendBuff[0] = COM_STX;
  270. SvrSendBuff[1] = 3;
  271. SvrSendBuff[2] = 0;
  272. SvrSendBuff[3] = 1;
  273. // SvrSendBuff[4] = SystemManager.PeerAddr[3];
  274. // SvrSendBuff[5] = SystemManager.PeerAddr[4];
  275. // SvrSendBuff[6] = SystemManager.PeerAddr[5];
  276. SvrSendBuff[4] = 0;
  277. SvrSendBuff[5] = 0;
  278. SvrSendBuff[6] = 0;
  279. SvrSendBuff[7] = new_ble_addr.addr[3];
  280. SvrSendBuff[8] = new_ble_addr.addr[4];
  281. SvrSendBuff[9] = new_ble_addr.addr[5];
  282. SvrSendBuff[10] = 0x11;
  283. SvrSendBuff[11] = 0x74;
  284. SvrSendBuff[12] = 0; //uuid
  285. SvrSendBuff[13] = 0;
  286. SvrSendBuff[14] = 0;
  287. SvrSendBuff[15] = 0;
  288. SvrSendBuff[16] = SystemManager.Site[0]; //Site
  289. SvrSendBuff[17] = SystemManager.Site[1];
  290. SvrSendBuff[18] = SystemManager.Site[2];
  291. SvrSendBuff[19] = SystemManager.Site[3];
  292. SvrSendBuff[20] = SystemManager.Dong[0]; //Dong
  293. SvrSendBuff[21] = SystemManager.Dong[1];
  294. SvrSendBuff[22] = SystemManager.Ho[0]; //Ho
  295. SvrSendBuff[23] = SystemManager.Ho[1];
  296. SvrSendBuff[24] = 0; //KEY NUM
  297. SvrSendBuff[25] = 0; //KEY TYPE
  298. SvrSendBuff[26] = 0; //Random
  299. SvrSendBuff[27] = 0;
  300. SvrSendBuff[28] = COM_ETX;
  301. NRF_LOG_INFO("SendParkingApp ===");
  302. SendToEventServer(&SvrSendBuff[0], 1);
  303. SendToEventServer(&SvrSendBuff[0], 29);
  304. for(i=0; i<2; i++){
  305. PKLedOn();
  306. nrf_delay_ms(300);
  307. PKLedOff();
  308. nrf_delay_ms(300);
  309. }
  310. nrf_delay_ms(2000); // 중복해서 들어오는 데이타로 인한 연속 동작 방지
  311. }
  312. void SendEmergencyBand()
  313. {
  314. int i;
  315. char tmpStr[10];
  316. NRF_LOG_RAW_INFO("===> SendEmergencyBand()\n");
  317. SystemManager.LedBlinkRun = 1;
  318. SystemManager.LedBlinkTimer = 5000;
  319. SystemTimer.LED_TOGGLE_TIMER = 0;
  320. SystemManager.DevType = 0;
  321. SystemManager.SwitchOn = 1;
  322. PKBuzzerOn();
  323. SvrSendBuff[0] = COM_STX;
  324. SvrSendBuff[1] = 2;
  325. SvrSendBuff[2] = 0;
  326. SvrSendBuff[3] = COM_TYPE_BELL_EMG;
  327. // SvrSendBuff[4] = SystemManager.PeerAddr[3];
  328. // SvrSendBuff[5] = SystemManager.PeerAddr[4];
  329. // SvrSendBuff[6] = SystemManager.PeerAddr[5];
  330. SvrSendBuff[4] = 0;
  331. SvrSendBuff[5] = 0;
  332. SvrSendBuff[6] = 0;
  333. if( RegMacPool.Count != 0 ){ // 등록된 송신기가 있으면 첫번째 MAC 전송
  334. strcpy( tmpStr, &RegMacPool.Mac[0][6]);
  335. tmpStr[6] = 0;
  336. SvrSendBuff[6] = strtoul( &tmpStr[4], NULL, 16 );
  337. tmpStr[4] = 0;
  338. SvrSendBuff[5] = strtoul( &tmpStr[2], NULL, 16 );
  339. tmpStr[2] = 0;
  340. SvrSendBuff[4] = strtoul( &tmpStr[0], NULL, 16 );
  341. }else{ // 없으면 000000 전송
  342. SvrSendBuff[4] = 0;
  343. SvrSendBuff[5] = 0;
  344. SvrSendBuff[6] = 0;
  345. }
  346. SvrSendBuff[7] = new_ble_addr.addr[3];
  347. SvrSendBuff[8] = new_ble_addr.addr[4];
  348. SvrSendBuff[9] = new_ble_addr.addr[5];
  349. SvrSendBuff[10] = 0x11;
  350. SvrSendBuff[11] = 0x72;
  351. SvrSendBuff[12] = 0; //uuid
  352. SvrSendBuff[13] = 0;
  353. SvrSendBuff[14] = 0;
  354. SvrSendBuff[15] = 0;
  355. SvrSendBuff[16] = SystemManager.Site[0]; //Site
  356. SvrSendBuff[17] = SystemManager.Site[1];
  357. SvrSendBuff[18] = SystemManager.Site[2];
  358. SvrSendBuff[19] = SystemManager.Site[3];
  359. SvrSendBuff[20] = SystemManager.Dong[0]; //Dong
  360. SvrSendBuff[21] = SystemManager.Dong[1];
  361. SvrSendBuff[22] = SystemManager.Ho[0]; //Ho
  362. SvrSendBuff[23] = SystemManager.Ho[1];
  363. SvrSendBuff[24] = 0; //KEY NUM
  364. SvrSendBuff[25] = 0; //KEY TYPE
  365. SvrSendBuff[26] = 0; //Random
  366. SvrSendBuff[27] = 0;
  367. SvrSendBuff[28] = COM_ETX;
  368. NRF_LOG_INFO("SendEmergencyBand===");
  369. SendToEventServer(&SvrSendBuff[0], 1);
  370. nrf_delay_ms(500);
  371. SendToEventServer(&SvrSendBuff[0], 29);
  372. //NRF_LOG_RAW_INFO("================= EmergencyBand \n");
  373. for( i=0; i<29; i++)
  374. {
  375. //NRF_LOG_RAW_INFO("%02x ", SvrSendBuff[i]);
  376. }
  377. NRF_LOG_RAW_INFO("\n");
  378. }
  379. void SendParkingBand()
  380. {
  381. int i;
  382. NRF_LOG_RAW_INFO("===> SendParkingBand()\n");
  383. SvrSendBuff[0] = COM_STX;
  384. SvrSendBuff[1] = 2;
  385. SvrSendBuff[2] = 0;
  386. SvrSendBuff[3] = 2;
  387. // SvrSendBuff[4] = SystemManager.PeerAddr[3];
  388. // SvrSendBuff[5] = SystemManager.PeerAddr[4];
  389. // SvrSendBuff[6] = SystemManager.PeerAddr[5];
  390. SvrSendBuff[4] = 0;
  391. SvrSendBuff[5] = 0;
  392. SvrSendBuff[6] = 0;
  393. SvrSendBuff[7] = new_ble_addr.addr[3];
  394. SvrSendBuff[8] = new_ble_addr.addr[4];
  395. SvrSendBuff[9] = new_ble_addr.addr[5];
  396. SvrSendBuff[10] = 0x11;
  397. SvrSendBuff[11] = 0x73;
  398. SvrSendBuff[12] = 0; //uuid
  399. SvrSendBuff[13] = 0;
  400. SvrSendBuff[14] = 0;
  401. SvrSendBuff[15] = 0;
  402. SvrSendBuff[16] = SystemManager.Site[0]; //Site
  403. SvrSendBuff[17] = SystemManager.Site[1];
  404. SvrSendBuff[18] = SystemManager.Site[2];
  405. SvrSendBuff[19] = SystemManager.Site[3];
  406. SvrSendBuff[20] = SystemManager.Dong[0]; //Dong
  407. SvrSendBuff[21] = SystemManager.Dong[1];
  408. SvrSendBuff[22] = SystemManager.Ho[0]; //Ho
  409. SvrSendBuff[23] = SystemManager.Ho[1];
  410. SvrSendBuff[24] = 0; //KEY NUM
  411. SvrSendBuff[25] = 0; //KEY TYPE
  412. SvrSendBuff[26] = 0; //Random
  413. SvrSendBuff[27] = 0;
  414. SvrSendBuff[28] = COM_ETX;
  415. // NRF_LOG_INFO("SendParkingBand ===");
  416. SendToEventServer(&SvrSendBuff[0], 1);
  417. SendToEventServer(&SvrSendBuff[0], 29);
  418. // SystemManager.SwitchOn = 1;
  419. SystemManager.SwitchOn = 0;
  420. for(i=0; i<2; i++){
  421. PKLedOn();
  422. nrf_delay_ms(300);
  423. PKLedOff();
  424. nrf_delay_ms(300);
  425. }
  426. }
  427. void SendAck(uint8_t cmd)
  428. {
  429. NRF_LOG_RAW_INFO("===> SendAck()\n");
  430. SvrSendBuff[0] = COM_STX;
  431. SvrSendBuff[1] = COM_TYPE_SVR;
  432. SvrSendBuff[2] = 0;
  433. SvrSendBuff[3] = cmd;
  434. SvrSendBuff[4] = 0;
  435. SvrSendBuff[5] = 0;
  436. SvrSendBuff[6] = 0;
  437. SvrSendBuff[7] = new_ble_addr.addr[3];
  438. SvrSendBuff[8] = new_ble_addr.addr[4];
  439. SvrSendBuff[9] = new_ble_addr.addr[5];
  440. SvrSendBuff[10] = 8;
  441. SvrSendBuff[11] = 'A';
  442. SvrSendBuff[12] = 'C';
  443. SvrSendBuff[13] = 'K';
  444. SvrSendBuff[14] = 0;
  445. SvrSendBuff[15] = 0;
  446. SvrSendBuff[16] = 0;
  447. SvrSendBuff[17] = 0;
  448. SvrSendBuff[18] = 0;
  449. SvrSendBuff[19] = COM_ETX;
  450. // NRF_LOG_INFO("cmd:0x%02x ACK ==== ", cmd);
  451. SendToEventServer(&SvrSendBuff[0], 20);
  452. }
  453. void SendDevList()
  454. {
  455. char tmpStr[10];
  456. int i;
  457. NRF_LOG_RAW_INFO("===> SendDevList(%d)\n", RegMacPool.Count);
  458. if( RegMacPool.Count == 0 )
  459. {
  460. strcpy( tmpStr, &RegMacPool.Mac[i][6]);
  461. tmpStr[6] = 0;
  462. SvrSendBuff[6] = strtoul( &tmpStr[4], NULL, 16 );
  463. tmpStr[4] = 0;
  464. SvrSendBuff[5] = strtoul( &tmpStr[2], NULL, 16 );
  465. tmpStr[2] = 0;
  466. SvrSendBuff[4] = strtoul( &tmpStr[0], NULL, 16 );
  467. SvrSendBuff[0] = COM_STX;
  468. SvrSendBuff[1] = COM_TYPE_SVR;
  469. SvrSendBuff[2] = 0;
  470. SvrSendBuff[3] = 0x0D;
  471. SvrSendBuff[7] = new_ble_addr.addr[3];
  472. SvrSendBuff[8] = new_ble_addr.addr[4];
  473. SvrSendBuff[9] = new_ble_addr.addr[5];
  474. SvrSendBuff[10] = 8;
  475. SvrSendBuff[11] = 0;
  476. SvrSendBuff[12] = 0;
  477. SvrSendBuff[13] = 0;
  478. SvrSendBuff[14] = 0;
  479. SvrSendBuff[15] = 0;
  480. SvrSendBuff[16] = 0;
  481. SvrSendBuff[17] = 0;
  482. SvrSendBuff[18] = 0;
  483. SvrSendBuff[19] = COM_ETX;
  484. NRF_LOG_INFO("DevList %02x%02x%02x ===== ", SvrSendBuff[4], SvrSendBuff[5], SvrSendBuff[6]);
  485. SendToEventServer(&SvrSendBuff[0], 20);
  486. nrf_delay_ms(50);
  487. }
  488. for( i=0; i<RegMacPool.Count; i++)
  489. {
  490. strcpy( tmpStr, &RegMacPool.Mac[i][6]);
  491. tmpStr[6] = 0;
  492. SvrSendBuff[6] = strtoul( &tmpStr[4], NULL, 16 );
  493. tmpStr[4] = 0;
  494. SvrSendBuff[5] = strtoul( &tmpStr[2], NULL, 16 );
  495. tmpStr[2] = 0;
  496. SvrSendBuff[4] = strtoul( &tmpStr[0], NULL, 16 );
  497. SvrSendBuff[0] = COM_STX;
  498. SvrSendBuff[1] = COM_TYPE_SVR;
  499. SvrSendBuff[2] = 0;
  500. SvrSendBuff[3] = 0x0d;
  501. //SvrSendBuff[4] = RegMacPool.Mac[i][];
  502. //SvrSendBuff[5] = SystemManager.PeerAddr[4];
  503. //SvrSendBuff[6] = SystemManager.PeerAddr[5];
  504. SvrSendBuff[7] = new_ble_addr.addr[3];
  505. SvrSendBuff[8] = new_ble_addr.addr[4];
  506. SvrSendBuff[9] = new_ble_addr.addr[5];
  507. SvrSendBuff[10] = 8;
  508. SvrSendBuff[11] = 0;
  509. SvrSendBuff[12] = 0;
  510. SvrSendBuff[13] = 0;
  511. SvrSendBuff[14] = 0;
  512. SvrSendBuff[15] = 0;
  513. SvrSendBuff[16] = 0;
  514. SvrSendBuff[17] = 0;
  515. SvrSendBuff[18] = 0;
  516. SvrSendBuff[19] = COM_ETX;
  517. NRF_LOG_INFO("DevList %02x%02x%02x ===== ", SvrSendBuff[4], SvrSendBuff[5], SvrSendBuff[6]);
  518. SendToEventServer(&SvrSendBuff[0], 20);
  519. nrf_delay_ms(200);
  520. }
  521. }
  522. void SendCurrentRegDev()
  523. {
  524. NRF_LOG_RAW_INFO("===> SendCurrentRegDev()\n");
  525. SvrSendBuff[0] = COM_STX;
  526. SvrSendBuff[1] = COM_TYPE_SVR;
  527. SvrSendBuff[2] = 0;
  528. SvrSendBuff[3] = 0x0d;
  529. SvrSendBuff[4] = SystemManager.PeerAddr[3];
  530. SvrSendBuff[5] = SystemManager.PeerAddr[4];
  531. SvrSendBuff[6] = SystemManager.PeerAddr[5];
  532. SvrSendBuff[7] = new_ble_addr.addr[3];
  533. SvrSendBuff[8] = new_ble_addr.addr[4];
  534. SvrSendBuff[9] = new_ble_addr.addr[5];
  535. SvrSendBuff[10] = 8;
  536. SvrSendBuff[11] = 0;
  537. SvrSendBuff[12] = 0;
  538. SvrSendBuff[13] = 0;
  539. SvrSendBuff[14] = 0;
  540. SvrSendBuff[15] = 0;
  541. SvrSendBuff[16] = 0;
  542. SvrSendBuff[17] = 0;
  543. SvrSendBuff[18] = 0;
  544. SvrSendBuff[19] = COM_ETX;
  545. // NRF_LOG_INFO("DevList %02x%02x%02x ===== ", SvrSendBuff[4], SvrSendBuff[5], SvrSendBuff[6]);
  546. SendToEventServer(&SvrSendBuff[0], 20);
  547. nrf_delay_ms(50);
  548. }
  549. void Server_Call_Request()
  550. {
  551. char tmpStr[10];
  552. int i;
  553. NRF_LOG_INFO("Server_Call_Request");
  554. if( SystemManager.ServerCon == 0 )
  555. {
  556. SystemManager.LedBlinkRun = 1;
  557. SystemManager.LedBlinkTimer = 5000;
  558. SystemTimer.LED_TOGGLE_TIMER = 0;
  559. SystemManager.DevType = 0;
  560. SystemManager.SwitchOn = 1;
  561. PKBuzzerOn();
  562. SvrSendBuff[0] = COM_STX;
  563. SvrSendBuff[1] = COM_TYPE_SVR;
  564. SvrSendBuff[2] = 0;
  565. SvrSendBuff[3] = COM_TYPE_SVR_CALL_REQ+1;
  566. if( RegMacPool.Count != 0 ){ // 등록된 송신기가 있으면 첫번째 MAC 전송
  567. strcpy( tmpStr, &RegMacPool.Mac[0][6]);
  568. tmpStr[6] = 0;
  569. SvrSendBuff[6] = strtoul( &tmpStr[4], NULL, 16 );
  570. tmpStr[4] = 0;
  571. SvrSendBuff[5] = strtoul( &tmpStr[2], NULL, 16 );
  572. tmpStr[2] = 0;
  573. SvrSendBuff[4] = strtoul( &tmpStr[0], NULL, 16 );
  574. }else{ // 없으면 000000 전송
  575. SvrSendBuff[4] = 0;
  576. SvrSendBuff[5] = 0;
  577. SvrSendBuff[6] = 0;
  578. }
  579. SvrSendBuff[7] = new_ble_addr.addr[3];
  580. SvrSendBuff[8] = new_ble_addr.addr[4];
  581. SvrSendBuff[9] = new_ble_addr.addr[5];
  582. SvrSendBuff[10] = 8;
  583. // SvrSendBuff[11] = 'A';
  584. // SvrSendBuff[12] = 'C';
  585. // SvrSendBuff[13] = 'K';
  586. SvrSendBuff[11] = 0;
  587. SvrSendBuff[12] = 0;
  588. SvrSendBuff[13] = 0;
  589. SvrSendBuff[14] = 0;
  590. SvrSendBuff[15] = 0;
  591. SvrSendBuff[16] = 0;
  592. SvrSendBuff[17] = 0;
  593. SvrSendBuff[18] = 0;
  594. SvrSendBuff[19] = COM_ETX;
  595. SendToEventServer(&SvrSendBuff[0], 20);
  596. // SendAck(COM_TYPE_SVR_CALL_REQ+1);
  597. }
  598. }
  599. void Server_Ver_Request()
  600. {
  601. NRF_LOG_RAW_INFO("===> Server_Ver_Request()\n");
  602. if( SystemManager.ServerCon == 0)
  603. {
  604. SystemManager.LedBlinkRun = COM_TYPE_SVR_VER_REQ;
  605. SystemManager.LedBlinkTimer = 1500;
  606. SystemTimer.LED_TOGGLE_TIMER = 0;
  607. SystemManager.DevType = 0;
  608. SvrSendBuff[0] = COM_STX;
  609. SvrSendBuff[1] = COM_TYPE_SVR;
  610. SvrSendBuff[2] = 0;
  611. SvrSendBuff[3] = COM_TYPE_SVR_VER_REQ+1;
  612. SvrSendBuff[4] = 0;
  613. SvrSendBuff[5] = 0;
  614. SvrSendBuff[6] = 0;
  615. SvrSendBuff[7] = new_ble_addr.addr[3];
  616. SvrSendBuff[8] = new_ble_addr.addr[4];
  617. SvrSendBuff[9] = new_ble_addr.addr[5];
  618. SvrSendBuff[10] = 8;
  619. SvrSendBuff[11] = 0x00; //ver
  620. SvrSendBuff[12] = 0x01;
  621. SvrSendBuff[13] = 0;
  622. SvrSendBuff[14] = 0;
  623. SvrSendBuff[15] = 0;
  624. SvrSendBuff[16] = 0;
  625. SvrSendBuff[17] = 0;
  626. SvrSendBuff[18] = 0;
  627. SvrSendBuff[19] = COM_ETX;
  628. // NRF_LOG_INFO("Send Server ===> ");
  629. SendToEventServer(&SvrSendBuff[0], 20);
  630. // SystemManager.SwitchOn = 1;
  631. SystemManager.SwitchOn = 0;
  632. }
  633. }
  634. // 사용않함
  635. void SendEmergencyLocal()
  636. {
  637. SvrSendBuff[0] = COM_STX;
  638. SvrSendBuff[1] = COM_TYPE_SVR;
  639. SvrSendBuff[2] = 0;
  640. SvrSendBuff[3] = COM_TYPE_BELL_EMG;
  641. SvrSendBuff[4] = 0xaa;
  642. SvrSendBuff[5] = 0xaa;
  643. SvrSendBuff[6] = 0xaa;
  644. SvrSendBuff[7] = 0xbb;
  645. SvrSendBuff[8] = 0xbb;
  646. SvrSendBuff[9] = 0xbb;
  647. SvrSendBuff[10] = 8;
  648. SvrSendBuff[11] = 0;
  649. SvrSendBuff[12] = 0;
  650. SvrSendBuff[13] = 0;
  651. SvrSendBuff[14] = 0;
  652. SvrSendBuff[15] = 0;
  653. SvrSendBuff[16] = 0;
  654. SvrSendBuff[17] = 0;
  655. SvrSendBuff[18] = 0;
  656. SvrSendBuff[19] = COM_ETX;
  657. SendToEventServer(&SvrSendBuff[0], 20);
  658. SystemManager.SwitchOn = 1;
  659. PKBuzzerOn();
  660. }
  661. // 송신기 테스트 버튼눌렀을시 동작
  662. void AliveTest()
  663. {
  664. SystemManager.SwitchOn = 1;
  665. PKBuzzerOn();
  666. SystemManager.LedBlinkRun = COM_TYPE_SVR_ALIVE;
  667. SystemManager.LedBlinkTimer = 3300;
  668. SystemTimer.LED_TOGGLE_TIMER = 0;
  669. }
  670. // 사용않함
  671. void SendTest()
  672. {
  673. if( SystemTimer.SEND_TEST_TIMER< 3000 )
  674. return;
  675. SystemTimer.SEND_TEST_TIMER = 0;
  676. SendEmergency();
  677. }
  678. void LedToggle()
  679. {
  680. static char toggle = 0;
  681. if( SystemManager.RegRequst )
  682. {
  683. if( SystemTimer.DEV_REG_TIMER >= 60000 )
  684. {
  685. SystemManager.RegRequst = 0;
  686. PKLedOff();
  687. SystemManager.LedBlinkRun = 0;
  688. }
  689. }
  690. // 송신기 등록모드시 항상 ON
  691. if( SystemManager.LedBlinkRun == COM_TYPE_SVR_RECV_REG )
  692. {
  693. PKLedOn();
  694. return;
  695. }
  696. if( SystemManager.LedBlinkRun == COM_TYPE_SVR_RECV_REG+1 )
  697. {
  698. if( SystemManager.RegRequst == 1 )
  699. {
  700. if( SystemManager.LedBlinkTimer < 0 )
  701. {
  702. SystemManager.LedBlinkRun = COM_TYPE_SVR_RECV_REG;
  703. PKLedOn();
  704. return;
  705. }
  706. }
  707. if( SystemTimer.LED_TOGGLE_TIMER < 500 )
  708. return;
  709. SystemTimer.LED_TOGGLE_TIMER = 0;
  710. if( toggle++&0x01)
  711. {
  712. PKLedOn();
  713. }else{
  714. PKLedOff();
  715. }
  716. }
  717. #if 0
  718. if( SystemManager.LedBlinkRun == COM_TYPE_SVR_PARKING )
  719. {
  720. if( SystemManager.LedBlinkTimer < 0 )
  721. {
  722. SystemManager.LedBlinkRun = 0;
  723. PKLedOff();
  724. return;
  725. }
  726. if( SystemTimer.LED_TOGGLE_TIMER < 500 )
  727. return;
  728. SystemTimer.LED_TOGGLE_TIMER = 0;
  729. if( toggle++&0x01)
  730. {
  731. PKLedOn();
  732. }else{
  733. PKLedOff();
  734. }
  735. }
  736. #endif
  737. #if 0
  738. if( SystemManager.LedBlinkRun == COM_TYPE_SVR_RECV_INIT )
  739. {
  740. if( SystemManager.LedBlinkTimer < 0 )
  741. {
  742. SystemManager.LedBlinkRun = 0;
  743. PKLedOff();
  744. return;
  745. }
  746. if( SystemTimer.LED_TOGGLE_TIMER < 500 )
  747. return;
  748. SystemTimer.LED_TOGGLE_TIMER = 0;
  749. if( toggle++&0x01)
  750. {
  751. PKLedOn();
  752. }else{
  753. PKLedOff();
  754. }
  755. }
  756. #endif
  757. #if 0
  758. if( SystemManager.LedBlinkRun == COM_TYPE_SVR_RECV_LIST || SystemManager.LedBlinkRun == COM_TYPE_SVR_VER_REQ)
  759. {
  760. if( SystemManager.LedBlinkTimer < 0 )
  761. {
  762. SystemManager.LedBlinkRun = 0;
  763. PKLedOff();
  764. return;
  765. }
  766. if( SystemTimer.LED_TOGGLE_TIMER < 500 )
  767. return;
  768. SystemTimer.LED_TOGGLE_TIMER = 0;
  769. if( toggle++&0x01)
  770. {
  771. PKLedOn();
  772. }else{
  773. PKLedOff();
  774. }
  775. }
  776. #endif
  777. if( SystemManager.LedBlinkRun == COM_TYPE_SVR_ALIVE )
  778. {
  779. if( SystemManager.LedBlinkTimer < 0 )
  780. {
  781. SystemManager.LedBlinkRun = 0;
  782. PKLedOff();
  783. PKBuzzerOff();
  784. return;
  785. }
  786. if( SystemTimer.LED_TOGGLE_TIMER < 500 )
  787. return;
  788. SystemTimer.LED_TOGGLE_TIMER = 0;
  789. if( toggle++&0x01)
  790. {
  791. PKLedOn();
  792. }else{
  793. PKLedOff();
  794. }
  795. }
  796. if( SystemManager.SwitchOn == 0 )
  797. return;
  798. if( SystemManager.LedBlinkRun == 0 )
  799. return;
  800. #if 0
  801. if( SystemManager.LedBlinkTimer < 0 )
  802. {
  803. SystemManager.LedBlinkRun = 0;
  804. PKLedOff();
  805. return;
  806. }
  807. #endif
  808. if( SystemTimer.LED_TOGGLE_TIMER < 500 )
  809. return;
  810. SystemTimer.LED_TOGGLE_TIMER = 0;
  811. if( toggle++&0x01)
  812. {
  813. PKLedOn();
  814. }else{
  815. PKLedOff();
  816. }
  817. }