Implement simulated counter hardware and more string literal changes

r3637 | dcl | 2012-07-11 15:08:50 +1000 (Wed, 11 Jul 2012) | 1 line
This commit is contained in:
Douglas Clowes
2012-07-11 15:08:50 +10:00
parent a4581ba153
commit c59a3979be
4 changed files with 124 additions and 6 deletions

View File

@@ -8,6 +8,8 @@ LDFLAGS += -g
TARGETS = Monitor
OBJS = Monitor.o params.o utility.o sock.o display.o device.o hware.o
ifeq ($(origin simulate_hardware),undefined)
$(info "Simulate Hardware is not defined")
ifeq ($(wildcard /usr/local/lib/libnidaqmx.so),)
OBJECTS =
LIBS =
@@ -26,6 +28,11 @@ else
LIBS = nidaqmx
LIBFLAGS = $(foreach lib,$(LIBS),-l$(lib))
endif
else
$(info "Simulate Hardware is from $(origin simulate_hardware)")
$(warning "Counter Hardware will be simulated in this build")
CXXFLAGS += -DSIMULATE_HARDWARE=1
endif
all: $(TARGETS)

View File

@@ -7,6 +7,7 @@
#include <stdlib.h>
#include <ctype.h>
#ifndef SIMULATE_HARDWARE
#define DEFAULT_DEVICE "dev1/ctr0"
#ifdef REGISTER_LEVEL_PROGRAMMING
@@ -888,3 +889,111 @@ void initChan(pHWARE hware)
}
#else
#endif
#else /* SIMULATE_HARDWARE */
#include <sys/time.h>
typedef struct device_private_t
{
/** extended 64-bit counter value */
unsigned long long count64;
/* TODO time and count */
int source; /* count rate to be simulated */
struct timeval last_time;
} DEVICE_PRIVATE;
int hware_ctor(const char* device_name, pHWARE* ptr)
{
pHWARE hware = NULL;
hware = (DEVICE_PRIVATE*) malloc(sizeof(DEVICE_PRIVATE));
*ptr = hware;
memset(hware, 0, sizeof(DEVICE_PRIVATE));
/* TODO time and count */
hware->source = 1000; /* initial count rate */
gettimeofday(&hware->last_time, NULL);
#if 0 /* DEBUG */
printf("hware_ctor: %s at %p\n", device_name, *ptr);
#endif
return 0;
}
int hware_read(pHWARE hware, unsigned long long* value)
{
struct timeval this_time;
double delta_time;
long long delta_count = 0;
/* TODO time and count */
gettimeofday(&this_time, NULL);
delta_time = (this_time.tv_sec + 1e-6 * this_time.tv_usec) -
(hware->last_time.tv_sec + 1e-6 * hware->last_time.tv_usec);
delta_count = (long long)(0.5 + delta_time * hware->source);
hware->count64 += delta_count;
hware->last_time = this_time;
*value = hware->count64;
return 0;
}
int hware_source(pHWARE hware, int value)
{
#if 0 /* DEBUG */
int old_source = hware->source;
#endif
switch (value)
{
case 0:
hware->source = 10000;
break;
case 1:
hware->source = 20000000;
break;
case 2:
hware->source = 100000;
break;
case 3:
hware->source = 80000000;
break;
default:
if (value < 1000)
hware->source = 1000;
else
hware->source = value;
break;
}
#if 0 /* DEBUG */
printf("hware_source: %d moves %d to %d at %p\n", value, old_source, hware->source, hware);
#endif
return 0;
}
int hware_filter(pHWARE hware, int value)
{
/* nothing to do */
return 0;
}
int hware_outp(pHWARE hware, int value)
{
/* nothing to do */
return 0;
}
void hware_sync(pHWARE hware, bool external)
{
/* nothing to do */
}
int hware_dtor(pHWARE* ptr)
{
if (ptr && *ptr)
{
/* release the storage */
free(*ptr);
*ptr = NULL;
}
return 0;
}
bool hware_failed(int error)
{
return false;
}
void hware_errmsg(char* buff, int len)
{
if (buff)
strncpy(buff, "Simulated error message", len);
}
#endif

View File

@@ -61,7 +61,7 @@ static struct param_command_t {
};
#define NUM_CMDS ((int) ((sizeof(param_command)/sizeof(param_command[0]))))
static int name_to_command(char* name)
static int name_to_command(const char* name)
{
int i;
for (i = 0; i < NUM_CMDS; ++i) {
@@ -73,7 +73,7 @@ static int name_to_command(char* name)
return -1;
}
bool param_set(pPARAMETERS pp, char* name, char* value)
bool param_set(pPARAMETERS pp, const char* name, const char* value)
{
bool result = false;
switch (name_to_command(name))
@@ -190,8 +190,10 @@ bool param_set(pPARAMETERS pp, char* name, char* value)
pp->source = strtol(value, NULL, 10);
if (pp->source < 1)
pp->source = 0;
#ifndef SIMULATE_HARDWARE
else if (pp->source > 3)
pp->source = 0;
#endif
dbg_printf(0, "=>%d\n", pp->source);
break;
case CMD_FILTER:
@@ -243,7 +245,7 @@ bool param_set(pPARAMETERS pp, char* name, char* value)
return result;
}
bool param_set_cmd(pPARAMETERS pp, char* cmd)
bool param_set_cmd(pPARAMETERS pp, const char* cmd)
{
char name[100];
char value[100];

View File

@@ -48,7 +48,7 @@ typedef struct parameter_t
} PARAMETERS, *pPARAMETERS;
bool param_set(pPARAMETERS pp, char* name, char* value);
bool param_set_cmd(pPARAMETERS pp, char* cmd);
bool param_get_cmd(pPARAMETERS pp, char* cmd, int n);
bool param_set(pPARAMETERS pp, const char* name, const char* value);
bool param_set_cmd(pPARAMETERS pp, const char* cmd);
bool param_get_cmd(pPARAMETERS pp, const char* cmd, int n);
#endif