#include <sys/types.h>#include <sys/stat.h>#include <termios.h>#include <unistd.h>#include <stdint.h>#include <errno.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <sys/time.h>#include <stdio.h>#include "serialsource.h"#include "OscopeMsg.h"Go to the source code of this file.
Classes | |
| struct | tos_header |
| struct | packet_list |
| struct | serial_source |
Defines | |
| #define | DEBUG 1 |
Typedefs | |
| typedef int | bool |
Enumerations | |
| enum | { FALSE = 0, TRUE = 1, BUFSIZE = 256, MTU = 256, ACK_TIMEOUT = 1000000, SYNC_BYTE = 0x7e, ESCAPE_BYTE = 0x7d, P_ACK = 64, P_PACKET_ACK = 65, P_PACKET_NO_ACK = 66, P_UNKNOWN = 255 } |
Functions | |
| static tcflag_t | parse_baudrate (int requested) |
| static void | dump (const char *msg, const uint8_t *packet, int len) |
| static void | message (serial_source src, serial_source_msg msg) |
| static int | buggyread (serial_source src, void *buffer, int n) |
| serial_source | open_serial_source (const char *device, int baud_rate, int non_blocking, void(*message)(serial_source_msg problem)) |
| int | serial_source_fd (serial_source src) |
| int | close_serial_source (serial_source src) |
| static int | source_wait (serial_source src, struct timeval *deadline) |
| static int | source_write (serial_source src, const void *buffer, int count) |
| static void | push_protocol_packet (serial_source src, uint8_t type, uint8_t *packet, uint8_t len) |
| static struct packet_list * | pop_protocol_packet (serial_source src, uint8_t type) |
| static bool | packet_available (serial_source src, uint8_t type) |
| int | serial_source_empty (serial_source src) |
| static uint16_t | crc_byte (uint16_t crc, uint8_t b) |
| static uint16_t | crc_packet (uint8_t *data, int len) |
| static int | read_byte (serial_source src) |
| static void | process_packet (serial_source src, uint8_t *packet, int len) |
| static int | write_framed_packet (serial_source src, uint8_t packet_type, uint8_t first_byte, const uint8_t *packet, int count) |
| static void | read_and_process (serial_source src) |
| void * | read_serial_packet (serial_source src, int *len) |
| static void | escape_add (serial_source src, uint8_t b) |
| static int | init_escaper (serial_source src, int count) |
| static void | terminate_escaper (serial_source src) |
| static void | escape_byte (serial_source src, uint8_t b) |
| static void | free_escaper (serial_source src) |
| static void | add_timeval (struct timeval *tv, long us) |
| int | write_serial_packet (serial_source src, const void *packet, int len) |
| #define DEBUG 1 |
Definition at line 40 of file serialsource.c.
| typedef int bool |
Definition at line 53 of file serialsource.c.
| anonymous enum |
| FALSE | |
| TRUE | |
| BUFSIZE | |
| MTU | |
| ACK_TIMEOUT | |
| SYNC_BYTE | |
| ESCAPE_BYTE | |
| P_ACK | |
| P_PACKET_ACK | |
| P_PACKET_NO_ACK | |
| P_UNKNOWN |
Definition at line 55 of file serialsource.c.
| static void add_timeval | ( | struct timeval * | tv, | |
| long | us | |||
| ) | [static] |
Definition at line 810 of file serialsource.c.
Referenced by write_serial_packet().
| static int buggyread | ( | serial_source | src, | |
| void * | buffer, | |||
| int | n | |||
| ) | [static] |
Definition at line 223 of file serialsource.c.
References errno, serial_source::fd, and serial_source::non_blocking.
Referenced by read_byte().
| int close_serial_source | ( | serial_source | src | ) |
Definition at line 323 of file serialsource.c.
References serial_source::fd.
| static uint16_t crc_byte | ( | uint16_t | crc, | |
| uint8_t | b | |||
| ) | [static] |
Definition at line 470 of file serialsource.c.
Referenced by crc_packet(), and escape_byte().
| static uint16_t crc_packet | ( | uint8_t * | data, | |
| int | len | |||
| ) | [static] |
Definition at line 486 of file serialsource.c.
References crc_byte().
Referenced by read_and_process().
| static void dump | ( | const char * | msg, | |
| const uint8_t * | packet, | |||
| int | len | |||
| ) | [static] |
Definition at line 204 of file serialsource.c.
Referenced by process_packet(), read_byte(), write_framed_packet(), and write_serial_packet().
| static void escape_add | ( | serial_source | src, | |
| uint8_t | b | |||
| ) | [static] |
Definition at line 727 of file serialsource.c.
References serial_source::escaped, serial_source::escapeptr, and serial_source::send.
Referenced by escape_byte(), init_escaper(), and terminate_escaper().
| static void escape_byte | ( | serial_source | src, | |
| uint8_t | b | |||
| ) | [static] |
Definition at line 753 of file serialsource.c.
References serial_source::crc, crc_byte(), escape_add(), ESCAPE_BYTE, serial_source::send, and SYNC_BYTE.
Referenced by write_framed_packet().
| static void free_escaper | ( | serial_source | src | ) | [static] |
Definition at line 765 of file serialsource.c.
References serial_source::escaped, and serial_source::send.
Referenced by write_framed_packet().
| static int init_escaper | ( | serial_source | src, | |
| int | count | |||
| ) | [static] |
Definition at line 732 of file serialsource.c.
References serial_source::crc, escape_add(), serial_source::escaped, serial_source::escapeptr, message(), msg_no_memory, serial_source::send, and SYNC_BYTE.
Referenced by write_framed_packet().
| static void message | ( | serial_source | src, | |
| serial_source_msg | msg | |||
| ) | [static] |
Definition at line 215 of file serialsource.c.
References serial_source::message.
Referenced by init_escaper(), open_serial_source(), push_protocol_packet(), read_and_process(), read_byte(), source_wait(), and source_write().
| serial_source open_serial_source | ( | const char * | device, | |
| int | baud_rate, | |||
| int | non_blocking, | |||
| void(*)(serial_source_msg problem) | message | |||
| ) |
Definition at line 253 of file serialsource.c.
References serial_source::fd, fd, handle, message(), serial_source::message, serial_source::non_blocking, parse_baudrate(), serial_source::send, serial_source::seqno, and src.
Referenced by init_motes().
| static bool packet_available | ( | serial_source | src, | |
| uint8_t | type | |||
| ) | [static] |
Definition at line 449 of file serialsource.c.
References serial_source::queue, and serial_source::recv.
Referenced by serial_source_empty().
| static tcflag_t parse_baudrate | ( | int | requested | ) | [static] |
Definition at line 101 of file serialsource.c.
Referenced by open_serial_source().
| static struct packet_list* pop_protocol_packet | ( | serial_source | src, | |
| uint8_t | type | |||
| ) | [static, read] |
Definition at line 439 of file serialsource.c.
References packet_list::next, serial_source::queue, and serial_source::recv.
Referenced by read_serial_packet(), and write_serial_packet().
| static void process_packet | ( | serial_source | src, | |
| uint8_t * | packet, | |||
| int | len | |||
| ) | [static] |
Definition at line 647 of file serialsource.c.
References AM_OSCOPEACK, AM_OSCOPEMSG, buf, OscopeMsg::channel, OscopeAck::channel, tos_header::dest_id, dump(), tos_header::group_id, tos_header::handler, OscopeMsg::lastSampleNumber, OscopeAck::lastSampleNumber, tos_header::length, P_ACK, P_PACKET_ACK, P_PACKET_NO_ACK, push_protocol_packet(), OscopeMsg::sourceMoteID, OscopeAck::sourceMoteID, write_framed_packet(), and write_serial_packet().
Referenced by read_and_process().
| static void push_protocol_packet | ( | serial_source | src, | |
| uint8_t | type, | |||
| uint8_t * | packet, | |||
| uint8_t | len | |||
| ) | [static] |
Definition at line 416 of file serialsource.c.
References packet_list::len, message(), msg_no_memory, packet_list::next, packet_list::packet, serial_source::queue, and serial_source::recv.
Referenced by process_packet().
| static void read_and_process | ( | serial_source | src | ) | [static] |
Definition at line 537 of file serialsource.c.
References count, serial_source::count, crc_packet(), ESCAPE_BYTE, serial_source::escaped, FALSE, serial_source::in_sync, message(), msg_bad_crc, msg_bad_sync, msg_no_memory, msg_sync, msg_too_long, MTU, serial_source::packet, packet_list::packet, process_packet(), read_byte(), serial_source::recv, SYNC_BYTE, and TRUE.
Referenced by read_serial_packet(), and write_serial_packet().
| static int read_byte | ( | serial_source | src | ) | [static] |
Definition at line 496 of file serialsource.c.
References serial_source::buffer, serial_source::bufpos, serial_source::bufused, buggyread(), dump(), errno, message(), msg_closed, msg_unix_error, and serial_source::recv.
Referenced by read_and_process().
| void* read_serial_packet | ( | serial_source | src, | |
| int * | len | |||
| ) |
Definition at line 696 of file serialsource.c.
References packet_list::len, serial_source::non_blocking, P_PACKET_NO_ACK, packet_list::packet, pop_protocol_packet(), read_and_process(), serial_source_empty(), and source_wait().
Referenced by read_packet().
| int serial_source_empty | ( | serial_source | src | ) |
Definition at line 454 of file serialsource.c.
References serial_source::bufpos, serial_source::bufused, P_PACKET_NO_ACK, packet_available(), and serial_source::recv.
Referenced by read_serial_packet().
| int serial_source_fd | ( | serial_source | src | ) |
Definition at line 315 of file serialsource.c.
References serial_source::fd.
| static int source_wait | ( | serial_source | src, | |
| struct timeval * | deadline | |||
| ) | [static] |
Definition at line 336 of file serialsource.c.
References serial_source::bufpos, serial_source::bufused, errno, serial_source::fd, dtnsim::gettimeofday(), message(), msg_unix_error, and serial_source::recv.
Referenced by read_serial_packet(), and write_serial_packet().
| static int source_write | ( | serial_source | src, | |
| const void * | buffer, | |||
| int | count | |||
| ) | [static] |
Definition at line 382 of file serialsource.c.
References errno, serial_source::fd, message(), and msg_unix_error.
Referenced by write_framed_packet().
| static void terminate_escaper | ( | serial_source | src | ) | [static] |
Definition at line 748 of file serialsource.c.
References escape_add(), and SYNC_BYTE.
Referenced by write_framed_packet().
| static int write_framed_packet | ( | serial_source | src, | |
| uint8_t | packet_type, | |||
| uint8_t | first_byte, | |||
| const uint8_t * | packet, | |||
| int | count | |||
| ) | [static] |
Definition at line 772 of file serialsource.c.
References serial_source::crc, dump(), escape_byte(), serial_source::escaped, serial_source::escapeptr, free_escaper(), init_escaper(), serial_source::send, source_write(), and terminate_escaper().
Referenced by process_packet(), and write_serial_packet().
| int write_serial_packet | ( | serial_source | src, | |
| const void * | packet, | |||
| int | len | |||
| ) |
Definition at line 822 of file serialsource.c.
References ACK_TIMEOUT, add_timeval(), dump(), dtnsim::gettimeofday(), P_ACK, P_PACKET_ACK, packet_list::packet, pop_protocol_packet(), read_and_process(), serial_source::send, serial_source::seqno, source_wait(), and write_framed_packet().
Referenced by process_packet().
1.6.3