hardware.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /*
  2. *********************************************************************************************************
  3. * xmk guide
  4. * huali xmk guide process
  5. *
  6. * (c) Copyright 2016-2020, hualijidian.com
  7. * All Rights Reserved
  8. *
  9. * File : hardware.c
  10. * By : eric
  11. * Date : 2018��7��10��
  12. * Version : V0.0.1
  13. *********************************************************************************************************
  14. */
  15. #include "stdlib.h"
  16. #include "env.h"
  17. #include "hardware.h"
  18. #include "iocfg.h"
  19. #define DBG_TAG "hard"
  20. #define DBG_LVL DBG_INFO
  21. #include <rtdbg.h>
  22. #define CHECK_INPUT(in, v) \
  23. do{ \
  24. if(preI.in && (v)){ \
  25. I.in = 1; \
  26. } \
  27. preI.in = (v); \
  28. }while(0)
  29. rt_inline uint8_t checkWithPre(uint8_t input, uint8_t cnt) {
  30. static uint8_t pre[64];
  31. if(pre[cnt] && input){
  32. return 1;
  33. }
  34. pre[cnt] = input;
  35. return 0;
  36. }
  37. rt_inline void checkInput(void) {
  38. uint8_t i = 0;
  39. I.BtnRun = checkWithPre(!IN_RUN, i++);
  40. I.BtnRev = checkWithPre(!IN_REV, i++);
  41. I.BtnEStop = checkWithPre(IN2, i++);
  42. I.BtnCStop = checkWithPre(!IN3, i++);
  43. I.BtnLiftUp = checkWithPre(!IN4, i++);
  44. I.BtnLiftDown = checkWithPre(!IN5, i++);
  45. I.RmcStart = checkWithPre(!RMC_IN1, i++);
  46. I.RmcEStop = checkWithPre(RMC_IN2, i++);
  47. I.RmcForward = checkWithPre(!RMC_IN3, i++);
  48. I.RmcBackward = checkWithPre(!RMC_IN4, i++);
  49. I.RmcDriftLeft = checkWithPre(!RMC_IN6, i++);
  50. I.RmcDriftRight = checkWithPre(!RMC_IN5, i++);
  51. I.RmcRoteLeft = checkWithPre(!RMC_IN7, i++);
  52. I.RmcRoteRight = checkWithPre(!RMC_IN8, i++);
  53. I.RmcLiftUp = checkWithPre(!RMC_IN9, i++);
  54. I.RmcLiftDown = checkWithPre(!RMC_IN10, i++);
  55. I.RmcStop = checkWithPre(!RMC_IN11, i++);
  56. I.OBS1In1 = checkWithPre(!OBS1_IN1, i++);
  57. I.OBS1In2 = checkWithPre(!OBS1_IN2, i++);
  58. I.OBS1In3 = checkWithPre(!OBS1_IN3, i++);
  59. I.OBS1In4 = checkWithPre(!OBS1_IN4, i++);
  60. I.OBS2In1 = checkWithPre(!OBS2_IN1, i++);
  61. I.OBS2In2 = checkWithPre(!OBS2_IN2, i++);
  62. I.OBS2In3 = checkWithPre(!OBS2_IN3, i++);
  63. I.OBS2In4 = checkWithPre(!OBS2_IN4, i++);
  64. I.OBS3In1 = checkWithPre(!OBS3_IN1, i++);
  65. I.OBS3In2 = checkWithPre(!OBS3_IN2, i++);
  66. I.OBS3In3 = checkWithPre(!OBS3_IN3, i++);
  67. I.OBS3In4 = checkWithPre(!OBS3_IN4, i++);
  68. I.OBS4In1 = checkWithPre(!OBS4_IN1, i++);
  69. I.OBS4In2 = checkWithPre(!OBS4_IN2, i++);
  70. I.OBS4In3 = checkWithPre(!OBS4_IN3, i++);
  71. I.OBS4In4 = checkWithPre(!OBS4_IN4, i++);
  72. I.Npn1 = checkWithPre(!NPN1_IN1, i++);
  73. I.Npn2 = checkWithPre(!NPN1_IN2, i++);
  74. I.Npn3 = checkWithPre(!NPN2_IN3, i++);
  75. I.Npn4 = checkWithPre(!NPN2_IN4, i++);
  76. I.Npn5 = checkWithPre(!NPN3_IN5, i++);
  77. I.Npn6 = checkWithPre(!NPN3_IN6, i++);
  78. I.Npn7 = checkWithPre(!NPN4_IN7, i++);
  79. I.Npn8 = checkWithPre(!NPN4_IN8, i++);
  80. I.Npn9 = checkWithPre(!NPN5_IN9, i++);
  81. I.Npn10 = checkWithPre(!NPN5_IN10, i++);
  82. I.Lft1InTop = checkWithPre(NPN1_IN1, i++);
  83. I.Lft1InBottom = checkWithPre(NPN1_IN2, i++);
  84. I.Lft2InTop = checkWithPre(!NPN2_IN3, i++);
  85. I.Lft2InBottom = checkWithPre(!NPN2_IN4, i++);
  86. I.Motor1DET = checkWithPre(!MOTOR1_DET1, i++);
  87. I.Motor2DET = checkWithPre(!MOTOR2_DET2, i++);
  88. }
  89. void HWProcess(void *param)
  90. {
  91. uint8_t i;
  92. while(1)
  93. {
  94. checkInput();
  95. rt_thread_mdelay(100);
  96. i++;
  97. if(i>20)
  98. {
  99. i = 0;
  100. LOG_I("OBS1 [%d %d %d %d]",I.OBS1In1,I.OBS1In2,I.OBS1In3,I.OBS1In4);
  101. LOG_I("OBS2 [%d %d %d %d]",I.OBS2In1,I.OBS2In2,I.OBS2In3,I.OBS2In4);
  102. LOG_I("OBS3 [%d %d %d %d]",I.OBS3In1,I.OBS3In2,I.OBS3In3,I.OBS3In4);
  103. LOG_I("OBS4 [%d %d %d %d]",I.OBS4In1,I.OBS4In2,I.OBS4In3,I.OBS4In4);
  104. LOG_I("Npn1 [%d %d %d %d %d]",I.Npn1,I.Npn2,I.Npn3,I.Npn4,I.Npn5);
  105. LOG_I("Npn6 [%d %d %d %d %d]",I.Npn6,I.Npn7,I.Npn8,I.Npn9,I.Npn10);
  106. LOG_I("Lft1 [%d %d] Lft2 [%d %d]",I.Lft1InTop,I.Lft1InBottom,I.Lft2InTop,I.Lft2InBottom);
  107. }
  108. }
  109. }
  110. int HWInit(void)
  111. {
  112. rt_thread_t tid;
  113. // thread
  114. tid = rt_thread_create("hw",
  115. HWProcess, RT_NULL,
  116. 512,
  117. RT_THREAD_PRIORITY_MAX - 5, 10);
  118. if (tid != RT_NULL)
  119. {
  120. rt_thread_startup(tid);
  121. }
  122. return RT_EOK;
  123. }
  124. INIT_APP_EXPORT(HWInit);
  125. //void Battery_Process(void) {
  126. // S.BatteryVolt = S.Driver1Volt;
  127. // if (Cfg.MainPower == CFG_MAIN_POWER_24V) {
  128. // S.BatteryVolt = S.Driver1Volt;
  129. // return;
  130. // }
  131. //}