AppBridge.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * @filename AppBridge.cpp
  3. *
  4. * @date Mar 05, 2025
  5. * @author: juraj
  6. */
  7. #include <NbusSlave.h>
  8. #include "AppBridge.h"
  9. #include "dataframe.h"
  10. #include "NbusBridge.h"
  11. #include "NbusCommunicator.h"
  12. UART_HandleTypeDef *pUartMasterGlobal;
  13. volatile uint32_t flagUartMasterDataReady;
  14. uint8_t pMasterUartRx[64];
  15. uint8_t pMasterUartFrame[64];
  16. uint8_t vMasterUartIndex;
  17. uint8_t vMasterUartSize;
  18. static void init_app(){
  19. HAL_UARTEx_ReceiveToIdle_DMA(pUartMasterGlobal, pMasterUartRx, 64);
  20. flagUartMasterDataReady = 0;
  21. vMasterUartIndex = 0;
  22. vMasterUartSize = 0;
  23. }
  24. void app(UART_HandleTypeDef *uartNbus, UART_HandleTypeDef *uartMaster){
  25. pUartMasterGlobal = uartMaster;
  26. init_app();
  27. NbusCommunicator nc(uartNbus, uartMaster);
  28. // boot long blink
  29. for(uint32_t i = 0 ; i<64 ; i++){
  30. HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
  31. HAL_Delay(25);
  32. }
  33. NbusBridge bridge(&nc);
  34. bridge.scan();
  35. DataFrame *frameTX;
  36. for(uint32_t i=0; i<bridge.getNumSlaves() ; i++){
  37. frameTX = bridge.getSlave(i)->nbus_echo();
  38. bridge.sendResponseToMaster(frameTX);
  39. frameTX = bridge.getSlave(i)->nbus_module_info();
  40. bridge.sendResponseToMaster(frameTX);
  41. }
  42. while(1){
  43. /*
  44. for(uint32_t i=0; i<bridge.getNumSlaves() ; i++){
  45. for(uint32_t k = 0 ; k <= bridge.getSlave(i)->nbus_get_sensor_count(false) ; k++){
  46. frameTX = bridge.getSlave(i)->nbus_sensor_getData(k);
  47. bridge.sendResponseToMaster(frameTX);
  48. }
  49. }
  50. */
  51. if(flagUartMasterDataReady > 0){
  52. HAL_UART_Transmit_DMA(uartMaster, pMasterUartRx, flagUartMasterDataReady);
  53. flagUartMasterDataReady = 0;
  54. }
  55. //HAL_Delay(1);
  56. }
  57. }
  58. // Application callbacks
  59. // TODO - toto je zatial nefunkcne
  60. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
  61. if(huart == pUartMasterGlobal) {
  62. HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
  63. flagUartMasterDataReady = Size;
  64. HAL_UARTEx_ReceiveToIdle_DMA(pUartMasterGlobal, pMasterUartRx, 64);
  65. uint8_t copy_offset = 0;
  66. if(vMasterUartIndex == 0){
  67. vMasterUartSize = pMasterUartRx[0];
  68. vMasterUartIndex++;
  69. vMasterUartSize--;
  70. copy_offset = 1;
  71. }
  72. memcpy(&pMasterUartFrame[vMasterUartIndex], &pMasterUartRx[copy_offset], vMasterUartSize);
  73. vMasterUartIndex += vMasterUartSize;
  74. if(vMasterUartIndex >= vMasterUartSize){
  75. flagUartMasterDataReady = vMasterUartSize;
  76. vMasterUartSize = 0;
  77. vMasterUartIndex = 0;
  78. pMasterUartRx[0] = 0;
  79. // uart_timeout = MAX_SYSTICK;
  80. }
  81. }
  82. }