6 changed files with 139 additions and 15 deletions
@ -0,0 +1,78 @@ |
|||||||
|
#include <AP_HAL.h> |
||||||
|
|
||||||
|
#if CONFIG_HAL_BOARD == HAL_BOARD_PX4 |
||||||
|
#include "UARTDriver.h" |
||||||
|
#include <stdio.h> |
||||||
|
#include <unistd.h> |
||||||
|
|
||||||
|
using namespace PX4; |
||||||
|
|
||||||
|
PX4UARTDriver::PX4UARTDriver() {} |
||||||
|
|
||||||
|
/*
|
||||||
|
this UART driver just maps to stdin/stdout, which goes to |
||||||
|
whatever is setup for the PX4 console. Baud rate control is not |
||||||
|
available. |
||||||
|
*/ |
||||||
|
|
||||||
|
void PX4UARTDriver::begin(uint32_t b) {} |
||||||
|
void PX4UARTDriver::begin(uint32_t b, uint16_t rxS, uint16_t txS) {} |
||||||
|
void PX4UARTDriver::end() {} |
||||||
|
void PX4UARTDriver::flush() {} |
||||||
|
bool PX4UARTDriver::is_initialized() { return true; } |
||||||
|
void PX4UARTDriver::set_blocking_writes(bool blocking) {} |
||||||
|
bool PX4UARTDriver::tx_pending() { return false; } |
||||||
|
|
||||||
|
/* PX4 implementations of BetterStream virtual methods */ |
||||||
|
void PX4UARTDriver::print_P(const prog_char_t *pstr) { |
||||||
|
print(pstr); |
||||||
|
} |
||||||
|
|
||||||
|
void PX4UARTDriver::println_P(const prog_char_t *pstr) { |
||||||
|
println(pstr); |
||||||
|
} |
||||||
|
|
||||||
|
void PX4UARTDriver::printf(const char *fmt, ...) { |
||||||
|
va_list ap; |
||||||
|
va_start(ap, fmt); |
||||||
|
vfprintf(stdout, fmt, ap); |
||||||
|
va_end(ap);
|
||||||
|
} |
||||||
|
|
||||||
|
void PX4UARTDriver::_printf_P(const prog_char *fmt, ...) { |
||||||
|
va_list ap; |
||||||
|
va_start(ap, fmt); |
||||||
|
vfprintf(stdout, fmt, ap); |
||||||
|
va_end(ap);
|
||||||
|
} |
||||||
|
|
||||||
|
void PX4UARTDriver::vprintf(const char *fmt, va_list ap) { |
||||||
|
vfprintf(stdout, fmt, ap); |
||||||
|
} |
||||||
|
|
||||||
|
void PX4UARTDriver::vprintf_P(const prog_char *fmt, va_list ap) { |
||||||
|
vfprintf(stdout, fmt, ap); |
||||||
|
} |
||||||
|
|
||||||
|
/* PX4 implementations of Stream virtual methods */ |
||||||
|
int16_t PX4UARTDriver::available() { return 0; } |
||||||
|
int16_t PX4UARTDriver::txspace() { return 128; } |
||||||
|
|
||||||
|
int16_t PX4UARTDriver::read() {
|
||||||
|
uint8_t c; |
||||||
|
if (fread(&c, 1, 1, stdin) == 1) { |
||||||
|
return c; |
||||||
|
} |
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
int16_t PX4UARTDriver::peek() {
|
||||||
|
return -1;
|
||||||
|
} |
||||||
|
|
||||||
|
/* PX4 implementations of Print virtual methods */ |
||||||
|
size_t PX4UARTDriver::write(uint8_t c) {
|
||||||
|
return fwrite(&c, 1, 1, stdout); |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,38 @@ |
|||||||
|
|
||||||
|
#ifndef __AP_HAL_PX4_UARTDRIVER_H__ |
||||||
|
#define __AP_HAL_PX4_UARTDRIVER_H__ |
||||||
|
|
||||||
|
#include <AP_HAL_PX4.h> |
||||||
|
|
||||||
|
class PX4::PX4UARTDriver : public AP_HAL::UARTDriver { |
||||||
|
public: |
||||||
|
PX4UARTDriver(); |
||||||
|
/* PX4 implementations of UARTDriver virtual methods */ |
||||||
|
void begin(uint32_t b); |
||||||
|
void begin(uint32_t b, uint16_t rxS, uint16_t txS); |
||||||
|
void end(); |
||||||
|
void flush(); |
||||||
|
bool is_initialized(); |
||||||
|
void set_blocking_writes(bool blocking); |
||||||
|
bool tx_pending(); |
||||||
|
|
||||||
|
/* PX4 implementations of BetterStream virtual methods */ |
||||||
|
void print_P(const prog_char_t *pstr); |
||||||
|
void println_P(const prog_char_t *pstr); |
||||||
|
void printf(const char *pstr, ...); |
||||||
|
void _printf_P(const prog_char *pstr, ...); |
||||||
|
|
||||||
|
void vprintf(const char* fmt, va_list ap); |
||||||
|
void vprintf_P(const prog_char* fmt, va_list ap); |
||||||
|
|
||||||
|
/* PX4 implementations of Stream virtual methods */ |
||||||
|
int16_t available(); |
||||||
|
int16_t txspace(); |
||||||
|
int16_t read(); |
||||||
|
int16_t peek(); |
||||||
|
|
||||||
|
/* PX4 implementations of Print virtual methods */ |
||||||
|
size_t write(uint8_t c); |
||||||
|
}; |
||||||
|
|
||||||
|
#endif // __AP_HAL_PX4_UARTDRIVER_H__
|
Loading…
Reference in new issue