int main(int argc, char **argv)
{
  serial_source src;

  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], atoi(argv[2]), 0, stderr_msg);
  if (!src)
    {
      fprintf(stderr, "Couldn't open serial port at %s:%s\n",
	      argv[1], argv[2]);
      exit(1);
    }
  for (;;)
    {
      int len, i;
      const unsigned char *packet = read_serial_packet(src, &len);

      if (!packet)
	exit(0);
      printf("counter: %d RSSI: %d\n",packet[5],((packet[7] & 0xff) << 8) | (packet[6] & 0xff));
      free((void *)packet);
    }
}
/* 
 * 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;
}
Example #3
0
void open_serial(const char *dev, int baud) {
    char ldev[80];
    strcpy(ldev, dev);

    src = open_serial_source(ldev, baud, 1, stderr_msg);
    if (!src) {
        fprintf(stderr, "Couldn't open serial port at %s:%d\n", dev, baud);
        exit(1);
    }
}
Example #4
0
int serial_connect_dev(const char *dev, unsigned rate)
{
    src_dev = open_serial_source(dev, rate, 0, stderr_msg);
    if (!src_dev)
    {
        fprintf(stderr, "can't open device %s:%u\n", dev, rate);
        return -1;
    }
    src_type = SRC_DEVICE;
    return 0;
}
// initialize the motes
void
init_motes()
{
    src = open_serial_source(devicename, atoi(baud), 0, stderr_msg);

    if(reader_thread(NULL) == 1) {
        fprintf(stderr, "couldn't start reader on mote network\n");
        exit(EXIT_FAILURE);
    }
    return;
}
int main(int argc, char **argv)
{
    serial_source src;

    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], atoi(argv[2]), 0, stderr_msg);
    if (!src)
    {
        fprintf(stderr, "Couldn't open serial port at %s:%s\n",
                argv[1], argv[2]);
        exit(1);
    }
    for (;;)
    {
        int len, i;
        const unsigned char *packet = read_serial_packet(src, &len);

        if (!packet)
            exit(0);

        int rssi_val;
        int am_type;
        int orig_sender;
        float real_rssi;
        float vdc = 3.0f;
        int crc;

        rssi_val = ((packet[7] & 0xff) << 8) | (packet[6] & 0xff);
        am_type = packet[8];
        orig_sender = ((packet[10] & 0xff) << 8) | (packet[9] & 0xff);
        crc = ((packet[12] & 0xff) << 8) | (packet[11] & 0xff);

        /* for mica 2, ALSO depends on the value of vdc; which for wall plugin
         * is 3 VDC; for 1.5V batts it's something else
         */
        real_rssi = -50.0f * (vdc * (rssi_val/1024.0f)) - 45.5f;

        printf("original sender: %d; crc: %d; AM type: %d; RSSI: %f dBm\n",
               orig_sender,
               crc,
               am_type,
               real_rssi);
        fflush(stdout);
        //putchar('\n');
        free((void *)packet);
    }
}
Example #7
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);
}
Example #8
0
void open_serial(const char *dev, int baud)
{
    char ldev[80]; 
#ifdef __CYGWIN__
    int portnum;
    if (strncasecmp(dev, "COM", 3) == 0)
      {
	fprintf(stderr, "Warning: you're attempting to open a Windows rather that a Cygwin device.  Retrying with "); 
	portnum=atoi(dev+3);
	sprintf(ldev, "/dev/ttyS%d",portnum-1);
	fprintf(stderr,ldev);
	fprintf(stderr, "\n");
      } 
    else
#endif
    strcpy(ldev, dev); 

  src = open_serial_source(ldev, baud, 1, stderr_msg);
  if (!src)
    {
      fprintf(stderr, "Couldn't open serial port at %s:%d\n", dev, baud);
      exit(1);
    }
}
Example #9
0
File: rawdump.c Project: 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);
  }
}
Example #10
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);
	}
}
Example #11
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);
	}
}