[Tinyos-2-commits] CVS: tinyos-2.x/tos/lib/tosthreads/lib/net BlockingCollectionControlC.nc, 1.1, 1.2 BlockingCollectionControlP.nc, 1.1, 1.2
Chieh-Jan Mike Liang
liang_mike at users.sourceforge.net
Mon Feb 9 19:42:47 PST 2009
Update of /cvsroot/tinyos/tinyos-2.x/tos/lib/tosthreads/lib/net
In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv13822/tos/lib/tosthreads/lib/net
Modified Files:
BlockingCollectionControlC.nc BlockingCollectionControlP.nc
Log Message:
Use SystemCallC to pass control to the TinyOS thread
Index: BlockingCollectionControlC.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/tosthreads/lib/net/BlockingCollectionControlC.nc,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** BlockingCollectionControlC.nc 16 Jun 2008 18:38:28 -0000 1.1
--- BlockingCollectionControlC.nc 10 Feb 2009 03:42:45 -0000 1.2
***************
*** 33,38 ****
implementation {
! components BlockingCollectionControlP,
! CollectionC as Collector;
RoutingControl = BlockingCollectionControlP.BlockingStdControl;
--- 33,40 ----
implementation {
! components CollectionC as Collector,
! SystemCallC,
! MutexC,
! BlockingCollectionControlP;
RoutingControl = BlockingCollectionControlP.BlockingStdControl;
***************
*** 40,42 ****
--- 42,46 ----
BlockingCollectionControlP.RoutingControl -> Collector.StdControl;
+ BlockingCollectionControlP.SystemCall -> SystemCallC;
+ BlockingCollectionControlP.Mutex -> MutexC;
}
Index: BlockingCollectionControlP.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/tosthreads/lib/net/BlockingCollectionControlP.nc,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** BlockingCollectionControlP.nc 16 Jun 2008 18:38:28 -0000 1.1
--- BlockingCollectionControlP.nc 10 Feb 2009 03:42:45 -0000 1.2
***************
*** 27,46 ****
module BlockingCollectionControlP {
provides {
! interface BlockingStdControl;
}
uses {
interface StdControl as RoutingControl;
}
}
implementation {
! command error_t BlockingStdControl.start()
{
! return call RoutingControl.start();
}
! command error_t BlockingStdControl.stop()
{
return call RoutingControl.stop();
}
--- 27,83 ----
module BlockingCollectionControlP {
provides {
! interface BlockingStdControl;
! interface Init;
}
uses {
interface StdControl as RoutingControl;
+ interface SystemCall;
+ interface Mutex;
}
}
implementation {
! typedef struct params {
! error_t error;
! } params_t;
!
! syscall_t* start_call = NULL;
! mutex_t my_mutex;
!
! command error_t Init.init()
{
! call Mutex.init(&my_mutex);
! return SUCCESS;
}
! void startTask(syscall_t* s)
{
+ params_t* p = s->params;
+ p->error = call RoutingControl.start();
+ call SystemCall.finish(s);
+ }
+
+ command error_t BlockingStdControl.start()
+ {
+ syscall_t s;
+ params_t p;
+
+ call Mutex.lock(&my_mutex);
+ if (start_call == NULL) {
+ start_call = &s;
+ call SystemCall.start(&startTask, &s, INVALID_ID, &p);
+ start_call = NULL;
+ } else {
+ p.error = EBUSY;
+ }
+
+ atomic {
+ call Mutex.unlock(&my_mutex);
+ return p.error;
+ }
+ }
+
+ command error_t BlockingStdControl.stop() {
return call RoutingControl.stop();
}
More information about the Tinyos-2-commits
mailing list