Example #1
0
int serial_send(int node, int op, const uint8_t *data, int len)
{
    uint8_t buf[1 + SPACKET_SIZE + MFSMSG_SIZE];
    memset(buf, 0, sizeof buf);

    tmsg_t *spacket_header, *msg;

    buf[0] = 0;
    spacket_header = new_tmsg(buf + 1, SPACKET_SIZE);
    spacket_header_dest_set(spacket_header, 0xffff);
    spacket_header_length_set(spacket_header, MFSMSG_SIZE);
    spacket_header_type_set(spacket_header, MFSMSG_AM_TYPE);

    msg = new_tmsg(buf + 1 + SPACKET_SIZE, MFSMSG_SIZE);
    mfsmsg_node_set(msg, node);
    mfsmsg_op_set(msg, op);

    if (len > MFS_DATA_SIZE)
        len = MFS_DATA_SIZE;
    set_data(msg, data, len);

    DEBUG_PACKET(buf);

    return (src_type == SRC_DEVICE) ?
        write_serial_packet(src_dev, buf, sizeof buf) :
        write_sf_packet(src_fd, buf, sizeof buf);
}
Example #2
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);
    }
  }
}
Example #3
0
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;
}