int vxi11_send_printf(VXI11_CLINK * clink, const char *format, ...) { int len; char *s; int rc; va_list va; len = strlen(format) + 500; s = malloc(len*sizeof(char)); if(!s){ return -1; } va_start(va, format); rc = vsnprintf(s, len, format, va); va_end(va); if(rc < 0){ free(s); return rc; } s[len-1] = '\0'; /* Ensure string is null terminated. */ return vxi11_send(clink, s, strlen(s)); }
long vxi11_send_and_receive(CLINK *clink, const char *cmd, char *buf, unsigned long buf_len, unsigned long timeout) { int ret; long bytes_returned; do { ret = vxi11_send(clink, cmd); if (ret != 0) { if (ret != -VXI11_NULL_WRITE_RESP) { printf("Error: vxi11_send_and_receive: could not send cmd.\n"); printf(" The function vxi11_send returned %d. ",ret); return -1; } else printf("(Info: VXI11_NULL_WRITE_RESP in vxi11_send_and_receive, resending query)\n"); } bytes_returned = vxi11_receive(clink, buf, buf_len, timeout); if (bytes_returned <= 0) { if (bytes_returned >-VXI11_NULL_READ_RESP) { printf("Error: vxi11_send_and_receive: problem reading reply.\n"); printf(" The function vxi11_receive returned %ld. ",bytes_returned); return -2; } else printf("(Info: VXI11_NULL_READ_RESP in vxi11_send_and_receive, resending query)\n"); } } while (bytes_returned == -VXI11_NULL_READ_RESP || ret == -VXI11_NULL_WRITE_RESP); return 0; }
/* SEND FIXED LENGTH DATA BLOCK FUNCTION * * ===================================== */ int vxi11_send_data_block(VXI11_CLINK * clink, const char *cmd, char *buffer, size_t len) { char *out_buffer; size_t cmd_len = strlen(cmd); int ret; out_buffer = (char *)malloc(cmd_len + 10 + len); if (!out_buffer) { return 1; } sprintf(out_buffer, "%s#8%08lu", cmd, len); memcpy(out_buffer + cmd_len + 10, buffer, len); ret = vxi11_send(clink, out_buffer, cmd_len + 10 + len); free(out_buffer); return ret; }
int vxi11_send(CLIENT *client, VXI11_LINK *link, const char *cmd) { return vxi11_send(client, link, cmd, strlen(cmd)); }
int vxi11_send(CLINK *clink, const char *cmd, unsigned long len) { return vxi11_send(clink->client, clink->link, cmd, len); }
int vxi11_send(CLINK *clink, const char *cmd) { return vxi11_send(clink, cmd, strlen(cmd)); }
int main(int argc,char **argv) { static char *progname; static char *serverIP; char comm[256]; long bytes_returned; BOOL got_ip=FALSE; BOOL got_comm=FALSE; int index=1; CLINK *clink; /* client link (actually a structure contining CLIENT and VXI11_LINK pointers) */ char outputbuf[BUF_LEN]; clink = new CLINK; /* allocate some memory */ progname = argv[0]; while(index<argc){ if(sc(argv[index],(char*)"-ip")||sc(argv[index],(char*)"-ip_address")||sc(argv[index],(char*)"-IP")){ serverIP = argv[++index]; got_ip = TRUE; } if(sc(argv[index],(char*)"-command")||sc(argv[index],(char*)"-c")||sc(argv[index],(char*)"-comm")){ snprintf(comm,256,"%s",argv[++index]); got_comm=TRUE; } index++; } if(got_ip==FALSE||got_comm==FALSE){ printf("%s: sends commands to an Agilent scope via ethernet\n",progname); printf("Run using %s [arguments]\n\n",progname); printf("REQUIRED ARGUMENTS:\n"); printf("-ip -ip_address -IP : IP address of scope (eg 128.243.74.232)\n"); printf("-c -command -comm : command or query to send\n\n"); printf("DOCUMENTATION:\n"); printf("http://cp.literature.agilent.com/litweb/pdf/54855-97017.pdf\n"); exit(1); } if (vxi11_open_device(serverIP,clink) != 0) { printf("Quitting...\n"); exit(2); } vxi11_send(clink, comm); if (strstr(comm, "?") != 0) { bytes_returned = vxi11_receive(clink, outputbuf, BUF_LEN); vxi11_close_device(serverIP,clink); if (bytes_returned > 0) { printf("%s",outputbuf); } else if (bytes_returned == -15) { printf("Error: Nothing received after sending scope command %s\n", comm); return(1); } } else { vxi11_close_device(serverIP,clink); } }