RISC-V/minichlink/serial_dev.h
2025-02-05 15:55:13 +01:00

48 lines
1.2 KiB
C

#ifndef _SERIAL_DEV_H
#define _SERIAL_DEV_H
#include <stddef.h>
#if defined(WINDOWS) || defined(WIN32) || defined(_WIN32)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#define IS_WINDOWS
#define DEFAULT_SERIAL_NAME "\\\\.\\COM3"
#else
#include <unistd.h>
#include <termios.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#define IS_POSIX
#define DEFAULT_SERIAL_NAME "/dev/ttyACM0"
#endif
/* these are available on all platforms */
#include <errno.h>
#include <stdio.h>
typedef struct {
const char* port;
unsigned baud;
#ifdef IS_WINDOWS
HANDLE handle;
#else
int fd;
#endif
} serial_dev_t;
/* returns 0 if OK */
int serial_dev_create(serial_dev_t *dev, const char* port, unsigned baud);
/* returns 0 if OK */
int serial_dev_open(serial_dev_t *dev);
/* returns -1 on write error */
int serial_dev_write(serial_dev_t *dev, const void* data, size_t len);
/* returns -1 on read error */
int serial_dev_read(serial_dev_t *dev, void* data, size_t len);
/* returns -1 on reset error */
int serial_dev_do_dtr_reset(serial_dev_t *dev);
/* returns -1 on flush error */
int serial_dev_flush_rx(serial_dev_t *dev);
/* returns -1 on close error */
int serial_dev_close(serial_dev_t *dev);
#endif