Update of /cvsroot/playerstage/code/player/server/drivers/mixed/irobot/roomba
In directory
sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27174/server/drivers/mixed/irobot/roomba
Modified Files:
Tag: release-2-0-patches
roomba_comms.c roomba_comms.h
Log Message:
merged driver changes from HEAD
Index: roomba_comms.h
===================================================================
RCS file:
/cvsroot/playerstage/code/player/server/drivers/mixed/irobot/roomba/roomba_comms.h,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -C2 -d -r1.5 -r1.5.2.1
*** roomba_comms.h 3 Mar 2006 02:53:08 -0000 1.5
--- roomba_comms.h 24 Apr 2007 22:20:20 -0000 1.5.2.1
***************
*** 134,137 ****
--- 134,146 ----
int roomba_clean(roomba_comm_t* r);
+ int roomba_set_song(roomba_comm_t* r, unsigned char songNumber,
+ unsigned char songLength, unsigned char *notes,
+ unsigned char *noteLengths);
+ int roomba_play_song(roomba_comm_t *r, unsigned char songNumber);
+
+ int roomba_vacuum(roomba_comm_t *r, int state);
+ int roomba_set_leds(roomba_comm_t *r, uint8_t dirt_detect, uint8_t max,
+ uint8_t clean, uint8_t spot, uint8_t status,
+ uint8_t power_color, uint8_t power_intensity );
#ifdef __cplusplus
Index: roomba_comms.c
===================================================================
RCS file:
/cvsroot/playerstage/code/player/server/drivers/mixed/irobot/roomba/roomba_comms.c,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -C2 -d -r1.9 -r1.9.2.1
*** roomba_comms.c 5 Apr 2006 23:33:54 -0000 1.9
--- roomba_comms.c 24 Apr 2007 22:20:20 -0000 1.9.2.1
***************
*** 79,83 ****
// Open it. non-blocking at first, in case there's no roomba
if((r->fd = open(r->serial_port,
! O_RDWR | O_SYNC | O_NONBLOCK, S_IRUSR | S_IWUSR )) < 0 )
{
perror("roomba_open():open():");
--- 79,83 ----
// Open it. non-blocking at first, in case there's no roomba
if((r->fd = open(r->serial_port,
! O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR )) < 0 )
{
perror("roomba_open():open():");
***************
*** 304,308 ****
while(totalnumread < sizeof(databuf))
{
! if((retval = poll(ufd,1,timeout)) < 0)
{
if(errno == EINTR)
--- 304,310 ----
while(totalnumread < sizeof(databuf))
{
! retval = poll(ufd,1,timeout);
!
! if(retval < 0)
{
if(errno == EINTR)
***************
*** 315,319 ****
--- 317,324 ----
}
else if(retval == 0)
+ {
+ printf("roomba_get_sensors: poll timeout\n");
return(-1);
+ }
else
{
***************
*** 326,331 ****
{
totalnumread += numread;
! /*
! printf("read %d bytes; buffer so far:\n", numread);
for(i=0;i<totalnumread;i++)
printf("%x ", databuf[i]);
--- 331,335 ----
{
totalnumread += numread;
! /*printf("read %d bytes; buffer so far:\n", numread);
for(i=0;i<totalnumread;i++)
printf("%x ", databuf[i]);
***************
*** 376,380 ****
r->overcurrent_mainbrush = (flag >> 2) & 0x01;
r->overcurrent_driveright = (flag >> 3) & 0x01;
! r->overcurrent_driveleft = (flag >> 3) & 0x01;
r->dirtdetector_left = buf[idx++];
--- 380,384 ----
r->overcurrent_mainbrush = (flag >> 2) & 0x01;
r->overcurrent_driveright = (flag >> 3) & 0x01;
! r->overcurrent_driveleft = (flag >> 4) & 0x01;
r->dirtdetector_left = buf[idx++];
***************
*** 469,470 ****
--- 473,553 ----
}
+
+ int roomba_set_song(roomba_comm_t* r, unsigned char songNumber, unsigned char
songLength, unsigned char *notes, unsigned char *noteLengths)
+ {
+ int size = 2*songLength+3;
+ unsigned char cmdbuf[size];
+ unsigned char i;
+
+ cmdbuf[0] = ROOMBA_OPCODE_SONG;
+ cmdbuf[1] = songNumber;
+ cmdbuf[2] = songLength;
+
+ for (i=0; i < songLength; i++)
+ {
+ cmdbuf[3+(2*i)] = notes[i];
+ cmdbuf[3+(2*i)+1] = noteLengths[i];
+ }
+
+ if(write(r->fd, cmdbuf, size) < 0)
+ {
+ perror("roomba_set_song():write():");
+ return(-1);
+ }
+ else
+ return(0);
+ }
+
+ int
+ roomba_play_song(roomba_comm_t *r, unsigned char songNumber)
+ {
+ unsigned char cmdbuf[2];
+
+ cmdbuf[0] = ROOMBA_OPCODE_PLAY;
+ cmdbuf[1] = songNumber;
+
+ if(write(r->fd, cmdbuf, 2) < 0)
+ {
+ perror("roomba_set_song():write():");
+ return(-1);
+ }
+ else
+ return(0);
+ }
+
+ int
+ roomba_vacuum(roomba_comm_t *r, int state)
+ {
+ unsigned char cmdbuf[2];
+
+ cmdbuf[0] = ROOMBA_OPCODE_MOTORS;
+ cmdbuf[1] = state;
+
+ if (write(r->fd, cmdbuf, 2) < 0)
+ {
+ perror("roomba_vacuum():write():");
+ return -1;
+ }
+
+ return 0;
+ }
+
+ int
+ roomba_set_leds(roomba_comm_t *r, uint8_t dirt_detect, uint8_t max, uint8_t
clean, uint8_t spot, uint8_t status, uint8_t power_color, uint8_t
power_intensity )
+ {
+ unsigned char cmdbuf[5];
+ cmdbuf[0] = ROOMBA_OPCODE_LEDS;
+ cmdbuf[1] = dirt_detect | max<<1 | clean<<2 | spot<<3 | status<<4;
+ cmdbuf[2] = power_color;
+ cmdbuf[3] = power_intensity;
+
+ printf("Set LEDS[%d][%d][%d]\n",cmdbuf[1], cmdbuf[2], cmdbuf[3]);
+ if (write(r->fd, cmdbuf, 4) < 0)
+ {
+ perror("roomba_set_leds():write():");
+ return -1;
+ }
+
+ return 0;
+ }
+
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit