#ifndef ROOMBA_COMMANDS_H #define ROOMBA_COMMANDS_H /* "Roomba mode" States */ #define ROOMBA_MODE_OFF 0 #define ROOMBA_MODE_DRIVE 1 #define ROOMBA_MODE_FULL 2 #define ROOMBA_MODE_CLEAN 3 #define ROOMBA_MODE_SPOT 4 #define ROOMBA_MODE_DOCK 5 /* Roomba commands */ #define ROOMBA_START 0x80 #define ROOMBA_BAUD 0x81 // len = 1 #define ROOMBA_CTRL 0x82 #define ROOMBA_SAFE 0x83 #define ROOMBA_FULL 0x84 #define ROOMBA_POWER 0x85 #define ROOMBA_SPOT 0x86 #define ROOMBA_CLEAN 0x87 #define ROOMBA_MAX 0x88 #define ROOMBA_DRIVE 0x89 // len = 4 #define ROOMBA_MOTORS 0x8a // len = 1 #define ROOMBA_LEDS 0x8b // len = 3 #define ROOMBA_SONG 0x8c // len = ... #define ROOMBA_PLAY 0x8d // len = 1 #define ROOMBA_SENSORS 0x8e // len = 1 #define ROOMBA_DOCK 0x8f /* Sensor bit-shifting */ #define SENSE_DROP_CASTER (4) #define SENSE_DROP_LEFT (3) #define SENSE_DROP_RIGHT (2) #define SENSE_BUMP_LEFT (1) #define SENSE_BUMP_RIGHT (0) struct __attribute__((packed)) sensors_code1 { uint8_t bumps_wheeldrop; uint8_t wall; uint8_t cliff_left; uint8_t cliff_front_left; uint8_t cliff_front_right; uint8_t cliff_right; uint8_t virtual_wall; uint8_t motor_overcurrents; uint8_t dirt_detect_left; uint8_t dirt_detect_right; }; struct __attribute__((packed)) sensors_code2 { uint8_t rc_detect; uint8_t buttons; uint16_t distance; uint16_t angle; }; struct __attribute__((packed)) sensors_code3 { uint8_t charging_state; uint8_t voltage_lsb; uint8_t voltage_msb; uint8_t current_lsb; uint8_t current_msb; uint8_t temperature; uint16_t charge_mah; uint16_t capacity_mah; }; struct __attribute__((packed)) roomba_sensors_data { int valid; uint8_t drop_caster, drop_left, drop_right; uint8_t bump_left, bump_right; uint8_t wall; uint8_t cliff_left, cliff_frontleft, cliff_frontright, cliff_right; uint8_t ovc; }; struct roomba_sensors_data *roomba_sensors(void); #endif