[Tinyos-2-commits] CVS: tinyos-2.x/support/sdk/cpp/sf tcpcomm.cpp, 1.7, 1.8 sfpacket.cpp, 1.4, 1.5 sfcontrol.cpp, 1.4, 1.5 serialcomm.h, 1.3, 1.4 serialcomm.cpp, 1.4, 1.5

akoepke andreaskoepke at users.sourceforge.net
Fri Feb 20 01:27:49 PST 2009


Update of /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf
In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv7458

Modified Files:
	tcpcomm.cpp sfpacket.cpp sfcontrol.cpp serialcomm.h 
	serialcomm.cpp 
Log Message:
be more careful with the stack when reading a packet
fix includes for g++ 4.3


Index: tcpcomm.cpp
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/tcpcomm.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** tcpcomm.cpp	2 May 2008 09:21:22 -0000	1.7
--- tcpcomm.cpp	20 Feb 2009 09:27:46 -0000	1.8
***************
*** 39,42 ****
--- 39,43 ----
  #include <set>
  
+ #include <cstring>
  #include <sys/types.h>
  #include <sys/socket.h>
***************
*** 583,587 ****
  {
      char info = 'n';
!     write(pipeWriteFD, &info, 1);
  }
  
--- 584,588 ----
  {
      char info = 'n';
!     if(write(pipeWriteFD, &info, 1) != 1) DEBUG("TCPComm::stuffPipe : lokal pipe is broken");
  }
  

Index: sfpacket.cpp
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/sfpacket.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** sfpacket.cpp	2 May 2008 09:21:23 -0000	1.4
--- sfpacket.cpp	20 Feb 2009 09:27:46 -0000	1.5
***************
*** 32,35 ****
--- 32,36 ----
  
  #include "sfpacket.h"
+ #include <cstring>
  
  SFPacket::SFPacket(int pType, int pSeqno) {

Index: sfcontrol.cpp
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/sfcontrol.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** sfcontrol.cpp	23 Apr 2008 09:50:01 -0000	1.4
--- sfcontrol.cpp	20 Feb 2009 09:27:46 -0000	1.5
***************
*** 43,46 ****
--- 43,48 ----
  
  #include <string>
+ #include <cstdlib>
+ #include <cstring>
  #include <iostream>
  #include <sstream>

Index: serialcomm.h
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/serialcomm.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** serialcomm.h	21 Apr 2008 19:57:47 -0000	1.3
--- serialcomm.h	20 Feb 2009 09:27:46 -0000	1.4
***************
*** 39,42 ****
--- 39,43 ----
  #include "sharedinfo.h"
  
+ #include <sys/select.h>
  #include <pthread.h>
  #include <termios.h>
***************
*** 67,77 ****
      static const int minMTU = 4;
      // byte count of serial header
!     static const int serialHeaderBytes = 6;
      // byte offset of type field
!     static const int typeOffset = 1;
      // byte offset of sequence number field
!     static const int seqnoOffset = 2;
      // byte offset of payload field
!     static const int payloadOffset = 3;
      // timeout for acks in s
      static const int ackTimeout = 1000 * 1000 * 200;
--- 68,78 ----
      static const int minMTU = 4;
      // byte count of serial header
!     static const int serialHeaderBytes = 5;
      // byte offset of type field
!     static const int typeOffset = 0;
      // byte offset of sequence number field
!     static const int seqnoOffset = 1;
      // byte offset of payload field
!     static const int payloadOffset = 2;
      // timeout for acks in s
      static const int ackTimeout = 1000 * 1000 * 200;
***************
*** 81,84 ****
--- 82,91 ----
      // how many bytes do we attempt to read from the serial line in one go?
      static const int rawReadBytes = 20;
+ 
+     enum rx_states_t {
+         WAIT_FOR_SYNC,
+         IN_SYNC,
+         ESCAPED
+     };
      
      /** Member vars */
***************
*** 190,193 ****
--- 197,218 ----
          return crc;
      }
