00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef ROOMBA_COMMS_H
00024 #define ROOMBA_COMMS_H
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00030 #include <limits.h>
00031
00032
00033 #define ROOMBA_OPCODE_START 128
00034 #define ROOMBA_OPCODE_BAUD 129
00035 #define ROOMBA_OPCODE_CONTROL 130
00036 #define ROOMBA_OPCODE_SAFE 131
00037 #define ROOMBA_OPCODE_FULL 132
00038 #define ROOMBA_OPCODE_POWER 133
00039 #define ROOMBA_OPCODE_SPOT 134
00040 #define ROOMBA_OPCODE_CLEAN 135
00041 #define ROOMBA_OPCODE_MAX 136
00042 #define ROOMBA_OPCODE_DRIVE 137
00043 #define ROOMBA_OPCODE_MOTORS 138
00044 #define ROOMBA_OPCODE_LEDS 139
00045 #define ROOMBA_OPCODE_SONG 140
00046 #define ROOMBA_OPCODE_PLAY 141
00047 #define ROOMBA_OPCODE_SENSORS 142
00048 #define ROOMBA_OPCODE_FORCEDOCK 143
00049
00050 #define ROOMBA_DELAY_MODECHANGE_MS 20
00051
00052 #define ROOMBA_MODE_OFF 0
00053 #define ROOMBA_MODE_PASSIVE 1
00054 #define ROOMBA_MODE_SAFE 2
00055 #define ROOMBA_MODE_FULL 3
00056
00057 #define ROOMBA_TVEL_MAX_MM_S 500
00058 #define ROOMBA_RADIUS_MAX_MM 2000
00059
00060 #define ROOMBA_SENSOR_PACKET_SIZE 26
00061
00062 #define ROOMBA_CHARGING_NOT 0
00063 #define ROOMBA_CHARGING_RECOVERY 1
00064 #define ROOMBA_CHARGING_CHARGING 2
00065 #define ROOMBA_CHARGING_TRICKLE 3
00066 #define ROOMBA_CHARGING_WAITING 4
00067 #define ROOMBA_CHARGING_ERROR 5
00068
00069 #define ROOMBA_AXLE_LENGTH 0.258
00070
00071 #define ROOMBA_DIAMETER 0.33
00072
00073 #define ROOMBA_BUMPER_XOFFSET 0.05
00074
00075 #ifndef MIN
00076 #define MIN(a,b) ((a < b) ? (a) : (b))
00077 #endif
00078 #ifndef MAX
00079 #define MAX(a,b) ((a > b) ? (a) : (b))
00080 #endif
00081 #ifndef NORMALIZE
00082 #define NORMALIZE(z) atan2(sin(z), cos(z))
00083 #endif
00084
00085 typedef struct
00086 {
00087
00088 char serial_port[PATH_MAX];
00089
00090
00091 int fd;
00092
00093 unsigned char mode;
00094
00095 double ox, oy, oa;
00096
00097
00098 int bumper_left, bumper_right;
00099 unsigned char wheeldrop_caster, wheeldrop_left, wheeldrop_right;
00100 unsigned char wall;
00101 unsigned char cliff_left, cliff_frontleft, cliff_frontright, cliff_right;
00102 unsigned char virtual_wall;
00103 unsigned char overcurrent_driveleft, overcurrent_driveright;
00104 unsigned char overcurrent_mainbrush, overcurrent_sidebrush;
00105 unsigned char overcurrent_vacuum;
00106 unsigned char dirtdetector_right, dirtdetector_left;
00107 unsigned char remote_opcode;
00108 unsigned char button_power, button_spot, button_clean, button_max;
00109
00110
00111 unsigned char charging_state;
00112
00113 double voltage;
00114
00115 double current;
00116
00117 double temperature;
00118
00119 double charge;
00120
00121 double capacity;
00122 } roomba_comm_t;
00123
00124 roomba_comm_t* roomba_create(const char* serial_port);
00125 void roomba_destroy(roomba_comm_t* r);
00126 int roomba_open(roomba_comm_t* r, unsigned char fullcontrol, int roomba500);
00127 int roomba_init(roomba_comm_t* r, unsigned char fullcontrol);
00128 int roomba_close(roomba_comm_t* r);
00129 int roomba_set_speeds(roomba_comm_t* r, double tv, double rv);
00130 int roomba_parse_sensor_packet(roomba_comm_t* r,
00131 unsigned char* buf, size_t buflen);
00132 int roomba_get_sensors(roomba_comm_t* r, int timeout);
00133 void roomba_print(roomba_comm_t* r);
00134 int roomba_clean(roomba_comm_t* r);
00135 int roomba_forcedock(roomba_comm_t* r);
00136
00137 int roomba_set_song(roomba_comm_t* r, unsigned char songNumber,
00138 unsigned char songLength, unsigned char *notes,
00139 unsigned char *noteLengths);
00140 int roomba_play_song(roomba_comm_t *r, unsigned char songNumber);
00141
00142 int roomba_vacuum(roomba_comm_t *r, int state);
00143 int roomba_set_leds(roomba_comm_t *r, uint8_t dirt_detect, uint8_t max,
00144 uint8_t clean, uint8_t spot, uint8_t status,
00145 uint8_t power_color, uint8_t power_intensity );
00146
00147 #ifdef __cplusplus
00148 }
00149 #endif
00150
00151 #endif
00152