/* (c) 2017 night_ghost@ykoctpa.ru * UART_OSD.cpp --- AP_HAL_F4Light OSD implementation via fake UART * */ #include #if CONFIG_HAL_BOARD == HAL_BOARD_F4LIGHT && defined(BOARD_OSD_NAME) && defined(BOARD_OSD_CS_PIN) #include "UART_OSD.h" #include "SPIDevice.h" #include #include #include #include #include #include #include "osd/osd.h" using namespace F4Light; using namespace OSDns; UART_OSD::UART_OSD(): _initialized(false), _blocking(true) { } void UART_OSD::begin(uint32_t baud) { (void)baud; if(_initialized) return; OSDns::osd_begin(F4Light::SPIDeviceManager::_get_device(BOARD_OSD_NAME)); _initialized = true; } uint32_t UART_OSD::available() { return OSDns::osd_available(); } int16_t UART_OSD::read() { if (available() <= 0) return -1; return OSDns::osd_getc(); } uint32_t UART_OSD::txspace() { return OSDns::osd_txspace(); } size_t UART_OSD::write(uint8_t c) { if (!_initialized) { return 0; } OSDns::osd_putc(c); return 1; } size_t UART_OSD::write(const uint8_t *buffer, size_t size) { size_t n = 0; while (size--) { n += write(*buffer++); } return n; } #endif // CONFIG_HAL_BOARD