mapp_arm.c 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810
  1. //==================================================================
  2. //
  3. // Filename: mapp_arm.c
  4. // Description: arm driver
  5. //
  6. //------------------------------------------------------------------
  7. //
  8. // version:
  9. // date: 23:54pm, 08.Apr.2012, by Sirius
  10. // Description:
  11. //
  12. //------------------------------------------------------------------
  13. //==================================================================
  14. /*------------------------------------------------------------------------------
  15. * I N C L U D E
  16. *------------------------------------------------------------------------------*/
  17. //#include <string.h>
  18. #include "stm32f0xx.h"
  19. #include "general.h"
  20. #include "mapp_can.h"
  21. #include "mapp_msg.h"
  22. #include "mapp_uart1.h"
  23. #include "main.h"
  24. #include "mapp_ext.h"
  25. #include "mapp_arm.h"
  26. #include "mapp_ami.h"
  27. #include "mapp_pwr.h"
  28. #include "mapp_gpio.h"
  29. #include "mapp_key.h"
  30. #include "sx1276_7_8.h"
  31. /*------------------------------------------------------------------------------
  32. * D E F I N E
  33. *------------------------------------------------------------------------------*/
  34. #define ARM_TX_BUF_LEN (40)
  35. #define ARM_RX_BUF_LEN (30)
  36. /*------------------------------------------------------------------------------
  37. * S T R U C T
  38. *------------------------------------------------------------------------------*/
  39. const U08 HEARTSTR[]="$HEART";
  40. /*------------------------------------------------------------------------------
  41. * S T A T I C - V A R I A B L E S
  42. *------------------------------------------------------------------------------*/
  43. //static U08 s_u8DvdRxBuf[UART3_RX_BUF_SIZE] = {0};
  44. static U08 s_u8ArmRxBuf[ARM_RX_BUF_LEN] = {0};
  45. static U08 s_u8ArmTxBuf[ARM_TX_BUF_LEN] = {0};
  46. U08 s_u8NfcRxBuf[30] = {0};
  47. static VU16 s_vu16DvdTaskTmr=0;
  48. /*------------------------------------------------------------------------------
  49. * G L O B A L
  50. *------------------------------------------------------------------------------*/
  51. T_ARM_CFG gtArm ={0};
  52. /*------------------------------------------------------------------------------
  53. * P R O T O T Y P E
  54. *------------------------------------------------------------------------------*/
  55. static BOOL s_ArmRxCheck(void);
  56. static void s_frmArmRxSysReset(void);
  57. static void s_frmArmRxHandshake(void);
  58. static void s_frmArmRxSysUpdateReset(void);
  59. static void s_frmArmRxMic(void);
  60. static void s_frmArmRxNled(void);
  61. static void s_frmArmRxUled(void);
  62. static void s_frmArmRxRelay(void);
  63. static void s_frmArmRxSip(void);
  64. static void s_frmArmRxID(void);
  65. static void s_frmArmRxDoorLed(void);
  66. static void s_frmArmRxCallLed(void);
  67. static void s_frmArmRxAsk(void);
  68. static void s_frmArmTxNFC(U16 prm);
  69. static void s_frmArmTxNull(U16 prm);
  70. static void s_frmArmTxID(U16 prm);
  71. static void s_frmArmTxKey(U16 prm);
  72. static void s_frmArmTxVersion(U16 prm);
  73. static void s_frmArmRxNetReset(void);
  74. //------------------------------------------------------------------
  75. // array for function receive data from DVD
  76. // 13:53pm, 21.Sep.2012, modified by Sirius
  77. //------------------------------------------------------------------
  78. #define NbOfArmRxCmd (14)
  79. static const T_ARM_RX_FUNC arryArmRxFuncTbl[NbOfArmRxCmd] = {
  80. {"CALL", s_frmArmRxHandshake}, /* 14 无效 */
  81. { "HEART", s_frmArmRxHandshake}, /* 1 */
  82. {"SYSRESET", s_frmArmRxSysReset}, /* 2 */
  83. {"SYSUPDATE", s_frmArmRxSysUpdateReset}, /* 3 */
  84. {"MIC", s_frmArmRxMic}, /* 4 */
  85. {"NLED", s_frmArmRxNled}, /* 5 */
  86. {"ULED", s_frmArmRxUled}, /* 6 */
  87. {"RELAY", s_frmArmRxRelay}, /* 7 */
  88. {"SIP", s_frmArmRxSip}, /* 8 */
  89. {"ID", s_frmArmRxID}, /* 9 */
  90. {"DOORLED", s_frmArmRxDoorLed}, /* 10 */
  91. {"CALLLED", s_frmArmRxCallLed}, /* 11 */
  92. {"ASK", s_frmArmRxAsk}, /* 12 */
  93. {"NETRESET", s_frmArmRxNetReset}, /* 13 */
  94. };
  95. //------------------------------------------------------------------
  96. // array for function transmit data to DVD
  97. // 17:42pm, 20.Sep.2012, modified by Sirius
  98. //------------------------------------------------------------------
  99. static const fp_prm arryArmTxFuncTbl[NumOfArmMsg] = {
  100. s_frmArmTxNull, /* ARM_MSG_NULL */
  101. s_frmArmTxKey, /* ARM_MSG_KEY */
  102. s_frmArmTxID, /* ARM_MSG_ID */
  103. s_frmArmTxNFC, /* ARM_MSG_NFC */
  104. s_frmArmTxVersion, /* ARM_MSG_VER */
  105. };
  106. U16 HexToInt(U32 u32prm)
  107. {
  108. U16 i=0;
  109. U16 u16cnt = 0;
  110. if((DeviceMacInfo[0]>=0x30)&&(DeviceMacInfo[0]<=0x39))
  111. i= DeviceMacInfo[0]-0x30;
  112. else
  113. i= DeviceMacInfo[0]-0x37;
  114. u16cnt = i<<12;
  115. if((DeviceMacInfo[1]>=0x30)&&(DeviceMacInfo[1]<=0x39))
  116. i= DeviceMacInfo[1]-0x30;
  117. else
  118. i= DeviceMacInfo[1]-0x37;
  119. i =i<<8;
  120. u16cnt |= i;
  121. if((DeviceMacInfo[2]>=0x30)&&(DeviceMacInfo[2]<=0x39))
  122. i= DeviceMacInfo[2]-0x30;
  123. else
  124. i= DeviceMacInfo[2]-0x37;
  125. i =i<<4;
  126. u16cnt |= i;
  127. if((DeviceMacInfo[3]>=0x30)&&(DeviceMacInfo[3]<=0x39))
  128. i= DeviceMacInfo[3]-0x30;
  129. else
  130. i= DeviceMacInfo[3]-0x37;
  131. u16cnt |= i;
  132. return u16cnt;
  133. }
  134. //------------------------------------------------------------------------
  135. void ArmValInit(void)
  136. {
  137. U32 u32prm =0;
  138. MEMSET(&gtArm, 0, sizeof(T_ARM_CFG));
  139. u32prm = ( (DeviceMacInfo[0] <<24) | (DeviceMacInfo[1] <<16) | (DeviceMacInfo[2] <<8) | DeviceMacInfo[4] ) ;
  140. gtArm.FJKeymac = HexToInt(u32prm);
  141. }
  142. /*----------------------------------------------------------------------
  143. // Function uses : ArmTaskTmr
  144. // Input parameter :
  145. // Output parameter :
  146. // Use Function :
  147. // Reserve date : 09:11am, 30.Aug.2012, written by Sirius
  148. ----------------------------------------------------------------------*/
  149. void ArmTaskTmr(void)
  150. {
  151. if( s_vu16DvdTaskTmr != 0xFFFF ) {s_vu16DvdTaskTmr++;}
  152. }
  153. /*----------------------------------------------------------------------
  154. // Function uses : s_ArmRxCheck
  155. // Input parameter :
  156. // Output parameter :
  157. // Use Function : check frame format received from ARM.
  158. // Reserve date : 14:28pm, 21.Sep.2012, written by Sirius
  159. ----------------------------------------------------------------------*/
  160. static BOOL s_ArmRxCheck(void)
  161. {
  162. U08 i = 0;
  163. U08 len = 0;
  164. U08 chksum = 0;
  165. U08 chksum2 = 0;
  166. len = s_u8ArmRxBuf[1];
  167. chksum2 = s_u8ArmRxBuf[3];
  168. for (i = 0; i < (len-3); i++) {
  169. chksum2 ^= s_u8ArmRxBuf[i+4];
  170. }
  171. chksum = s_u8ArmRxBuf[1] ^ chksum2 ^ s_u8ArmRxBuf[2];
  172. if (chksum == s_u8ArmRxBuf[i+4]) {
  173. for(i=0;i<(len+2) ;i++) {
  174. s_u8NfcRxBuf[i] = s_u8ArmRxBuf[i];
  175. }
  176. return (TRUE);
  177. } else {
  178. return (FALSE);
  179. }
  180. }
  181. /*----------------------------------------------------------------------
  182. // Function uses : s_ArmRxIDCheck
  183. // Input parameter :
  184. // Output parameter :
  185. // Use Function : check frame format received from ARM.
  186. // Reserve date : 11:51am, 30.Sep.2019, written by dwd
  187. ----------------------------------------------------------------------*/
  188. static BOOL s_ArmRxIDCheck(U08 u8cnt)
  189. {
  190. U08 i = 0;
  191. U08 len = 0;
  192. /* LEN ==4,只比较前4个字节*/
  193. len = strlen(arryArmRxFuncTbl[u8cnt].datatype);
  194. for (i = 0; i < len; i++) {
  195. if (arryArmRxFuncTbl[u8cnt].datatype[i] != s_u8ArmRxBuf[1+i]) {
  196. return (FALSE);
  197. }
  198. }
  199. return (TRUE);
  200. }
  201. /*----------------------------------------------------------------------
  202. // Function uses : DvdRxTask
  203. // Input parameter :
  204. // Output parameter :
  205. // Use Function : Receive command data from DVD.
  206. // Reserve date : 15:18pm, 22.Feb.2013, written by Sirius
  207. ----------------------------------------------------------------------*/
  208. void ArmRxTask(void)
  209. {
  210. U08 err = 0;
  211. U08 i = 0;
  212. Uart1GetChar(s_u8ArmRxBuf, 0, &err); /* Copy data if received */
  213. if (err == COM_NO_ERR) { /* Valid data received */
  214. if (s_ArmRxCheck()) { /* Caculate checksum and feed back Ack data */
  215. OSQPost(ArmMsgQueue, ARM_MSG_NFC, 0);
  216. }
  217. }
  218. }
  219. /*----------------------------------------------------------------------
  220. // Function uses : DvdTxTask
  221. // Input parameter :
  222. // Output parameter :
  223. // Use Function : Transmit data to DVD.
  224. // Reserve date : 14:29pm, 19.Feb.2013, written by Sirius
  225. ----------------------------------------------------------------------*/
  226. void ArmTxTask(void)
  227. {
  228. T_MESSAGE *pmsg;
  229. pmsg = OSQGet(ArmMsgQueue);
  230. if (pmsg->id < NumOfArmMsg) {
  231. arryArmTxFuncTbl[pmsg->id](pmsg->prm);
  232. }
  233. if( s_vu16DvdTaskTmr >= 200 ) {
  234. s_vu16DvdTaskTmr = 0;
  235. // OSQPost(ArmMsgQueue, ARM_MSG_VER, 0);
  236. }
  237. }
  238. /*----------------------------------------------------------------------
  239. // Function uses : s_frmArmRxHandshake
  240. // Input parameter :
  241. // Output parameter :
  242. // Use Function :
  243. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  244. ----------------------------------------------------------------------*/
  245. static void s_frmArmRxHandshake(void)
  246. {
  247. Uart_Call_RevData(s_u8ArmRxBuf[9]);
  248. }
  249. static void s_frmArmTxNull(U16 prm)
  250. {
  251. prm = prm;
  252. }
  253. /*----------------------------------------------------------------------
  254. // Function uses : s_frmArmRxSysReset
  255. // Input parameter :
  256. // Output parameter :
  257. // Use Function :
  258. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  259. ----------------------------------------------------------------------*/
  260. static void s_frmArmRxSysReset(void)
  261. {
  262. gtPwrCfg.state = POWER_ON_RESET;
  263. gtArm.workmode = 0; //进入测试模式
  264. }
  265. /*----------------------------------------------------------------------
  266. // Function uses : s_frmArmRxSysReset
  267. // Input parameter :
  268. // Output parameter :
  269. // Use Function :
  270. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  271. ----------------------------------------------------------------------*/
  272. static void s_frmArmRxSysUpdateReset(void)
  273. {
  274. // SYS_SetUpdate();
  275. gtPwrCfg.state = POWER_ON_RESET;
  276. gtArm.workmode = 0; //进入测试模式
  277. }
  278. /*----------------------------------------------------------------------
  279. // Function uses : s_frmArmRxMic
  280. // Input parameter :
  281. // Output parameter :
  282. // Use Function :0:手柄麦克风,1:面板麦克风
  283. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  284. ----------------------------------------------------------------------*/
  285. static void s_frmArmRxMic(void)
  286. {
  287. if(s_u8ArmRxBuf[5]=='0') {
  288. //GpioMicSwOutputCfg (RESET);
  289. } else {
  290. // GpioMicSwOutputCfg (SET);
  291. }
  292. }
  293. /*----------------------------------------------------------------------
  294. // Function uses : s_frmArmRxNled
  295. // Input parameter :
  296. // Output parameter :
  297. // Use Function :
  298. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  299. ----------------------------------------------------------------------*/
  300. static void s_frmArmRxNled(void)
  301. {
  302. #if WDKL_NLED_TYPE ==NLEDPCA9635
  303. switch (s_u8ArmRxBuf[5])
  304. {
  305. case '0':
  306. gtArm.PCA9635Led[11]=(int)((s_u8ArmRxBuf[7]-0x30)*10+(s_u8ArmRxBuf[8]-0x30))*256/100; //R
  307. gtArm.PCA9635Led[12]=(int)((s_u8ArmRxBuf[9]-0x30)*10+(s_u8ArmRxBuf[10]-0x30))*256/100; //G
  308. gtArm.PCA9635Led[10]=(int)((s_u8ArmRxBuf[11]-0x30)*10+(s_u8ArmRxBuf[12]-0x30))*256/100; //B
  309. gtArm.PCA9635LedEn |=0x01;
  310. break;
  311. case '1':
  312. gtArm.PCA9635Led[14]=(int)((s_u8ArmRxBuf[7]-0x30)*10+(s_u8ArmRxBuf[8]-0x30))*256/100; //R
  313. gtArm.PCA9635Led[15]=(int)((s_u8ArmRxBuf[9]-0x30)*10+(s_u8ArmRxBuf[10]-0x30))*256/100; //G
  314. gtArm.PCA9635Led[13]=(int)((s_u8ArmRxBuf[11]-0x30)*10+(s_u8ArmRxBuf[12]-0x30))*256/100; //B
  315. gtArm.PCA9635LedEn |=0x02;
  316. break;
  317. case '2':
  318. gtArm.PCA9635Led[2]=(int)((s_u8ArmRxBuf[7]-0x30)*10+(s_u8ArmRxBuf[8]-0x30))*256/100; //R
  319. gtArm.PCA9635Led[3]=(int)((s_u8ArmRxBuf[9]-0x30)*10+(s_u8ArmRxBuf[10]-0x30))*256/100; //G
  320. gtArm.PCA9635Led[1]=(int)((s_u8ArmRxBuf[11]-0x30)*10+(s_u8ArmRxBuf[12]-0x30))*256/100; //B
  321. gtArm.PCA9635LedEn |=0x04;
  322. break;
  323. case '3':
  324. gtArm.PCA9635Led[5]=(int)((s_u8ArmRxBuf[7]-0x30)*10+(s_u8ArmRxBuf[8]-0x30))*256/100; //R
  325. gtArm.PCA9635Led[6]=(int)((s_u8ArmRxBuf[9]-0x30)*10+(s_u8ArmRxBuf[10]-0x30))*256/100; //G
  326. gtArm.PCA9635Led[4]=(int)((s_u8ArmRxBuf[11]-0x30)*10+(s_u8ArmRxBuf[12]-0x30))*256/100; //B
  327. gtArm.PCA9635LedEn |=0x08;
  328. break;
  329. case '4':
  330. gtArm.PCA9635Led[8]=(int)((s_u8ArmRxBuf[7]-0x30)*10+(s_u8ArmRxBuf[8]-0x30))*256/100; //R
  331. gtArm.PCA9635Led[9]=(int)((s_u8ArmRxBuf[9]-0x30)*10+(s_u8ArmRxBuf[10]-0x30))*256/100; //G
  332. gtArm.PCA9635Led[7]=(int)((s_u8ArmRxBuf[11]-0x30)*10+(s_u8ArmRxBuf[12]-0x30))*256/100; //B
  333. gtArm.PCA9635LedEn |=0x10;
  334. break;
  335. }
  336. #else
  337. switch (s_u8ArmRxBuf[5])
  338. {
  339. case '0':
  340. gtArm.PCA9635Led[0]=(int)((s_u8ArmRxBuf[7]-0x30)*10+(s_u8ArmRxBuf[8]-0x30))*256/100; //R
  341. gtArm.PCA9635Led[1]=(int)((s_u8ArmRxBuf[9]-0x30)*10+(s_u8ArmRxBuf[10]-0x30))*256/100; //G
  342. gtArm.PCA9635Led[2]=(int)((s_u8ArmRxBuf[11]-0x30)*10+(s_u8ArmRxBuf[12]-0x30))*256/100; //B
  343. gtArm.Ledhm1620AllDate &=0xfefefe;
  344. if ( gtArm.PCA9635Led [0]>0) { //R
  345. gtArm.Ledhm1620AllDate |=0x100;
  346. }
  347. if ( gtArm.PCA9635Led [1]>0 ) { //G
  348. gtArm.Ledhm1620AllDate |=0x01;
  349. }
  350. if ( gtArm.PCA9635Led [2]>0) { //B
  351. gtArm.Ledhm1620AllDate |=0x10000;
  352. }
  353. gtArm.ledhm1620pwmLevel[0] = gtArm.PCA9635Led [0]/10;
  354. gtArm.ledhm1620pwmLevel[1] = gtArm.PCA9635Led [1]/10;
  355. gtArm.ledhm1620pwmLevel[2] = gtArm.PCA9635Led [2]/10;
  356. gtArm.PCA9635LedEn |=0x01;
  357. break;
  358. case '1':
  359. gtArm.PCA9635Led[3]=(int)((s_u8ArmRxBuf[7]-0x30)*10+(s_u8ArmRxBuf[8]-0x30))*256/100; //R
  360. gtArm.PCA9635Led[4]=(int)((s_u8ArmRxBuf[9]-0x30)*10+(s_u8ArmRxBuf[10]-0x30))*256/100; //G
  361. gtArm.PCA9635Led[5]=(int)((s_u8ArmRxBuf[11]-0x30)*10+(s_u8ArmRxBuf[12]-0x30))*256/100; //B
  362. gtArm.PCA9635LedEn |=0x02;
  363. gtArm.Ledhm1620AllDate &=0xfdfdfd;
  364. if ( gtArm.PCA9635Led [3]>0 ) { //R
  365. gtArm.Ledhm1620AllDate |=0x200;
  366. }
  367. if ( gtArm.PCA9635Led [4]>0) { //G
  368. gtArm.Ledhm1620AllDate |=0x02;
  369. }
  370. if ( gtArm.PCA9635Led [5]>0 ) { //B
  371. gtArm.Ledhm1620AllDate |=0x20000;
  372. }
  373. gtArm.ledhm1620pwmLevel[3] = gtArm.PCA9635Led [3]/10;
  374. gtArm.ledhm1620pwmLevel[4] = gtArm.PCA9635Led [4]/10;
  375. gtArm.ledhm1620pwmLevel[5] = gtArm.PCA9635Led [5]/10;
  376. break;
  377. case '2':
  378. gtArm.PCA9635Led[6]=(int)((s_u8ArmRxBuf[7]-0x30)*10+(s_u8ArmRxBuf[8]-0x30))*256/100; //R
  379. gtArm.PCA9635Led[7]=(int)((s_u8ArmRxBuf[9]-0x30)*10+(s_u8ArmRxBuf[10]-0x30))*256/100; //G
  380. gtArm.PCA9635Led[8]=(int)((s_u8ArmRxBuf[11]-0x30)*10+(s_u8ArmRxBuf[12]-0x30))*256/100; //B
  381. gtArm.PCA9635LedEn |=0x04;
  382. gtArm.Ledhm1620AllDate &=0xfbfbfb;
  383. if ( gtArm.PCA9635Led [6]>0 ) { //R
  384. gtArm.Ledhm1620AllDate |=0x400;
  385. }
  386. if ( gtArm.PCA9635Led [7]>0 ) { //G
  387. gtArm.Ledhm1620AllDate |=0x04;
  388. }
  389. if ( gtArm.PCA9635Led [8]>0 ) { //B
  390. gtArm.Ledhm1620AllDate |=0x40000;
  391. }
  392. gtArm.ledhm1620pwmLevel[6] = gtArm.PCA9635Led [6]/10;
  393. gtArm.ledhm1620pwmLevel[7] = gtArm.PCA9635Led [7]/10;
  394. gtArm.ledhm1620pwmLevel[8] = gtArm.PCA9635Led [8]/10;
  395. break;
  396. case '3':
  397. gtArm.PCA9635Led[9]=(int)((s_u8ArmRxBuf[7]-0x30)*10+(s_u8ArmRxBuf[8]-0x30))*256/100; //R
  398. gtArm.PCA9635Led[10]=(int)((s_u8ArmRxBuf[9]-0x30)*10+(s_u8ArmRxBuf[10]-0x30))*256/100; //G
  399. gtArm.PCA9635Led[11]=(int)((s_u8ArmRxBuf[11]-0x30)*10+(s_u8ArmRxBuf[12]-0x30))*256/100; //B
  400. gtArm.PCA9635LedEn |=0x08;
  401. gtArm.Ledhm1620AllDate &=0xf7f7f7;
  402. if ( gtArm.PCA9635Led [9]>0 ) { //R
  403. gtArm.Ledhm1620AllDate |=0x800;
  404. }
  405. if ( gtArm.PCA9635Led [10]>0 ) { //G
  406. gtArm.Ledhm1620AllDate |=0x08;
  407. }
  408. if ( gtArm.PCA9635Led [11]>0 ) { //B
  409. gtArm.Ledhm1620AllDate |=0x80000;
  410. }
  411. gtArm.ledhm1620pwmLevel[9] = gtArm.PCA9635Led [9]/10;
  412. gtArm.ledhm1620pwmLevel[10] = gtArm.PCA9635Led [10]/10;
  413. gtArm.ledhm1620pwmLevel[11] = gtArm.PCA9635Led [11]/10;
  414. break;
  415. case '4':
  416. gtArm.PCA9635Led[12]=(int)((s_u8ArmRxBuf[7]-0x30)*10+(s_u8ArmRxBuf[8]-0x30))*256/100; //R
  417. gtArm.PCA9635Led[13]=(int)((s_u8ArmRxBuf[9]-0x30)*10+(s_u8ArmRxBuf[10]-0x30))*256/100; //G
  418. gtArm.PCA9635Led[14]=(int)((s_u8ArmRxBuf[11]-0x30)*10+(s_u8ArmRxBuf[12]-0x30))*256/100; //B
  419. gtArm.PCA9635LedEn |=0x10;
  420. gtArm.Ledhm1620AllDate &=0xefefef;
  421. if ( gtArm.PCA9635Led [12]>0) { //R
  422. gtArm.Ledhm1620AllDate |=0x1000;
  423. }
  424. if ( gtArm.PCA9635Led [13]>0 ) { //G
  425. gtArm.Ledhm1620AllDate |=0x10;
  426. }
  427. if ( gtArm.PCA9635Led [14]>0 ) { //B
  428. gtArm.Ledhm1620AllDate |=0x100000;
  429. }
  430. gtArm.ledhm1620pwmLevel[12] = gtArm.PCA9635Led [12]/10;
  431. gtArm.ledhm1620pwmLevel[13] = gtArm.PCA9635Led [13]/10;
  432. gtArm.ledhm1620pwmLevel[14] = gtArm.PCA9635Led [14]/10;
  433. break;
  434. default:
  435. break;
  436. }
  437. #endif
  438. }
  439. /*----------------------------------------------------------------------
  440. // Function name : s_frmArmRxUled
  441. // Input parameter :
  442. // Output parameter :
  443. // Use Function :
  444. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  445. ----------------------------------------------------------------------*/
  446. static void s_frmArmRxUled(void)
  447. {
  448. U08 u8cnt =0;
  449. u8cnt = s_u8ArmRxBuf[6] - 0x30;
  450. if (u8cnt >2) {
  451. u8cnt =2;
  452. }
  453. gtArm.Uled = u8cnt;
  454. }
  455. /*----------------------------------------------------------------------
  456. // Function name : s_frmArmRxUled
  457. // Input parameter :
  458. // Output parameter :
  459. // Use Function :
  460. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  461. ----------------------------------------------------------------------*/
  462. static void s_frmArmRxRelay(void)
  463. {
  464. U08 u8cnt =0;
  465. u8cnt = s_u8ArmRxBuf[6] - 0x30;
  466. if (u8cnt == 0) {
  467. gtArm.Relay[0 ]= s_u8ArmRxBuf[8];
  468. if ( gtArm.Relay[0 ] == '0') {
  469. RELAY_OFF;
  470. } else if ( gtArm.Relay[0 ] == '1') {
  471. RELAY_ON;
  472. }
  473. } else if (u8cnt == 1) {
  474. gtArm.Relay[1 ]= s_u8ArmRxBuf[8];
  475. } else {
  476. gtArm.Relay[2 ]= s_u8ArmRxBuf[8];
  477. }
  478. }
  479. /*----------------------------------------------------------------------
  480. // Function name : s_frmArmRxUled
  481. // Input parameter :
  482. // Output parameter :
  483. // Use Function :
  484. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  485. ----------------------------------------------------------------------*/
  486. static void s_frmArmRxDoorLed(void)
  487. {
  488. gtArm.DoorLed[0] = s_u8ArmRxBuf[9]-0x30;
  489. gtArm.DoorLed[1] = s_u8ArmRxBuf[10]-0x30;
  490. gtArm.DoorLed[2] = s_u8ArmRxBuf[11]-0x30;
  491. }
  492. /*----------------------------------------------------------------------
  493. // Function name : s_frmArmRxUled
  494. // Input parameter :
  495. // Output parameter :
  496. // Use Function :
  497. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  498. ----------------------------------------------------------------------*/
  499. static void s_frmArmRxSip(void)
  500. {
  501. if(s_u8ArmRxBuf[5]=='0')
  502. {
  503. gtArm.RTL8152_flag=0;
  504. }
  505. else if(s_u8ArmRxBuf[5]=='1')
  506. {
  507. gtArm.RTL8152_flag=1;
  508. }
  509. else if(s_u8ArmRxBuf[5]=='2')
  510. {
  511. gtArm.RTL8152_flag=2;
  512. }
  513. }
  514. /*----------------------------------------------------------------------
  515. // Function name : s_frmArmRxID
  516. // Input parameter :
  517. // Output parameter :
  518. // Use Function :
  519. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  520. ----------------------------------------------------------------------*/
  521. static void s_frmArmRxID(void)
  522. {
  523. OSQPost(ArmMsgQueue, ARM_MSG_ID, 0);
  524. }
  525. /*----------------------------------------------------------------------
  526. // Function name : s_frmArmRxID
  527. // Input parameter :
  528. // Output parameter :
  529. // Use Function :
  530. // Reserve date : 18:35pm, 17.JAN.2020, written by dwd
  531. ----------------------------------------------------------------------*/
  532. static void s_frmArmRxCallLed(void)
  533. {
  534. gtArm.callled_red = s_u8ArmRxBuf[9] -0x30;
  535. gtArm.callled_yel = s_u8ArmRxBuf[10] -0x30;
  536. }
  537. /*----------------------------------------------------------------------
  538. // Function name : s_frmArmRxID
  539. // Input parameter :
  540. // Output parameter :
  541. // Use Function :
  542. // Reserve date : 18:35pm, 17.JAN.2020, written by dwd
  543. ----------------------------------------------------------------------*/
  544. static void s_frmArmRxAsk(void)
  545. {
  546. if (s_u8ArmRxBuf[5] ==0x49) {
  547. OSQPost(ArmMsgQueue, ARM_MSG_ID, 0);
  548. } else if (s_u8ArmRxBuf[5] ==0x56) {
  549. OSQPost(ArmMsgQueue, ARM_MSG_VER, 0);
  550. }
  551. }
  552. static void s_frmArmRxNetReset(void)
  553. {
  554. if (s_u8ArmRxBuf[10] == '0') {
  555. POWER_RESET_OFF;
  556. } else if(s_u8ArmRxBuf[10] == '1') {
  557. POWER_RESET_ON;
  558. }
  559. }
  560. void LED_ACK_TASK(U16 prm)
  561. {
  562. U08 u8keyp =0;
  563. u8keyp = HI_BYTE(prm);
  564. gtArm.LedKeyState = u8keyp;
  565. if (u8keyp == 14) { //取消所有事件
  566. LED_R_OFF;
  567. } else if (u8keyp == 13) { //换药
  568. LED_BLUE_ON;
  569. } else if (u8keyp == 12) {
  570. LED_RED_ON;
  571. } else if (u8keyp == 11) {
  572. LED_GREEN_ON;
  573. }
  574. }
  575. /*----------------------------------------------------------------------
  576. // Function uses : s_frmArmTxKey
  577. // Input parameter :
  578. // Output parameter :
  579. // Use Function : SWC key code.
  580. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  581. ----------------------------------------------------------------------*/
  582. static void s_frmArmTxKey(U16 prm)
  583. {
  584. U08 *buf = (U08*)NULL;
  585. buf = &s_u8ArmTxBuf[0]; /* Obtain pointer to Tx buffer */
  586. *buf++ = '$';
  587. #ifdef WDFJKEY_MAC_ADD
  588. *buf++ = HI_BYTE( gtArm.FJKeymac); //dwdtest
  589. *buf++ = LO_BYTE( gtArm.FJKeymac); //dwdtest
  590. #endif
  591. *buf++ = 'K';
  592. *buf++ = 'E';
  593. *buf++ = 'Y';
  594. if (HI_BYTE(prm)==8) {
  595. *buf++ = 0x30+0x0b;
  596. } else if (HI_BYTE(prm)==9) {
  597. *buf++ = 0x30+0x0c;
  598. }else if (HI_BYTE(prm)==0xa) {
  599. *buf++ = 0x30+0x0d;
  600. }else if (HI_BYTE(prm)==0xb) {
  601. *buf++ = 0x30+0x0e;
  602. } else {
  603. *buf++ = 0x30+HI_BYTE(prm);
  604. }
  605. *buf++ = ',';
  606. gtArm.startworkflag =1;
  607. if ((HI_BYTE(prm)<5) && (LO_BYTE(prm) == 0X02)){ //dwd200422
  608. prm &= 0xff00;
  609. prm |= 0x01;
  610. }
  611. *buf++ = 0X30+LO_BYTE(prm);
  612. // LED_ACK_TASK(prm);
  613. *buf++ = '#';
  614. #ifdef WDFJKEY_MAC_ADD
  615. Uart1PutChar(s_u8ArmTxBuf, 11);
  616. #else
  617. Uart1PutChar(s_u8ArmTxBuf, 9);
  618. #endif
  619. }
  620. /*----------------------------------------------------------------------
  621. // Function uses : s_frmArmTxID
  622. // Input parameter :
  623. // Output parameter :
  624. // Use Function : DEVICE ID
  625. // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
  626. ----------------------------------------------------------------------*/
  627. static void s_frmArmTxID(U16 prm)
  628. {
  629. U08 *buf = (U08*)NULL;
  630. U08 u8cnt =0;
  631. buf = &s_u8ArmTxBuf[0]; /* Obtain pointer to Tx buffer */
  632. #ifdef WDFJKEY_MAC_ADD
  633. *buf++ = HI_BYTE( gtArm.FJKeymac); //dwdtest
  634. *buf++ = LO_BYTE( gtArm.FJKeymac); //dwdtest
  635. #endif
  636. *buf++ = '$';
  637. *buf++ = 'I';
  638. *buf++ = 'D';
  639. *buf++ = ',';
  640. for (u8cnt = 0;u8cnt <15;u8cnt ++) {
  641. // *buf ++ = DeviceID[u8cnt];
  642. }
  643. // *buf++ = 0X30+LO_BYTE(prm);
  644. *buf++ = '1';
  645. *buf++ = '#';
  646. #ifdef WDFJKEY_MAC_ADD
  647. Uart1PutChar(s_u8ArmTxBuf, 23);
  648. #else
  649. Uart1PutChar(s_u8ArmTxBuf, 21);
  650. #endif
  651. }
  652. /*----------------------------------------------------------------------
  653. // Function uses : s_frmArmTxNFC
  654. // Input parameter :
  655. // Output parameter :
  656. // Use Function :
  657. // Reserve date : 11:50am, 6.Api.2023, written by dwd
  658. ----------------------------------------------------------------------*/
  659. static void s_frmArmTxNFC(U16 prm)
  660. {
  661. U08 *buf = (U08*)NULL;
  662. U08 u8cnt =0;
  663. U08 checksm = 0;
  664. U08 len = 0;
  665. buf = &s_u8ArmTxBuf[0]; /* Obtain pointer to Tx buffer */
  666. *buf++ = s_u8NfcRxBuf[0]; //0XFE
  667. *buf++ = HI_BYTE( gtArm.FJKeymac);
  668. checksm += HI_BYTE( gtArm.FJKeymac);
  669. *buf++ = LO_BYTE( gtArm.FJKeymac);
  670. checksm += LO_BYTE( gtArm.FJKeymac);
  671. len = s_u8NfcRxBuf[1];
  672. *buf++ = s_u8NfcRxBuf[1];
  673. checksm += s_u8NfcRxBuf[1];
  674. for (u8cnt = 0;u8cnt <len;u8cnt ++) {
  675. *buf ++ = s_u8NfcRxBuf[u8cnt+2];
  676. checksm += s_u8NfcRxBuf[u8cnt+2];
  677. }
  678. checksm ^= 0xFF;
  679. *buf++ = checksm;
  680. len += 5;
  681. Uart2PutChar(s_u8ArmTxBuf, len); //另一路串口发出
  682. }
  683. static void s_frmArmTxVersion(U16 prm)
  684. {
  685. U08 *buf = (U08*)NULL;
  686. U08 u8cnt =0;
  687. buf = &s_u8ArmTxBuf[0]; /* Obtain pointer to Tx buffer */
  688. #ifdef WDFJKEY_MAC_ADD
  689. *buf++ = HI_BYTE( gtArm.FJKeymac); //dwdtest
  690. *buf++ = LO_BYTE( gtArm.FJKeymac); //dwdtest
  691. #endif
  692. *buf++ = '$';
  693. *buf++ = 'V';
  694. *buf++ = ',';
  695. for (u8cnt = 0;u8cnt <15;u8cnt ++) {
  696. *buf ++ = DeviceVisionInfo[u8cnt];
  697. }
  698. // *buf++ = 0X30+LO_BYTE(prm);
  699. *buf++ = 'F';
  700. *buf++ = '#';
  701. #ifdef WDFJKEY_MAC_ADD
  702. Uart1PutChar(s_u8ArmTxBuf, 22);
  703. #else
  704. Uart1PutChar(s_u8ArmTxBuf, 20);
  705. #endif
  706. }
  707. //==============================================================
  708. // End Of File
  709. //==============================================================