21 uint8_t
event =
args->rx_pin_isr_.digital_read();
24 uint16_t dur = (curr -
args->rx_prev);
28 }
else if (dur < 500) {
30 }
else if (dur < 2000) {
32 }
else if (dur > 5000) {
38 switch (
args->rx_state) {
42 args->rx_state = RX_STATE_MSGSTARTFOUND;
46 case RX_STATE_MSGSTARTFOUND:
52 args->rx_num_bytes = 0;
53 args->rx_state = RX_STATE_BYTESTARTFOUND;
57 args->rx_state = RX_STATE_IDLE;
61 case RX_STATE_BYTESTARTFOUND:
67 args->rx_state = RX_STATE_GETBYTE;
68 args->rx_num_bits = 0;
71 args->rx_state = RX_STATE_GETBYTE;
73 args->rx_num_bits = 1;
74 args->rx_buf[
args->rx_num_bytes] = 0;
78 args->rx_state = RX_STATE_IDLE;
82 case RX_STATE_GETBYTE:
86 if (
args->lwrx_stats_enable) {
87 args->lwrx_stats[RX_STAT_HIGH_MAX] = std::max(
args->lwrx_stats[RX_STAT_HIGH_MAX], dur);
88 args->lwrx_stats[RX_STAT_HIGH_MIN] = std::min(
args->lwrx_stats[RX_STAT_HIGH_MIN], dur);
89 args->lwrx_stats[RX_STAT_HIGH_AVE] =
90 args->lwrx_stats[RX_STAT_HIGH_AVE] - (
args->lwrx_stats[RX_STAT_HIGH_AVE] >> 4) + dur;
95 args->rx_buf[
args->rx_num_bytes] =
args->rx_buf[
args->rx_num_bytes] << 1 | 1;
97 if (
args->lwrx_stats_enable) {
98 args->lwrx_stats[RX_STAT_LOW1_MAX] = std::max(
args->lwrx_stats[RX_STAT_LOW1_MAX], dur);
99 args->lwrx_stats[RX_STAT_LOW1_MIN] = std::min(
args->lwrx_stats[RX_STAT_LOW1_MIN], dur);
100 args->lwrx_stats[RX_STAT_LOW1_AVE] =
101 args->lwrx_stats[RX_STAT_LOW1_AVE] - (
args->lwrx_stats[RX_STAT_LOW1_AVE] >> 4) + dur;
106 args->rx_buf[
args->rx_num_bytes] =
args->rx_buf[
args->rx_num_bytes] << 2 | 2;
109 if (
args->lwrx_stats_enable) {
110 args->lwrx_stats[RX_STAT_LOW0_MAX] = std::max(
args->lwrx_stats[RX_STAT_LOW0_MAX], dur);
111 args->lwrx_stats[RX_STAT_LOW0_MIN] = std::min(
args->lwrx_stats[RX_STAT_LOW0_MIN], dur);
112 args->lwrx_stats[RX_STAT_LOW0_AVE] =
113 args->lwrx_stats[RX_STAT_LOW0_AVE] - (
args->lwrx_stats[RX_STAT_LOW0_AVE] >> 4) + dur;
118 args->rx_state = RX_STATE_IDLE;
121 if (
args->rx_num_bits >= 8) {
122 args->rx_num_bytes++;
123 args->rx_num_bits = 0;
124 if (
args->rx_num_bytes >= RX_MSGLEN) {
126 if (
args->rx_repeats > 0) {
127 if ((curr_millis -
args->rx_prevpkttime) / 100 >
args->rx_timeout) {
128 args->rx_repeatcount = 1;
131 int16_t i = RX_MSGLEN;
134 }
while ((i >= 0) && (
args->rx_msg[i] ==
args->rx_buf[i]));
136 args->rx_repeatcount++;
138 args->rx_repeatcount = 1;
142 args->rx_repeatcount = 0;
144 args->rx_prevpkttime = curr_millis;
146 memcpy(
args->rx_msg,
args->rx_buf, RX_MSGLEN);
147 if (
args->rx_repeats == 0 ||
args->rx_repeatcount ==
args->rx_repeats) {
148 if (
args->rx_pairtimeout != 0) {
149 if ((curr_millis -
args->rx_pairstarttime) / 100 <=
args->rx_pairtimeout) {
150 if (
args->rx_msg[3] == RX_CMD_ON) {
151 args->rx_addpairfrommsg_();
152 }
else if (
args->rx_msg[3] == RX_CMD_OFF) {
153 args->rx_remove_pair_(&
args->rx_msg[2]);
157 if (
args->rx_report_message_()) {
158 args->rx_msgcomplete =
true;
160 args->rx_pairtimeout = 0;
163 args->rx_state = RX_STATE_IDLE;
165 args->rx_state = RX_STATE_BYTESTARTFOUND;
uint8_t lwrx_addpair(const uint8_t *pairdata)
Add a pair to filter received messages pairdata is device,dummy,5*addr,room pairdata is held in trans...