furi-hal-console.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. furi_hal_uart_set_br(FuriHalUartIdUSART1, CONSOLE_BAUDRATE);
  21. furi_hal_console_alive = true;
  22. }
  23. void furi_hal_console_disable() {
  24. while (!LL_USART_IsActiveFlag_TC(USART1));
  25. furi_hal_console_alive = false;
  26. }
  27. void furi_hal_console_tx(const uint8_t* buffer, size_t buffer_size) {
  28. if (!furi_hal_console_alive)
  29. return;
  30. FURI_CRITICAL_ENTER();
  31. // Transmit data
  32. furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)buffer, buffer_size);
  33. // Wait for TC flag to be raised for last char
  34. while (!LL_USART_IsActiveFlag_TC(USART1));
  35. FURI_CRITICAL_EXIT();
  36. }
  37. void furi_hal_console_tx_with_new_line(const uint8_t* buffer, size_t buffer_size) {
  38. if (!furi_hal_console_alive)
  39. return;
  40. FURI_CRITICAL_ENTER();
  41. // Transmit data
  42. furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)buffer, buffer_size);
  43. // Transmit new line symbols
  44. furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)"\r\n", 2);
  45. // Wait for TC flag to be raised for last char
  46. while (!LL_USART_IsActiveFlag_TC(USART1));
  47. FURI_CRITICAL_EXIT();
  48. }
  49. void furi_hal_console_printf(const char format[], ...) {
  50. string_t string;
  51. va_list args;
  52. va_start(args, format);
  53. string_init_vprintf(string, format, args);
  54. va_end(args);
  55. furi_hal_console_tx((const uint8_t*)string_get_cstr(string), string_size(string));
  56. string_clear(string);
  57. }
  58. void furi_hal_console_puts(const char *data) {
  59. furi_hal_console_tx((const uint8_t*)data, strlen(data));
  60. }