Update of /cvsroot/playerstage/code/player/server/drivers/mixed/p2os
In directory 
sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30607/server/drivers/mixed/p2os

Modified Files:
        sip.cc 
Log Message:
fix for sonar allocation, thanks to Luke Gumbley


Index: sip.cc
===================================================================
RCS file: /cvsroot/playerstage/code/player/server/drivers/mixed/p2os/sip.cc,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** sip.cc      2 Dec 2007 09:11:13 -0000       1.27
--- sip.cc      5 Dec 2007 22:15:38 -0000       1.28
***************
*** 141,145 ****
    // bumper
    int bump_count = PlayerRobotParams[param_idx].NumFrontBumpers + 
PlayerRobotParams[param_idx].NumRearBumpers;
!   if (data->bumper.bumpers_count != (unsigned int)bump_count)
    {
      data->bumper.bumpers_count = bump_count;
--- 141,145 ----
    // bumper
    int bump_count = PlayerRobotParams[param_idx].NumFrontBumpers + 
PlayerRobotParams[param_idx].NumRearBumpers;
!   if (data->bumper.bumpers_count != bump_count)
    {
      data->bumper.bumpers_count = bump_count;
***************
*** 418,454 ****
    cnt += sizeof(unsigned char);
  
!   if (buffer[cnt] == 0 && sonars != NULL)
!   {
!     // No sonar readings
!     delete[] sonars;
!     sonars = NULL;
!   }
!   else if (sonars == NULL)
!   {
!     // No space for sonar readings yet but need some
!     sonars = new unsigned short[buffer[cnt]];
!   }
!   else if (buffer[cnt] != sonarreadings)
    {
!     // Sonar readings count has changed, reallocate the sonar readings array
!     if (sonars != NULL)
!       delete[] sonars;
!     sonars = new unsigned short[buffer[cnt]];
!   }
!   sonarreadings = buffer[cnt];
!   cnt += sizeof(unsigned char);
! 
!   //printf("%hu sonar readings:\n", sonarreadings);
!   for(unsigned char i = 0;i < sonarreadings;i++) {
      sonars[buffer[cnt]]=   (unsigned short)
        rint((buffer[cnt+1] | (buffer[cnt+2] << 8)) *
           PlayerRobotParams[param_idx].RangeConvFactor);
!     //printf("%d %hu:",buffer[cnt],*((unsigned short *)&buffer[cnt+1]));
!     //
!     //printf("%hu %hu %hu\n", buffer[cnt], buffer[cnt+1], buffer[cnt+2]);
!     //printf("index %d value %hu\n", buffer[cnt], sonars[buffer[cnt]]);
!     cnt += 3*sizeof(unsigned char);
    }
-   //printf("\n");
  
    timer = (buffer[cnt] | (buffer[cnt+1] << 8));
--- 418,454 ----
    cnt += sizeof(unsigned char);
  
!   unsigned char numSonars=buffer[cnt];
!   cnt+=sizeof(unsigned char);  
!   
!   if(numSonars>0)
    {
!     //find the largest sonar index supplied
!     unsigned char maxSonars=sonarreadings;
!     for(unsigned char i=0;i<numSonars;i++)
!     {
!       unsigned char sonarIndex=buffer[cnt+i*(sizeof(unsigned 
char)+sizeof(unsigned short))];
!       if((sonarIndex+1)>maxSonars) maxSonars=sonarIndex+1;
!     }
!     
!     //if necessary make more space in the array and preserve existing readings
!     if(maxSonars>sonarreadings)
!     {
!       unsigned short *newSonars=new unsigned short[maxSonars];
!       for(unsigned char i=0;i<sonarreadings;i++)
!         newSonars[i]=sonars[i];
!       if(sonars!=NULL) delete[] sonars;
!       sonars=newSonars;
!       sonarreadings=maxSonars;
!     }
!     
!     //update the sonar readings array with the new readings
!     for(unsigned char i=0;i<numSonars;i++)
!     {
      sonars[buffer[cnt]]=   (unsigned short)
        rint((buffer[cnt+1] | (buffer[cnt+2] << 8)) *
           PlayerRobotParams[param_idx].RangeConvFactor);
!       cnt+=sizeof(unsigned char)+sizeof(unsigned short);
!   }
    }
  
    timer = (buffer[cnt] | (buffer[cnt+1] << 8));


-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to