#include <sys/queue.h>
#include <arpa/inet.h>
#include <inttypes.h>
+#include <linux/joystick.h>
#include <event.h>
#include "parse_atcmd.h"
#include "parse_neighbor.h"
#include "parse_monitor.h"
+#include "rc_proto.h"
+#include "joystick.h"
#include "main.h"
static struct monitor_reg_list monitor_list = LIST_HEAD_INITIALIZER(x/*XXX*/);
static int range_count = 100;
static int range_cur_count = 0;
+static struct event rc_send_event;
+static int rc_send_period_ms = 100;
+static int rc_send_running = 0;
static const char *xbee_logfilename = "/tmp/xbee.log";
static void monitor_cb(int s, short event, void *arg)
if (monitor_current == NULL)
monitor_current = LIST_FIRST(&monitor_list);
- xbeeapp_send_atcmd(monitor_current->atcmd, NULL, 0, 0);
+ xbeeapp_send_atcmd(monitor_current->atcmd, NULL, 0, 0, NULL, NULL);
monitor_current = LIST_NEXT(monitor_current, next);
evtimer_set(&monitor_event, monitor_cb, cl);
}
range_power = ((range_power + i) & 0x7);
- xbeeapp_send_atcmd("PL", &range_power, sizeof(range_power), 0);
+ xbeeapp_send_atcmd("PL", &range_power, sizeof(range_power), 0, NULL, NULL);
snprintf(buf, sizeof(buf), "range%d", range_power);
xbeeapp_send_msg(range_dstaddr, buf, strlen(buf), 0);
evtimer_add(&range_event, &tv);
}
+
+static void rc_send_cb(int fd, short event, void *arg)
+{
+ struct cmdline *cl = arg;
+ struct timeval tv;
+
+ rc_proto_send_channels();
+
+ evtimer_set(&rc_send_event, rc_send_cb, cl);
+ tv.tv_sec = 0;
+ tv.tv_usec = 1000 * rc_send_period_ms;
+ evtimer_add(&rc_send_event, &tv);
+}
+
+
/* ************* */
/* this structure is filled when cmd_stats is parsed successfully */
},
};
+/* ************* */
+
+/* this structure is filled when cmd_rc_send is parsed successfully */
+struct cmd_rc_send_result {
+ cmdline_fixed_string_t rc_send;
+ cmdline_fixed_string_t action;
+};
+
+/* function called when cmd_rc_send is parsed successfully */
+static void cmd_rc_send_parsed(void *parsed_result, struct cmdline *cl,
+ void *data)
+{
+ struct cmd_rc_send_result *res = parsed_result;
+
+ if (!strcmp(res->action, "show"))
+ ;//XXX
+ else if (!strcmp(res->action, "start")) {
+ struct timeval tv;
+ if (rc_send_running) {
+ printf("already running\n");
+ return;
+ }
+ evtimer_set(&rc_send_event, rc_send_cb, cl);
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+ evtimer_add(&rc_send_event, &tv);
+ rc_send_running = 1;
+ }
+ else if (!strcmp(res->action, "end")) {
+ if (rc_send_running == 0) {
+ printf("not running\n");
+ return;
+ }
+ rc_send_running = 0;
+ evtimer_del(&rc_send_event);
+ }
+}
+
+cmdline_parse_token_string_t cmd_rc_send_rc_send =
+ TOKEN_STRING_INITIALIZER(struct cmd_rc_send_result, rc_send, "rc_send");
+cmdline_parse_token_string_t cmd_rc_send_action =
+ TOKEN_STRING_INITIALIZER(struct cmd_rc_send_result, action,
+ "show#start#end");
+
+cmdline_parse_inst_t cmd_rc_send = {
+ .f = cmd_rc_send_parsed, /* function to call */
+ .data = NULL, /* 2nd arg of func */
+ .help_str = "start/stop/show current rc_sending",
+ .tokens = { /* token list, NULL terminated */
+ (void *)&cmd_rc_send_rc_send,
+ (void *)&cmd_rc_send_action,
+ NULL,
+ },
+};
+
+/* ************* */
+
+/* this structure is filled when cmd_rc_send_period is parsed successfully */
+struct cmd_rc_send_period_result {
+ cmdline_fixed_string_t rc_send;
+ cmdline_fixed_string_t action;
+ uint32_t period;
+};
+
+/* function called when cmd_rc_send_period is parsed successfully */
+static void cmd_rc_send_period_parsed(void *parsed_result, struct cmdline *cl,
+ void *data)
+{
+ struct cmd_rc_send_period_result *res = parsed_result;
+
+ if (res->period < 10) {
+ printf("error, minimum period is 10 ms\n");
+ return;
+ }
+
+ rc_send_period_ms = res->period;
+}
+
+cmdline_parse_token_string_t cmd_rc_send_period_rc_send_period =
+ TOKEN_STRING_INITIALIZER(struct cmd_rc_send_period_result, rc_send,
+ "rc_send");
+cmdline_parse_token_string_t cmd_rc_send_period_action =
+ TOKEN_STRING_INITIALIZER(struct cmd_rc_send_period_result, action,
+ "period");
+cmdline_parse_token_num_t cmd_rc_send_period_period =
+ TOKEN_NUM_INITIALIZER(struct cmd_rc_send_period_result, period, UINT32);
+
+
+cmdline_parse_inst_t cmd_rc_send_period = {
+ .f = cmd_rc_send_period_parsed, /* function to call */
+ .data = NULL, /* 2nd arg of func */
+ .help_str = "set register rc_sending period",
+ .tokens = { /* token list, NULL terminated */
+ (void *)&cmd_rc_send_period_rc_send_period,
+ (void *)&cmd_rc_send_period_action,
+ (void *)&cmd_rc_send_period_period,
+ NULL,
+ },
+};
+
+/* ************* */
+
+/* this structure is filled when cmd_rc_send_dstaddr is parsed successfully */
+struct cmd_rc_send_dstaddr_result {
+ cmdline_fixed_string_t rc_send;
+ cmdline_fixed_string_t action;
+ uint64_t dstaddr;
+};
+
+/* function called when cmd_rc_send_dstaddr is parsed successfully */
+static void cmd_rc_send_dstaddr_parsed(void *parsed_result, struct cmdline *cl,
+ void *data)
+{
+ struct cmd_rc_send_dstaddr_result *res = parsed_result;
+
+ rc_send_dstaddr = res->dstaddr;
+}
+
+cmdline_parse_token_string_t cmd_rc_send_dstaddr_rc_send_dstaddr =
+ TOKEN_STRING_INITIALIZER(struct cmd_rc_send_dstaddr_result, rc_send,
+ "rc_send");
+cmdline_parse_token_string_t cmd_rc_send_dstaddr_action =
+ TOKEN_STRING_INITIALIZER(struct cmd_rc_send_dstaddr_result, action,
+ "dstaddr");
+cmdline_parse_token_num_t cmd_rc_send_dstaddr_dstaddr =
+ TOKEN_NUM_INITIALIZER(struct cmd_rc_send_dstaddr_result, dstaddr, UINT64);
+
+
+cmdline_parse_inst_t cmd_rc_send_dstaddr = {
+ .f = cmd_rc_send_dstaddr_parsed, /* function to call */
+ .data = NULL, /* 2nd arg of func */
+ .help_str = "set register rc_sending dstaddr",
+ .tokens = { /* token list, NULL terminated */
+ (void *)&cmd_rc_send_dstaddr_rc_send_dstaddr,
+ (void *)&cmd_rc_send_dstaddr_action,
+ (void *)&cmd_rc_send_dstaddr_dstaddr,
+ NULL,
+ },
+};
+
+
+
/* ************* */
/* this structure is filled when cmd_ping is parsed successfully */
/* function called when cmd_ping is parsed successfully */
static void cmd_ping_parsed(void *parsed_result, struct cmdline *cl, void *data)
{
- xbeeapp_send_atcmd("VL", NULL, 0, 1);
+ xbeeapp_send_atcmd("VL", NULL, 0, 1, NULL, NULL);
}
cmdline_parse_token_string_t cmd_ping_ping =
void *data)
{
struct cmd_read_result *res = parsed_result;
- xbeeapp_send_atcmd(res->cmd->name, NULL, 0, 1);
+ xbeeapp_send_atcmd(res->cmd->name, NULL, 0, 1, NULL, NULL);
}
cmdline_parse_token_string_t cmd_read_read =
printf("Unknown argument type\n");
return;
}
- xbeeapp_send_atcmd(res->cmd->name, param, len, 1);
+ xbeeapp_send_atcmd(res->cmd->name, param, len, 1, NULL, NULL);
}
cmdline_parse_token_string_t cmd_write_write =
&cmd_range_count,
&cmd_range_powermask,
&cmd_range_dstaddr,
+ &cmd_rc_send,
+ &cmd_rc_send_period,
+ &cmd_rc_send_dstaddr,
&cmd_ping,
&cmd_raw,
&cmd_dump,