X-Git-Url: http://git.droids-corp.org/?p=protos%2Fxbee-avr.git;a=blobdiff_plain;f=rc_proto.h;h=a12de344a53d3fa46060469e6666d9c4721453ab;hp=fea6c51c955da11b78e4c540f0307a6093f202f3;hb=608c07083a1bf61df3ef38415242dbf0f333b806;hpb=53b64456e07ddd931108d167d10eccc5c66f4044 diff --git a/rc_proto.h b/rc_proto.h index fea6c51..a12de34 100644 --- a/rc_proto.h +++ b/rc_proto.h @@ -1,28 +1,60 @@ #ifndef RC_PROTO_H #define RC_PROTO_H -#define AXIS_NUMBER 4 - -#define RC_PROTO_TYPE_CHANNEL 0 -#define RC_PROTO_TYPE_RANGE 1 - +/* generic header */ +struct rc_proto_hdr { + uint8_t type; +} __attribute__((packed)); -/* TODO: Authenticate packet!! */ +/* send a hello message, no answer is expected from the peer */ +#define RC_PROTO_HELLO 0 +struct rc_proto_hello { + uint8_t type; + uint8_t datalen; /* len of data excluding header */ + uint8_t data[]; +} __attribute__((packed)); -struct rc_proto_hdr { +/* send an echo request, expect an echo reply from the peer */ +#define RC_PROTO_ECHO_REQ 1 +struct rc_proto_echo_req { uint8_t type; + uint8_t datalen; /* len of data excluding header */ + uint8_t data[]; } __attribute__((packed)); -struct rc_proto_channel { +/* reply to an echo request */ +#define RC_PROTO_ECHO_ANS 2 +struct rc_proto_echo_ans { uint8_t type; - int16_t axis[AXIS_NUMBER]; + uint8_t datalen; /* len of data excluding header */ + uint8_t data[]; } __attribute__((packed)); -struct rc_proto_range { +/* send a power level probe to the peer */ +#define RC_PROTO_POWER_PROBE 3 +struct rc_proto_power_probe { uint8_t type; uint8_t power_level; } __attribute__((packed)); +/* send a servo command */ +#define RC_PROTO_SERVO 4 +struct rc_proto_servo { + uint8_t type; + uint8_t mask; + uint8_t seq_and_pow; /* bitfield: pow are the 3 lsb, seq the 5 msb */ +}; + +/* acknowledge a servo command */ +#define RC_PROTO_ACK 5 +struct rc_proto_ack { + uint8_t type; + uint8_t seq; +} __attribute__((packed)); + + +/* send a Hello message to a peer */ +int8_t rc_proto_send_hello(uint64_t addr, void *data, uint8_t data_len); void rc_proto_rx_range(int power_level);