serialsource.c File Reference

#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 Documentation

#define DEBUG   1

Definition at line 36 of file serialsource.c.


Typedef Documentation

typedef int bool

Definition at line 49 of file serialsource.c.


Enumeration Type Documentation

anonymous enum

Enumerator:
FALSE 
TRUE 
BUFSIZE 
MTU 
ACK_TIMEOUT 
SYNC_BYTE 
ESCAPE_BYTE 
P_ACK 
P_PACKET_ACK 
P_PACKET_NO_ACK 
P_UNKNOWN 

Definition at line 51 of file serialsource.c.


Function Documentation

static void add_timeval ( struct timeval *  tv,
long  us 
) [static]

Definition at line 804 of file serialsource.c.

Referenced by write_serial_packet().

static int buggyread ( serial_source  src,
void *  buffer,
int  n 
) [static]

Definition at line 219 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 319 of file serialsource.c.

static uint16_t crc_byte ( uint16_t  crc,
uint8_t  b 
) [static]

Definition at line 466 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 482 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 200 of file serialsource.c.

Referenced by dtn::BundleTLV::dump(), dtn::RIBTLV::dump(), dtn::RIBDTLV::dump(), dtn::HelloTLV::dump(), dtn::RIBNode::dump(), 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 721 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 747 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 759 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 726 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 211 of file serialsource.c.

References serial_source::message.

Referenced by oasys::SMTP::client_session(), 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 249 of file serialsource.c.

Referenced by init_motes().

static bool packet_available ( serial_source  src,
uint8_t  type 
) [static]

Definition at line 445 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 97 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 435 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 643 of file serialsource.c.

References AM_OSCOPEACK, AM_OSCOPEMSG, 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 412 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 533 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 492 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 690 of file serialsource.c.

Referenced by read_packet().

int serial_source_empty ( serial_source  src  ) 

Definition at line 450 of file serialsource.c.

Referenced by read_serial_packet().

int serial_source_fd ( serial_source  src  ) 

Definition at line 311 of file serialsource.c.

static int source_wait ( serial_source  src,
struct timeval *  deadline 
) [static]

Definition at line 332 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 378 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 742 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 766 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 816 of file serialsource.c.

Referenced by process_packet().


Generated on Sat Sep 8 08:36:19 2007 for DTN Reference Implementation by  doxygen 1.5.3