/*
 serial.h
*/

#ifndef usb_h
#define usb_h

#define NUM_STREAMS 2 // number of streams (rx/tx)
#define NAME_LEN   20 // maximum length of device name string
#define BUFF_LEN 2048 // size in bytes, a power of 2

// stream array indexes
#define RX  0
#define TX  1

typedef struct stream_s
{
  int handle; // fileswitch handle
  char buf[BUFF_LEN];
  int rd, wr; // buffer index's

} stream_t;

typedef struct port_s
{
  char device[NAME_LEN];
  stream_t stream[NUM_STREAMS];
  int open; // true if port open

} port_t;

typedef struct serial_s
{
  int ports; // number of ports found
  port_t port[MAX_PORTS];

} serial_t;

extern serial_t serial;

int serial_find(void);
_kernel_oserror *serial_open(int port);
_kernel_oserror *serial_close(int port);
int serial_status(int handle);
_kernel_oserror *serial_read(int handle, char* buf, int n);
_kernel_oserror *serial_write(int handle, char* buf, int n);
void serial_report(void);

#endif
