topical media & game development
lib-of-vs-libs-openFrameworks-communication-ofSerial.h / h
ifndef OF_SERIAL_H
define OF_SERIAL_H
include <ofConstants.h>
if defined( TARGET_OSX ) || defined( TARGET_LINUX )
#include <termios.h>
#include <sys/ioctl.h>
#include <getopt.h>
#include <dirent.h>
else
#include <winbase.h>
#include <tchar.h>
#include <iostream>
#include <string.h>
#include <setupapi.h>
#include <regstr.h>
#define MAX_SERIAL_PORTS 256
#include <winioctl.h>
#ifdef __MINGW32__
#define INITGUID
#include <initguid.h> // needed for dev-c++ & DEFINE_GUID
#endif
endif
include <stdio.h>
include <stdlib.h>
include <string.h>
include <fcntl.h>
include <errno.h>
include <ctype.h>
// notes below
//----------------------------------------------------------------------
class ofSerial{
public:
ofSerial();
virtual ~ofSerial();
void enumerateDevices();
void close();
bool setup(); // use default port, baud (0,9600)
bool setup(string portName, int baudrate);
bool setup(int deviceNumber, int baudrate);
int readBytes(unsigned char * buffer, int length);
int writeBytes(unsigned char * buffer, int length);
bool writeByte(unsigned char singleByte);
int readByte(); // returns -1 on no read or error...
void flush(bool flushIn = true, bool flushOut = true);
int available();
bool bVerbose;
void setVerbose(bool bLoudmouth) { bVerbose = bLoudmouth; };
protected:
bool bInited;
#ifdef TARGET_WIN32
char ** portNamesShort;//[MAX_SERIAL_PORTS];
char ** portNamesFriendly; [MAX_SERIAL_PORTS];
HANDLE hComm; // the handle to the serial port pc
int nPorts;
bool bPortsEnumerated;
void enumerateWin32Ports();
COMMTIMEOUTS oldTimeout; // we alter this, so keep a record
#else
int fd; // the handle to the serial port mac
struct termios oldoptions;
#endif
};
//----------------------------------------------------------------------
// this serial code contains small portions of the following code-examples:
// ---------------------------------------------------
// http://todbot.com/arduino/host/arduino-serial/arduino-serial.c
// web.mac.com/miked13/iWeb/Arduino/Serial%20Write_files/main.cpp
// www.racer.nl/docs/libraries/qlib/qserial.htm
// ---------------------------------------------------
// notes:
// ----------------------------
// when calling setup("....") you need to pass in
// the name of the com port the device is attached to
// for example, on a mac, it might look like:
//
// setup("/dev/tty.usbserial-3B1", 9600)
//
// and on a pc, it might look like:
//
// setup("COM4", 9600)
//
// if you are using an arduino board, for example,
// you should check what ports you device is on in the
// arduino program
// to do:
// ----------------------------
// a) support blocking / non-blocking
// b) support numChars available type functions
// c) can we reduce the number of includes here?
// useful :
// http://en.wikibooks.org/wiki/Serial_Programming:Unix/termios
// http://www.keyspan.com/downloads-files/developer/win/USBSerial/html/DevDocsUSBSerial.html
// ----------------------------
// (also useful, might be this serial example - worth checking out:
// http://web.mit.edu/kvogt/Public/osrc/src/
// if has evolved ways of dealing with blocking
// and non-blocking instances)
// ----------------------------
endif
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.