Show SwTimer.c syntax highlighted
/*
*
* Copyright (c) 2003 The Regents of the University of California. All
* rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Neither the name of the University nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
* Copyright (c) 2001 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgement:
* This product includes software developed by Networked &
* Embedded Systems Lab at UCLA
* 4. Neither the name of the University nor that of the Laboratory
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* Author: Simon Han (simonhan@ee.ucla.edu)
*/
#include "sensorware.h"
void *swTimerThread(void *arg);
int swTimerPs(Tcl_Interp *interp, int argc, char *argv[]);
int swTimerLs(Tcl_Interp *interp, int argc, char *argv[]);
int swTimerInterest(Tcl_Interp *interp, int argc, char *argv[],
void **dataPtr);
int swTimerActivate(SwInterest *interest);
int swTimerDeactivate(SwInterest *interest);
int swTimerQuery(Tcl_Interp *interp, int argc, char *argv[]);
int swTimerDispose(void *param);
static SwDeviceOp op = {
interest: swTimerInterest,
ps: swTimerPs,
ls: swTimerLs,
activate: swTimerActivate,
deactivate: swTimerDeactivate,
dispose: swTimerDispose,
query: swTimerQuery,
thread: swTimerThread,
};
static swDiffQ dq;
void *swTimerThread(void *arg)
{
char *buf;
//struct timeval tdiff;
swDiffQInit(&dq);
while(1){
SwInterest *interest;
int size;
//swMeasureCtime(&tdiff);
// service the item
interest = (SwInterest*)swDiffQWait(&dq);
//swMeasurePrintTimeDiff(&tdiff);
if(interest != NULL){
size = strlen(interest->namePtr) + 1;
buf = (char *)ckalloc(size);
if(buf != NULL){
sprintf(buf, "%s", interest->namePtr);
if(swInterestSendMail(interest, buf, size) < 0){
ckfree(buf);
}
}
}
}
pthread_exit(NULL);
}
int swTimerPs(Tcl_Interp *interp, int argc, char *argv[]){
return TCL_OK;
}
int swTimerLs(Tcl_Interp *interp, int argc, char *argv[]){
Tcl_AppendResult(interp, "1\t", NULL);
return TCL_OK;
}
int swTimerInterest(Tcl_Interp *interp, int argc, char *argv[],
void **dataPtr){
int msTime;
//printf("timer interest\n");
if(argc == 0){
Tcl_AppendResult(interp, "timer: not enough parameter", NULL);
return TCL_ERROR;
}
sscanf(argv[0], "%d", &msTime);
*dataPtr = (void*)msTime;
//*dataPtr = NULL;
return TCL_OK;
}
int swTimerActivate(SwInterest *interest){
//printf("timer activate with name: %s\n", interest->namePtr);
swDiffQNewItem(&dq, (int)(interest->devParamPtr), (void*)interest);
//swDiffQPrint(&dq);
return 0;
}
int swTimerDeactivate(SwInterest *interest){
//printf("timer deactivate with name: %s\n", interest->namePtr);
swDiffQDeleteItem(&dq, (void*)interest);
return 0;
}
int swTimerDispose(void *param){
//ckfree(param);
//printf("timer disposed\n");
return 0;
}
int swTimerQuery(Tcl_Interp *interp, int argc, char *argv[]){
struct timeval t;
gettimeofday(&t, NULL);
sprintf(interp->result, "%ld %ld", t.tv_sec, t.tv_usec);
return TCL_OK;
}
int swTimerInit(){
return swDeviceRegister("timer", &op);
}
See more files for this project here