90 lines
2.6 KiB
C
90 lines
2.6 KiB
C
//
|
|
// Created by nano on 4/26/25.
|
|
//
|
|
#ifndef COMMS_H
|
|
#define COMMS_H
|
|
#include <libserialport.h>
|
|
#include <sys/types.h>
|
|
|
|
typedef u_int8_t byte;
|
|
|
|
typedef enum { ALL_BYTES, NOT_ENOUGH_BYTES, ERROR } comm_result;
|
|
int comm_output_waiting() ;
|
|
/**
|
|
* Initializes the serial communication for the usb -> uart board
|
|
*/
|
|
void comm_init_communication();
|
|
|
|
/**
|
|
* Generates port list from present serial ports.
|
|
* @param port_list pointer to port list to set.
|
|
*/
|
|
void comm_get_port_list(struct sp_port ***port_list);
|
|
|
|
void comm_list_serial_ports(struct sp_port **port_list);
|
|
|
|
/**
|
|
* Opens communication to the selected serial port and sets the correct parameters for the zigbee carrier board.
|
|
*/
|
|
void comm_open_port();
|
|
|
|
/**
|
|
* Ends the serial communication for the usb -> uart board
|
|
*/
|
|
void comm_end_communication();
|
|
|
|
/**
|
|
* Await fresh data from the serial port
|
|
* @param timeout timeout for waiting for a byte to be ready to read
|
|
* @return if there is data available (1 or 0)
|
|
*/
|
|
int comm_await_data_ready(int timeout);
|
|
|
|
/**
|
|
* Check if the serial port is ready to be written to.
|
|
* @param timeout timeout for waiting for a byte to be ready to read
|
|
* @return if data can be written (1 or 0)
|
|
*/
|
|
int comm_await_ready_for_tx(int timeout);
|
|
|
|
/**
|
|
*Do a nonblocking read from the serial port
|
|
*@param data pointer to data to read
|
|
*@param amount_of_bytes amount of bytes to read from uart buffer
|
|
*@return if whole buffer was filled, part of the buffer was filled or error
|
|
*/
|
|
comm_result comm_nonblocking_read(byte *data, int amount_of_bytes);
|
|
|
|
/**
|
|
*Do a blocking read from the serial port
|
|
*@param data pointer to data to read
|
|
*@param amount_of_bytes amount of bytes to read from uart buffer
|
|
*@param timeout how long to wait for data to be filled
|
|
*@return if whole buffer was filled, part of the buffer was filled or error
|
|
*/
|
|
comm_result comm_blocking_read(byte *data, int amount_of_bytes, int timeout);
|
|
|
|
/**
|
|
*Do a nonblocking write from the serial port
|
|
*@param data pointer to data to write
|
|
*@param amount_of_bytes amount of bytes to write to uart
|
|
*@return if whole buffer was written, part of the buffer was written or error
|
|
*/
|
|
comm_result comm_nonblocking_write(byte *data, int amount_of_bytes);
|
|
|
|
/**
|
|
*Do a nonblocking write from the serial port
|
|
*@param data pointer to data to write
|
|
*@param amount_of_bytes amount of bytes to write to uart
|
|
*@param timeout how long to wait for data to be filled
|
|
*@return if whole buffer was written, part of the buffer was written or error
|
|
*/
|
|
comm_result comm_blocking_write(byte *data, int amount_of_bytes, int timeout);
|
|
|
|
/** Helper function for error handling.
|
|
* Taken from libserialport examples. */
|
|
int check(enum sp_return result);
|
|
|
|
|
|
#endif //COMMS_H
|