예제 #1
0
bool listen_for_message(const unsigned char **packet, int fd, int *length)
{
	
	struct pollfd pl;
	int len;
	pl.fd = fd;
	pl.events = POLLIN;
	
	if (poll(&pl, 1, MSG_TIMEOUT))
	{
		// read that packet;
		*packet = read_sf_packet(fd, &len);
		
		// we got a packet but it's not the kind we were expecting...
		if ( (*packet)[2] != 23)
		{
			free(*packet);
			*packet = NULL;
			return listen_for_message(packet, fd, length);
		}
		else
		{
			//print_received_message(*packet, fd, len);
			*length = len;
			return TRUE;
		}
	}
	else
	{
		*length = -1;
		return FALSE;
	}
	//return packet;
}
예제 #2
0
파일: sf.c 프로젝트: 0111sandesh/TinyOS-Sec
void check_clients(fd_set *fds)
{
  struct client_list **c;

  for (c = &clients; *c; )
    {
      int next = 1;

      if (FD_ISSET((*c)->fd, fds))
	{
	  int len;
	  const void *packet = read_sf_packet((*c)->fd, &len);

	  if (packet)
	    {
	      forward_packet(packet, len);
	      free((void *)packet);
	    }
	  else
	    {
	      rem_client(c);
	      next = 0;
	    }
	}
      if (next)
	c = &(*c)->next;
    }
}
예제 #3
0
int main(int argc, char **argv)
{
	int fd;

	if (argc != 3) {
		fprintf(stderr,
			"Usage: %s <host> <port> - dump packets from a serial forwarder\n",
			argv[0]);
		exit(2);
	}
	fd = open_sf_source(argv[1], atoi(argv[2]));
	if (fd < 0) {
		fprintf(stderr, "Couldn't open serial forwarder at %s:%s\n",
			argv[1], argv[2]);
		exit(1);
	}
	for (;;) {
		int len, i;
		const unsigned char *packet = read_sf_packet(fd, &len);

		if (!packet)
			exit(0);
		for (i = 0; i < len; i++)
			printf("%02x ", packet[i]);
		putchar('\n');
		fflush(stdout);
		free((void *)packet);
	}
}
예제 #4
0
telospacket *read_telos_packet(int fd)

{
  int length;
  telospacket *packet;
  int i;  
  const unsigned char *rawpkt;

  

  rawpkt = read_sf_packet(fd, &length);
	dbg(TSRC,"read_sf_packet returned (rawpkt=%X, length=%i).\n",(int)rawpkt, length);
	if (rawpkt == NULL)
	{
		dbg(TSRC,"rawpkt is NULL\n");
		return NULL;
	}
  
  if (length < 5)
    {
    	dbg(TSRC,"too short.\n");
      free((void*)rawpkt);
      return NULL;
    }

  packet = malloc(sizeof(telospacket));
  
  //get header information
  packet->length = rawpkt[2];
  packet->dsn = rawpkt[0];
  packet->type = rawpkt[4];
  packet->group = rawpkt[3];
  
  packet->data = malloc(packet->length);
  if (!packet->data)
  {
  	printf("Could not allocate memory!\n");
  	free(packet);
  }
  
  memcpy(packet->data, rawpkt+5, packet->length);
  free((void*)rawpkt);
  
  return packet;
}
예제 #5
0
파일: serial.c 프로젝트: rmartinjak/motefs
int serial_receive(int *node, int *op, int *result, uint8_t *data, int len)
{
    uint8_t *buf;
    tmsg_t *msg;

    unsigned char *packet;
    int packet_len;

    packet = (src_type == SRC_DEVICE) ?
        read_serial_packet(src_dev, &packet_len) :
        read_sf_packet(src_fd, &packet_len);

    if (!packet)
        return -1;
    DEBUG_PACKET(packet);

    /* skip the header */
    buf = packet + 1 + SPACKET_SIZE;
    packet_len -= 1 + SPACKET_SIZE;

    if (packet_len > MFSMSG_SIZE)
    {
        fprintf(stderr, "packet too big: %d\n", len);
        packet_len = MFSMSG_SIZE;
    }

    msg = new_tmsg(buf, MFSMSG_SIZE);

    if (node)
        *node = mfsmsg_node_get(msg);
    if (op)
        *op = mfsmsg_op_get(msg);
    if (result)
        *result = mfsmsg_result_get(msg);

    if (len > packet_len)
        len = packet_len;

    get_data(msg, data, len);

    free(packet);
    return len;
}
예제 #6
0
/* Function: mdlOutputs =======================================================
 * Abstract:
 *    In this function, you compute the outputs of your S-function
 *    block.
 */
static void mdlOutputs(SimStruct *S, int_T tid)
{

    int len, i;
    uint16_T *y = ssGetOutputPortSignal(S,0);
    real_T *t = ssGetOutputPortSignal(S,1);

    /* Read packet from SerialForwarder server using functions linked in sfsource.o */
    const unsigned char *packet = read_sf_packet(fd, &len);
    int_T width = ssGetOutputPortWidth(S,0);
    if (len == (width*2 + HEADER_LEN)){

        for (i=HEADER_LEN; i < (width*2); i=i+2) {
            *y++ = packet[i] << 8 | packet[i+1];
        }

        trigger = (trigger == 1 ? 0 : 1); 
        *t = trigger;
    }
}
예제 #7
0
int main(int argc, char **argv)
{
  int fd,i;

  if (argc != 3) {
    fprintf(stderr, "Usage: %s <host> <port> - print received packets\n", argv[0]);
    exit(2);
  }

  fd = open_sf_source(argv[1], atoi(argv[2]));

  if (fd < 0) {
    fprintf(stderr, "Couldn't open serial forwarder at %s:%s\n",
	    argv[1], argv[2]);
    exit(1);
  }

  for (;;) {
    int len, i;
    const unsigned char *packet = read_sf_packet(fd, &len);
    char* myPacket = (char*)malloc(len);
    memcpy(myPacket, packet, len);
    free((void*)packet);

    if (!packet)
      exit(0);
    else {
      tmsg_t* serialMsg = new_tmsg(myPacket, len);
      void* payload = (void*)myPacket + (spacket_data_offsetbits(0) / 8);
      tmsg_t* dataMsg = new_tmsg(payload, len - SPACKET_SIZE);
      void* data = payload + (dissemination_message_data_offsetbits(0) / 8);


      for (i = 0; i < len; i++)
	printf("%02x ", packet[i]);
      putchar('\n');
      fflush(stdout);
      free((void *)myPacket);
    }
  }
}
예제 #8
0
void mote_read(void *buf)
{
	TOS_write_t *tos = (TOS_write_t *) buf;
	
	for (;;)
	{
		int len, i;
		struct pollfd pl;
		
		pl.fd = tos->fd;
		pl.events = POLLIN;
		
		//if (poll(&pl, 1, 3000))
		if (poll(&pl, 1, 1500))
		{
			printf("about to read: \n");
		}
		else
		{
			printf("timed out \n");
		}
		
		const unsigned char *packet = read_sf_packet(tos->fd, &len);

		if (!packet)
			exit(0);
		for (i = 0; i < len; i++)
		{
			if (i == 5 || i== 9)
				printf("| ");
			printf("%02x ", packet[i]);
			
		}
		putchar('\n');
		fflush(stdout);
		free((void *)packet);
	}
}
예제 #9
0
파일: rawdump.c 프로젝트: 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);
  }
}