diff options
| author | Dave Wilson <[email protected]> | 2015-03-17 19:50:07 -0700 |
|---|---|---|
| committer | Dave Wilson <[email protected]> | 2015-03-17 19:50:07 -0700 |
| commit | 97cf5197cf5b882b2c689d8dc2b555f2edf8f418 (patch) | |
| tree | 46f3701832d70b420eb0fc0eb93261f9da45db3f /wpd/WpdBasicHardwareDriver/RS232Connection.h | |
| parent | ef1905bf1e8825bb31120dfb27e0daf3154d859a (diff) | |
Initial publish
Diffstat (limited to 'wpd/WpdBasicHardwareDriver/RS232Connection.h')
| -rw-r--r-- | wpd/WpdBasicHardwareDriver/RS232Connection.h | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/wpd/WpdBasicHardwareDriver/RS232Connection.h b/wpd/WpdBasicHardwareDriver/RS232Connection.h new file mode 100644 index 00000000..cd7f10b7 --- /dev/null +++ b/wpd/WpdBasicHardwareDriver/RS232Connection.h @@ -0,0 +1,153 @@ +#pragma once + +// +// Sensor device structures and definitions +// + +// +// Format of the 9-byte receive packet (device to PC): +// +// ORIGINAL TEMP_SENSOR PACKET FORMAT: [ VALUE (4 bytes) | INTERVAL (5 bytes) ] +// +// Format of the multi-byte receive packet (device to PC): +// +// NEW PACKET FORMAT: [ SENSOR_ID (1 byte) | ELEMENT_COUNT (1 byte) | ELEMENT_SIZE (1 byte) | ELEMENTS (size bytes) | INTERVAL (5 bytes) ] +// COMPASS PACKET FORMAT: [ SENSOR_ID = 1 | ELEMENT_COUNT = 1 | ELEMENT_SIZE = 3 | HEADING 3-bytes | INTERVAL (5 bytes) ] +// SENSIRON PACKET FORMAT: [ SENSOR_ID = 2 | ELEMENT_COUNT = 1 | ELEMENT_SIZE = 7 | TEMP 4-bytes | HUMIDITY 3-bytes | INTERVAL (5 bytes) ] +// FLEX PACKET FORMAT: [ SENSOR_ID = 3 | ELEMENT_COUNT = 1 | ELEMENT_SIZE = 5 | PRESSURE 5-bytes | INTERVAL (5 bytes) ] +// PING PACKET FORMAT: [ SENSOR_ID = 4 | ELEMENT_COUNT = 1 | ELEMENT_SIZE = 5 | PRESSURE 5-bytes | INTERVAL (5 bytes) ] +// PIR PACKET FORMAT: [ SENSOR_ID = 5 | ELEMENT_COUNT = 1 | ELEMENT_SIZE = 1 | STATE 1-byte | INTERVAL (5 bytes) ] +// MEMSIC PACKET FORMAT: [ SENSOR_ID = 6 | ELEMENT_COUNT = 1 | ELEMENT_SIZE = 6 | X-Axis Gs 3-bytes | Y-Axis Gs 3-bytes | INTERVAL (5 bytes) ] +// QTI PACKET FORMAT: [ SENSOR_ID = 7 | ELEMENT_COUNT = 1 | ELEMENT_SIZE = 4 | PRESSURE 4-bytes | INTERVAL (5 bytes) ] +// PIEZO PACKET FORMAT: [ SENSOR_ID = 8 | ELEMENT_COUNT = 1 | ELEMENT_SIZE = 1 | STATE 1-byte | INTERVAL (5 bytes) +// HITACHI PACKET FORMAT: [ SENSOR_ID = 9 | ELEMENT_COUNT = 3 | ELEMENT_SIZE = 4 | X-Axis Gs 4-bytes | Y-Axis Gs 4-bytes | Z-Axis Gs 4-bytes | INTERVAL (5 bytes) ] +// +// +// Format of the 6-byte send packet (PC to device): +// The final NULL byte signals the SERIN DEC formatter to stop reading +// +// [ INTERVAL (5 bytes) | 0 (1 byte) ] +// +#define INTERVAL_DATA_LENGTH 6 // count of bytes for interval +#define MIN_DATA_LENGTH 4 // minimum count of bytes for any sensor +#define MAX_DATA_LENGTH 21 // maximum count of bytes for any sensor +#define MAX_AMOUNT_TO_READ (MAX_DATA_LENGTH+INTERVAL_DATA_LENGTH) // maximum total bytes to read + +#define MEMSIC_DATA_LENGTH 9 // count of data bytes for Memsic dual-axis accelerometer +#define HITACHI_DATA_LENGTH 15 // count of data bytes for Hitachi tri-axis accelerometer +#define COMPASS_DATA_LENGTH 6 // count of data bytes for Compass +#define SENSIRON_DATA_LENGTH 10 // count of data bytes for Sensiron temp/humidity sensor +#define PING_DATA_LENGTH 8 // count of data bytes for Ping distance sensor +#define FLEX_DATA_LENGTH 8 // count of data bytes for Flexiforce pressure sensor +#define PIR_DATA_LENGTH 4 // count of data bytes for PIR +#define QTI_DATA_LENGTH 7 // count of data bytes for QTI +#define PIEZO_DATA_LENGTH 4 // count of data bytes for Piezo + +#define MEMSIC_AMOUNT_TO_READ (MEMSIC_DATA_LENGTH+INTERVAL_DATA_LENGTH) // total Memsic byte count +#define HITACHI_AMOUNT_TO_READ (HITACHI_DATA_LENGTH+INTERVAL_DATA_LENGTH) // total Hitachi byte count +#define COMPASS_AMOUNT_TO_READ (COMPASS_DATA_LENGTH+INTERVAL_DATA_LENGTH) // total Compass byte count +#define SENSIRON_AMOUNT_TO_READ (SENSIRON_DATA_LENGTH+INTERVAL_DATA_LENGTH) // total Sensiron byte count +#define PING_AMOUNT_TO_READ (PING_DATA_LENGTH+INTERVAL_DATA_LENGTH) // total Ping byte count +#define FLEX_AMOUNT_TO_READ (FLEX_DATA_LENGTH+INTERVAL_DATA_LENGTH) // total Flexiforce byte count +#define PIR_AMOUNT_TO_READ (PIR_DATA_LENGTH+INTERVAL_DATA_LENGTH) // total PIR byte count +#define QTI_AMOUNT_TO_READ (QTI_DATA_LENGTH+INTERVAL_DATA_LENGTH) // total QTI byte count +#define PIEZO_AMOUNT_TO_READ (PIEZO_DATA_LENGTH+INTERVAL_DATA_LENGTH) // total Piezo byte count + +#define DEVICE_ID 0 // byte 0 contains the Device ID +#define ELEMENT_SIZE 1 // byte 1 contains the Element Size +#define ELEMENT_COUNT 2 // byte 2 contains the Element Count + +// Update interval range in milliseconds +#define SENSOR_UPDATE_INTERVAL_MIN 10 // milliseconds +#define SENSOR_UPDATE_INTERVAL_MAX 60000 // milliseconds +#define SENSOR_UPDATE_INTERVAL_STEP 1 // milliseconds + +// TODO: Change these range values to match your sensor hardware +#define SENSOR_READING_MIN 1 // ?Units +#define SENSOR_READING_MAX 378 // ?Units +#define SENSOR_READING_STEP 1 // ?Units + +// TODO: Change this to match the default COM port to use +#define COM_PORT_NAME L"COM1" +#define NUM_READSTAT_HANDLES 4 +#define MAX_STATUS_LENGTH 100 + +// Ascii definitions +#define ASCII_BEL 0x07 +#define ASCII_BS 0x08 +#define ASCII_LF 0x0A +#define ASCII_CR 0x0D +#define ASCII_XON 0x11 +#define ASCII_XOFF 0x13 + +// Miscellaneous definitions +#define MAX_READ_BUFFER 2048 +#define MAX_WRITE_BUFFER 1024 +#define EVENTFLAGS_DEFAULT EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RING | EV_RLSD +#define FLAGCHAR_DEFAULT '\n' + +// Read states +#define RECEIVE_TTY 0x01 +#define RECEIVE_CAPTURED 0x02 + +class RS232Connection +{ + +public: + RS232Connection(); + + ~RS232Connection() + { + Disconnect(); + } + + HRESULT Connect(_In_ LPCWSTR wszPortName, _Out_ HANDLE *phCommPort); + void Disconnect(); + +private: + HRESULT SetPortState(); + +private: + + // + // Required for the RS232 initialization and communication. + // + + // TTY member variables and defines + HANDLE m_hCommPort; + DWORD m_dwEventFlags; + CHAR m_chFlag; + CHAR m_chXON; + CHAR m_chXOFF; + WORD m_wXONLimit; + WORD m_wXOFFLimit; + DWORD m_fRtsControl; + DWORD m_fDtrControl; + BOOL m_fConnected; + BOOL m_fTransferring; + BOOL m_fRepeating; + BOOL m_fLocalEcho; + BOOL m_fNewLine; + BOOL m_fDisplayErrors; + BOOL m_fAutowrap; + BOOL m_fCTSOutFlow; + BOOL m_fDSROutFlow; + BOOL m_fDSRInFlow; + BOOL m_fXonXoffOutFlow; + BOOL m_fXonXoffInFlow; + BOOL m_fTXafterXoffSent; + BOOL m_fNoReading; + BOOL m_fNoWriting; + BOOL m_fNoEvents; + BOOL m_fNoStatus; + BOOL m_fDisplayTimeouts; + BYTE m_bPort; + BYTE m_bByteSize; + BYTE m_bParity; + BYTE m_bStopBits; + DWORD m_dwBaudRate; + COMMTIMEOUTS m_timeoutsorig; + COMMTIMEOUTS m_timeoutsnew; + COMMTIMEOUTS m_TimeoutsDefault; + DWORD m_dwReceiveState; +};
\ No newline at end of file |
