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); }
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); } } }
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; }