Line No. | Rev | Author | Line |
---|---|---|---|
1 | 6 | kaklik | /*! \file stxetx.h \brief STX/ETX Packet Protocol Implementation Library. */ |
2 | //***************************************************************************** |
||
3 | // |
||
4 | // File Name : 'stxetx.h' |
||
5 | // Title : STX/ETX Packet Protocol Implementation Library |
||
6 | // Author : Pascal Stang - Copyright (C) 2002-2003 |
||
7 | // Created : 10/9/2002 |
||
8 | // Revised : 02/10/2003 |
||
9 | // Version : 0.1 |
||
10 | // Target MCU : any |
||
11 | // Editor Tabs : 4 |
||
12 | // |
||
13 | /// \ingroup general |
||
14 | /// \defgroup stxetx STX/ETX Packet Protocol Library (stxetx.c) |
||
15 | /// \code #include "stxetx.h" \endcode |
||
16 | /// \par Overview |
||
17 | /// This library provides functions needed to transmit and receive STX/ETX |
||
18 | /// packets over any interface which can send and receive bytes. STX/ETX is a |
||
19 | /// simple packet protocol for serial data streams and offers packetization, |
||
20 | /// type tagging, and checksum protection for user data. Common uses of STX/ETX |
||
21 | /// might include radio communications were it can improve data reliability over |
||
22 | /// lossy channels. STX/ETX may also be used effectively anywhere multiple |
||
23 | /// access to the communication medium is required. The packets can be made |
||
24 | /// to contain destination addresses or routing information as well as data. |
||
25 | /// |
||
26 | /// \par STX/ETX Details |
||
27 | /// STX/ETX is a simple packet protocol that can be wrapped around user |
||
28 | /// data for one or more of the following reasons: |
||
29 | /// 1. packetization is needed |
||
30 | /// - Using packets can be helpful if your data naturally forms |
||
31 | /// little "bunches" or if different types of data must be sent |
||
32 | /// over the same channel (a serial cable, for example). If your |
||
33 | /// data forms "bunches", you can send user data inside STX/ETX |
||
34 | /// packets with a predetermined structure, like an array of A/D |
||
35 | /// conversion results. If you need a way to tell the receiver |
||
36 | /// what kind of data you're sending, you can use the TYPE field |
||
37 | /// in the STX/ETX packet. |
||
38 | /// 2. error checking is needed |
||
39 | /// - STX/ETX packets will add a checksum to your data. This |
||
40 | /// allows the receiver to verify that data was received correctly |
||
41 | /// and is error-free. Packets which are corrupted in transmission |
||
42 | /// and fail the the checksum test are automatically discarded. |
||
43 | /// Error checking is especially useful when the data transmission |
||
44 | /// channel is unreliable or noisy (examples: radio, infrared, long |
||
45 | /// cables, etc) |
||
46 | /// |
||
47 | /// STX/ETX packets have the following structure: |
||
48 | /// |
||
49 | /// [STX][status][type][length][user data...][checksum][ETX] |
||
50 | /// |
||
51 | /// All fields are 1 byte except for user data which may be 0-255 bytes. |
||
52 | /// Uppercase fields are constant (STX=0x02, ETX=0x03), lowercase fields |
||
53 | /// vary. The length field is the number of bytes in the user data area. |
||
54 | /// The checksum is the 8-bit sum of all bytes between but not including |
||
55 | /// STX/ETX. |
||
56 | // |
||
57 | // This code is distributed under the GNU Public License |
||
58 | // which can be found at http://www.gnu.org/licenses/gpl.txt |
||
59 | // |
||
60 | //***************************************************************************** |
||
61 | //@{ |
||
62 | |||
63 | #ifndef STXETX_H |
||
64 | #define STXETX_H |
||
65 | |||
66 | #include "buffer.h" |
||
67 | |||
68 | // include project-dependent configuration options |
||
69 | #include "stxetxconf.h" |
||
70 | |||
71 | // constants |
||
72 | // packet markers |
||
73 | #define STX 0x02 // start transmission marker |
||
74 | #define ETX 0x03 // end transmission marker |
||
75 | // packet length parameters |
||
76 | #define STXETX_HEADERLENGTH 4 // number of bytes required for packet header |
||
77 | #define STXETX_TRAILERLENGTH 2 // number of bytes required for packet trailer |
||
78 | // packet field offsets |
||
79 | #define STXETX_STATUSOFFSET 1 // number of bytes from STX to STATUS |
||
80 | #define STXETX_TYPEOFFSET 2 // number of bytes from STX to TYPE |
||
81 | #define STXETX_LENGTHOFFSET 3 // number of bytes from STX to LENGTH |
||
82 | #define STXETX_DATAOFFSET 4 // number of bytes from STX to the data |
||
83 | #define STXETX_CHECKSUMOFFSET 4 // number of bytes from STX+[length] to CHECKSUM |
||
84 | #define STXETX_NOETXSTXCHECKSUM 3 // number of bytes used by STX,ETX,CHECKSUM |
||
85 | |||
86 | |||
87 | // function prototypes |
||
88 | |||
89 | //! Initialize STX/ETX packet protocol library |
||
90 | void stxetxInit(void (*dataout_func)(unsigned char data)); |
||
91 | |||
92 | //! Send/Create STX/ETX packet |
||
93 | void stxetxSend(unsigned char status, unsigned char type, unsigned char datalength, unsigned char* dataptr); |
||
94 | |||
95 | //! Process a buffer containing STX/ETX packets |
||
96 | unsigned char stxetxProcess(cBuffer* rxBuffer); |
||
97 | |||
98 | //! Returns the received packet's status |
||
99 | unsigned char stxetxGetRxPacketStatus(void); |
||
100 | |||
101 | //! Returns the received packet's type |
||
102 | unsigned char stxetxGetRxPacketType(void); |
||
103 | |||
104 | //! Returns the received packet's datalength |
||
105 | unsigned char stxetxGetRxPacketDatalength(void); |
||
106 | |||
107 | //! Returns pointer to the received packet's data |
||
108 | unsigned char* stxetxGetRxPacketData(void); |
||
109 | |||
110 | |||
111 | #endif |
||
112 | //@} |
Powered by WebSVN v2.8.3