From 013bac441997a3a008507835aa4c745458422786 Mon Sep 17 00:00:00 2001 From: Olivier Matz Date: Tue, 12 Nov 2013 23:36:59 +0100 Subject: [PATCH] parse rx hello frames --- commands.c | 33 +++++++++++++++++++++++++++++---- main.c | 10 ++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/commands.c b/commands.c index f5676be..2e02551 100644 --- a/commands.c +++ b/commands.c @@ -573,19 +573,24 @@ const parse_inst_t PROGMEM cmd_sendmsg = { struct cmd_send_hello_result { fixed_string_t send_hello; uint64_t addr; + struct xbee_neigh *neigh; uint16_t period; uint16_t count; fixed_string_t data; }; /* function called when cmd_send_hello is parsed successfully */ -static void cmd_send_hello_parsed(void *parsed_result, void *data) +static void cmd_send_hello_parsed(void *parsed_result, void *use_neigh) { struct cmd_send_hello_result *res = parsed_result; uint16_t now, next, diff; uint8_t flags; + uint64_t addr; - (void)data; + if (use_neigh) + addr = res->neigh->addr; + else + addr = res->addr; IRQ_LOCK(flags); now = global_ms; @@ -593,7 +598,7 @@ static void cmd_send_hello_parsed(void *parsed_result, void *data) next = now; - while (!cmdline_keypressed() || res->count == 0) { + while (!cmdline_keypressed() && res->count != 0) { IRQ_LOCK(flags); now = global_ms; IRQ_UNLOCK(flags); @@ -602,8 +607,9 @@ static void cmd_send_hello_parsed(void *parsed_result, void *data) if (diff < res->period) continue; - rc_proto_send_hello(res->addr, res->data, strlen(res->data)); + rc_proto_send_hello(addr, res->data, strlen(res->data)); next += res->period; + res->count--; } } @@ -642,6 +648,24 @@ const parse_inst_t PROGMEM cmd_send_hello = { }, }; +const parse_token_neighbor_t PROGMEM cmd_send_hello_neigh = + TOKEN_NEIGHBOR_INITIALIZER(struct cmd_send_hello_result, neigh, + &xbee_dev); + +const parse_inst_t PROGMEM cmd_send_hello_name = { + .f = cmd_send_hello_parsed, /* function to call */ + .data = (void *)1, /* 2nd arg of func */ + .help_str = help_send_hello, + .tokens = { /* token list, NULL terminated */ + (PGM_P)&cmd_send_hello_send_hello, + (PGM_P)&cmd_send_hello_neigh, + (PGM_P)&cmd_send_hello_period, + (PGM_P)&cmd_send_hello_count, + (PGM_P)&cmd_send_hello_data, + NULL, + }, +}; + /* ************* */ /* this structure is filled when cmd_sendmsg_name is parsed successfully */ @@ -1885,6 +1909,7 @@ const parse_ctx_t PROGMEM main_ctx[] = { &cmd_write_u32, &cmd_sendmsg, &cmd_send_hello, + &cmd_send_hello_name, &cmd_sendmsg_name, &cmd_range, &cmd_range_period, diff --git a/main.c b/main.c index 2d280a4..c3511b5 100644 --- a/main.c +++ b/main.c @@ -266,6 +266,16 @@ int xbee_recv_data(struct xbee_recv_hdr *recvframe, unsigned len) break; } #endif + case RC_PROTO_HELLO: { + struct rc_proto_hello *rch = + (struct rc_proto_hello *) recvframe->data; + + if (xbee_debug) + printf_P(PSTR("recv hello len=%d\r\n"), + rch->datalen); + + break; + } default: return -1; } -- 2.39.5