6 fprintf(stderr,
"usage: %s port[=5555].\n", argv[1]);
8 if (argc==2) port = atoi(argv[1]);
13 #define DAQmxErrChk(functionCall) { if( DAQmxFailed(error=(functionCall)) ) { goto Error; } } 36 colors.push_back(std::string(
"\033[94m"));
37 colors.push_back(std::string(
"\033[92m"));
38 colors.push_back(std::string(
"\033[93m"));
39 colors.push_back(std::string(
"\033[95m"));
40 colors.push_back(std::string(
"\033[33m"));
41 colors.push_back(std::string(
"\033[91m"));
42 colors.push_back(std::string(
"\033[0m"));
46 std::string _osName =
osName();
50 msgSvc(
INFO,
" ***********************************************",
"");
53 msgSvc(
INFO,
" * |\\-''-/|.___..--''\"`-._ *",
"");
54 msgSvc(
INFO,
" * `6_ 6 ) `-. ( ).`-.__.`) *",
"");
55 msgSvc(
INFO,
" * (_Y_.)' ._ ) `._ `. ``-..-' *",
"");
56 msgSvc(
INFO,
" * _..`--'_..- _/ /--'_.' ,' *",
"");
58 msgSvc(
INFO,
" ***********************************************",
"");
95 const int OUTLEVEL =
DEBUG;
96 if (level<OUTLEVEL)
return;
97 log ( level, msg, call);
105 struct tm * timeinfo;
108 timeinfo = localtime ( &rawtime );
109 char* timechar = asctime (timeinfo) ;
110 std::string timing = std::string(timechar,24) +
" ";
126 output+=std::string(call,0,
callSize);
133 int clen=call.length();
187 std::cout << output << std::endl;
189 if (isFatal) {exit(0);}
196 sockfd = socket(AF_INET, SOCK_STREAM, 0);
198 error(
"ERROR opening socket");
199 bzero((
char *) &serv_addr,
sizeof(serv_addr));
200 serv_addr.sin_family = AF_INET;
201 serv_addr.sin_addr.s_addr = INADDR_ANY;
202 serv_addr.sin_port = htons(
portno);
203 if (bind(
sockfd, (
struct sockaddr *) &serv_addr,
204 sizeof(serv_addr)) < 0)
205 error(
"ERROR on binding");
226 error(
"ERROR reading from socket");
232 std::string newcmd = std::string(
buffer);
233 std::string delimiter =
" ";
236 std::vector<std::string> cmdvec;
237 while ((pos = newcmd.find(delimiter)) != std::string::npos) {
238 cmdvec.push_back(newcmd.substr(0, pos));
239 newcmd.erase(0, pos + delimiter.length());
242 cmdvec.push_back(newcmd);
246 bool understood =
false;
247 std::string instr = cmdvec[1];
248 std::transform(instr.begin(), instr.end(),instr.begin(), ::tolower);
251 if ( instr==
"status"){
256 if ( instr==
"timeout" && cmdsize==2 ){
262 if ( instr==
"ai" && cmdsize==2 ){
263 const char* dev = cmdvec[0].c_str();
266 size = sprintf(result,
"%f %f %f %f", data[0], data[1], data[2], data[3]);
267 if ( write(
newsockfd, result, size)<0 )
error(
"ERROR writing to socket");
271 if ( instr==
"airange" && cmdsize==4 ){
272 setAIRange(atof(cmdvec[2].c_str()), atof(cmdvec[3].c_str()));
277 if ( instr==
"ao" && cmdsize==4){
278 const char* dev = cmdvec[0].c_str();
280 data[0]=atof(cmdvec[2].c_str());
281 data[1]=atof(cmdvec[3].c_str());
284 size = sprintf(result,
"AO set.");
285 if ( write(
newsockfd, result, size)<0 )
error(
"ERROR writing to socket");
305 if ( instr==
"aorange" && cmdsize==4 ){
306 setAORange(atof(cmdvec[2].c_str()), atof(cmdvec[3].c_str()));
312 const char* dev = cmdvec[0].c_str();
313 unsigned char idata[2];
315 unsigned int data = idata[0]+256*idata[1];
317 (data>>3&1)+2*(data>>2&1)+4*(data>>1&1)+8*(data&1)+
318 16*(data>>11&1)+32*(data>>10&1)+64*(data>>9&1)+128*(data>>8&1)+
319 256*(data>>7&1)+512*(data>>6&1)+1024*(data>>5&1)+2048*(data>>4&1);
321 size = sprintf(result,
"%d %d - %d / %d -> %i%i%i%i%i%i%i%i%i%i%i%i ", idata[0], idata[1], data, data2,
322 data>>11&1, data>>10& 1, data>>9&1, data>>8&1,
323 data>>7&1, data>>6&1, data>>5&1, data>>4&1,
324 data>>3&1, data>>2&1, data>>1&1, data&1
326 std::cout<<
"digit :" << result<< std::endl;
327 if ( write(
newsockfd, result, size)<0 )
error(
"ERROR writing to socket");
331 if ( instr==
"reset"){
333 if ( write(
newsockfd, result, size)<0 )
error(
"ERROR writing to socket");
340 if (
n < 0)
error(
"ERROR writing to socket");
346 size = sprintf(result,
"Instruction not understood.");
347 if ( write(
newsockfd, result, size)<0 )
error(
"ERROR writing to socket");
358 send(std::string(
" - AI"));
361 send(std::string(
" - AO"));
371 TaskHandle taskHandle = 0;
372 char errBuff[2048]={
'\0'};
374 sprintf(chan,
"%s/ai0,%s/ai1,%s/ai2,%s/ai3", dev, dev, dev, dev);
383 uInt64 samplesPerChan = 4;
386 int32 pointsToRead = 1;
394 DAQmxBaseCreateAIVoltageChan(taskHandle,
397 DAQmx_Val_Cfg_Default,
405 DAQmx_Val_GroupByChannel,
411 if( DAQmxFailed(error) )
412 DAQmxBaseGetExtendedErrorInfo(errBuff,2048);
413 if( taskHandle!=0 ) {
414 DAQmxBaseStopTask(taskHandle);
415 DAQmxBaseClearTask(taskHandle);
417 if( DAQmxFailed(error) )
418 printf (
"DAQmxBase Error %ld: %s\n", error, errBuff);
420 sprintf(errBuff,
"Readout AI: Ch %s - Val = %2.4f %2.4f %2.4f %2.4f", chan, data[0], data[1], data[2], data[3]);
421 std::cout<<errBuff<<std::endl;
432 TaskHandle taskHandle = 0;
433 char errBuff[2048]={
'\0'};
435 sprintf(chan,
"%s/ao0,%s/ao1", dev, dev);
442 uInt64 samplesPerChan = 1;
449 DAQmxErrChk (DAQmxBaseCreateAOVoltageChan(taskHandle,
461 DAQmx_Val_GroupByChannel,
466 if( DAQmxFailed(error) )
467 DAQmxBaseGetExtendedErrorInfo(errBuff,2048);
468 if( taskHandle!=0 ) {
469 DAQmxBaseStopTask(taskHandle);
470 DAQmxBaseClearTask(taskHandle);
472 if( DAQmxFailed(error) )
473 printf (
"DAQmxBase Error %ld: %s\n", error, errBuff);
475 sprintf(errBuff,
"Setting AO: Ch %s - Val = %2.2f %2.2f", chan, data[0], data[1]);
476 std::cout<<errBuff<<std::endl;
487 TaskHandle taskHandle = 0;
489 const uInt32 num_ports = 2;
496 sprintf(chan1,
"%s/port0", dev);
497 sprintf(chan2,
"%s/port1", dev);
506 DAQmxErrChk (DAQmxBaseCreateTask (
"", &taskHandle));
507 DAQmxErrChk (DAQmxBaseCreateDIChan(taskHandle,chan1,
"",DAQmx_Val_ChanForAllLines));
508 DAQmxErrChk (DAQmxBaseCreateDIChan(taskHandle,chan2,
"",DAQmx_Val_ChanForAllLines));
515 code = DAQmxBaseReadDigitalU8(
519 DAQmx_Val_GroupByChannel,
530 if (DAQmxFailed (error))
531 DAQmxBaseGetExtendedErrorInfo (errBuff, 2048);
532 if (taskHandle != 0){
533 DAQmxBaseStopTask (taskHandle);
534 DAQmxBaseClearTask (taskHandle);
536 if (error)printf (
"DAQmxBase Error %ld: %s\n", error, errBuff);
538 sprintf(errBuff,
"Reading DI: Ch %s %s - Val = %3i %3i", chan1, chan2, r_data[0], r_data[1]);
539 std::cout<<errBuff<<std::endl;
547 msgSvc(
INFO,
"Reset has not been implemented yet.");
558 TaskHandle taskHandle = 0;
559 char errBuff[2048]={
'\0'};
560 char chan[] =
"Dev1/ao0\0";
565 uInt64 samplesPerChan = 1;
572 DAQmxErrChk (DAQmxBaseCreateAOVoltageChan(taskHandle,
584 DAQmx_Val_GroupByChannel,
588 msgSvc(
INFO,
"Processing AO "+std::string(chan)+
".");
592 if( DAQmxFailed(error) )
593 DAQmxBaseGetExtendedErrorInfo(errBuff,2048);
594 if( taskHandle!=0 ) {
595 DAQmxBaseStopTask(taskHandle);
596 DAQmxBaseClearTask(taskHandle);
598 if( DAQmxFailed(error) )
599 printf (
"DAQmxBase Error %ld: %s\n", error, errBuff);
611 TaskHandle taskHandle = 0;
612 char errBuff[2048]={
'\0'};
613 char chan[] =
"Dev1/ao1";
618 uInt64 samplesPerChan = 1;
624 DAQmxErrChk (DAQmxBaseCreateAOVoltageChan(taskHandle,
636 DAQmx_Val_GroupByChannel,
640 msgSvc(
INFO,
"Processing AO1 "+std::string(chan)+
".");
646 if( DAQmxFailed(error) )
647 DAQmxBaseGetExtendedErrorInfo(errBuff,2048);
648 if( taskHandle!=0 ) {
649 DAQmxBaseStopTask(taskHandle);
650 DAQmxBaseClearTask(taskHandle);
652 if( DAQmxFailed(error) )
653 printf (
"DAQmxBase Error %ld: %s\n", error, errBuff);
int main(int argc, char *argv[])
const std::string & hostName()
Host name.
void setTimeout(double timeout=10.0)
char ** argv()
char** command line arguments including executable name as arg[0]; You may not modify them! ...
int AO(const char *, double[])
const std::string & accountName()
User login name.
def data(object, stream=None)
const std::string & osVersion()
OS version.
int DI(const char *, unsigned char[])
virtual ~Server_NI6008()
Standard constructor.
void msgSvc(MsgLevel, std::string, std::string call=std::string(""))
void log(MsgLevel, std::string, std::string)
const std::string & osName()
OS name.
int AI(const char *, double[])
#define DAQmxErrChk(functionCall)
int send(std::string word)
std::vector< std::string > colors
struct sockaddr_in serv_addr cli_addr
void setAIRange(double min=-10., double max=10.)
void setAORange(double min=0., double max=5.)
long argc()
Number of arguments passed to the commandline (==numCmdLineArgs()); just to match argv call...