[Tinyos-2-commits] CVS: tinyos-2.x/support/sdk/cpp/sf tcpcomm.h, 1.3, 1.4 tcpcomm.cpp, 1.5, 1.6 sfpacket.cpp, 1.2, 1.3 serialcomm.h, 1.2, 1.3 serialcomm.cpp, 1.3, 1.4 packetbuffer.h, 1.2, 1.3 packetbuffer.cpp, 1.2, 1.3 basecomm.h, 1.2, 1.3 basecomm.cpp, 1.2, 1.3
akoepke
andreaskoepke at users.sourceforge.net
Mon Apr 21 12:57:49 PDT 2008
- Previous message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/msp430/dma HplMsp430DmaP.nc, 1.5, 1.6
- Next message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/rf230 LowPowerListeningLayerC.nc, NONE, 1.1 LowPowerListeningLayerP.nc, NONE, 1.1 DefaultMacC.nc, 1.4, 1.5 DefaultPacketC.nc, 1.3, 1.4 DefaultPacketP.nc, 1.3, 1.4 MessageBufferLayerP.nc, 1.2, 1.3 Neighborhood.nc, 1.1, 1.2 RF230LayerC.nc, 1.4, 1.5 DummyLPLMacC.nc, 1.1, NONE DummyLPLP.nc, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv11422
Modified Files:
tcpcomm.h tcpcomm.cpp sfpacket.cpp serialcomm.h serialcomm.cpp
packetbuffer.h packetbuffer.cpp basecomm.h basecomm.cpp
Log Message:
- pass errno across interface
- do not cancel threads that are not running
- exit on write failures (just as we do for read failures)
Index: tcpcomm.h
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/tcpcomm.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** tcpcomm.h 21 Sep 2007 14:01:13 -0000 1.3
--- tcpcomm.h 21 Apr 2008 19:57:46 -0000 1.4
***************
*** 139,143 ****
protected:
/* performs blocking write on fd */
! virtual int writeFD(int fd, const char *buffer, int count);
/* checks SF client protocol version */
--- 139,143 ----
protected:
/* performs blocking write on fd */
! virtual int writeFD(int fd, const char *buffer, int count, int *err);
/* checks SF client protocol version */
Index: tcpcomm.cpp
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/tcpcomm.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** tcpcomm.cpp 21 Sep 2007 15:43:22 -0000 1.5
--- tcpcomm.cpp 21 Apr 2008 19:57:47 -0000 1.6
***************
*** 58,62 ****
/* opens tcp server port for listening and start threads*/
TCPComm::TCPComm(int pPort, PacketBuffer &pReadBuffer, PacketBuffer &pWriteBuffer, sharedControlInfo_t& pControl) : readBuffer(pReadBuffer), writeBuffer(pWriteBuffer), errorReported(false), errorMsg(""), control(pControl)
! {
// init values
writerThreadRunning = false;
--- 58,62 ----
/* opens tcp server port for listening and start threads*/
TCPComm::TCPComm(int pPort, PacketBuffer &pReadBuffer, PacketBuffer &pWriteBuffer, sharedControlInfo_t& pControl) : readBuffer(pReadBuffer), writeBuffer(pWriteBuffer), errorReported(false), errorMsg(""), control(pControl)
! {
// init values
writerThreadRunning = false;
***************
*** 68,71 ****
--- 68,72 ----
writtenPacketCount = 0;
port = pPort;
+
pthread_mutex_init(&clientInfo.sleeplock, NULL);
pthread_mutex_init(&clientInfo.countlock, NULL);
***************
*** 162,167 ****
char l;
char* buffer[SFPacket::getMaxPayloadLength()];
!
! if (readFD(pFD, &l, 1) != 1)
{
return false;
--- 163,169 ----
char l;
char* buffer[SFPacket::getMaxPayloadLength()];
! int err;
!
! if (readFD(pFD, &l, 1, &err) != 1)
{
return false;
***************
*** 171,175 ****
return false;
}
! if (readFD(pFD, (char*) buffer, static_cast<int>(l)) != l)
{
return false;
--- 173,177 ----
return false;
}
! if (readFD(pFD, (char*) buffer, static_cast<int>(l), &err) != l)
{
return false;
***************
*** 185,189 ****
}
! int TCPComm::writeFD(int fd, const char *buffer, int count)
{
int actual = 0;
--- 187,191 ----
}
! int TCPComm::writeFD(int fd, const char *buffer, int count, int *err)
{
int actual = 0;
***************
*** 195,200 ****
int n = send(fd, buffer, count, MSG_NOSIGNAL);
#endif
! if (n == -1)
! {
return -1;
}
--- 197,202 ----
int n = send(fd, buffer, count, MSG_NOSIGNAL);
#endif
! if (n == -1) {
! *err = errno;
return -1;
}
***************
*** 210,218 ****
{
char len = pPacket.getLength();
! if (writeFD(pFD, &len, 1) != 1)
{
return false;
}
! if (writeFD(pFD, pPacket.getPayload(), len) != len)
{
return false;
--- 212,221 ----
{
char len = pPacket.getLength();
! int err;
! if (writeFD(pFD, &len, 1, &err) != 1)
{
return false;
}
! if (writeFD(pFD, pPacket.getPayload(), len, &err) != len)
{
return false;
***************
*** 226,238 ****
char check[2], us[2];
int version;
!
/* Indicate version and check if a TinyOS 2.0 serial forwarder on the other end */
us[0] = 'U';
us[1] = ' ';
! if (writeFD(clientFD, us, 2) != 2)
{
return false;
}
! if (readFD(clientFD, check, 2) != 2)
{
return false;
--- 229,242 ----
char check[2], us[2];
int version;
! int err = 0;
/* Indicate version and check if a TinyOS 2.0 serial forwarder on the other end */
us[0] = 'U';
us[1] = ' ';
!
! if (writeFD(clientFD, us, 2, &err) != 2)
{
return false;
}
! if (readFD(clientFD, check, 2, &err) != 2)
{
return false;
***************
*** 396,407 ****
{
SFPacket packet;
! if (readPacket(*it, packet))
! {
// this call blocks until buffer is not full
readBuffer.enqueueBack(packet);
++readPacketCount;
}
! else
! {
DEBUG("TCPComm::readClients : removeClient")
removeClient(*it);
--- 400,409 ----
{
SFPacket packet;
! if(readPacket(*it, packet)) {
// this call blocks until buffer is not full
readBuffer.enqueueBack(packet);
++readPacketCount;
}
! else {
DEBUG("TCPComm::readClients : removeClient")
removeClient(*it);
Index: sfpacket.cpp
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/sfpacket.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** sfpacket.cpp 6 Jul 2007 20:29:12 -0000 1.2
--- sfpacket.cpp 21 Apr 2008 19:57:47 -0000 1.3
***************
*** 45,48 ****
--- 45,49 ----
length = pPacket.getLength();
type = pPacket.getType();
+ seqno = pPacket.getSeqno();
setPayload(pPacket.getPayload(), length);
}
Index: serialcomm.h
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/serialcomm.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** serialcomm.h 6 Jul 2007 20:29:12 -0000 1.2
--- serialcomm.h 21 Apr 2008 19:57:47 -0000 1.3
***************
*** 200,207 ****
* try to read at least count bytes in one go, but may read up to maxCount bytes.
*/
! virtual int readFD(int fd, char *buffer, int count, int maxCount);
/* enables byte escaping. overwrites method from base class.*/
! virtual int writeFD(int fd, const char *buffer, int count);
/* reads a packet (blocking) */
--- 200,207 ----
* try to read at least count bytes in one go, but may read up to maxCount bytes.
*/
! virtual int readFD(int fd, char *buffer, int count, int maxCount, int *err);
/* enables byte escaping. overwrites method from base class.*/
! virtual int writeFD(int fd, const char *buffer, int count, int *err);
/* reads a packet (blocking) */
Index: serialcomm.cpp
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/serialcomm.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** serialcomm.cpp 26 Feb 2008 18:17:04 -0000 1.3
--- serialcomm.cpp 21 Apr 2008 19:57:47 -0000 1.4
***************
*** 242,246 ****
}
! SerialComm::SerialComm(const char* pDevice, int pBaudrate, PacketBuffer &pReadBuffer, PacketBuffer &pWriteBuffer, sharedControlInfo_t& pControl) : readBuffer(pReadBuffer), writeBuffer(pWriteBuffer), droppedReadPacketCount(0), droppedWritePacketCount(0), readPacketCount(0), writtenPacketCount(0), badPacketCount(0), sumRetries(0), device(pDevice), baudrate(pBaudrate), errorReported(false), errorMsg(""), control(pControl)
{
writerThreadRunning = false;
--- 242,246 ----
}
! SerialComm::SerialComm(const char* pDevice, int pBaudrate, PacketBuffer &pReadBuffer, PacketBuffer &pWriteBuffer, sharedControlInfo_t& pControl) : readBuffer(pReadBuffer), writeBuffer(pWriteBuffer), droppedReadPacketCount(0), droppedWritePacketCount(0), readPacketCount(0), writtenPacketCount(0), badPacketCount(0), sumRetries(0), device(pDevice), baudrate(pBaudrate), serialReadFD(-1), serialWriteFD(-1), errorReported(false), errorMsg(""), control(pControl)
{
writerThreadRunning = false;
***************
*** 315,320 ****
pthread_cond_destroy(&ack.received);
! close(serialReadFD);
! close(serialWriteFD);
}
--- 315,320 ----
pthread_cond_destroy(&ack.received);
! if(serialReadFD > 2) close(serialReadFD);
! if(serialWriteFD > 2) close(serialWriteFD);
}
***************
*** 334,338 ****
}
! int SerialComm::writeFD(int fd, const char *buffer, int count)
{
int cnt = 0;
--- 334,338 ----
}
! int SerialComm::writeFD(int fd, const char *buffer, int count, int *err)
{
int cnt = 0;
***************
*** 344,349 ****
FD_CLR(serialWriteFD, &wfds);
*/
! int tmpCnt = BaseComm::writeFD(fd, buffer, count);
if (tmpCnt < 0) {
return tmpCnt;
}
--- 344,350 ----
FD_CLR(serialWriteFD, &wfds);
*/
! int tmpCnt = BaseComm::writeFD(fd, buffer, count, err);
if (tmpCnt < 0) {
+ *err = errno;
return tmpCnt;
}
***************
*** 357,361 ****
/* Work around buggy usb serial driver (returns 0 when no data is
available, independent of the blocking/non-blocking mode) */
! int SerialComm::readFD(int fd, char *buffer, int count, int maxCount)
{
int cnt = 0;
--- 358,362 ----
/* Work around buggy usb serial driver (returns 0 when no data is
available, independent of the blocking/non-blocking mode) */
! int SerialComm::readFD(int fd, char *buffer, int count, int maxCount, int *err)
{
int cnt = 0;
***************
*** 377,380 ****
--- 378,382 ----
int tmpCnt = read(fd, buffer, maxCount);
if (tmpCnt < 0) {
+ *err = errno;
return tmpCnt;
}
***************
*** 388,391 ****
--- 390,394 ----
char SerialComm::nextRaw() {
char nextByte = 0;
+ int err = 0;
if(rawFifo.tail < rawFifo.head) {
nextByte = rawFifo.queue[rawFifo.tail++];
***************
*** 394,399 ****
// fifo empty -- need to get some bytes
rawFifo.tail = 0;
reportError("SerialComm::nextRaw: readFD(serialReadFD, rawFifo.queue, rawReadBytes, maxMTU-1)",
! rawFifo.head = readFD(serialReadFD, rawFifo.queue, rawReadBytes, maxMTU-1));
nextByte = rawFifo.queue[rawFifo.tail++];
}
--- 397,410 ----
// fifo empty -- need to get some bytes
rawFifo.tail = 0;
+ rawFifo.head = readFD(serialReadFD, rawFifo.queue, rawReadBytes, maxMTU-1, &err);
+ if(rawFifo.head < 0) {
+ close(serialReadFD);
+ close(serialWriteFD);
+ serialReadFD = -1;
+ serialWriteFD = -1;
+ errno = err;
+ }
reportError("SerialComm::nextRaw: readFD(serialReadFD, rawFifo.queue, rawReadBytes, maxMTU-1)",
! rawFifo.head);
nextByte = rawFifo.queue[rawFifo.tail++];
}
***************
*** 546,554 ****
bool SerialComm::writePacket(SFPacket &pPacket)
{
! char type, byte;
uint16_t crc = 0;
char buffer[2*pPacket.getLength() + 20];
int offset = 0;
!
// put SFD into buffer
buffer[offset++] = SYNC_BYTE;
--- 557,567 ----
bool SerialComm::writePacket(SFPacket &pPacket)
{
! char type, byte = 0;
uint16_t crc = 0;
char buffer[2*pPacket.getLength() + 20];
int offset = 0;
! int err = 0;
! int written = 0;
!
// put SFD into buffer
buffer[offset++] = SYNC_BYTE;
***************
*** 563,567 ****
crc = byteCRC(byte, crc);
offset += hdlcEncode(1, &byte, buffer + offset);
-
switch (type)
{
--- 576,579 ----
***************
*** 588,592 ****
// put SFD into buffer
buffer[offset++] = SYNC_BYTE;
! if(writeFD(serialWriteFD, buffer, offset) < offset) {
DEBUG("SerialComm::writePacket failed");
return false;
--- 600,616 ----
// put SFD into buffer
buffer[offset++] = SYNC_BYTE;
! written = writeFD(serialWriteFD, buffer, offset, &err);
! if(written < 0) {
! if(err != EINTR) {
! close(serialReadFD);
! serialReadFD = -1;
! close(serialWriteFD);
! serialWriteFD = -1;
! errno = err;
! reportError("SerialComm::writePacket failed",-1);
! return false;
! }
! }
! else if(written < offset) {
DEBUG("SerialComm::writePacket failed");
return false;
***************
*** 738,742 ****
{
pthread_t callingThread = pthread_self();
! if (pthread_equal(callingThread, readerThread))
{
DEBUG("SerialComm::cancel : by readerThread")
--- 762,766 ----
{
pthread_t callingThread = pthread_self();
! if(readerThreadRunning && pthread_equal(callingThread, readerThread))
{
DEBUG("SerialComm::cancel : by readerThread")
***************
*** 753,757 ****
pthread_exit(NULL);
}
! else if ((pthread_equal(callingThread, writerThread)))
{
DEBUG("SerialComm::cancel : by writerThread")
--- 777,781 ----
pthread_exit(NULL);
}
! else if(writerThreadRunning && pthread_equal(callingThread, writerThread))
{
DEBUG("SerialComm::cancel : by writerThread")
Index: packetbuffer.h
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/packetbuffer.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** packetbuffer.h 6 Jul 2007 20:29:12 -0000 1.2
--- packetbuffer.h 21 Apr 2008 19:57:47 -0000 1.3
***************
*** 38,42 ****
#include "sfpacket.h"
! //#define DEBUG_PACKETBUFFER
#undef DEBUG
--- 38,42 ----
#include "sfpacket.h"
! // #define DEBUG_PACKETBUFFER
#undef DEBUG
***************
*** 52,56 ****
protected:
! static const int cMaxBufferSize = 25;
typedef std::list<SFPacket> container_t;
--- 52,56 ----
protected:
! static const unsigned cMaxBufferSize = 25;
typedef std::list<SFPacket> container_t;
***************
*** 67,72 ****
// actual buffer
container_t container;
- // number of packets in buffer
- int size;
} sharedBuffer_t;
--- 67,70 ----
Index: packetbuffer.cpp
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/packetbuffer.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** packetbuffer.cpp 6 Jul 2007 20:29:12 -0000 1.2
--- packetbuffer.cpp 21 Apr 2008 19:57:47 -0000 1.3
***************
*** 41,45 ****
pthread_cond_init(&buffer.notempty, NULL);
pthread_cond_init(&buffer.notfull, NULL);
- buffer.size = 0;
}
--- 41,44 ----
***************
*** 58,62 ****
// clear
buffer.container.clear();
- buffer.size = 0;
DEBUG("PacketBuffer::clear : cleared buffer and signal <notfull>")
pthread_cond_signal(&buffer.notfull);
--- 57,60 ----
***************
*** 72,76 ****
pthread_mutex_lock(&buffer.lock);
// wait until buffer is _not_ empty
! while(buffer.size == 0)
{
DEBUG("PacketBuffer::dequeue : waiting until buffer is <notempty>")
--- 70,74 ----
pthread_mutex_lock(&buffer.lock);
// wait until buffer is _not_ empty
! while(buffer.container.size() == 0)
{
DEBUG("PacketBuffer::dequeue : waiting until buffer is <notempty>")
***************
*** 80,84 ****
packet = buffer.container.front();
buffer.container.pop_front();
- --buffer.size;
DEBUG("PacketBuffer::dequeue : get from buffer and signal <notfull>")
pthread_cond_signal(&buffer.notfull);
--- 78,81 ----
***************
*** 94,98 ****
pthread_mutex_lock(&buffer.lock);
// wait until buffer is _not_ full
! while(buffer.size >= cMaxBufferSize)
{
DEBUG("PacketBuffer::enqueueFront : waiting until buffer is <notfull>")
--- 91,95 ----
pthread_mutex_lock(&buffer.lock);
// wait until buffer is _not_ full
! while(buffer.container.size() >= cMaxBufferSize)
{
DEBUG("PacketBuffer::enqueueFront : waiting until buffer is <notfull>")
***************
*** 100,104 ****
}
// enqueue
- ++buffer.size;
buffer.container.push_front(pPacket);
DEBUG("PacketBuffer::enqueueFront : put in buffer and signal <notempty>")
--- 97,100 ----
***************
*** 116,120 ****
pthread_mutex_lock(&buffer.lock);
// wait until buffer is _not_ full
! while(buffer.size >= cMaxBufferSize)
{
DEBUG("PacketBuffer::enqueueBack : waiting until buffer is <notfull>")
--- 112,116 ----
pthread_mutex_lock(&buffer.lock);
// wait until buffer is _not_ full
! while(buffer.container.size() >= cMaxBufferSize)
{
DEBUG("PacketBuffer::enqueueBack : waiting until buffer is <notfull>")
***************
*** 122,126 ****
}
// enqueue
- ++buffer.size;
buffer.container.push_back(pPacket);
DEBUG("PacketBuffer::enqueueBack : put in buffer and signal <notempty>")
--- 118,121 ----
***************
*** 136,141 ****
pthread_testcancel();
pthread_mutex_lock(&buffer.lock);
! if (buffer.size < cMaxBufferSize) {
! isFull = false;
}
pthread_mutex_unlock(&buffer.lock);
--- 131,136 ----
pthread_testcancel();
pthread_mutex_lock(&buffer.lock);
! if (buffer.container.size() < cMaxBufferSize) {
! isFull = false;
}
pthread_mutex_unlock(&buffer.lock);
***************
*** 148,153 ****
pthread_testcancel();
pthread_mutex_lock(&buffer.lock);
! if (buffer.size > 0) {
! isEmpty = false;
}
pthread_mutex_unlock(&buffer.lock);
--- 143,148 ----
pthread_testcancel();
pthread_mutex_lock(&buffer.lock);
! if (buffer.container.size() > 0) {
! isEmpty = false;
}
pthread_mutex_unlock(&buffer.lock);
Index: basecomm.h
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/basecomm.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** basecomm.h 6 Jul 2007 20:29:12 -0000 1.2
--- basecomm.h 21 Apr 2008 19:57:47 -0000 1.3
***************
*** 42,49 ****
protected:
/* performs blocking read on fd */
! virtual int readFD(int fd, char *buffer, int count);
/* performs blocking write on fd */
! virtual int writeFD(int fd, const char *buffer, int count);
};
--- 42,49 ----
protected:
/* performs blocking read on fd */
! virtual int readFD(int fd, char *buffer, int count, int *err);
/* performs blocking write on fd */
! virtual int writeFD(int fd, const char *buffer, int count, int *err);
};
Index: basecomm.cpp
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/support/sdk/cpp/sf/basecomm.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** basecomm.cpp 6 Jul 2007 20:29:12 -0000 1.2
--- basecomm.cpp 21 Apr 2008 19:57:47 -0000 1.3
***************
*** 47,51 ****
/* all count bytes must be read before returning - blocking in that way... */
! int BaseComm::readFD(int fd, char *buffer, int count)
{
int actual = 0;
--- 47,51 ----
/* all count bytes must be read before returning - blocking in that way... */
! int BaseComm::readFD(int fd, char *buffer, int count, int *err)
{
int actual = 0;
***************
*** 55,58 ****
--- 55,59 ----
if (n == -1)
{
+ *err = errno;
return -1;
}
***************
*** 69,73 ****
/* all count bytes must be written before returning - blocking in that way... */
! int BaseComm::writeFD(int fd, const char *buffer, int count)
{
int actual = 0;
--- 70,74 ----
/* all count bytes must be written before returning - blocking in that way... */
! int BaseComm::writeFD(int fd, const char *buffer, int count, int *err)
{
int actual = 0;
***************
*** 78,81 ****
--- 79,83 ----
{
if(errno != 0) {
+ *err = errno;
return -1;
}
- Previous message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/msp430/dma HplMsp430DmaP.nc, 1.5, 1.6
- Next message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/rf230 LowPowerListeningLayerC.nc, NONE, 1.1 LowPowerListeningLayerP.nc, NONE, 1.1 DefaultMacC.nc, 1.4, 1.5 DefaultPacketC.nc, 1.3, 1.4 DefaultPacketP.nc, 1.3, 1.4 MessageBufferLayerP.nc, 1.2, 1.3 Neighborhood.nc, 1.1, 1.2 RF230LayerC.nc, 1.4, 1.5 DummyLPLMacC.nc, 1.1, NONE DummyLPLP.nc, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Tinyos-2-commits
mailing list