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

Reply via email to