#ifdef NBUS_NODE_TYPE_SLAVE #include "nbus_app_interface_esp32.h" static NbusLoopEsp32 *_loop_driver; static bool _in_transmission = false; static uint32_t _rx_size = 0; nBusPlatformInterface_t* nbus_platform_init(NbusLoopEsp32 *loop_driver) { #if NBUS_USE_LED pinMode(NBUS_LED_PIN, OUTPUT); #if NBUS_LED_POLARITY_REVERSED digitalWrite(NBUS_LED_PIN, HIGH); #else digitalWrite(NBUS_LED_PIN, LOW); #endif // POLARITY #endif // NBUS_USE_LED _loop_driver = loop_driver; return &nbus_hw_platform; } static inline void uart_send(uint8_t *data, int n) { _loop_driver->accessStream().write(data, n); } static inline void uart_receive(uint8_t *dataNBUS, int n) { _loop_driver->setData(dataNBUS, n); } static inline void led_on() { #if NBUS_USE_LED #if NBUS_LED_POLARITY_REVERSED digitalWrite(NBUS_LED_PIN, LOW); #else digitalWrite(NBUS_LED_PIN, HIGH); #endif // POLARITY #endif // NBUS_USE_LED } static inline void led_off() { #if NBUS_USE_LED #if NBUS_LED_POLARITY_REVERSED digitalWrite(NBUS_LED_PIN, HIGH); #else digitalWrite(NBUS_LED_PIN, LOW); #endif // POLARITY #endif // NBUS_USE_LED } static inline void led_toggle() { #if NBUS_USE_LED digitalWrite(NBUS_LED_PIN, !digitalRead(NBUS_LED_PIN)); #endif // NBUS_USE_LED } static inline uint32_t get_time() { return millis(); } static inline void app_delay(uint8_t ms) { delay(ms); } static inline uint8_t loop_callback(nBusStateCallbackType_t state_check) { if (state_check == CallbackType_SENSOR) { return 0; } if (state_check == CallbackType_UART) { return 1; } return 0; } uint8_t read_rx_packet(uint8_t *data, uint8_t *length) { // data buffers are already interconnected *length = _rx_size; _rx_size = 0; return *length > 0; } void nbus_platform_loop() { _rx_size = _loop_driver->receiveData(); if (_in_transmission == false && _loop_driver->isReceiving() == true) { led_on(); _in_transmission = true; } if (_in_transmission == true && _loop_driver->isReceiving() == false) { led_off(); _in_transmission = false; } } nBusPlatformInterface_t nbus_hw_platform = { uart_receive, uart_send, led_on, led_off, led_toggle, app_delay, get_time, loop_callback, read_rx_packet }; #endif // NBUS_NODE_TYPE