12#error This is a C++ include file and cannot be used from plain C
25#define ngcbMODIO_THR 1
40 erms_[0] =
'\0'; path_[0] =
'\0';
ngcbModInit(&mod_);
51 erms_[0] =
'\0'; path_[0] =
'\0';
ngcbModInit(&mod_);
52 if (path != NULL) strcpy(path_, path);
57 if (mod_.fd >= 0)
Close();
61 const char *
ErrMsg() {
return (erms_);}
65 if (stat) mod_.flags |= 0x1;
66 else mod_.flags &= ~0x1;
71 if (stat) mod_.flags |= 0x2;
72 else mod_.flags &= ~0x2;
76 void Period(
unsigned int p) {mod_.period = p;}
82 int Open(
const char *path) {
85 strcpy(erms_,
"device is already open");
117 int Read(
int addr,
int *buffer,
int size) {
118 return (
ngcbModRead(&mod_, addr, buffer, size, erms_));
122 int Write(
int addr,
const int *buffer,
int size) {
123 return (
ngcbModWrite(&mod_, addr, buffer, size, erms_));
130 int Wait(
int addr,
int mask,
void *lock = NULL) {
131 return (
Wait(addr, mask, -1, lock));
141 int Wait(
int addr,
int mask,
int timeout,
void *lock = NULL) {
143 unsigned long int p = 1000 * mod_.period;
144 long int n = (timeout * 1000000) / p;
146 pthread_mutex_t *m = (pthread_mutex_t *)lock;
151 if (
Read(addr, ®, 1) < 0)
156 while (((reg & mask) != mask) && (n != 0))
163 if (pthread_mutex_unlock(m) != 0)
165 sprintf(erms_,
"mutex unlock failed - %s", strerror(errno));
180 if (pthread_mutex_lock(m) != 0)
182 sprintf(erms_,
"mutex lock failed - %s", strerror(errno));
190 if (
Read(addr, ®, 1) < 0)
198 if ((reg & mask) != mask)
203 strcpy(erms_,
"timeout");
210 return (
ngcbModWait(&mod_, addr, mask, timeout, erms_));
228 void MicroSleep_(
unsigned long int ms) {
232 t.tv_sec = ms / 1000000;
233 ms -= t.tv_sec * 1000000;
235 select(0, NULL, NULL, NULL, &t);
int Fifo(int size)
Definition ngcbMODIO.hpp:114
void Verbose(int stat)
Set verbose mode (0 or 1)
Definition ngcbMODIO.hpp:70
int Wait(int addr, int mask, void *lock=NULL)
Definition ngcbMODIO.hpp:130
int Open()
Open module using the saved path.
Definition ngcbMODIO.hpp:79
int Wait(int addr, int mask, int timeout, void *lock=NULL)
Definition ngcbMODIO.hpp:141
int Write(int addr, const int *buffer, int size)
Write buffer to address - size is given in words (32-bit)
Definition ngcbMODIO.hpp:122
void Period(unsigned int p)
Set polling period (milliseconds)
Definition ngcbMODIO.hpp:76
ngcbMODIO()
Trivial constructor.
Definition ngcbMODIO.hpp:39
void Sim(int stat)
Set simulation mode (0 or 1)
Definition ngcbMODIO.hpp:64
virtual ~ngcbMODIO()
Destructor.
Definition ngcbMODIO.hpp:56
int Timeout(int seconds)
Set communication timeout.
Definition ngcbMODIO.hpp:105
int Open(const char *path)
Open module path.
Definition ngcbMODIO.hpp:82
int Close()
Shutdown module interface.
Definition ngcbMODIO.hpp:102
const char * ErrMsg()
Return error message.
Definition ngcbMODIO.hpp:61
ngcbMODIO(const char *path)
Definition ngcbMODIO.hpp:50
int Read(int addr, int *buffer, int size)
Read buffer from address - size is given in words (32-bit)
Definition ngcbMODIO.hpp:117
int ngcbModWrite(ngcb_mod_t *m, int addr, const int *buffer, int size, char *erms)
Definition ngcbDrvMod.c:454
int ngcbModWait(ngcb_mod_t *m, int addr, int mask, int timeout, char *erms)
Definition ngcbDrvMod.c:601
int ngcbModFifo(ngcb_mod_t *m, int size, char *erms)
Definition ngcbDrvMod.c:307
int ngcbModRead(ngcb_mod_t *m, int addr, int *buffer, int size, char *erms)
Definition ngcbDrvMod.c:326
int ngcbModOpen(const char *path, ngcb_mod_t *m, char *erms)
Definition ngcbDrvMod.c:55
void ngcbModInit(ngcb_mod_t *m)
Definition ngcbDrvMod.c:43
int ngcbModTimeout(ngcb_mod_t *m, int seconds, char *erms)
Definition ngcbDrvMod.c:285
int ngcbModClose(ngcb_mod_t *m, char *erms)
Definition ngcbDrvMod.c:248
#define USE(x)
Definition ngcb.h:28