UNIX port, SIO, updated port the way it was intended to be done

* renamed sio_ functions to sio_unix_ to prevent collision with lwIP
  SIO core functions.
* using #define sio_* sio_unix_* to prevent function redefinition
This commit is contained in:
Sylvain Rochet 2014-12-24 21:37:30 +01:00
parent 5b81b934bf
commit 3e5dca9bfb
3 changed files with 60 additions and 48 deletions

View File

@ -55,5 +55,11 @@ typedef struct sys_mbox *sys_mbox_t;
struct sys_thread; struct sys_thread;
typedef struct sys_thread * sys_thread_t; typedef struct sys_thread * sys_thread_t;
/* include SIO driver before anything else, this way we never
* load lwip/sio.h before netif/sio.h in order to prevent prototypes
* redefinition.
*/
#include "netif/sio.h"
#endif /* LWIP_ARCH_SYS_ARCH_H */ #endif /* LWIP_ARCH_SYS_ARCH_H */

View File

@ -11,15 +11,16 @@ typedef struct sio_status_t {
int fd; int fd;
fifo_t myfifo; fifo_t myfifo;
} sio_status_t; } sio_status_t;
#define sio_fd_t sio_status_t*
#define __sio_fd_t_defined
/** Baudrates */ /** Baudrates */
typedef enum sioBaudrates { typedef enum sioBaudrates {
SIO_BAUD_9600, SIO_BAUD_9600,
SIO_BAUD_19200, SIO_BAUD_19200,
SIO_BAUD_38400, SIO_BAUD_38400,
SIO_BAUD_57600, SIO_BAUD_57600,
SIO_BAUD_115200 SIO_BAUD_115200
} sioBaudrates; } sioBaudrates;
/** /**
@ -27,56 +28,58 @@ typedef enum sioBaudrates {
* @param siostat siostatus struct, contains sio instance data, given by sio_open * @param siostat siostatus struct, contains sio instance data, given by sio_open
* @return char read from input stream * @return char read from input stream
*/ */
u8_t sio_recv( sio_status_t * siostat ); u8_t sio_unix_recv( sio_status_t * siostat );
#define sio_recv sio_unix_recv
/** /**
* Poll for a new character from incoming data stream * Poll for a new character from incoming data stream
* @param siostat siostatus struct, contains sio instance data, given by sio_open * @param siostat siostatus struct, contains sio instance data, given by sio_open
* @return char read from input stream, or < 0 if no char was available * @return char read from input stream, or < 0 if no char was available
*/ */
s16_t sio_poll(sio_status_t * siostat); s16_t sio_unix_poll(sio_status_t * siostat);
/** /**
* Parse incoming characters until a string str is recieved, blocking call * Parse incoming characters until a string str is recieved, blocking call
* @param str zero terminated string to expect * @param str zero terminated string to expect
* @param siostat siostatus struct, contains sio instance data, given by sio_open * @param siostat siostatus struct, contains sio instance data, given by sio_open
*/ */
void sio_expect_string(u8_t *str, sio_status_t * siostat); void sio_unix_expect_string(u8_t *str, sio_status_t * siostat);
/** /**
* Write a char to output data stream * Write a char to output data stream
* @param c char to write to output stream * @param c char to write to output stream
* @param siostat siostatus struct, contains sio instance data, given by sio_open * @param siostat siostatus struct, contains sio instance data, given by sio_open
*/ */
void sio_send( u8_t c, sio_status_t * siostat ); void sio_unix_send( u8_t c, sio_status_t * siostat );
/** /**
* Write a char to output data stream * Write a char to output data stream
* @param str pointer to a zero terminated string * @param str pointer to a zero terminated string
* @param siostat siostatus struct, contains sio instance data, given by sio_open * @param siostat siostatus struct, contains sio instance data, given by sio_open
*/ */
void sio_send_string(u8_t *str, sio_status_t * siostat); void sio_unix_send_string(u8_t *str, sio_status_t * siostat);
/** /**
* Flush outbuffer (send everything in buffer now), useful if some layer below is * Flush outbuffer (send everything in buffer now), useful if some layer below is
* holding on to data, waitng to fill a buffer * holding on to data, waitng to fill a buffer
* @param siostat siostatus struct, contains sio instance data, given by sio_open * @param siostat siostatus struct, contains sio instance data, given by sio_open
*/ */
void sio_flush( sio_status_t * siostat ); void sio_unix_flush( sio_status_t * siostat );
/** /**
* Open serial port entry point from serial protocol (slipif, pppif) * Open serial port entry point from serial protocol (slipif, pppif)
* @param devnum the device number to use, i.e. ttySx, comx:, etc. there x = devnum * @param devnum the device number to use, i.e. ttySx, comx:, etc. there x = devnum
* @return siostatus struct, contains sio instance data, use when calling sio functions * @return siostatus struct, contains sio instance data, use when calling sio functions
*/ */
sio_status_t * sio_open( int devnum ); sio_status_t * sio_unix_open( int devnum );
#define sio_open sio_unix_open
/** /**
* Change baudrate of port, may close and reopen port * Change baudrate of port, may close and reopen port
* @param baud new baudrate * @param baud new baudrate
* @param siostat siostatus struct, contains sio instance data, given by sio_open * @param siostat siostatus struct, contains sio instance data, given by sio_open
*/ */
void sio_change_baud( sioBaudrates baud, sio_status_t * siostat ); void sio_unix_change_baud( sioBaudrates baud, sio_status_t * siostat );
#if PPP_SUPPORT #if PPP_SUPPORT
/** /**
@ -85,7 +88,8 @@ void sio_change_baud( sioBaudrates baud, sio_status_t * siostat );
* @param buf output buffer * @param buf output buffer
* @param size output buffer size * @param size output buffer size
*/ */
u32_t sio_write(sio_status_t * siostat, u8_t *buf, u32_t size); u32_t sio_unix_write(sio_status_t * siostat, u8_t *buf, u32_t size);
#define sio_write sio_unix_write
/** /**
* Read buffer from serial port * Read buffer from serial port
@ -93,13 +97,15 @@ u32_t sio_write(sio_status_t * siostat, u8_t *buf, u32_t size);
* @param buf input buffer * @param buf input buffer
* @param size input buffer size * @param size input buffer size
*/ */
u32_t sio_read(sio_status_t * siostat, u8_t *buf, u32_t size); u32_t sio_unix_read(sio_status_t * siostat, u8_t *buf, u32_t size);
#define sio_read sio_unix_read
/** /**
* Flush serial port input buffer * Flush serial port input buffer
* @param siostat siostatus struct, contains sio instance data, given by sio_open * @param siostat siostatus struct, contains sio instance data, given by sio_open
*/ */
void sio_read_abort(sio_status_t * siostat); void sio_unix_read_abort(sio_status_t * siostat);
#define sio_read_abort sio_unix_read_abort
#endif /* PPP_SUPPORT */ #endif /* PPP_SUPPORT */
#endif #endif

