예제 #1
0
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));
}
예제 #2
0
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;
}
예제 #3
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;
}
예제 #4
0
int vxi11_send(CLIENT *client, VXI11_LINK *link, const char *cmd) {
  return vxi11_send(client, link, cmd, strlen(cmd));
}
예제 #5
0
int vxi11_send(CLINK *clink, const char *cmd, unsigned long len) {
  return vxi11_send(clink->client, clink->link, cmd, len);
}
예제 #6
0
int vxi11_send(CLINK *clink, const char *cmd) {
  return vxi11_send(clink, cmd, strlen(cmd));
}
예제 #7
0
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);
  }
}