+     
+     inline static uint16_t calcCRC(uint8_t *bytes, uint16_t len) {
+         uint16_t crc = 0;
+         for(unsigned i = 0; i < len; i++) {
+             crc = SerialComm::byteCRC(bytes[i], crc);
+         }
+         return crc;
+     }
+ 
+     inline static uint16_t checkCrc(uint8_t *bytes, uint16_t count) {
+         bool crcOk = false;
+         if(count > 2) {
+             uint16_t crc = calcCRC(bytes, count - 2);
+             uint16_t packetCrc = (bytes[count-1] << 8) | bytes[count-2];
+             if(crc == packetCrc) crcOk = true;
+         }
+         return crcOk;
+     }
  
      /* HDLC encode (byte stuff) count bytes from buffer from into buffer to.

Index: serialcomm.cpp
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/serialcomm.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** serialcomm.cpp	21 Apr 2008 19:57:47 -0000	1.4
--- serialcomm.cpp	20 Feb 2009 09:27:46 -0000	1.5
***************
*** 36,39 ****
--- 36,40 ----
  #include <ctime>
  #include <cstdlib>
+ #include <cstring>
  #include <iostream>
  #include <fcntl.h>
***************
*** 43,46 ****
--- 44,48 ----
  #include <sys/time.h>
  #include <errno.h>
+ #include <stdint.h>
  
  using namespace std;
***************
*** 276,284 ****
  
      if ((tcflush(serialReadFD, TCIFLUSH) >= 0 && tcsetattr(serialReadFD, TCSANOW, &newtio) >= 0)
!             && (tcflush(serialWriteFD, TCIFLUSH) >= 0 && tcsetattr(serialWriteFD, TCSANOW, &newtio) >= 0)
!             && !errorReported)
      {
          DEBUG("SerialComm::SerialComm : opened device "<< pDevice << " with baudrate = " << pBaudrate)
!     }
      else
      {
--- 278,286 ----
  
      if ((tcflush(serialReadFD, TCIFLUSH) >= 0 && tcsetattr(serialReadFD, TCSANOW, &newtio) >= 0)
!         && (tcflush(serialWriteFD, TCIFLUSH) >= 0 && tcsetattr(serialWriteFD, TCSANOW, &newtio) >= 0)
!         && !errorReported)
      {
          DEBUG("SerialComm::SerialComm : opened device "<< pDevice << " with baudrate = " << pBaudrate)
!             }
      else
      {
***************
*** 338,347 ****
      int cnt = 0;
      /*
!     FD_SET(serialWriteFD, &wfds);
!     if(select(serialWriteFD + 1, NULL, &wfds, NULL, NULL) < 0) {
!         return -1;
!     }
!     FD_CLR(serialWriteFD, &wfds);
!      */
      int tmpCnt = BaseComm::writeFD(fd, buffer, count, err);
      if (tmpCnt < 0) {
--- 340,349 ----
      int cnt = 0;
      /*
!       FD_SET(serialWriteFD, &wfds);
!       if(select(serialWriteFD + 1, NULL, &wfds, NULL, NULL) < 0) {
!       return -1;
!       }
!       FD_CLR(serialWriteFD, &wfds);
!     */
      int tmpCnt = BaseComm::writeFD(fd, buffer, count, err);
      if (tmpCnt < 0) {
***************
*** 415,551 ****
  bool SerialComm::readPacket(SFPacket &pPacket)
  {
!     bool sync = false;
!     bool escape = false;
!     bool completePacket = false;
      int count = 0;
!     uint16_t crc = 0;
!     char buffer[maxMTU];
!     while(!completePacket)
!     {
!         buffer[count] = nextRaw();
! 
!         if(sync && (count == 1) && (buffer[count] == SYNC_BYTE)) {
!             DEBUG("SerialComm::readPacket double sync byte");
!             sync = false;
!             escape = false;
!             count = 1;
!             crc = 0;
!             buffer[0] = SYNC_BYTE;
!         }
!         
!         if (!sync)
!         {
!             // wait for sync
!             if (buffer[0] == SYNC_BYTE)
!             {
!                 sync = true;
!                 escape = false;
!                 count = 1;
!                 crc = 0;
              }
          }
!         else if (count >= maxMTU)
!         {
!             DEBUG("SerialComm::readPacket : frame too long - size = " << count << " : resynchronising")
!             sync = false;
!             escape = false;
!             count = crc = 0;
! 	    badPacketCount++;
!         }
!         else if (escape)
!         {
!             if (buffer[count] == SYNC_BYTE)
!             {
!                 DEBUG("SerialComm::readPacket : resynchronising")
!                 sync = false;
!                 escape = false;
!                 count = crc = 0;
! 		badPacketCount++;
!             }
!             else
!             {
!                 buffer[count] ^= 0x20;
!                 if (count > 3)
!                 {
!                     crc = SerialComm::byteCRC(buffer[count-3], crc);
                  }
-                 ++count;
-                 escape = false;
              }
!         }
!         else if (buffer[count] == ESCAPE_BYTE)
!         {
!             // next byte is escaped
!             escape = true;
!         }
!         else if (buffer[count] == SYNC_BYTE)
!         {
!             // calculate last crc byte
!             if (count > 3)
!             {
!                 crc = SerialComm::byteCRC(buffer[count-3], crc);
              }
!             uint16_t packetCRC = (buffer[count - 2] & 0xff) | ((buffer[count - 1] << 8) & 0xff00);
!             if (count < minMTU)
!             {
!                 DEBUG("SerialComm::readPacket : frame too short - size = " << count << " : resynchronising ")
!                 sync = false;
!                 escape = false;
!                 count = crc = 0;
! 		badPacketCount++;
              }
!             else if (crc != packetCRC)
!             {
!                 DEBUG("SerialComm::readPacket : bad crc - calculated crc = " << crc << " packet crc = " << packetCRC << " : resynchronising " )
!                 sync = false;
!                 escape = false;
!                 count = crc = 0;
! 		badPacketCount++;
              }
!             else
!             {
!                 pPacket.setType(buffer[typeOffset]);
!                 pPacket.setSeqno(buffer[seqnoOffset]);
!                 switch (buffer[typeOffset])
!                 {
!                 case SF_ACK:
!                     break;
!                 case SF_PACKET_NO_ACK:
!                 case SF_PACKET_ACK:
!                     // buffer / payload
!                     // FIXME: strange packet format!? because seqno is not really defined - missing :(
!                     pPacket.setPayload(&buffer[payloadOffset]-1, count+1+1 - serialHeaderBytes);
!                     break;
!                 default:
!                     DEBUG("SerialComm::readPacket : unknown packet type = " << static_cast<uint16_t>(buffer[typeOffset] & 0xff))
!                     ;
!                 }
!                 completePacket = true;
! #ifdef DEBUG_RAW_SERIALCOMM
! 
!                 DEBUG("SerialComm::readPacket : raw data >>")
!                 for (int j=0; j <= count; j++)
!                 {
!                     cout << std::hex << static_cast<uint16_t>(buffer[j] & 0xff) << " " << std::dec;
                  }
!                 cout << endl;
!                 cout << "as payload >> " << endl;
!                 const char* ptr = pPacket.getPayload();
!                 for (int j=0; j < pPacket.getLength(); j++)
!                 {
!                     cout << std::hex << static_cast<uint16_t>(ptr[j] & 0xff) << " " << std::dec;
                  }
-                 cout << endl;
- #endif
- 
-             }
-         }
-         else
-         {
-             if (count > 3)
-             {
-                 crc = SerialComm::byteCRC(buffer[count-3], crc);
              }
-             ++count;
          }
      }
--- 417,495 ----
  bool SerialComm::readPacket(SFPacket &pPacket)
  {
!     uint8_t buffer[maxMTU + 10];
      int count = 0;
!     rx_states_t state = WAIT_FOR_SYNC;
!     for(;;) {
!         uint8_t nextByte = nextRaw();
!         if(state == WAIT_FOR_SYNC) {
!             if(nextByte == SYNC_BYTE) {
!                 count = 0;
!                 state = IN_SYNC;
              }
          }
!         else if(state == IN_SYNC) {
!             if(nextByte == SYNC_BYTE) {
!                 if(count < minMTU) {
!                     DEBUG("SerialComm::readPacket : frame too short - size = " << count << " : resynchronising ");
!                     badPacketCount++; 
!                     count = 0;
!                 }
!                 else {
!                     if(checkCrc(buffer, count)) {
!                         pPacket.setType(buffer[typeOffset]);
!                         pPacket.setSeqno(buffer[seqnoOffset]);
!                         switch (buffer[typeOffset]) {
!                         case SF_ACK:
!                             break;
!                         case SF_PACKET_NO_ACK:
!                         case SF_PACKET_ACK:
!                             pPacket.setPayload((char *)(&buffer[payloadOffset]-1), count+1+1 - serialHeaderBytes);
!                             break;
!                         default:
!                             DEBUG("SerialComm::readPacket : unknown packet type = " \
!                                   << static_cast<uint16_t>(buffer[typeOffset] & 0xff));
!                             break;
!                         }
!                         break; // leave loop
!                     }
!                     else {
!                         DEBUG("SerialComm::readPacket : bad crc");
!                         count = 0;
!                         badPacketCount++;
!                     }
                  }
              }
!             else if(nextByte == ESCAPE_BYTE) {
!                 state = ESCAPED;
              }
!             else {
!                 buffer[count++] = nextByte;
!                 if(count >= maxMTU) {
!                     DEBUG("SerialComm::readPacket : packet too long, resynchronizing");
!                     count = 0;
!                     badPacketCount++;
!                     state = WAIT_FOR_SYNC;
!                 }
              }
!         }
!         else if(state == ESCAPED) {
!             if(nextByte == SYNC_BYTE) {
!                 DEBUG("SerialComm::readPacket : state ESCAPED, packet got sync byte, resynchronizing");
!                 count = 0;
!                 badPacketCount++;
!                 state = IN_SYNC;
              }
!             else {
!                 buffer[count++] = nextByte ^ 0x20;
!                 if(count >= maxMTU) {
!                     DEBUG("SerialComm::readPacket : state ESCAPED, packet too long, resynchronizing");
!                     count = 0;
!                     badPacketCount++;
!                     state = WAIT_FOR_SYNC;
                  }
!                 else {
!                     state = IN_SYNC;
                  }
              }
          }
      }
***************
*** 553,557 ****
  }
  
- 
  /* writes packet */
  bool SerialComm::writePacket(SFPacket &pPacket)
--- 497,500 ----
***************
*** 644,670 ****
          readPacket(packet);
          switch (packet.getType())
!         {
!         case SF_ACK:
              // successful delivery
              // FIXME: seqnos are not implemented on the node !
              pthread_cond_signal(&ack.received);
              break;
!         case SF_PACKET_ACK:
!             {
!                 // put ack in front of queue
!                 SFPacket ack(SF_ACK, packet.getSeqno());
!                 writeBuffer.enqueueFront(ack);
!             }
!         case SF_PACKET_NO_ACK:
              // do nothing - fall through
!         default:
              if (!readBuffer.isFull())
!             {
                  ++readPacketCount;
                  // put silently into buffer...
                  readBuffer.enqueueBack(packet);
!             }
              else
!             {
                  while(readBuffer.isFull()) {
                      readBuffer.dequeue();
--- 587,613 ----
          readPacket(packet);
          switch (packet.getType())
! 	{
! 	case SF_ACK:
              // successful delivery
              // FIXME: seqnos are not implemented on the node !
              pthread_cond_signal(&ack.received);
              break;
! 	case SF_PACKET_ACK:
!         {
! 	    // put ack in front of queue
! 	    SFPacket ack(SF_ACK, packet.getSeqno());
! 	    writeBuffer.enqueueFront(ack);
!         }
! 	case SF_PACKET_NO_ACK:
              // do nothing - fall through
! 	default:
              if (!readBuffer.isFull())
! 	    {
                  ++readPacketCount;
                  // put silently into buffer...
                  readBuffer.enqueueBack(packet);
! 	    }
              else
! 	    {
                  while(readBuffer.isFull()) {
                      readBuffer.dequeue();
***************
*** 673,678 ****
                  readBuffer.enqueueBack(packet);
                  // DEBUG("SerialComm::readSerial : dropped packet")
!             }
!         }
      }
  }
--- 616,621 ----
                  readBuffer.enqueueBack(packet);
                  // DEBUG("SerialComm::readSerial : dropped packet")
! 	    }
! 	}
      }
  }
***************
*** 696,717 ****
      {
          if (!retry)
!         {
              packet = writeBuffer.dequeue();
!         }
          switch (packet.getType())
!         {
!         case SF_ACK:
              // successful delivery
              if (!writePacket(packet))
!             {
                  DEBUG("SerialComm::writeSerial : writePacket failed (SF_ACK)")
!                 reportError("SerialComm::writeSerial : writePacket(SF_ACK)", -1);
!             }
              break;
!         case SF_PACKET_ACK:
              // do nothing - fall through
!         case SF_PACKET_NO_ACK:
              // do nothing - fall through
!         default:
              if (!retry)
                  ++writtenPacketCount;
--- 639,661 ----
      {
          if (!retry)
! 	{
!             cerr << " serial deqeue packet, empty: " << writeBuffer.isEmpty() << endl;
              packet = writeBuffer.dequeue();
! 	}
          switch (packet.getType())
! 	{
! 	case SF_ACK:
              // successful delivery
              if (!writePacket(packet))
! 	    {
                  DEBUG("SerialComm::writeSerial : writePacket failed (SF_ACK)")
!                     reportError("SerialComm::writeSerial : writePacket(SF_ACK)", -1);
! 	    }
              break;
! 	case SF_PACKET_ACK:
              // do nothing - fall through
! 	case SF_PACKET_NO_ACK:
              // do nothing - fall through
! 	default:
              if (!retry)
                  ++writtenPacketCount;
***************
*** 719,726 ****
              packet.setType(SF_PACKET_ACK);
              if (!writePacket(packet))
!             {
                  DEBUG("SerialComm::writeSerial : writePacket failed (SF_PACKET)")
!                 reportError("SerialComm::writeSerial : writeFD(SF_PACKET)", -1);
!             }
              // wait for ack...
              struct timeval currentTime;
--- 663,670 ----
              packet.setType(SF_PACKET_ACK);
              if (!writePacket(packet))
! 	    {
                  DEBUG("SerialComm::writeSerial : writePacket failed (SF_PACKET)")
!                     reportError("SerialComm::writeSerial : writeFD(SF_PACKET)", -1);
! 	    }
              // wait for ack...
              struct timeval currentTime;
***************
*** 735,756 ****
              ackTime.tv_nsec = currentTime.tv_usec * 1000;
  
! 	    ackTime.tv_sec  +=  timeout / (1000*1000*1000);
! 	    ackTime.tv_nsec += timeout % (1000*1000*1000);
  
              pthread_cleanup_push((void(*)(void*)) pthread_mutex_unlock, (void *) &ack.lock);
              int retval = pthread_cond_timedwait(&ack.received, &ack.lock, &ackTime);
              if (!((retryCount < maxRetries) && (retval == ETIMEDOUT)))
!             {
! 		if (retryCount >= maxRetries) ++droppedWritePacketCount;
                  retry = false;
                  retryCount = 0;
!             }
              else
!             {
                  ++retryCount;
                  retry = true;
                  DEBUG("SerialComm::writeSerial : packet retryCount = " << retryCount);
! 		++sumRetries;
!             }
              // removes the cleanup handler and executes it (unlock mutex)
              pthread_cleanup_pop(1);         }
--- 679,700 ----
              ackTime.tv_nsec = currentTime.tv_usec * 1000;
  
!             ackTime.tv_sec  +=  timeout / (1000*1000*1000);
!             ackTime.tv_nsec += timeout % (1000*1000*1000);
  
              pthread_cleanup_push((void(*)(void*)) pthread_mutex_unlock, (void *) &ack.lock);
              int retval = pthread_cond_timedwait(&ack.received, &ack.lock, &ackTime);
              if (!((retryCount < maxRetries) && (retval == ETIMEDOUT)))
! 	    {
!                 if (retryCount >= maxRetries) ++droppedWritePacketCount;
                  retry = false;
                  retryCount = 0;
! 	    }
              else
! 	    {
                  ++retryCount;
                  retry = true;
                  DEBUG("SerialComm::writeSerial : packet retryCount = " << retryCount);
!                 ++sumRetries;
! 	    }
              // removes the cleanup handler and executes it (unlock mutex)
              pthread_cleanup_pop(1);         }
***************
*** 765,778 ****
      {
          DEBUG("SerialComm::cancel : by readerThread")
!         pthread_detach(readerThread);
          if (writerThreadRunning)
!         {
              pthread_cancel(writerThread);
              DEBUG("SerialComm::cancel : writerThread canceled, joining")
!             pthread_join(writerThread, NULL);
              writerThreadRunning = false;
!         }
          readerThreadRunning = false;
! 	pthread_cond_signal(&control.cancel);
          pthread_exit(NULL);
      }
--- 709,722 ----
      {
          DEBUG("SerialComm::cancel : by readerThread")
!             pthread_detach(readerThread);
          if (writerThreadRunning)
! 	{
              pthread_cancel(writerThread);
              DEBUG("SerialComm::cancel : writerThread canceled, joining")
!                 pthread_join(writerThread, NULL);
              writerThreadRunning = false;
! 	}
          readerThreadRunning = false;
!         pthread_cond_signal(&control.cancel);
          pthread_exit(NULL);
      }
***************
*** 780,793 ****
      {
          DEBUG("SerialComm::cancel : by writerThread")
!         pthread_detach(writerThread);
          if (readerThreadRunning)
!         {
              pthread_cancel(readerThread);
              DEBUG("SerialComm::cancel : readerThread canceled, joining")
!             pthread_join(readerThread, NULL);
              readerThreadRunning = false;
!         }
          writerThreadRunning = false;
! 	pthread_cond_signal(&control.cancel);
          pthread_exit(NULL);
      }
--- 724,737 ----
      {
          DEBUG("SerialComm::cancel : by writerThread")
!             pthread_detach(writerThread);
          if (readerThreadRunning)
! 	{
              pthread_cancel(readerThread);
              DEBUG("SerialComm::cancel : readerThread canceled, joining")
!                 pthread_join(readerThread, NULL);
              readerThreadRunning = false;
! 	}
          writerThreadRunning = false;
!         pthread_cond_signal(&control.cancel);
          pthread_exit(NULL);
      }
***************
*** 795,813 ****
      {
          DEBUG("SerialComm::cancel : by other thread")
!         if (readerThreadRunning)
!         {
!             pthread_cancel(readerThread);
!             DEBUG("SerialComm::cancel : readerThread canceled, joining")
!             pthread_join(readerThread, NULL);
!             readerThreadRunning = false;
!         }
          if (writerThreadRunning)
!         {
              pthread_cancel(writerThread);
              DEBUG("SerialComm::cancel : writerThread canceled, joining")
!             pthread_join(writerThread, NULL);
              writerThreadRunning = false;
!         }
! 	pthread_cond_signal(&control.cancel);
      }
  }
--- 739,757 ----
      {
          DEBUG("SerialComm::cancel : by other thread")
!             if (readerThreadRunning)
!             {
!                 pthread_cancel(readerThread);
!                 DEBUG("SerialComm::cancel : readerThread canceled, joining")
!                     pthread_join(readerThread, NULL);
!                 readerThreadRunning = false;
!             }
          if (writerThreadRunning)
! 	{
              pthread_cancel(writerThread);
              DEBUG("SerialComm::cancel : writerThread canceled, joining")
!                 pthread_join(writerThread, NULL);
              writerThreadRunning = false;
! 	}
!         pthread_cond_signal(&control.cancel);
      }
  }
***************
*** 819,826 ****
      {
          errorMsg << "error : SF-Server ( SerialComm on device = " << device << " ) : "
!         << msg << " ( result = " << result << " )" << endl
!         << "error-description : " << strerror(errno) << endl;
  
! 	cerr << errorMsg.str();
          errorReported = true;
          cancel();
--- 763,770 ----
      {
          errorMsg << "error : SF-Server ( SerialComm on device = " << device << " ) : "
!                  << msg << " ( result = " << result << " )" << endl
!                  << "error-description : " << strerror(errno) << endl;
  
!         cerr << errorMsg.str();
          errorReported = true;
          cancel();



More information about the Tinyos-2-commits mailing list