View File

@ -91,7 +91,7 @@ static void signal_handler_IO_1( int status )
* @param netif : netinterface struct, contains interface instance data * @param netif : netinterface struct, contains interface instance data
* @return file handle to serial dev. * @return file handle to serial dev.
*/ */
static int sio_init( char * device, int devnum, sio_status_t * siostat ) static int sio_unix_init( char * device, int devnum, sio_status_t * siostat )
{ {
struct termios oldtio,newtio; struct termios oldtio,newtio;
#if ! PPP_SUPPORT #if ! PPP_SUPPORT
@ -114,15 +114,15 @@ static int sio_init( char * device, int devnum, sio_status_t * siostat )
switch ( devnum ) switch ( devnum )
{ {
case 0: case 0:
LWIP_DEBUGF( SIO_DEBUG, ("sioinit, signal_handler_IO_0\n") ); LWIP_DEBUGF( SIO_DEBUG, ("sio_unix_init, signal_handler_IO_0\n") );
saio.sa_handler = signal_handler_IO_0; saio.sa_handler = signal_handler_IO_0;
break; break;
case 1: case 1:
LWIP_DEBUGF( SIO_DEBUG, ("sioinit, signal_handler_IO_1\n") ); LWIP_DEBUGF( SIO_DEBUG, ("sio_unix_init, signal_handler_IO_1\n") );
saio.sa_handler = signal_handler_IO_1; saio.sa_handler = signal_handler_IO_1;
break; break;
default: default:
LWIP_DEBUGF( SIO_DEBUG,("sioinit, devnum not allowed\n") ); LWIP_DEBUGF( SIO_DEBUG,("sio_unix_init, devnum not allowed\n") );
break; break;
} }
@ -160,16 +160,16 @@ static int sio_init( char * device, int devnum, sio_status_t * siostat )
/** /**
* *
*/ */
static void sio_speed( int fd, int speed ) static void sio_unix_speed( int fd, int speed )
{ {
struct termios oldtio,newtio; struct termios oldtio,newtio;
/* int fd; */ /* int fd; */
LWIP_DEBUGF( 1,("sio_speed: baudcode:%d enter\n",speed ) ); LWIP_DEBUGF( 1,("sio_unix_speed: baudcode:%d enter\n",speed ) );
if ( fd < 0 ) if ( fd < 0 )
{ {
LWIP_DEBUGF(SIO_DEBUG, ( "sio_speed: fd ERROR\n" )); LWIP_DEBUGF(SIO_DEBUG, ( "sio_unix_speed: fd ERROR\n" ));
exit( -1 ); exit( -1 );
} }
@ -187,34 +187,34 @@ static void sio_speed( int fd, int speed )
tcsetattr( fd,TCSANOW,&newtio ); tcsetattr( fd,TCSANOW,&newtio );
tcflush( fd, TCIOFLUSH ); tcflush( fd, TCIOFLUSH );
LWIP_DEBUGF( SIO_DEBUG ,("sio_speed: leave\n" )); LWIP_DEBUGF( SIO_DEBUG ,("sio_unix_speed: leave\n" ));
} }
/* --public-functions----------------------------------------------------------------------------- */ /* --public-functions----------------------------------------------------------------------------- */
void sio_send( u8_t c, sio_status_t * siostat ) void sio_unix_send( u8_t c, sio_status_t * siostat )
{ {
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio; */ /* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio; */
if ( write( siostat->fd, &c, 1 ) <= 0 ) if ( write( siostat->fd, &c, 1 ) <= 0 )
{ {
LWIP_DEBUGF( SIO_DEBUG,("sio_send: write refused\n") ); LWIP_DEBUGF( SIO_DEBUG,("sio_unix_send: write refused\n") );
} }
} }
void sio_send_string( u8_t *str, sio_status_t * siostat ) void sio_unix_send_string( u8_t *str, sio_status_t * siostat )
{ {
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio; */ /* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio; */
int len = strlen( (const char *)str ); int len = strlen( (const char *)str );
if ( write( siostat->fd, str, len ) <= 0 ) if ( write( siostat->fd, str, len ) <= 0 )
{ {
LWIP_DEBUGF( SIO_DEBUG,("sio_send_string: write refused\n") ); LWIP_DEBUGF( SIO_DEBUG,("sio_unix_send_string: write refused\n") );
} }
LWIP_DEBUGF( (PPP_DEBUG | SIO_DEBUG),("sent:%s\n",str ) ); LWIP_DEBUGF( (PPP_DEBUG | SIO_DEBUG),("sent:%s\n",str ) );
} }
void sio_flush( sio_status_t * siostat ) void sio_unix_flush( sio_status_t * siostat )
{ {
LWIP_UNUSED_ARG(siostat); LWIP_UNUSED_ARG(siostat);
/* not implemented in unix as it is not needed */ /* not implemented in unix as it is not needed */
@ -224,20 +224,20 @@ void sio_flush( sio_status_t * siostat )
#if ! PPP_SUPPORT #if ! PPP_SUPPORT
/*u8_t sio_recv( struct netif * netif )*/ /*u8_t sio_recv( struct netif * netif )*/
u8_t sio_recv( sio_status_t * siostat ) u8_t sio_unix_recv( sio_status_t * siostat )
{ {
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio; */ /* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio; */
return fifoGet( &(siostat->myfifo) ); return fifoGet( &(siostat->myfifo) );
} }
s16_t sio_poll(sio_status_t * siostat) s16_t sio_unix_poll(sio_status_t * siostat)
{ {
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio;*/ /* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio;*/
return fifoGetNonBlock( &(siostat->myfifo) ); return fifoGetNonBlock( &(siostat->myfifo) );
} }
void sio_expect_string( u8_t *str, sio_status_t * siostat ) void sio_unix_expect_string( u8_t *str, sio_status_t * siostat )
{ {
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio;*/ /* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio;*/
u8_t c; u8_t c;
@ -267,24 +267,24 @@ void sio_expect_string( u8_t *str, sio_status_t * siostat )
#endif /* ! PPP_SUPPORT */ #endif /* ! PPP_SUPPORT */
#if PPP_SUPPORT #if PPP_SUPPORT
u32_t sio_write(sio_status_t * siostat, u8_t *buf, u32_t size) u32_t sio_unix_write(sio_status_t * siostat, u8_t *buf, u32_t size)
{ {
return write( siostat->fd, buf, size ); return write( siostat->fd, buf, size );
} }
u32_t sio_read(sio_status_t * siostat, u8_t *buf, u32_t size) u32_t sio_unix_read(sio_status_t * siostat, u8_t *buf, u32_t size)
{ {
return read( siostat->fd, buf, size ); return read( siostat->fd, buf, size );
} }
void sio_read_abort(sio_status_t * siostat) void sio_unix_read_abort(sio_status_t * siostat)
{ {
LWIP_UNUSED_ARG(siostat); LWIP_UNUSED_ARG(siostat);
printf("sio_read_abort: not yet implemented for unix\n"); printf("sio_read_abort: not yet implemented for unix\n");
} }
#endif /* PPP_SUPPORT */ #endif /* PPP_SUPPORT */
sio_status_t * sio_open( int devnum ) sio_status_t * sio_unix_open( int devnum )
{ {
char dev[20]; char dev[20];
@ -308,9 +308,9 @@ sio_status_t * sio_open( int devnum )
if ( (devnum == 1) || (devnum == 0) ) if ( (devnum == 1) || (devnum == 0) )
{ {
if ( ( siostate->fd = sio_init( dev, devnum, siostate ) ) == 0 ) if ( ( siostate->fd = sio_unix_init( dev, devnum, siostate ) ) == 0 )
{ {
LWIP_DEBUGF(SIO_DEBUG, ( "sio_open: ERROR opening serial device\n" )); LWIP_DEBUGF(SIO_DEBUG, ( "sio_unix_open: ERROR opening serial device\n" ));
abort( ); abort( );
return NULL; return NULL;
} }
@ -340,17 +340,17 @@ sio_status_t * sio_open( int devnum )
perror("execl pppd"); perror("execl pppd");
exit (1); exit (1);
} else { } else {
LWIP_DEBUGF(SIO_DEBUG, ( "sio_open: spawned pppd pid %d\n", childpid)); LWIP_DEBUGF(SIO_DEBUG, ( "sio_unix_open: spawned pppd pid %d\n", childpid));
} }
} }
#endif #endif
else else
{ {
LWIP_DEBUGF(SIO_DEBUG, ( "sio_open: device %s (%d) is not supported\n", dev, devnum )); LWIP_DEBUGF(SIO_DEBUG, ( "sio_unix_open: device %s (%d) is not supported\n", dev, devnum ));
return NULL; return NULL;
} }
LWIP_DEBUGF( 1,("sio_open: dev=%s open.\n", dev )); LWIP_DEBUGF( 1,("sio_unix_open: dev=%s open.\n", dev ));
return siostate; return siostate;
} }
@ -358,32 +358,32 @@ sio_status_t * sio_open( int devnum )
/** /**
* *
*/ */
void sio_change_baud( sioBaudrates baud, sio_status_t * siostat ) void sio_unix_change_baud( sioBaudrates baud, sio_status_t * siostat )
{ {
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio;*/ /* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio;*/
LWIP_DEBUGF( 1,("sio_change_baud\n" )); LWIP_DEBUGF( 1,("sio_unix_change_baud\n" ));
switch ( baud ) switch ( baud )
{ {
case SIO_BAUD_9600: case SIO_BAUD_9600:
sio_speed( siostat->fd, B9600 ); sio_unix_speed( siostat->fd, B9600 );
break; break;
case SIO_BAUD_19200: case SIO_BAUD_19200:
sio_speed( siostat->fd, B19200 ); sio_unix_speed( siostat->fd, B19200 );
break; break;
case SIO_BAUD_38400: case SIO_BAUD_38400:
sio_speed( siostat->fd, B38400 ); sio_unix_speed( siostat->fd, B38400 );
break; break;
case SIO_BAUD_57600: case SIO_BAUD_57600:
sio_speed( siostat->fd, B57600 ); sio_unix_speed( siostat->fd, B57600 );
break; break;
case SIO_BAUD_115200: case SIO_BAUD_115200:
sio_speed( siostat->fd, B115200 ); sio_unix_speed( siostat->fd, B115200 );
break; break;
default: default:
LWIP_DEBUGF( 1,("sio_change_baud: Unknown baudrate, code:%d\n", baud )); LWIP_DEBUGF( 1,("sio_unix_change_baud: Unknown baudrate, code:%d\n", baud ));
break; break;
} }
} }