furi_hal_console.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include <furi_hal_console.h>
  2. #include <furi_hal_uart.h>
  3. #include <stdbool.h>
  4. #include <stm32wbxx_ll_gpio.h>
  5. #include <stm32wbxx_ll_usart.h>
  6. #include <m-string.h>
  7. #include <utilities_conf.h>
  8. #include <furi.h>
  9. #define TAG "FuriHalConsole"
  10. #define CONSOLE_BAUDRATE 230400
  11. volatile bool furi_hal_console_alive = false;
  12. void furi_hal_console_init() {
  13. furi_hal_uart_init(FuriHalUartIdUSART1, CONSOLE_BAUDRATE);
  14. furi_hal_console_alive = true;
  15. FURI_LOG_I(TAG, "Init OK");
  16. }
  17. void furi_hal_console_enable() {
  18. furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, NULL, NULL);
  19. while(!LL_USART_IsActiveFlag_TC(USART1))
  20. ;
  21. furi_hal_uart_set_br(FuriHalUartIdUSART1, CONSOLE_BAUDRATE);
  22. furi_hal_console_alive = true;
  23. }
  24. void furi_hal_console_disable() {
  25. while(!LL_USART_IsActiveFlag_TC(USART1))
  26. ;
  27. furi_hal_console_alive = false;
  28. }
  29. void furi_hal_console_tx(const uint8_t* buffer, size_t buffer_size) {
  30. if(!furi_hal_console_alive) return;
  31. FURI_CRITICAL_ENTER();
  32. // Transmit data
  33. furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)buffer, buffer_size);
  34. // Wait for TC flag to be raised for last char
  35. while(!LL_USART_IsActiveFlag_TC(USART1))
  36. ;
  37. FURI_CRITICAL_EXIT();
  38. }
  39. void furi_hal_console_tx_with_new_line(const uint8_t* buffer, size_t buffer_size) {
  40. if(!furi_hal_console_alive) return;
  41. FURI_CRITICAL_ENTER();
  42. // Transmit data
  43. furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)buffer, buffer_size);
  44. // Transmit new line symbols
  45. furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)"\r\n", 2);
  46. // Wait for TC flag to be raised for last char
  47. while(!LL_USART_IsActiveFlag_TC(USART1))
  48. ;
  49. FURI_CRITICAL_EXIT();
  50. }
  51. void furi_hal_console_printf(const char format[], ...) {
  52. string_t string;
  53. va_list args;
  54. va_start(args, format);
  55. string_init_vprintf(string, format, args);
  56. va_end(args);
  57. furi_hal_console_tx((const uint8_t*)string_get_cstr(string), string_size(string));
  58. string_clear(string);
  59. }
  60. void furi_hal_console_puts(const char* data) {
  61. furi_hal_console_tx((const uint8_t*)data, strlen(data));
  62. }