nbus_app_interface_esp32.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #ifdef NBUS_NODE_TYPE_SLAVE
  2. #include "nbus_app_interface_esp32.h"
  3. static NbusLoopEsp32 *_loop_driver;
  4. static bool _in_transmission = false;
  5. static uint32_t _rx_size = 0;
  6. nBusPlatformInterface_t* nbus_platform_init(NbusLoopEsp32 *loop_driver)
  7. {
  8. #if NBUS_USE_LED
  9. pinMode(NBUS_LED_PIN, OUTPUT);
  10. #if NBUS_LED_POLARITY_REVERSED
  11. digitalWrite(NBUS_LED_PIN, HIGH);
  12. #else
  13. digitalWrite(NBUS_LED_PIN, LOW);
  14. #endif // POLARITY
  15. #endif // NBUS_USE_LED
  16. _loop_driver = loop_driver;
  17. return &nbus_hw_platform;
  18. }
  19. static inline void uart_send(uint8_t *data, int n)
  20. {
  21. _loop_driver->accessStream().write(data, n);
  22. }
  23. static inline void uart_receive(uint8_t *dataNBUS, int n)
  24. {
  25. _loop_driver->setData(dataNBUS, n);
  26. }
  27. static inline void led_on()
  28. {
  29. #if NBUS_USE_LED
  30. #if NBUS_LED_POLARITY_REVERSED
  31. digitalWrite(NBUS_LED_PIN, LOW);
  32. #else
  33. digitalWrite(NBUS_LED_PIN, HIGH);
  34. #endif // POLARITY
  35. #endif // NBUS_USE_LED
  36. }
  37. static inline void led_off()
  38. {
  39. #if NBUS_USE_LED
  40. #if NBUS_LED_POLARITY_REVERSED
  41. digitalWrite(NBUS_LED_PIN, HIGH);
  42. #else
  43. digitalWrite(NBUS_LED_PIN, LOW);
  44. #endif // POLARITY
  45. #endif // NBUS_USE_LED
  46. }
  47. static inline void led_toggle()
  48. {
  49. #if NBUS_USE_LED
  50. digitalWrite(NBUS_LED_PIN, !digitalRead(NBUS_LED_PIN));
  51. #endif // NBUS_USE_LED
  52. }
  53. static inline uint32_t get_time()
  54. {
  55. return millis();
  56. }
  57. static inline void app_delay(uint8_t ms)
  58. {
  59. delay(ms);
  60. }
  61. static inline uint8_t loop_callback(nBusStateCallbackType_t state_check)
  62. {
  63. if (state_check == CallbackType_SENSOR)
  64. {
  65. return 0;
  66. }
  67. if (state_check == CallbackType_UART)
  68. {
  69. return 1;
  70. }
  71. return 0;
  72. }
  73. uint8_t read_rx_packet(uint8_t *data, uint8_t *length)
  74. {
  75. // data buffers are already interconnected
  76. *length = _rx_size;
  77. _rx_size = 0;
  78. return *length > 0;
  79. }
  80. void nbus_platform_loop()
  81. {
  82. _rx_size = _loop_driver->receiveData();
  83. if (_in_transmission == false && _loop_driver->isReceiving() == true)
  84. {
  85. led_on();
  86. _in_transmission = true;
  87. }
  88. if (_in_transmission == true && _loop_driver->isReceiving() == false)
  89. {
  90. led_off();
  91. _in_transmission = false;
  92. }
  93. }
  94. nBusPlatformInterface_t nbus_hw_platform = {
  95. uart_receive,
  96. uart_send,
  97. led_on,
  98. led_off,
  99. led_toggle,
  100. app_delay,
  101. get_time,
  102. loop_callback,
  103. read_rx_packet
  104. };
  105. #endif // NBUS_NODE_TYPE