96 lines
2.5 KiB
C++
96 lines
2.5 KiB
C++
/*---------------------------------------------------------*\
|
|
| Cross Platform Serial COM Library for Windows and Linux |
|
|
| This library provides access to serial ports with a |
|
|
| common API for both Windows and Linux systems. It |
|
|
| features read and write as well as tx/rx buffer flush. |
|
|
| |
|
|
| Adam Honse (calcprogrammer1@gmail.com), 1/21/2013 |
|
|
\*---------------------------------------------------------*/
|
|
|
|
#ifndef SERIAL_PORT_H
|
|
#define SERIAL_PORT_H
|
|
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
#ifdef _WIN32
|
|
|
|
#include <windows.h>
|
|
|
|
#endif /* _WIN32 */
|
|
|
|
#ifdef __linux__
|
|
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <termios.h>
|
|
#include <sys/ioctl.h>
|
|
|
|
//winsize, termio, and termios structs are redefined in
|
|
//asm/termios.h, to prevent compiler errors from multply
|
|
//defining them, use a #define to rename them -
|
|
//essentially to undef them before they are redefined
|
|
#define winsize undefine_winsize
|
|
#define termio undefine_termio
|
|
#define termios undefine_termios
|
|
|
|
#include <asm/termios.h>
|
|
#include <asm-generic/ioctls.h>
|
|
|
|
|
|
#endif /* __linux__ */
|
|
|
|
|
|
//Serial Port Class
|
|
//The reason for this class is that serial ports are treated differently
|
|
//on Windows and Linux. By creating a class, those differences can be
|
|
//made invisible to the program and make cross-platform usage easy
|
|
|
|
class serial_port
|
|
{
|
|
public:
|
|
serial_port();
|
|
serial_port(const char * name, unsigned int baud);
|
|
|
|
~serial_port();
|
|
|
|
//Function to open the port
|
|
bool serial_open();
|
|
bool serial_open(const char* name);
|
|
bool serial_open(const char* name, unsigned int baud);
|
|
|
|
//Function to close the port
|
|
void serial_close();
|
|
|
|
//Functions for controlling baud rate
|
|
void serial_set_baud(unsigned int baud);
|
|
int serial_get_baud();
|
|
|
|
//Function to read data from the port buffer
|
|
int serial_read(char * buffer, int length);
|
|
|
|
//Function to write data to the serial port
|
|
int serial_write(char * buffer, int length);
|
|
|
|
//Functions to flush the serial port rx and tx buffers
|
|
void serial_flush_rx();
|
|
void serial_flush_tx();
|
|
|
|
//Function to list the number of available bytes
|
|
int serial_available();
|
|
|
|
private:
|
|
char port_name[1024];
|
|
unsigned int baud_rate;
|
|
|
|
#ifdef WIN32
|
|
HANDLE file_descriptor;
|
|
DCB dcb;
|
|
|
|
#else
|
|
|
|
int file_descriptor;
|
|
#endif
|
|
};
|
|
|
|
#endif
|