/* 
 * At startup, set the L2 properties of the attached device, and read
 * back the EUI-64.  We'll need that to form the link-local address.
 */
int setup_serial(char *device, char *rate, struct config *c) {
  uint8_t *ser_data;
  int      ser_len = 0;
  config_reply_t *reply;
  /* open the serial source as blocking */
  ser_src = open_serial_source(device, platform_baud_rate(rate), 0, stderr_msg);
  if (!ser_src) return -1;

  /* kill ourselves if anything hangs */
  alarm(5);

  /* set the parameters */
  configure_setparams(c, CONFIG_REBOOT);

  /* wait to hear back... */
  ser_data = read_serial_packet(ser_src, &ser_len);
  if (!ser_data) return -1;
  free(ser_data);

  configure_setparams(c, CONFIG_SET_PARM);
  ser_data = read_serial_packet(ser_src, &ser_len);

  if (ser_data[0] != TOS_SERIAL_DEVCONF) return -1;
  reply = (config_reply_t *)&ser_data[1];
  memcpy(c->eui64.data, reply->ext_addr, 8);

  free(ser_data);
  alarm(0);

  return 0;
}
Exemplo n.º 2
0
int main(int argc, char **argv)
{
  int serfd;

  if (argc != 4)
    {
      fprintf(stderr,
	      "Usage: %s <port> <device> <rate> - act as a serial forwarder on <port>\n"
	      "(listens to serial port <device> at baud rate <rate>)\n" ,
	      argv[0]);
      exit(2);
    }

  if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
    fprintf(stderr, "Warning: failed to ignore SIGPIPE.\n");

  open_serial(argv[2], platform_baud_rate(argv[3]));
  serfd = serial_source_fd(src);
  open_server_socket(atoi(argv[1]));

  for (;;)
    {
      fd_set rfds;
      int maxfd = -1;
      struct timeval zero;
      int serial_empty;
      int ret;

      zero.tv_sec = zero.tv_usec = 0;

      FD_ZERO(&rfds);
      fd_wait(&rfds, &maxfd, serfd);
      fd_wait(&rfds, &maxfd, server_socket);
      wait_clients(&rfds, &maxfd);

      serial_empty = serial_source_empty(src);
      if (serial_empty)
	ret = select(maxfd + 1, &rfds, NULL, NULL, NULL);
      else
	{
	  ret = select(maxfd + 1, &rfds, NULL, NULL, &zero);
	  check_serial();
	}
      if (ret >= 0)
	{
	  if (FD_ISSET(serfd, &rfds))
	    check_serial();

	  if (FD_ISSET(server_socket, &rfds))
	    check_new_client();

	  check_clients(&rfds);
	}
    }
}
Exemplo n.º 3
0
int main(int argc, char **argv) {
    int serfd;

    if (argc != 4) {
        fprintf(stderr,
                "Usage: %s <device> <rate> <file> - act as a serial forwarder on <port>\n"
                "(listens to serial port <device> at baud rate <rate>)\n",
                argv[0]);
        exit(2);
    }

    if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
        fprintf(stderr, "Warning: failed to ignore SIGPIPE.\n");
    if (signal(SIGINT, sigproc) == SIG_ERR)
        fprintf(stderr, "Warning: failed to set the SIGINT interruption.\n");
    srcId = -1;

    open_serial(argv[1], platform_baud_rate(argv[2]));

    serfd = serial_source_fd(src);

    open_file_fd(argv[3]);

    dup2(filefd, 1);

    for (;;) {
        fd_set rfds;
        int maxfd = -1;
        struct timeval zero;
        int serial_empty;
        int ret;

        zero.tv_sec = zero.tv_usec = 0;

        FD_ZERO(&rfds);
        fd_wait(&rfds, &maxfd, serfd);

        serial_empty = serial_source_empty(src);
        check_serial();

        if (ret >= 0) {
            if (FD_ISSET(serfd, &rfds))
                check_serial();
        }
    }
}
Exemplo n.º 4
0
int main(int argc, char **argv)
{
	serial_source src;

	if (argc < 3) {
		fprintf(stderr,
			"Usage: %s <device> <rate> <bytes> - send a raw packet to a serial port\n",
			argv[0]);
		exit(2);
	}
	src =
	    open_serial_source(argv[1], platform_baud_rate(argv[2]), 0,
			       stderr_msg);
	if (!src) {
		fprintf(stderr, "Couldn't open serial port at %s:%s\n",
			argv[1], argv[2]);
		exit(1);
	}

	send_packet(src, argv + 3, argc - 3);
}
Exemplo n.º 5
0
Arquivo: rawdump.c Projeto: HSOFEUP/mm
int 
main(int argc, char **argv) {
  int i;
  uint8_t *packet;
  char *prog_name;
  int len;
  int c, bail;
  input_src_t input_src;
  struct termios newtio;
  tcflag_t baudflag;
  int cnt;
  uint8_t *buf;

  serial_src = NULL;
  sf_src = 0;
  input_src = INPUT_RAW;
  bail = 0;
  prog_name = basename(argv[0]);
  while ((c = getopt_long(argc, argv, "Dvr", longopts, NULL)) != EOF) {
    switch (c) {
      case 1:
	bail = 1;
	input_src = INPUT_SF;
	break;
      case 2:
	bail = 1;
	input_src = INPUT_SERIAL;
	break;
      case 'D':
	debug++;
	break;
      case 'v':
	verbose++;
	break;
      case 'r':
	raw++;
	input_src = INPUT_RAW;
	break;
      default:
	usage(prog_name);
    }
    if (bail)
      break;
  }
  argc -= optind;
  argv += optind;

  if (argc != 2) {
    usage(prog_name);
    exit(2);
  }

  if (verbose) {
    fprintf(stderr, VERSION);
    switch (input_src) {
      case INPUT_SERIAL:
	fprintf(stderr, "opening: serial@%s:%d\n", argv[0], platform_baud_rate(argv[1]));
	break;
      case INPUT_SF:
	fprintf(stderr, "opening: sf@%s:%d\n", argv[0], atoi(argv[1]));
	break;
      case INPUT_RAW:
	fprintf(stderr, "opening: raw@%s:%d\n", argv[0], platform_baud_rate(argv[1]));
	break;
    }
  }

  if (input_src == INPUT_RAW) {
    baudflag = parse_baudrate(platform_baud_rate(argv[1]));
    if (!baudflag) {
      fprintf(stderr, "couldn't figure out the baud rate\n");
      exit(2);
    }
    raw_fd = open(argv[0], O_RDWR | O_NOCTTY);
    if (raw_fd < 0) {
      fprintf(stderr, "*** Couldn't open serial port at %s:%s\n", argv[0], argv[1]);
      perror("error: ");
      exit(2);
    }

    /* Serial port setting */
    memset(&newtio, 0, sizeof(newtio));
    newtio.c_cflag = CS8 | CLOCAL | CREAD;
    newtio.c_iflag = IGNPAR | IGNBRK;
    cfsetispeed(&newtio, baudflag);
    cfsetospeed(&newtio, baudflag);

    /* Raw output_file */
    newtio.c_oflag = 0;

    if (tcflush(raw_fd, TCIFLUSH) >= 0 && tcsetattr(raw_fd, TCSANOW, &newtio) >= 0) {
      buf = malloc(256);
      while(1) {
	cnt = read(raw_fd, buf, 1);
	if (cnt == 0)
	  continue;
	fprintf(stderr, "%02x ", buf[0]);
      }
    } else
      close(raw_fd);
    exit(0);
  }

  switch(input_src) {
    case INPUT_SERIAL:
      serial_src = open_serial_source(argv[0], platform_baud_rate(argv[1]), 0, stderr_msg);
      if (!serial_src) {
	fprintf(stderr, "*** Couldn't open serial port at %s:%s\n", argv[0], argv[1]);
	perror("error: ");
	exit(1);
      }
      break;

    case INPUT_SF:
      sf_src = open_sf_source(argv[0], atoi(argv[1]));
      if (sf_src < 0) {
	fprintf(stderr, "*** Couldn't open serial forwarder at %s:%s\n", argv[0], argv[1]);
	perror("error: ");
	exit(1);
      }
      break;

    default:
      fprintf(stderr, "shouldn't be here\n");
      exit(1);
  }
  for(;;) {
    switch(input_src) {
      case INPUT_SERIAL:
	packet = read_serial_packet(serial_src, &len);
	break;

      case INPUT_SF:
	packet = read_sf_packet(sf_src, &len);
	break;

      default:
	fprintf(stderr, "shouldn't be here\n");
	exit(1);
    }
    if (!packet) {
      if (verbose)
	fprintf(stderr, "*** end of stream, terminating\n");
      exit(0);
    }

    for (i = 0; i < len; i++)
      fprintf(stderr, "%02x ", packet[i]);
    fprintf(stderr, "\n");
    free((void *)packet);
  }
}
Exemplo n.º 6
0
int main(int argc, char **argv) {
	serial_source src;
	unsigned char * currentField;
	unsigned char i;

	if (argc != 4) {
		fprintf(
				stderr,
				"Usage: %s <device> <rate> <file>- dump packets from a serial port\n",
				argv[0]);
		exit(2);
	}
	src = open_serial_source(argv[1], platform_baud_rate(argv[2]), 0,
			stderr_msg);
	if (!src) {
		fprintf(stderr, "Couldn't open serial port at %s:%s\n", argv[1],
				argv[2]);
		exit(1);
	}
	// open file to store
	fd = open(argv[3], O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
	dup2(fd, 1);

	// print the name of the vars
	for (i = 0 ; i < 4 ; i++) printf("%s ", fieldsPck[i]);
	for (; i < 12 ; i++) printf("%s ", fieldsChannel[i-4]);
	putchar('\n');

	for (;;) {
		int len, i;
		const unsigned char *packet = read_serial_packet(src, &len);

		if (!packet)
			exit(0);

		currentField = offsetPck;

		printf("%u ", packet[*currentField]); //seq_num
		currentField++;

		printf("%u ",
				(packet[*currentField + 1] << 8) | packet[*currentField]); //pan
		currentField++;

		printf("%u ",
				(packet[*currentField + 1] << 8) | packet[*currentField]); //src
		currentField++;

		printf("%u ",
				(packet[*currentField + 1] << 8) | packet[*currentField]); //dst
		currentField++;

		currentField = offsetChannel;

		printf("%u ",
				(packet[len - *currentField] << 8) | packet[len - *currentField  + 1]); //success
		currentField++;

		printf("%u ",
				(packet[len - *currentField] << 8) | packet[len - *currentField  + 1]); //total
		currentField++;

		printf("%u ",
				(packet[len - *currentField] << 8) | packet[len - *currentField + 1]); //delay
		currentField++;

		printf("%u ", packet[len - *currentField]); //lqi
		currentField++;

		printf("%d ",packet[len - *currentField]); //rssi
		currentField++;

		//mhrLen
		printf("%u ", packet[*currentField]); //mhrLen
		currentField++;

		printf("%u ", packet[len - *currentField]); //channel
		currentField++;

		printf("%lu ", (packet[len - *currentField +3] << 24) | (packet[len - *currentField + 2] << 16) | (packet[len - *currentField +1] << 8) | packet[len - *currentField]);

		putchar('; \n');


//		for (i = 0; i < len; i++)
//			printf("%02x ", packet[i]);
//		putchar('\n');
		free((void *) packet);
	}
}
Exemplo n.º 7
0
int main(int argc, char **argv) {
	serial_source src;
	unsigned char * currentField;
	unsigned char i;

	if (argc != 3) {
		fprintf(
				stderr,
				"Usage: %s <device> <rate> - dump packets from a serial port\n",
				argv[0]);
		exit(2);
	}
	src = open_serial_source(argv[1], platform_baud_rate(argv[2]), 0,
			stderr_msg);
	if (!src) {
		fprintf(stderr, "Couldn't open serial port at %s:%s\n", argv[1],
				argv[2]);
		exit(1);
	}
	// print the name of the vars
	for (i = 0; i < 4; i++)
		printf("%s ", fieldsPck[i]);
	for (; i < 11; i++)
		printf("%s ", fieldsChannel[i - 4]);
	putchar('\n');

	for (;;) {
		int len, i;
		const unsigned char *packet = read_serial_packet(src, &len);
		const unsigned char *pPck;
		if (!packet)
			exit(0);

		currentField = offsetPck;

		printf("%u ", packet[*currentField]); //seq_num
		currentField++;

		printf("%u ", (packet[*currentField + 1] << 8) | packet[*currentField]); //pan
		currentField++;

		printf("%u ", (packet[*currentField + 1] << 8) | packet[*currentField]); //src
		currentField++;

		printf("%u ", (packet[*currentField + 1] << 8) | packet[*currentField]); //dst
		currentField++;

		currentField = offsetChannel;

		printf(
				"%u ",
				(packet[headerLen + *currentField] << 8) | packet[headerLen + *currentField + 1]); //success
		currentField++;

		printf(
				"%u ",
				(packet[headerLen + *currentField] << 8) | packet[headerLen + *currentField
						+ 1]); //total
		currentField++;

		printf(
				"%u ",
				(packet[headerLen + *currentField] << 8) | packet[headerLen + *currentField
						+ 1]); //delay
		currentField++;

		printf("%u ", packet[headerLen + *currentField]); //lqi
		currentField++;

		printf("%d ", (int8_t) packet[headerLen + *currentField]); //rssi
		currentField++;


		printf("%u ", packet[headerLen + *currentField]); //channel
		currentField++;

		printf(
				"%lu ",
				(packet[headerLen + *currentField + 3] << 24) | (packet[headerLen + *currentField + 2] << 16) |
				(packet[headerLen + *currentField + 1] << 8) | packet[headerLen + *currentField]);

		putchar('; \n');


		fflush(stdout);

		free((void *) packet);
	}
}