22 uint8_t
event =
args->rx_pin_isr_.digital_read();
25 uint16_t dur = (curr -
args->rx_prev);
29 }
else if (dur < 500) {
31 }
else if (dur < 2000) {
33 }
else if (dur > 5000) {
39 switch (
args->rx_state) {
43 args->rx_state = RX_STATE_MSGSTARTFOUND;
47 case RX_STATE_MSGSTARTFOUND:
53 args->rx_num_bytes = 0;
54 args->rx_state = RX_STATE_BYTESTARTFOUND;
58 args->rx_state = RX_STATE_IDLE;
62 case RX_STATE_BYTESTARTFOUND:
68 args->rx_state = RX_STATE_GETBYTE;
69 args->rx_num_bits = 0;
72 args->rx_state = RX_STATE_GETBYTE;
74 args->rx_num_bits = 1;
75 args->rx_buf[
args->rx_num_bytes] = 0;
79 args->rx_state = RX_STATE_IDLE;
83 case RX_STATE_GETBYTE:
87 if (
args->lwrx_stats_enable) {
88 args->lwrx_stats[RX_STAT_HIGH_MAX] = std::max(
args->lwrx_stats[RX_STAT_HIGH_MAX], dur);
89 args->lwrx_stats[RX_STAT_HIGH_MIN] = std::min(
args->lwrx_stats[RX_STAT_HIGH_MIN], dur);
90 args->lwrx_stats[RX_STAT_HIGH_AVE] =
91 args->lwrx_stats[RX_STAT_HIGH_AVE] - (
args->lwrx_stats[RX_STAT_HIGH_AVE] >> 4) + dur;
96 args->rx_buf[
args->rx_num_bytes] =
args->rx_buf[
args->rx_num_bytes] << 1 | 1;
98 if (
args->lwrx_stats_enable) {
99 args->lwrx_stats[RX_STAT_LOW1_MAX] = std::max(
args->lwrx_stats[RX_STAT_LOW1_MAX], dur);
100 args->lwrx_stats[RX_STAT_LOW1_MIN] = std::min(
args->lwrx_stats[RX_STAT_LOW1_MIN], dur);
101 args->lwrx_stats[RX_STAT_LOW1_AVE] =
102 args->lwrx_stats[RX_STAT_LOW1_AVE] - (
args->lwrx_stats[RX_STAT_LOW1_AVE] >> 4) + dur;
107 args->rx_buf[
args->rx_num_bytes] =
args->rx_buf[
args->rx_num_bytes] << 2 | 2;
110 if (
args->lwrx_stats_enable) {
111 args->lwrx_stats[RX_STAT_LOW0_MAX] = std::max(
args->lwrx_stats[RX_STAT_LOW0_MAX], dur);
112 args->lwrx_stats[RX_STAT_LOW0_MIN] = std::min(
args->lwrx_stats[RX_STAT_LOW0_MIN], dur);
113 args->lwrx_stats[RX_STAT_LOW0_AVE] =
114 args->lwrx_stats[RX_STAT_LOW0_AVE] - (
args->lwrx_stats[RX_STAT_LOW0_AVE] >> 4) + dur;
119 args->rx_state = RX_STATE_IDLE;
122 if (
args->rx_num_bits >= 8) {
123 args->rx_num_bytes++;
124 args->rx_num_bits = 0;
125 if (
args->rx_num_bytes >= RX_MSGLEN) {
127 if (
args->rx_repeats > 0) {
128 if ((curr_millis -
args->rx_prevpkttime) / 100 >
args->rx_timeout) {
129 args->rx_repeatcount = 1;
132 int16_t i = RX_MSGLEN;
135 }
while ((i >= 0) && (
args->rx_msg[i] ==
args->rx_buf[i]));
137 args->rx_repeatcount++;
139 args->rx_repeatcount = 1;
143 args->rx_repeatcount = 0;
145 args->rx_prevpkttime = curr_millis;
147 memcpy(
args->rx_msg,
args->rx_buf, RX_MSGLEN);
148 if (
args->rx_repeats == 0 ||
args->rx_repeatcount ==
args->rx_repeats) {
149 if (
args->rx_pairtimeout != 0) {
150 if ((curr_millis -
args->rx_pairstarttime) / 100 <=
args->rx_pairtimeout) {
151 if (
args->rx_msg[3] == RX_CMD_ON) {
152 args->rx_addpairfrommsg_();
153 }
else if (
args->rx_msg[3] == RX_CMD_OFF) {
154 args->rx_remove_pair_(&
args->rx_msg[2]);
158 if (
args->rx_report_message_()) {
159 args->rx_msgcomplete =
true;
161 args->rx_pairtimeout = 0;
164 args->rx_state = RX_STATE_IDLE;
166 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...