08.02.2010 - version 0.1.2
This commit is contained in:
31
piserial.h
31
piserial.h
@@ -42,15 +42,16 @@
|
||||
# define B256000 256000
|
||||
#endif
|
||||
|
||||
#define BUFFER_SIZE 4096
|
||||
#define SERIAL_BUFFER_SIZE 4096
|
||||
|
||||
typedef bool (*SerialFunc)(void * , char * , int );
|
||||
typedef bool (*SerialFunc)(void * , uchar * , int );
|
||||
typedef bool (*SerialHeaderFunc)(void * , uchar * , uchar * , int );
|
||||
|
||||
class PISerial: public PIThread
|
||||
{
|
||||
class PISerial: public PIThread {
|
||||
public:
|
||||
// slot is any function format "bool <func>(void*, char*, int)"
|
||||
PISerial(PIString name = "serial", void * data = 0, SerialFunc slot = 0);
|
||||
// slot is any function format "bool <func>(void*, uchar*, int)"
|
||||
// slot_header is any function format "bool <func>(void*, uchar*, uchar*, int)"
|
||||
PISerial(PIString name = "serial", void * data = 0, SerialFunc slot = 0, SerialHeaderFunc slot_header = headerValidate);
|
||||
~PISerial();
|
||||
|
||||
enum Parameters {ParityControl = 0x01, ParityOdd = 0x02, TwoStopBits = 0x04};
|
||||
@@ -75,20 +76,20 @@ public:
|
||||
void setDevice(const PIString & dev) {devName = dev;}
|
||||
void setParameters(PIFlags<PISerial::Parameters> parameters) {params = parameters;}
|
||||
void setData(void * d) {data = d;}
|
||||
void setReadData(void * headerPtr, int headerSize, int dataSize) {this->headerPtr = headerPtr;
|
||||
this->headerSize = headerSize;
|
||||
this->dataSize = dataSize;}
|
||||
void setReadData(void * headerPtr, int headerSize, int dataSize) {this->headerPtr = headerPtr; this->headerSize = headerSize; this->dataSize = dataSize;}
|
||||
|
||||
bool send(char * data, int size);
|
||||
bool send(uchar * data, int size);
|
||||
bool init();
|
||||
bool initialized() const {return fd != -1;}
|
||||
void terminate();
|
||||
|
||||
PIByteArray lastHeader() {return mheader;}
|
||||
PIByteArray internalBuffer() {return PIByteArray(sbuffer, BUFFER_SIZE);}
|
||||
ullong missedBytes() const {return missed;}
|
||||
ullong missedPackets() const {return (packetSize == 0 ? 0 : missed / packetSize);}
|
||||
|
||||
private:
|
||||
int convertSpeed(PISerial::Speed speed);
|
||||
static bool headerValidate(void * d, uchar * src, uchar * rec, int size) {for (int i = 0; i < size; ++i) if (src[i] != rec[i]) return false; return true;}
|
||||
|
||||
void begin();
|
||||
void run();
|
||||
@@ -106,12 +107,14 @@ private:
|
||||
PISerial::Speed ospeed, ispeed;
|
||||
PIString devName;
|
||||
SerialFunc ret_func;
|
||||
char buffer[BUFFER_SIZE], sbuffer[BUFFER_SIZE], * hbuffer, * pbuffer;
|
||||
SerialHeaderFunc ret_func_header;
|
||||
uchar buffer[SERIAL_BUFFER_SIZE], sbuffer[SERIAL_BUFFER_SIZE];
|
||||
PIByteArray mheader;
|
||||
void * headerPtr, * data;
|
||||
int dataSize, headerSize, sbuffIndex, startIndex, backIndex;
|
||||
int dataSize, headerSize, packetSize, allReaded, addSize, curInd;
|
||||
ullong missed;
|
||||
PIFlags<PISerial::Parameters> params;
|
||||
bool first, tryagain;
|
||||
bool first;
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user