mns.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /**
  2. *********************************************************************************************************
  3. * xmk guide
  4. *
  5. * (c) Copyright 2016-2020, hualijidian.com
  6. * All Rights Reserved
  7. *
  8. * @file mns.c
  9. * @author eric
  10. * @brief
  11. * @date 2017��7��22��
  12. * @version V0.0.1
  13. *********************************************************************************************************
  14. */
  15. #include "mns.h"
  16. #include "drv_can.h"
  17. #include "stdint.h"
  18. #include "env.h"
  19. #define mnsAddLcd(l) if(li < 3){lcds[li] = (l); li ++; si=MgsNA;}
  20. int16_t MnsParseCanHs(uint8_t *data, uint8_t branch, uint8_t * find) {
  21. uint16_t indicate = data[1], di;
  22. int16_t lcds[3];
  23. uint8_t i = 0, li = 0;
  24. int16_t si = MgsNA;
  25. indicate = (indicate << 7) + (data[0] >> 1);
  26. if(data[2]){
  27. indicate = indicate | 0x8000;
  28. }
  29. // LogBits("MnsParseCanHs:", indicate, 16);
  30. lcds[0] = MgsNA;
  31. lcds[1] = MgsNA;
  32. lcds[2] = MgsNA;
  33. for(i = 0;i < 16;i++){
  34. di = indicate & (1 << i);
  35. if(di > 0){
  36. if(si == MgsNA){
  37. si = i;
  38. }
  39. }else{
  40. if(si != MgsNA){
  41. mnsAddLcd((si + i - 16) * 5);
  42. }
  43. }
  44. }
  45. if(si != MgsNA){
  46. mnsAddLcd((si + i - 16) * 5);
  47. }
  48. if((branch == BRANCH_RIGHT) && (lcds[1] != MgsNA)){
  49. *find = True;
  50. return lcds[1];
  51. }else{
  52. if(lcds[0] != MgsNA){
  53. *find = True;
  54. return lcds[0];
  55. }else{
  56. *find = False;
  57. return MgsNA;
  58. }
  59. }
  60. }