mirror of https://github.com/ArduPilot/ardupilot
79 lines
1.3 KiB
C++
79 lines
1.3 KiB
C++
|
/*
|
||
|
(c) 2017 night_ghost@ykoctpa.ru
|
||
|
|
||
|
* UART_OSD.cpp --- AP_HAL_F4Light OSD implementation via fake UART
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include <AP_HAL/AP_HAL.h>
|
||
|
|
||
|
#if CONFIG_HAL_BOARD == HAL_BOARD_F4LIGHT && defined(BOARD_OSD_NAME) && defined(BOARD_OSD_CS_PIN)
|
||
|
|
||
|
#include "UART_OSD.h"
|
||
|
|
||
|
#include "SPIDevice.h"
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <unistd.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <errno.h>
|
||
|
#include <fcntl.h>
|
||
|
|
||
|
#include <gpio_hal.h>
|
||
|
|
||
|
#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
|