#define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include "config.h" static inline ssize_t write_byte(int fd, uint8_t c) { return write(fd, &c, sizeof(c)); } static inline ssize_t write_start(int fd, enum patty_kiss_command command, int port) { uint8_t start[2] = { PATTY_KISS_FEND, ((port & 0x0f) << 4) | (command & 0x0f) }; return write(fd, start, sizeof(start)); } static uint8_t escape_fend[2] = { PATTY_KISS_FESC, PATTY_KISS_TFEND }; static uint8_t escape_fesc[2] = { PATTY_KISS_FESC, PATTY_KISS_TFESC }; ssize_t patty_kiss_frame_send(int fd, const void *buf, size_t len, int port) { size_t i, start = 0, end = 0; if (write_start(fd, PATTY_KISS_DATA, port) < 0) { goto error_io; } for (i=0; i