agile_console_serial_be.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include <rtthread.h>
  2. #ifdef PKG_USING_AGILE_CONSOLE
  3. #ifdef PKG_USING_AGILE_CONSOLE_SERIAL_EXAMPLE
  4. #include <agile_console.h>
  5. static rt_device_t serial_dev = RT_NULL;
  6. static struct agile_console_backend _console_backend = {0};
  7. static void serial_backend_output(rt_device_t dev, const uint8_t *buf, int len)
  8. {
  9. if (serial_dev == RT_NULL)
  10. return;
  11. if (dev->open_flag & RT_DEVICE_FLAG_STREAM)
  12. serial_dev->open_flag |= RT_DEVICE_FLAG_STREAM;
  13. else
  14. serial_dev->open_flag &= ~RT_DEVICE_FLAG_STREAM;
  15. rt_device_write(serial_dev, 0, buf, len);
  16. }
  17. static int serial_backend_read(rt_device_t dev, uint8_t *buf, int len)
  18. {
  19. if (serial_dev == RT_NULL)
  20. return 0;
  21. return rt_device_read(serial_dev, 0, buf, len);
  22. }
  23. static int agile_colsole_serial_board_init(void)
  24. {
  25. serial_dev = rt_device_find(PKG_AGILE_CONSOLE_SERIAL_DEVICE_NAME);
  26. if (serial_dev == RT_NULL)
  27. return -RT_ERROR;
  28. if (rt_device_open(serial_dev, RT_DEVICE_OFLAG_RDWR) != RT_EOK)
  29. return -RT_ERROR;
  30. _console_backend.output = serial_backend_output;
  31. _console_backend.read = serial_backend_read;
  32. agile_console_backend_register(&_console_backend);
  33. return RT_EOK;
  34. }
  35. INIT_BOARD_EXPORT(agile_colsole_serial_board_init);
  36. static rt_err_t serial_rx_ind(rt_device_t dev, rt_size_t size)
  37. {
  38. agile_console_wakeup();
  39. return RT_EOK;
  40. }
  41. static int agile_console_serial_input_init(void)
  42. {
  43. if (serial_dev == RT_NULL)
  44. return -RT_ERROR;
  45. int ret = rt_device_open(serial_dev, RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_RDWR);
  46. if (ret == RT_EOK)
  47. rt_device_set_rx_indicate(serial_dev, serial_rx_ind);
  48. return ret;
  49. }
  50. INIT_DEVICE_EXPORT(agile_console_serial_input_init);
  51. #endif /* PKG_USING_AGILE_CONSOLE_SERIAL_EXAMPLE */
  52. #endif /* PKG_USING_AGILE_CONSOLE */