3 #if CONFIG_HAL_BOARD == HAL_BOARD_PX4 11 #include <sys/types.h> 15 #include <drivers/drv_hrt.h> 29 _unbuffered_writes(false),
30 _perf_uart(perf_alloc(PC_ELAPSED, perf_name)),
31 _os_start_auto_space(-1),
32 _flow_control(FLOW_CONTROL_DISABLE)
45 if (strcmp(
_devpath,
"/dev/null") == 0) {
50 uint16_t min_tx_buffer = 1024;
51 uint16_t min_rx_buffer = 512;
52 if (strcmp(
_devpath,
"/dev/ttyACM0") == 0) {
60 if (txS < min_tx_buffer) {
63 if (rxS < min_rx_buffer) {
112 tcsetattr(
_fd, TCSANOW, &t);
119 t.c_cflag |= CRTS_IFLOW;
120 tcsetattr(
_fd, TCSANOW, &t);
144 t.c_cflag |= CRTSCTS;
146 t.c_cflag &= ~CRTSCTS;
148 tcsetattr(
_fd, TCSANOW, &t);
169 t.c_cflag &= ~PARODD;
174 t.c_cflag &= ~PARENB;
176 tcsetattr(
_fd, TCSANOW, &t);
185 if (n > 1) t.c_cflag |= CSTOPB;
186 else t.c_cflag &= ~CSTOPB;
187 tcsetattr(
_fd, TCSANOW, &t);
357 if (
write(*buffer++) != 1)
break;
393 if (ioctl(
_fd, FIONWRITE, (
unsigned long)&nwrite) == 0) {
404 ::printf(
"disabling flow control on %s _total_written=%u\n",
451 if (ioctl(
_fd, FIONREAD, (
unsigned long)&nread) == 0) {
491 for (
int i = 0; i < n_vec; i++) {
492 ret =
_write_fd(vec[i].data, (uint16_t)vec[i].len);
499 if ((
unsigned)ret != vec[i].len) {
511 for (
int i = 0; i < n_vec; i++) {
512 ret =
_read_fd(vec[i].data, vec[i].len);
523 if ((
unsigned)ret < vec[i].len) {
551 last_receive_us -= transport_time_us;
553 return last_receive_us;
bool get_soft_armed() const
void configure_parity(uint8_t v)
void try_initialise(void)
uint32_t available() override
uint64_t _receive_timestamp[2]
uint32_t available(void) const
PX4UARTDriver(const char *devpath, const char *perf_name)
bool set_unbuffered_writes(bool on)
int open(const char *pathname, int flags)
POSIX Open a file with integer mode flags.
static uint8_t buffer[SRXL_FRAMELEN_MAX]
void set_flow_control(enum flow_control flow_control)
bool commit(uint32_t len)
virtual bool usb_connected(void)=0
uint32_t get_size(void) const
uint32_t space(void) const
virtual void delay(uint16_t ms)=0
int _read_fd(uint8_t *buf, uint16_t n)
virtual void printf(const char *,...) FMT_PRINTF(2
void set_stop_bits(int n)
enum flow_control _flow_control
int close(int fileno)
POSIX Close a file with fileno handel.
bool set_size(uint32_t size)
uint64_t _last_write_time
virtual enum safety_state safety_switch_state(void)
perf_counter_t _perf_uart
uint32_t txspace() override
uint64_t receive_time_constraint_us(uint16_t nbytes) override
uint32_t write(const uint8_t *data, uint32_t len)
uint8_t peekiovec(IoVec vec[2], uint32_t len)
uint8_t _receive_timestamp_idx
int _write_fd(const uint8_t *buf, uint16_t n)
uint64_t _first_write_time
uint32_t _os_start_auto_space
void set_blocking_writes(bool blocking)
uint32_t _last_initialise_attempt_ms
void _timer_tick(void) override
uint8_t reserve(IoVec vec[2], uint32_t len)
AP_HAL::Scheduler * scheduler
volatile bool _initialised
bool read_byte(uint8_t *data)
static const AP_HAL::HAL & hal