#include "xbee_proto.h"
#include "xbee.h"
#include "joystick.h"
+#include "rc_proto.h"
#include "main.h"
#define TIMEOUT_US 1000000
return 0;
}
+int xbee_recv_data(struct xbee_recv_hdr *recvframe, unsigned len)
+{
+ int datalen = len - sizeof(*recvframe);
+ struct rc_proto_hdr *rch = (struct rc_proto_hdr *) &recvframe->data;
+
+ if (datalen < sizeof(struct rc_proto_hdr))
+ return -1;
+
+ switch (rch->type) {
+ case RC_PROTO_TYPE_CHANNEL:
+ if (datalen != sizeof(struct rc_proto_channel))
+ return -1;
+ break;
+ case RC_PROTO_TYPE_RANGE: {
+ struct rc_proto_range *rcr =
+ (struct rc_proto_range *) recvframe->data;
+
+ if (datalen != sizeof(struct rc_proto_range))
+ return -1;
+
+ if (rcr->power_level >= MAX_POWER_LEVEL)
+ return -1;
+
+ rc_proto_rx_range(rcr->power_level);
+
+ break;
+ }
+ default:
+ return -1;
+ }
+
+ return 0;
+}
+
+
void xbee_rx(struct xbee_dev *dev, int channel, int type,
void *frame, unsigned len, void *opaque)
{
}
case XBEE_TYPE_RECV: {
- struct xbee_recv_hdr *recvframe = frame;
- int recvlen = len - sizeof(*recvframe);
- int on_stdout = 1;
-
- /* if we receive a range-test frame, ask for RSSI now */
- if (recvlen >= strlen("range") &&
- !strncmp((char *)recvframe->data,
- "range", strlen("range"))) {
- xbeeapp_send_atcmd("DB", NULL, 0, 0, NULL, NULL);
- on_stdout = 0;
- }
- hexdump(on_stdout, "rx data", recvframe->data,
- recvlen);
+ if (xbee_recv_data(frame, len) < 0)
+ do_hexdump = 1;
break;
}
if (err < 0)
return -1;
+ /* init rc_proto */
+ rc_proto_init();
+
/* init joystick */
if (joystick_devname != NULL) {
if (joystick_init(joystick_devname, &joyinfo) < 0) {
if (access(xbeerc_path, R_OK) == 0) {
xbee_cl = cmdline_file_new(&main_ctx, "xbeerc> ",
- "/home/zer0/.xbeerc", 1);
+ xbeerc_path, 1);
if (xbee_cl != NULL) {
cmdline_interact(xbee_cl);
cmdline_free(xbee_cl);