00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00028 #ifndef qs_pkg_h
00029 #define qs_pkg_h
00030
00034
00035 #include "qs_port.h"
00036
00038 typedef uint16_t QSCtr;
00039
00043 #define QS_INSERT_BYTE(b_) \
00044 QS_ring_[QS_head_++] = (b_); \
00045 if (QS_head_ == QS_end_) { \
00046 QS_head_ = (QSCtr)0; \
00047 } \
00048 ++QS_used_;
00049
00051 #define QS_INSERT_ESC_BYTE(b_) \
00052 QS_chksum_ = (uint8_t)(QS_chksum_ + (b_)); \
00053 if (((b_) == QS_FRAME) || ((b_) == QS_ESC)) { \
00054 QS_INSERT_BYTE(QS_ESC) \
00055 QS_INSERT_BYTE((uint8_t)((b_) ^ QS_ESC_XOR)) \
00056 } \
00057 else { \
00058 QS_INSERT_BYTE(b_) \
00059 }
00060
00063 #define QS_INSERT_CHKSUM_BYTE() \
00064 QS_chksum_ = (uint8_t)~QS_chksum_; \
00065 if ((QS_chksum_ == QS_FRAME) || (QS_chksum_ == QS_ESC)) { \
00066 QS_INSERT_BYTE(QS_ESC) \
00067 QS_INSERT_BYTE((uint8_t)(QS_chksum_ ^ QS_ESC_XOR)) \
00068 } \
00069 else { \
00070 QS_INSERT_BYTE(QS_chksum_) \
00071 }
00072
00073
00075 #define QS_FRAME ((uint8_t)0x7E)
00076
00078 #define QS_ESC ((uint8_t)0x7D)
00079
00084 #define QS_ESC_XOR 0x20
00085
00086 #ifndef Q_ROM_BYTE
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100 #define Q_ROM_BYTE(rom_var_) (rom_var_)
00101 #endif
00102
00103
00104 extern uint8_t *QS_ring_;
00105 extern QSCtr QS_end_;
00106 extern QSCtr QS_head_;
00107 extern QSCtr QS_tail_;
00108 extern QSCtr QS_used_;
00109 extern uint8_t QS_seq_;
00110 extern uint8_t QS_chksum_;
00111 extern uint8_t QS_full_;
00112
00113 #endif // qs_pkg_h