mapp_can_FJ.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. //==================================================================
  2. //
  3. // Filename: mapp_can.c
  4. // Description: CAN2 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 "main.h"
  21. #include "mapp_ami.h"
  22. #include "mapp_can_honda.h"
  23. #include "mapp_arm.h"
  24. #include "mapp_ext.h"
  25. #include "mapp_gpio.h"
  26. #include "mapp_key.h"
  27. #include "mapp_msg.h"
  28. #include "mapp_can.h"
  29. #include "app_avm.h"
  30. /*------------------------------------------------------------------------------
  31. * D E F I N E
  32. *------------------------------------------------------------------------------*/
  33. /*--- ADC1 DMA base address ---*/
  34. /*------------------------------------------------------------------------------
  35. * S T R U C T
  36. *------------------------------------------------------------------------------*/
  37. /*------------------------------------------------------------------------------
  38. * S T A T I C - V A R I A B L E S
  39. *------------------------------------------------------------------------------*/
  40. /*------------------------------------------------------------------------------
  41. * G L O B A L
  42. *------------------------------------------------------------------------------*/
  43. /*------------------------------------------------------------------------------
  44. * P R O T O T Y P E
  45. *------------------------------------------------------------------------------*/
  46. static void s_frmCanHondaRxReverse(void);
  47. static void s_frmCanHondaRxEps(void);
  48. static void s_frmCanHondaRxRadar(void);
  49. static void s_frmCanHondaFuncSwc(void);
  50. static void s_frmCanHondaFuncSwc1(void);
  51. static void s_frmCanHondaFuncRled(void);
  52. static void s_frmCanHondaRxIll(void);
  53. static U08 CanHondaRadarToDvd(U08 dat);
  54. static void s_frmCanHondaFuncClimate(void);
  55. static void s_frmCanHondaFuncSpeed(void);
  56. static void s_frmCanHondaFuncLeftDoor(void);
  57. static void s_frmCanHondaFuncRightDoor(void);
  58. static void s_frmCanHondaFuncBagDoor(void);
  59. static void s_frmCanHondaFuncBagDoor(void);
  60. static void s_frmCanHondaFuncEngineDoor(void);
  61. static void s_frmCanHondaRxSource(void);
  62. //------------------------------------------------------------------
  63. #define CAN1HONDA_CFG_TBL_SIZE (14)
  64. static const T_CANHONDA_CFG arryCan1HondaRxCfgTbl[CAN1HONDA_CFG_TBL_SIZE] =
  65. {
  66. {0x12f91550, s_frmCanHondaFuncSwc},
  67. {0x12f94f50, s_frmCanHondaFuncSwc1},
  68. {0x12F8A79A, s_frmCanHondaRxRadar},
  69. //{0x12f8E054, s_frmCanFuncBt},
  70. {0x12F97150, s_frmCanHondaRxEps},
  71. {0x12F81018, s_frmCanHondaRxReverse},
  72. //{0x0EF97B51, s_frmCanRxACInfo},
  73. {0x0EF98751, s_frmCanHondaFuncClimate},
  74. {0x0AF87018, s_frmCanHondaFuncRled}, //转向灯
  75. {0x12F85450, s_frmCanHondaRxIll},
  76. {0X12F85050, s_frmCanHondaFuncSpeed}, /*8*/
  77. {0x12F83018, s_frmCanHondaFuncLeftDoor}, /*9*/
  78. {0x12F84018, s_frmCanHondaFuncRightDoor}, /*10*/
  79. {0x12F84318, s_frmCanHondaFuncBagDoor}, /*11*/
  80. {0x0AF81118, s_frmCanHondaFuncEngineDoor}, /*12*/
  81. {0x12F8EC54, s_frmCanHondaRxSource}, /*13*/
  82. };
  83. /*----------------------------------------------------------------------
  84. // Function uses : CanCfgInit
  85. // Input parameter :
  86. // Output parameter :
  87. // Use Function : Configuration CAN2 system.
  88. // Reserve date : 11:47am, 25.Jan.2013, written by Sirius
  89. ----------------------------------------------------------------------*/
  90. void CanHondaFilterInit(void)
  91. {
  92. CAN_FilterInitTypeDef CAN_FilterInitStructure;
  93. /* CAN1 filter init */
  94. CAN_FilterInitStructure.CAN_FilterNumber = 0;
  95. CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  96. CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
  97. CAN_FilterInitStructure.CAN_FilterIdHigh = (U16)(((U32)arryCan1HondaRxCfgTbl[0].frmid<<3)>>16);
  98. CAN_FilterInitStructure.CAN_FilterIdLow = (U16)((((U32)arryCan1HondaRxCfgTbl[0].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  99. CAN_FilterInitStructure.CAN_FilterMaskIdHigh =(U16)(((U32)arryCan1HondaRxCfgTbl[1].frmid<<3)>>16);
  100. CAN_FilterInitStructure.CAN_FilterMaskIdLow = (U16)((((U32)arryCan1HondaRxCfgTbl[1].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  101. CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
  102. CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  103. CAN_FilterInit(&CAN_FilterInitStructure);
  104. CAN_FilterInitStructure.CAN_FilterNumber = 1;
  105. CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  106. CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
  107. CAN_FilterInitStructure.CAN_FilterIdHigh = (U16)(((U32)arryCan1HondaRxCfgTbl[2].frmid<<3)>>16);
  108. CAN_FilterInitStructure.CAN_FilterIdLow = (U16)((((U32)arryCan1HondaRxCfgTbl[2].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  109. CAN_FilterInitStructure.CAN_FilterMaskIdHigh =(U16)(((U32)arryCan1HondaRxCfgTbl[3].frmid<<3)>>16);
  110. CAN_FilterInitStructure.CAN_FilterMaskIdLow = (U16)((((U32)arryCan1HondaRxCfgTbl[3].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  111. CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
  112. CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  113. CAN_FilterInit(&CAN_FilterInitStructure);
  114. CAN_FilterInitStructure.CAN_FilterNumber = 2;
  115. CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  116. CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
  117. CAN_FilterInitStructure.CAN_FilterIdHigh = (U16)(((U32)arryCan1HondaRxCfgTbl[4].frmid<<3)>>16);
  118. CAN_FilterInitStructure.CAN_FilterIdLow = (U16)((((U32)arryCan1HondaRxCfgTbl[4].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  119. CAN_FilterInitStructure.CAN_FilterMaskIdHigh =(U16)(((U32)arryCan1HondaRxCfgTbl[5].frmid<<3)>>16);
  120. CAN_FilterInitStructure.CAN_FilterMaskIdLow =(U16)((((U32)arryCan1HondaRxCfgTbl[5].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  121. CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
  122. CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  123. CAN_FilterInit(&CAN_FilterInitStructure);
  124. CAN_FilterInitStructure.CAN_FilterNumber = 3;
  125. CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  126. CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
  127. CAN_FilterInitStructure.CAN_FilterIdHigh = (U16)(((U32)arryCan1HondaRxCfgTbl[6].frmid<<3)>>16);
  128. CAN_FilterInitStructure.CAN_FilterIdLow = (U16)((((U32)arryCan1HondaRxCfgTbl[6].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  129. CAN_FilterInitStructure.CAN_FilterMaskIdHigh =(U16)(((U32)arryCan1HondaRxCfgTbl[7].frmid<<3)>>16);
  130. CAN_FilterInitStructure.CAN_FilterMaskIdLow =(U16)((((U32)arryCan1HondaRxCfgTbl[7].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  131. CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
  132. CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  133. CAN_FilterInit(&CAN_FilterInitStructure);
  134. CAN_FilterInitStructure.CAN_FilterNumber = 4;
  135. CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  136. CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
  137. CAN_FilterInitStructure.CAN_FilterIdHigh = (U16)(((U32)arryCan1HondaRxCfgTbl[8].frmid<<3)>>16);
  138. CAN_FilterInitStructure.CAN_FilterIdLow = (U16)((((U32)arryCan1HondaRxCfgTbl[8].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  139. CAN_FilterInitStructure.CAN_FilterMaskIdHigh =(U16)(((U32)arryCan1HondaRxCfgTbl[9].frmid<<3)>>16);
  140. CAN_FilterInitStructure.CAN_FilterMaskIdLow =(U16)((((U32)arryCan1HondaRxCfgTbl[9].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  141. CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
  142. CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  143. CAN_FilterInit(&CAN_FilterInitStructure);
  144. CAN_FilterInitStructure.CAN_FilterNumber = 5;
  145. CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  146. CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
  147. CAN_FilterInitStructure.CAN_FilterIdHigh = (U16)(((U32)arryCan1HondaRxCfgTbl[10].frmid<<3)>>16);
  148. CAN_FilterInitStructure.CAN_FilterIdLow = (U16)((((U32)arryCan1HondaRxCfgTbl[10].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  149. CAN_FilterInitStructure.CAN_FilterMaskIdHigh =(U16)(((U32)arryCan1HondaRxCfgTbl[11].frmid<<3)>>16);
  150. CAN_FilterInitStructure.CAN_FilterMaskIdLow =(U16)((((U32)arryCan1HondaRxCfgTbl[11].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  151. CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
  152. CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  153. CAN_FilterInit(&CAN_FilterInitStructure);
  154. CAN_FilterInitStructure.CAN_FilterNumber = 6;
  155. CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  156. CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
  157. CAN_FilterInitStructure.CAN_FilterIdHigh = (U16)(((U32)arryCan1HondaRxCfgTbl[12].frmid<<3)>>16);
  158. CAN_FilterInitStructure.CAN_FilterIdLow = (U16)((((U32)arryCan1HondaRxCfgTbl[12].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  159. CAN_FilterInitStructure.CAN_FilterMaskIdHigh =(U16)(((U32)arryCan1HondaRxCfgTbl[13].frmid<<3)>>16);
  160. CAN_FilterInitStructure.CAN_FilterMaskIdLow =(U16)((((U32)arryCan1HondaRxCfgTbl[13].frmid<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
  161. CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
  162. CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  163. CAN_FilterInit(&CAN_FilterInitStructure);
  164. }
  165. /*----------------------------------------------------------------------
  166. // Function uses : CanHondaMsgAnalyseTask
  167. // Input parameter :
  168. // Output parameter :
  169. // Use Function : deque can message received from other node.
  170. // Reserve date : 14:11pm, 29.Jan.2013, written by Sirius
  171. ----------------------------------------------------------------------*/
  172. void CanHondaMsgAnalyseTask(U32 frmid)
  173. {
  174. U08 u8Cnt = 0;
  175. for (u8Cnt = 0; u8Cnt < CAN1HONDA_CFG_TBL_SIZE; u8Cnt++) {
  176. if(frmid==arryCan1HondaRxCfgTbl[u8Cnt].frmid) {
  177. arryCan1HondaRxCfgTbl[u8Cnt].frmfunc();
  178. break;
  179. }
  180. }
  181. }
  182. /*----------------------------------------------------------------------
  183. // Function uses : CanTaskTmr
  184. // Input parameter :
  185. // Output parameter :
  186. // Use Function :
  187. // Reserve date : 09:11am, 30.Aug.2012, written by Sirius
  188. ----------------------------------------------------------------------*/
  189. void CanHondaTaskTmr(void)
  190. {
  191. }
  192. static void s_frmCanHondaFuncSwc(void)
  193. {
  194. T_HONDAKEY_CODE keycode = {NO_HONDAKEY};
  195. if(!gtAmi.basic.ignit) return;
  196. while (TRUE) {
  197. /*< NAVI >*/
  198. if (gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[3] &0x08) {
  199. keycode = HONDAKEY_SWITCHER; //HONDAKEY_PICKUP
  200. break;
  201. }
  202. keycode = NO_HONDAKEY;
  203. break;
  204. }
  205. KeySetProperty(SWC_CAN1, keycode);
  206. }
  207. /*----------------------------------------------------------------------
  208. // Function uses : s_frmCanRxPanel
  209. // Input parameter :
  210. // Output parameter :
  211. // Use Function : 100ms timer.
  212. // Reserve date : 15:20pm, 16.Dec.2016, written by dwd
  213. ----------------------------------------------------------------------*/
  214. static void s_frmCanHondaFuncSwc1(void)
  215. {
  216. T_HONDAKEY_CODE keycode = {NO_HONDAKEY};
  217. if(!gtAmi.basic.ignit) return;
  218. while (TRUE) {
  219. /*< NAVI >*/
  220. if (gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[2] &0x08) {
  221. keycode = HONDAKEY_SWITCHER; //HONDAKEY_PICKUP
  222. break;
  223. }
  224. keycode = NO_HONDAKEY;
  225. break;
  226. }
  227. KeySetProperty(SWC_CAN1, keycode);
  228. }
  229. /*----------------------------------------------------------------------
  230. // Function uses : s_frmCanRxReverse
  231. // Input parameter :
  232. // Output parameter :
  233. // Use Function : 40ms cycle.
  234. // Reserve date : 00:32am, 22.Nov.2011, written by Sirius
  235. //---------------------------------------------------------------------*/
  236. static void s_frmCanHondaRxReverse(void)
  237. {
  238. U08 u8prm = 0;
  239. static U08 u8ReverseCnt = 0;
  240. static U08 u8RevPowerCnt = 0;
  241. static U08 revflag = 0;
  242. static U08 revsourceflag =0;
  243. #define REVERSE_DELAY (3) /* about 500ms delay */
  244. u8prm = (U08)(gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[2] &0xA0);
  245. if (u8prm ==0xA0) {
  246. gtAvm.basic.DangerLight =1;
  247. } else {
  248. gtAvm.basic.DangerLight =0;
  249. }
  250. u8prm = (U08)(gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[3] &0x80);
  251. if (u8prm) {
  252. u8ReverseCnt++;
  253. GpioCameraPowerOutputCfg(SET);
  254. gtAvm.basic.rev =1;
  255. if (u8ReverseCnt >= REVERSE_DELAY && revflag == 0){
  256. u8ReverseCnt = 0;
  257. revflag = 1;
  258. gtAmi.basic.rev = 1;
  259. if ((gtArm.facset.camera ==CAM_TYPE_CAN) ||(gtArm.facset.camera ==CAM_TYPE_CANVGA)){
  260. OSQPost(ArmMsgQueue, ARM_MSG_BASIC, 0);
  261. OSQPost(ArmMsgQueue, ARM_MSG_EPS, 0);
  262. OSQPost(ArmMsgQueue, ARM_MSG_RADAR, 0);
  263. OSQPost(ArmMsgQueue, ARM_MSG_RADAR, 1);
  264. if (gtArm.slaver.cursrc == SRC_TYPE_ORIG) {
  265. revsourceflag =1;
  266. if (gtArm.facset.type == Cartype_HONDA_CIVICVN) { //原车进倒车加装
  267. OSQPost(AmiMsgQueue, AMI_MSG_HONDALIGHT, OS_TIMER_100MS);
  268. }
  269. OSQPost(AmiMsgQueue, AMI_MSG_SWTICH, OS_TIMER_500MS);
  270. }
  271. } else if ((gtArm.facset.camera ==CAM_TYPE_AVM) || (gtArm.facset.camera ==CAM_TYPE_AVMVGA)){
  272. OSQPost(ArmMsgQueue, ARM_MSG_BASIC, 0);
  273. OSQPost(ArmMsgQueue, ARM_MSG_EPS, 0);
  274. OSQPost(ArmMsgQueue, ARM_MSG_RADAR, 0);
  275. OSQPost(ArmMsgQueue, ARM_MSG_RADAR, 1);
  276. } else {
  277. if (gtArm.slaver.cursrc != SRC_TYPE_ORIG) {
  278. revsourceflag =1;
  279. if (gtArm.facset.type == Cartype_HONDA_CIVICVN) { //原车进倒车加装
  280. OSQPost(AmiMsgQueue, AMI_MSG_HONDALIGHT, OS_TIMER_100MS);
  281. }
  282. OSQPost(AmiMsgQueue, AMI_MSG_SWTICH, OS_TIMER_5MS);
  283. OSQPost(ArmMsgQueue, ARM_MSG_BASIC, 0);
  284. }
  285. }
  286. }
  287. } else {
  288. u8ReverseCnt = 0;
  289. gtAvm.basic.rev =0;
  290. if (revflag ==0){
  291. u8RevPowerCnt ++;
  292. if (u8RevPowerCnt >5) {
  293. u8RevPowerCnt =0;
  294. GpioCameraPowerOutputCfg(RESET);
  295. }
  296. return;
  297. }
  298. u8RevPowerCnt =0;
  299. revflag = 0;
  300. gtAmi.basic.rev = 0;
  301. if ((gtArm.facset.camera == CAM_TYPE_AVM) ||(gtArm.facset.camera ==CAM_TYPE_AVMVGA)){
  302. OSQPost(ArmMsgQueue, ARM_MSG_BASIC, 0);
  303. return;
  304. }
  305. if (revsourceflag) {
  306. if (gtArm.facset.type == Cartype_HONDA_CIVICVN) { //原车进倒车加装
  307. OSQPost(AmiMsgQueue, AMI_MSG_HONDALIGHT, OS_TIMER_100MS);
  308. }
  309. OSQPost(AmiMsgQueue, AMI_MSG_SWTICH, OS_TIMER_5MS);
  310. }
  311. revsourceflag =0;
  312. OSQPost(ArmMsgQueue, ARM_MSG_BASIC, 0);
  313. OSQPost(ArmMsgQueue, ARM_MSG_SRC, 0);
  314. }
  315. }
  316. /*----------------------------------------------------------------------
  317. // Function uses : s_frmCanRxReverse
  318. // Input parameter :
  319. // Output parameter :
  320. // Use Function : 40ms cycle.
  321. // Reserve date : 00:32am, 22.Nov.2011, written by Sirius
  322. //---------------------------------------------------------------------*/
  323. static void s_frmCanHondaRxIll(void)
  324. {
  325. U08 tempill = 0;
  326. if(gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[0]&0x40){
  327. gtAmi.basic.ill=1;
  328. }else{
  329. gtAmi.basic.ill=0;
  330. }
  331. if (tempill != gtAmi.basic.ill ) {
  332. gtAmi.basic.ill = tempill;
  333. // OSQPost(ArmMsgQueue, ARM_MSG_BASIC, 0);
  334. }
  335. }
  336. /*----------------------------------------------------------------------
  337. // Function uses : s_frmCanRxEps
  338. // Input parameter :
  339. // Output parameter :
  340. // Use Function : Get Car Swc Angle from can,120ms cycle
  341. // 11:46am, 23.May.2013, modified by slzhang
  342. //--------------------------------------------------------------------*/
  343. static void s_frmCanHondaRxEps(void)
  344. {
  345. U16 epsflag = 0;
  346. static U08 lastEps=0;
  347. epsflag = TO_WORD(gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[1],gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[2]);
  348. if (lastEps !=gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[1] ) { //转角度约为正负0x1050
  349. lastEps =gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[1] ;
  350. if (epsflag &0x8000) {
  351. gtAmi.eps.signch|= 0x01;
  352. epsflag = ~ epsflag;
  353. epsflag +=1;
  354. } else {
  355. gtAmi.eps.signch &=0xfe;
  356. }
  357. epsflag = (U16)(epsflag *2/3);
  358. if (epsflag >= 0xa00) {
  359. epsflag =0xa00;
  360. }
  361. gtAmi.eps.val = epsflag;
  362. if(gtAmi.basic.rev) {
  363. OSQInquery(ArmMsgQueue, ARM_MSG_EPS, 0);
  364. }
  365. }
  366. }
  367. //--------------------------------------------------
  368. static U08 CanHondaRadarToDvd(U08 dat)
  369. {
  370. if(dat==0x01)
  371. return (U08)0x3c;
  372. else if(dat==0x02)
  373. return (U08)0x2d;
  374. else if(dat==0x03)
  375. return (U08)0x1e;
  376. else if(dat==0x04)
  377. return (U08)0x0f;
  378. else
  379. return (U08)0xa6;
  380. }
  381. /*----------------------------------------------------------------------
  382. // Function name : s_frmCanRxRadar
  383. // Input parameter :
  384. // Output parameter :
  385. // Use Function :
  386. // Reserve date : 14:29pm, 15.Dec.2014, written by Charlie
  387. ----------------------------------------------------------------------*/
  388. static void s_frmCanHondaRxRadar(void)
  389. {
  390. T_AMI_RADAR prm = {0};
  391. prm.rl = (U08)((gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[1] & 0xf0) >> 4);
  392. prm.rl=CanHondaRadarToDvd(prm.rl);
  393. prm.rlm = (U08)(gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[2] & 0x0f);
  394. prm.rlm=CanHondaRadarToDvd(prm.rlm);
  395. //prm.rrm=prm.rlm;
  396. prm.rr = (U08)(gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[1] & 0x0f);
  397. prm.rr=CanHondaRadarToDvd(prm.rr);
  398. prm.fl = (U08)((gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[0] & 0xf0) >> 4);
  399. prm.fl=CanHondaRadarToDvd(prm.fl);
  400. prm.flm = (U08)((gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[2] & 0xf0)>>4);
  401. prm.flm=CanHondaRadarToDvd(prm.flm);
  402. //prm.frm=prm.flm;
  403. prm.fr = (U08)(gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[0] & 0x0f);
  404. prm.fr=CanHondaRadarToDvd(prm.fr);
  405. if ((gtAmi.radar.rl != prm.rl) ||
  406. (gtAmi.radar.rlm != prm.rlm) ||
  407. (gtAmi.radar.rr != prm.rr)
  408. ){
  409. gtAmi.radar.rl = prm.rl;
  410. gtAmi.radar.rlm = prm.rlm;
  411. gtAmi.radar.rrm = prm.rlm;
  412. gtAmi.radar.rr = prm.rr;
  413. OSQPost(ArmMsgQueue, ARM_MSG_RADAR, 0);
  414. }
  415. if((gtAmi.radar.fl != prm.fl) ||
  416. (gtAmi.radar.flm != prm.flm) ||
  417. (gtAmi.radar.fr != prm.fr)) {
  418. gtAmi.radar.fl = prm.fl;
  419. gtAmi.radar.flm = prm.flm;
  420. gtAmi.radar.frm = prm.flm;
  421. gtAmi.radar.fr = prm.fr;
  422. OSQPost(ArmMsgQueue, ARM_MSG_RADAR, 1);
  423. }
  424. }
  425. static void s_frmCanHondaFuncClimate(void)
  426. {
  427. U08 buff;
  428. if(gtAmi.basic.rev||gtAmi.basic.avm) {
  429. return;
  430. }
  431. buff=(U08)(gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[2]&0x01);
  432. if (buff !=gtAmi.acclimate) {
  433. gtAmi.acclimate = buff;
  434. if ( gtAmi.acclimate) {
  435. VideoSwitchBySource (SRC_TYPE_ORIG);
  436. }
  437. // OSQPost(ArmMsgQueue, ARM_MSG_AC, 0);
  438. }
  439. }
  440. static void s_frmCanHondaFuncRled(void)
  441. {
  442. U08 u8prm = 0;
  443. static U08 turnflag = 0;
  444. u8prm = (U08)(gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[1] &0xC0);
  445. if(u8prm&0x40){
  446. gtAvm.basic.TurnRight =0x01;
  447. gtAmi.basic.R_video=1;
  448. }else {
  449. gtAvm.basic.TurnRight =0x00;
  450. gtAmi.basic.R_video=0;
  451. }
  452. if(u8prm&0x80){
  453. gtAvm.basic.TurnLeft=0x01;
  454. } else {
  455. gtAvm.basic.TurnLeft=0x00;
  456. }
  457. #if 0
  458. if ((!gtAmi.basic.R_videoEn) || (gtAmi.basic.rev ) || (gtAmi.basic.avm)) {
  459. turnflag = 0;
  460. return;
  461. }
  462. if (turnflag != gtAmi.basic.R_video) {
  463. turnflag = gtAmi.basic.R_video;
  464. if (gtAmi.basic.R_video) {
  465. VideoSwitchBySource(SRC_TYPE_ORIG);
  466. } else {
  467. VideoSwitchBySource( gtArm.slaver.eldsrc);
  468. }
  469. }
  470. #endif
  471. }
  472. /*----------------------------------------------------------------------
  473. // Function uses : s_frmCanFuncSpeed
  474. // Input parameter :
  475. // Output parameter :
  476. // Use Function : for None-can bus car.
  477. // Reserve date : 19:58pm, 2.July.2013, written by Sirius
  478. //---------------------------------------------------------------------*/
  479. static void s_frmCanHondaFuncSpeed(void) //预留车速信息
  480. {
  481. U08 bufval = 0;
  482. bufval = (U08) (gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[0]);
  483. gtAmi.basic.CarSpeed = bufval;}
  484. static void s_frmCanHondaFuncRightDoor(void)
  485. {
  486. U08 bufval = 0;
  487. bufval = (U08) (gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[0]);
  488. if(bufval&0x40){//右前
  489. gtAmi.basic.cardoor |=0x02;
  490. }else{
  491. gtAmi.basic.cardoor &=0xfd;
  492. }
  493. if(bufval&0x10){//右后
  494. gtAmi.basic.cardoor |=0x08;
  495. }else{
  496. gtAmi.basic.cardoor &=0xf7;
  497. }
  498. }
  499. static void s_frmCanHondaFuncLeftDoor(void)
  500. {
  501. U08 bufval = 0;
  502. bufval = (U08) (gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[0]);
  503. if(bufval&0x80){//左前
  504. gtAmi.basic.cardoor |=0x01;
  505. }else{
  506. gtAmi.basic.cardoor &=0xfe;
  507. }
  508. if(bufval&0x20){//左后
  509. gtAmi.basic.cardoor |=0x04;
  510. }else{
  511. gtAmi.basic.cardoor &=0xfb;
  512. }
  513. }
  514. static void s_frmCanHondaFuncBagDoor(void)
  515. {
  516. U08 bufval = 0;
  517. bufval = (U08) (gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[0]);
  518. if(bufval&0x80){//后备箱
  519. gtAmi.basic.cardoor |=0x10;
  520. }else{
  521. gtAmi.basic.cardoor &=0xef;
  522. }
  523. }
  524. static void s_frmCanHondaFuncEngineDoor(void)
  525. {
  526. U08 bufval = 0;
  527. bufval = (U08) (gtCanRxBuf.msgQ[gtCanRxBuf.deque].Data[0]);
  528. if(bufval&0x80){//前盖
  529. gtAmi.basic.cardoor |=0x20;
  530. }else{
  531. gtAmi.basic.cardoor &=0xdf;
  532. }
  533. }
  534. static void s_frmCanHondaRxSource(void)
  535. {
  536. }
  537. /*------------------------------- E O F ----------------------------------------*/