?? stxetx_8h-source.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Procyon AVRlib: stxetx.h Source File</title><link href="dox.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.6 --><div class="qindex"><a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a></div><h1>stxetx.h</h1><a href="stxetx_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*! \file stxetx.h \brief STX/ETX Packet Protocol Implementation Library. */</span>00002 <span class="comment">//*****************************************************************************</span>00003 <span class="comment">//</span>00004 <span class="comment">// File Name : 'stxetx.h'</span>00005 <span class="comment">// Title : STX/ETX Packet Protocol Implementation Library</span>00006 <span class="comment">// Author : Pascal Stang - Copyright (C) 2002-2003</span>00007 <span class="comment">// Created : 10/9/2002</span>00008 <span class="comment">// Revised : 02/10/2003</span>00009 <span class="comment">// Version : 0.1</span>00010 <span class="comment">// Target MCU : any</span>00011 <span class="comment">// Editor Tabs : 4</span>00012 <span class="comment">//</span>00013 <span class="comment">// Description : This library provides a set of functions needed to send and</span>00014 <span class="comment">// receive STX/ETX packets. STX/ETX is a simple packet protocol that can</span>00015 <span class="comment">// be wrapped around user data for one or more of the following reasons:</span>00016 <span class="comment">//</span>00017 <span class="comment">// 1. packetization is needed</span>00018 <span class="comment">// - Using packets can be helpful if your data naturally forms </span>00019 <span class="comment">// little "bunches" or if different types of data must be sent</span>00020 <span class="comment">// over the same channel (a serial cable, for example). If your</span>00021 <span class="comment">// data forms "bunches", you can send user data inside STX/ETX</span>00022 <span class="comment">// packets with a predetermined structure, like an array of A/D</span>00023 <span class="comment">// conversion results. If you need a way to tell the receiver</span>00024 <span class="comment">// what kind of data you're sending, you can use the TYPE field</span>00025 <span class="comment">// in the STX/ETX packet.</span>00026 <span class="comment">// 2. error checking is needed</span>00027 <span class="comment">// - STX/ETX packets will add a checksum to your data. This</span>00028 <span class="comment">// allows the receiver to verify that data was received correctly</span>00029 <span class="comment">// and is error-free. Packets which are corrupted in transmission</span>00030 <span class="comment">// and fail the the checksum test are automatically discarded.</span>00031 <span class="comment">// Error checking is especially useful when the data transmission</span>00032 <span class="comment">// channel is unreliable or noisy (examples: radio, infrared, long</span>00033 <span class="comment">// cables, etc)</span>00034 <span class="comment">// </span>00035 <span class="comment">// STX/ETX packets have the following structure:</span>00036 <span class="comment">//</span>00037 <span class="comment">// [STX][status][type][length][user data...][checksum][ETX]</span>00038 <span class="comment">//</span>00039 <span class="comment">// All fields are 1 byte except for user data which may be 0-255 bytes.</span>00040 <span class="comment">// Uppercase fields are constant (STX=0x02, ETX=0x03), lowercase fields</span>00041 <span class="comment">// vary. The length field is the number of bytes in the user data area.</span>00042 <span class="comment">// The checksum is the 8-bit sum of all bytes between but not including</span>00043 <span class="comment">// STX/ETX.</span>00044 <span class="comment">//</span>00045 <span class="comment">// This code is distributed under the GNU Public License</span>00046 <span class="comment">// which can be found at http://www.gnu.org/licenses/gpl.txt</span>00047 <span class="comment">//</span>00048 <span class="comment">//*****************************************************************************</span>00049 00050 <span class="preprocessor">#ifndef STXETX_H</span>00051 <span class="preprocessor"></span><span class="preprocessor">#define STXETX_H</span>00052 <span class="preprocessor"></span>00053 <span class="preprocessor">#include "<a class="code" href="buffer_8h.html">buffer.h</a>"</span>00054 00055 <span class="comment">// include project-dependent configuration options</span>00056 <span class="preprocessor">#include "<a class="code" href="stxetxconf_8h.html">stxetxconf.h</a>"</span>00057 00058 <span class="comment">// constants</span>00059 <span class="comment">// packet markers</span>00060 <span class="preprocessor">#define STX 0x02 // start transmission marker</span>00061 <span class="preprocessor"></span><span class="preprocessor">#define ETX 0x03 // end transmission marker</span>00062 <span class="preprocessor"></span><span class="comment">// packet length parameters</span>00063 <span class="preprocessor">#define STXETX_HEADERLENGTH 4 // number of bytes required for packet header</span>00064 <span class="preprocessor"></span><span class="preprocessor">#define STXETX_TRAILERLENGTH 2 // number of bytes required for packet trailer</span>00065 <span class="preprocessor"></span><span class="comment">// packet field offsets</span>00066 <span class="preprocessor">#define STXETX_STATUSOFFSET 1 // number of bytes from STX to STATUS</span>00067 <span class="preprocessor"></span><span class="preprocessor">#define STXETX_TYPEOFFSET 2 // number of bytes from STX to TYPE</span>00068 <span class="preprocessor"></span><span class="preprocessor">#define STXETX_LENGTHOFFSET 3 // number of bytes from STX to LENGTH</span>00069 <span class="preprocessor"></span><span class="preprocessor">#define STXETX_DATAOFFSET 4 // number of bytes from STX to the data</span>00070 <span class="preprocessor"></span><span class="preprocessor">#define STXETX_CHECKSUMOFFSET 4 // number of bytes from STX+[length] to CHECKSUM</span>00071 <span class="preprocessor"></span><span class="preprocessor">#define STXETX_NOETXSTXCHECKSUM 3 // number of bytes used by STX,ETX,CHECKSUM</span>00072 <span class="preprocessor"></span>00073 00074 <span class="comment">// function prototypes</span>00075 <span class="comment"></span>00076 <span class="comment">//! Initialize STX/ETX packet protocol library</span>00077 <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="stxetx_8h.html#a10">stxetxInit</a>(<span class="keywordtype">void</span> (*dataout_func)(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> data));00078 <span class="comment"></span>00079 <span class="comment">//! Send/Create STX/ETX packet</span>00080 <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="stxetx_8h.html#a11">stxetxSend</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> status, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> type, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> datalength, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* dataptr);00081 <span class="comment"></span>00082 <span class="comment">//! Process a buffer containing STX/ETX packets</span>00083 <span class="comment"></span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="stxetx_8h.html#a12">stxetxProcess</a>(cBuffer* rxBuffer);00084 <span class="comment"></span>00085 <span class="comment">//! Returns the received packet's status</span>00086 <span class="comment"></span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="stxetx_8c.html#a5">stxetxGetRxPacketStatus</a>(<span class="keywordtype">void</span>);00087 <span class="comment"></span>00088 <span class="comment">//! Returns the received packet's type</span>00089 <span class="comment"></span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="stxetx_8c.html#a6">stxetxGetRxPacketType</a>(<span class="keywordtype">void</span>);00090 <span class="comment"></span>00091 <span class="comment">//! Returns the received packet's datalength</span>00092 <span class="comment"></span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="stxetx_8c.html#a7">stxetxGetRxPacketDatalength</a>(<span class="keywordtype">void</span>);00093 <span class="comment"></span>00094 <span class="comment">//! Returns pointer to the received packet's data</span>00095 <span class="comment"></span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* <a class="code" href="stxetx_8c.html#a8">stxetxGetRxPacketData</a>(<span class="keywordtype">void</span>);00096 00097 00098 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Oct 15 03:50:22 2004 for Procyon AVRlib by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.6 </small></address></body></html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -