summaryrefslogtreecommitdiff
path: root/packages/robostix-utils
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /packages/robostix-utils
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'packages/robostix-utils')
-rw-r--r--packages/robostix-utils/robostix-cmdline.bb28
-rw-r--r--packages/robostix-utils/robostix-cmdline/robostix.c278
-rw-r--r--packages/robostix-utils/robostix-cmdline/robostix.h114
-rw-r--r--packages/robostix-utils/robostix-sertest.bb28
-rw-r--r--packages/robostix-utils/robostix-sertest/sertest.c443
5 files changed, 0 insertions, 891 deletions
diff --git a/packages/robostix-utils/robostix-cmdline.bb b/packages/robostix-utils/robostix-cmdline.bb
deleted file mode 100644
index 0eecfc2e14..0000000000
--- a/packages/robostix-utils/robostix-cmdline.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-DESCRIPTION = "robostix programs"
-SECTION = "base"
-PRIORITY = "required"
-PR = "r1"
-
-DEPENDS = robostix-module
-
-SRC_URI = " \
- file://robostix.h \
- file://robostix.c \
- "
-
-CMD_NAME=robostix
-
-S = "${WORKDIR}"
-
-do_compile () {
- ${CC} -o ${CMD_NAME} *.c
-}
-
-do_install () {
- install -d ${D}${bindir}/
- install -m 0755 ${WORKDIR}/${CMD_NAME} ${D}${bindir}/
-}
-
-PACKAGES = "${PN}"
-FILES_${PN} = "${bindir}/*"
-
diff --git a/packages/robostix-utils/robostix-cmdline/robostix.c b/packages/robostix-utils/robostix-cmdline/robostix.c
deleted file mode 100644
index be47b5c5a9..0000000000
--- a/packages/robostix-utils/robostix-cmdline/robostix.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/****************************************************************************
-*
-* Copyright (c) 2006 Dave Hylands <dhylands@gmail.com>
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License version 2 as
-* published by the Free Software Foundation.
-*
-* Alternatively, this software may be distributed under the terms of BSD
-* license.
-*
-* See README and COPYING for more details.
-*
-****************************************************************************/
-/**
-*
-* robostix.c
-*
-* PURPOSE:
-*
-* This implements the usermode program for talking to the robostix.
-*
-*****************************************************************************/
-
-/* ---- Include Files ---------------------------------------------------- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#include "robostix.h"
-
-/* ---- Public Variables ------------------------------------------------- */
-
-int gFd = -1;
-
-int gVal;
-
-/* ---- Private Constants and Types -------------------------------------- */
-/* ---- Private Variables ------------------------------------------------ */
-
-typedef struct
-{
- const char *cmdStr;
- const char *argStr;
- const char *helpStr;
- int (*parseArgs)( int argc, char **argv );
- void (*execFunc)( int cmd );
- int cmd;
-
-} Cmd;
-
-int ParseNone( int argc, char **argv );
-int ParseOnOffArg( int argc, char **argv );
-int ParseOnOffPulseArg( int argc, char **argv );
-void Usage( void );
-
-void Power( int cmd );
-void ReadIOctl( int cmd );
-void SimpleIOctl( int cmd );
-
-Cmd gCmd[] =
-{
- { "power", "on|off", "Controls the robostix voltage regulators", ParseOnOffArg, Power, -1 },
- { "reset", "on|off|pulse", "Resets the robostix", ParseOnOffPulseArg, SimpleIOctl, ROBOSTIX_IOCTL_RESET },
- { "245", "on|off", "Controls the 245 buffer chip", ParseOnOffArg, SimpleIOctl, ROBOSTIX_IOCTL_245_ENABLE },
-
- { "sck", "on|off", "Sets/clears the SCK line", ParseOnOffArg, SimpleIOctl, ROBOSTIX_IOCTL_SET_SCK },
- { "ss", "on|off", "Sets/clears the SS line", ParseOnOffArg, SimpleIOctl, ROBOSTIX_IOCTL_SET_SS },
- { "txd", "on|off", "Sets/clears the IR-TXD line", ParseOnOffArg, SimpleIOctl, ROBOSTIX_IOCTL_SET_IR_TXD },
- { "mosi", "on|off", "Sets/clears the MOSI line", ParseOnOffArg, SimpleIOctl, ROBOSTIX_IOCTL_SET_MOSI },
-
- { "rxd", "", "Reads the IR-RXD line", ParseNone, ReadIOctl, ROBOSTIX_IOCTL_GET_IR_RXD },
- { "irq", "", "Reads the TM-IRQ line", ParseNone, ReadIOctl, ROBOSTIX_IOCTL_GET_IRQ },
- { "miso", "", "Reads the MISO line", ParseNone, ReadIOctl, ROBOSTIX_IOCTL_GET_MISO },
-
- { NULL }
-};
-
-/* ---- Private Function Prototypes -------------------------------------- */
-/* ---- Functions -------------------------------------------------------- */
-
-
-/****************************************************************************
-*
-* main
-*
-***************************************************************************/
-
-int main( int argc, char **argv )
-{
- char *cmdStr;
- int argIdx;
- Cmd *cmd;
-
- if ( argc == 1 )
- {
- Usage( );
- exit( 0 );
- }
-
- if (( gFd = open( "/dev/robostix", O_RDWR )) < 0 )
- {
- perror( "Unable to open /dev/robostix" );
- exit( 1 );
- }
-
- argIdx = 1;
- cmdStr = argv[ argIdx++ ];
-
- for ( cmd = gCmd; cmd->cmdStr != NULL; cmd++ )
- {
- if ( strcasecmp( cmdStr, cmd->cmdStr ) == 0 )
- {
- break;
- }
- }
- if ( cmd->cmdStr == NULL )
- {
- fprintf( stderr, "Unrecognized command: '%s'\n", cmdStr );
- exit( 1 );
- }
-
- if ( cmd->parseArgs( argc - argIdx, &argv[ argIdx ] ))
- {
- cmd->execFunc( cmd->cmd );
- }
-
- close( gFd );
-
- exit( 0 );
- return 0;
-
-} // main
-
-/****************************************************************************
-*
-* Checks to see if the argument is on/off (or equivalent)
-*
-***************************************************************************/
-
-int IsOnOffArg( int argc, char **argv )
-{
- if (( strcasecmp( *argv, "on" ) == 0 )
- || ( strcasecmp( *argv, "t" ) == 0 )
- || ( strcasecmp( *argv, "1" ) == 0 ))
- {
- gVal = 1;
- return 1;
- }
-
- if (( strcasecmp( *argv, "off" ) == 0 )
- || ( strcasecmp( *argv, "f" ) == 0 )
- || ( strcasecmp( *argv, "0" ) == 0 ))
- {
- gVal = 0;
- return 1;
- }
-
- return 0;
-
-} // IsOnOffArg
-
-/****************************************************************************
-*
-* Parses no arguments
-*
-***************************************************************************/
-
-int ParseNone( int argc, char **argv )
-{
- return 1;
-
-} // ParseNone
-
-/****************************************************************************
-*
-* Parses a command line argument for legel on/off values
-*
-***************************************************************************/
-
-int ParseOnOffArg( int argc, char **argv )
-{
- if ( IsOnOffArg( argc, argv ))
- {
- return 1;
- }
-
- fprintf( stderr, "Expecting on/off, found: '%s'\n", *argv );
- return 0;
-
-} // ParseOnOffArg
-
-/****************************************************************************
-*
-* Parses a command line argument for legel on/off values
-*
-***************************************************************************/
-
-int ParseOnOffPulseArg( int argc, char **argv )
-{
- if (( strcasecmp( *argv, "pulse" ) == 0 )
- || ( strcasecmp( *argv, "2" ) == 0 ))
- {
- gVal = 2;
- return 1;
- }
-
- if ( IsOnOffArg( argc, argv ))
- {
- return 1;
- }
-
- fprintf( stderr, "Expecting on/off/pulse, found: '%s'\n", *argv );
- return 0;
-
-} // ParseOnoffPulseArg
-
-/****************************************************************************
-*
-* Power
-*
-***************************************************************************/
-
-void Power( int cmd )
-{
- SimpleIOctl( ROBOSTIX_IOCTL_POWER_VCC5 );
-
-} // Power
-
-/****************************************************************************
-*
-* SimpleIOctl
-*
-***************************************************************************/
-
-void SimpleIOctl( int cmd )
-{
- if ( ioctl( gFd, cmd, gVal ) != 0 )
- {
- fprintf( stderr, "ioctl call failed: %d\n", errno );
- }
-
-} // SimpleIOctl
-
-/****************************************************************************
-*
-* SimpleIOctl
-*
-***************************************************************************/
-
-void ReadIOctl( int cmd )
-{
- if ( ioctl( gFd, cmd, &gVal ) != 0 )
- {
- fprintf( stderr, "ioctl call failed: %d\n", errno );
- }
-
-} // ReadIOctl
-
-/****************************************************************************
-*
-* Usage
-*
-***************************************************************************/
-
-void Usage( void )
-{
- Cmd *cmd;
-
- for ( cmd = gCmd; cmd->cmdStr != NULL; cmd++ )
- {
- printf( "%-12s %-12s %s\n", cmd->cmdStr, cmd->argStr, cmd->helpStr );
- }
-
-} // Usage
-
diff --git a/packages/robostix-utils/robostix-cmdline/robostix.h b/packages/robostix-utils/robostix-cmdline/robostix.h
deleted file mode 100644
index 0d860bc7a4..0000000000
--- a/packages/robostix-utils/robostix-cmdline/robostix.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-*
-* Copyright (c) 2006 Dave Hylands <dhylands@gmail.com>
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License version 2 as
-* published by the Free Software Foundation.
-*
-* Alternatively, this software may be distributed under the terms of BSD
-* license.
-*
-* See README and COPYING for more details.
-*
-****************************************************************************/
-/**
-*
-* robostix_drv.h
-*
-* PURPOSE:
-*
-* This implements a driver for using the robostix from the gumstix
-*
-* Initially, this contains the required support to emulate enough of the
-* parallel port interface to allow avrdude to program the ATMega128.
-*
-*****************************************************************************/
-
-#if !defined( LINUX_ROBOSTIX_H )
-#define LINUX_ROBOSTIX_H )
-
-/* ---- Include Files ----------------------------------------------------- */
-
-#include <linux/ioctl.h>
-
-/* ---- Constants and Types ----------------------------------------------- */
-
-#define ROBOSTIX_MAJOR 240
-
-#define ROBOSTIX_IOCTL_MAGIC 'R'
-
-/**
- * Deefines for each of the commands. Note that since we want to reduce
- * the possibility that a user mode program gets out of sync with a given
- * driver, we explicitly assign a value to each enumeration. This makes
- * it more difficult to stick new ioctl's in the middle of the list.
- */
-
-typedef enum
-{
- ROBOSTIX_CMD_FIRST = 0x80,
-
- ROBOSTIX_CMD_POWER_VCC5 = 0x80,
- ROBOSTIX_CMD_RESET = 0x81,
- ROBOSTIX_CMD_245_ENABLE = 0x82,
- ROBOSTIX_CMD_SET_SCK = 0x83,
- ROBOSTIX_CMD_SET_SS = 0x84,
- ROBOSTIX_CMD_SET_IR_TXD = 0x85,
- ROBOSTIX_CMD_GET_IR_RXD = 0x86,
- ROBOSTIX_CMD_SET_MOSI = 0x87,
- ROBOSTIX_CMD_GET_MISO = 0x88,
- ROBOSTIX_CMD_GET_IRQ = 0x89,
- ROBOSTIX_CMD_DELAY_USEC = 0x8A, // value is hardocded in uisp DAPA.C
-
- /* Insert new ioctls here */
-
- ROBOSTIX_CMD_LAST,
-
-} ROBOSTIX_CMD;
-
-/*
- * The following are arguments to the various ioctl's
- */
-
-#define ROBOSTIX_PIN_OFF 0
-#define ROBOSTIX_PIN_ON 1
-#define ROBOSTIX_PIN_PULSE 2 // only used or Reset
-
-/*
- * Definitions for the actual ioctl commands
- */
-
-#define ROBOSTIX_IOCTL_POWER_VCC5 _IO( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_POWER_VCC5 ) // arg is int
-#define ROBOSTIX_IOCTL_RESET _IO( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_RESET ) // arg is int
-#define ROBOSTIX_IOCTL_245_ENABLE _IO( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_245_ENABLE ) // arg is int
-#define ROBOSTIX_IOCTL_SET_SCK _IO( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_SET_SCK ) // arg is int
-#define ROBOSTIX_IOCTL_SET_SS _IO( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_SET_SS ) // arg is int
-#define ROBOSTIX_IOCTL_SET_IR_TXD _IO( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_SET_IR_TXD ) // arg is int
-#define ROBOSTIX_IOCTL_GET_IR_RXD _IOR( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_GET_IR_RXD, int ) // arg is int *
-#define ROBOSTIX_IOCTL_SET_MOSI _IO( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_SET_MOSI ) // arg is int
-#define ROBOSTIX_IOCTL_GET_MISO _IOR( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_GET_MISO, int ) // arg is int *
-#define ROBOSTIX_IOCTL_GET_IRQ _IOR( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_GET_IRQ, int ) // arg is int *
-#define ROBOSTIX_IOCTL_DELAY_USEC _IO( ROBOSTIX_IOCTL_MAGIC, ROBOSTIX_CMD_DELAY_USEC ) // arg is int
-
-
-/*
- * Definitions for sysctl. The top level define has to be unique system wide.
- * The kernel defines values 1 thru about 10 (see include/linunx/sysctl.h)
- */
-
-#define CTL_ROBOSTIX 0x526F626F /* 'Robo' in hex form */
-
-/*
- * The following are for entries in /proc/sys/robostix
- */
-
-enum
-{
- CTL_ROBOSTIX_DEBUG_TRACE = 101,
- CTL_ROBOSTIX_DEBUG_IOCTL = 102,
- CTL_ROBOSTIX_DEBUG_ERROR = 103
-};
-
-#endif // LINUX_ROBOSTIX_H
-
diff --git a/packages/robostix-utils/robostix-sertest.bb b/packages/robostix-utils/robostix-sertest.bb
deleted file mode 100644
index 0196f6c8f3..0000000000
--- a/packages/robostix-utils/robostix-sertest.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-DESCRIPTION = "robostix programs"
-SECTION = "base"
-PRIORITY = "required"
-PR = "r1"
-
-DEPENDS = robostix-module
-
-SRC_URI = " \
- file://sertest.c \
- "
-
-CMD_NAME=sertest
-LDLIBS = -lpthread
-
-S = "${WORKDIR}"
-
-do_compile () {
- ${CC} ${LDLIBS} -o ${CMD_NAME} *.c
-}
-
-do_install () {
- install -d ${D}${bindir}/
- install -m 0755 ${WORKDIR}/${CMD_NAME} ${D}${bindir}/
-}
-
-PACKAGES = "${PN}"
-FILES_${PN} = "${bindir}/*"
-
diff --git a/packages/robostix-utils/robostix-sertest/sertest.c b/packages/robostix-utils/robostix-sertest/sertest.c
deleted file mode 100644
index 3f0cf7a6fc..0000000000
--- a/packages/robostix-utils/robostix-sertest/sertest.c
+++ /dev/null
@@ -1,443 +0,0 @@
-/****************************************************************************
-*
-* Copyright (c) 2006 Dave Hylands <dhylands@gmail.com>
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License version 2 as
-* published by the Free Software Foundation.
-*
-* Alternatively, this software may be distributed under the terms of BSD
-* license.
-*
-* See README and COPYING for more details.
-*
-****************************************************************************/
-/**
-*
-* sertest.c
-*
-* PURPOSE:
-*
-* This implements a sample program for accessing the serial port.
-*
-*****************************************************************************/
-
-/* ---- Include Files ---------------------------------------------------- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/unistd.h>
-#include <pthread.h>
-#include <getopt.h>
-#include <termios.h>
-
-/* ---- Public Variables ------------------------------------------------- */
-
-int gFd = -1;
-
-int gVal;
-
-/* ---- Private Constants and Types -------------------------------------- */
-/* ---- Private Variables ------------------------------------------------ */
-
-struct option gLongOption[] =
-{
- // option A Flag V (has_arg, flag, val)
- // ----------- - ---- ---
- { "baud", 1, NULL, 'b' },
- { "debug", 0, NULL, 'd' },
- { "help", 0, NULL, 'h' },
- { "port", 1, NULL, 'p' },
- { "verbose", 0, NULL, 'v' },
- { 0 },
-
-};
-
-struct
-{
- speed_t speed;
- unsigned baudRate;
-} gBaudTable[] =
-{
- { B50, 50 },
- { B75, 75 },
- { B110, 110 },
- { B134, 134 },
- { B150, 150 },
- { B200, 200 },
- { B300, 300 },
- { B600, 600 },
- { B1200, 1200 },
- { B1800, 1800 },
- { B2400, 2400 },
- { B4800, 4800 },
- { B9600, 9600 },
- { B19200, 19200 },
- { B38400, 38400 },
- { B57600, 57600 },
- { B115200, 115200 },
- { B230400, 230400 }
-};
-
-#define ARRAY_LEN(x) ( sizeof( x ) / sizeof( x[ 0 ]))
-
-int gVerbose = 0;
-int gDebug = 0;
-
-int gPortFd = -1;
-
-/* ---- Private Function Prototypes -------------------------------------- */
-
-void *ReaderThread( void *param );
-char *StrMaxCpy( char *dst, const char *src, size_t maxLen );
-char *StrMaxCat( char *dst, const char *src, size_t maxLen );
-void Usage( void );
-
-/* ---- Functions -------------------------------------------------------- */
-
-
-/***************************************************************************
-*
-* main
-*
-****************************************************************************/
-
-int main( int argc, char **argv )
-{
- int rc;
- int opt;
- char devName[ 40 ];
- const char *baudStr = NULL;
- const char *portStr = "ttyS2";
- speed_t baudRate;
- pthread_t readerThreadId;
-
- struct termios attr;
-
- // Parse the command line options
-
- while (( opt = getopt_long( argc, argv, "b:dhp:v", gLongOption, NULL )) > 0 )
- {
- switch ( opt )
- {
- case 'b':
- {
- baudStr = optarg;
- break;
- }
-
- case 'd':
- {
- gDebug = 1;
- break;
- }
-
- case 'p':
- {
- portStr = optarg;
- break;
- }
-
- case 'v':
- {
- gVerbose = 1;
- break;
- }
- case '?':
- case 'h':
- {
- Usage();
- return 1;
- }
- }
- }
-
- devName[ 0 ] = '\0';
- if ( portStr[ 0 ] != '/' )
- {
- StrMaxCpy( devName, "/dev/", sizeof( devName ));
- }
- StrMaxCat( devName, portStr, sizeof( devName ));
-
-
- baudRate = B0;
- if ( baudStr == NULL )
- {
- baudRate = B9600;
- }
- else
- {
- int baudIdx;
- int testBaud = atoi( baudStr );
-
- for ( baudIdx = 0; baudIdx < ARRAY_LEN( gBaudTable ); baudIdx++ )
- {
- if ( gBaudTable[ baudIdx ].baudRate == testBaud )
- {
- baudRate = gBaudTable[ baudIdx ].speed;
- break;
- }
- }
-
- if ( baudRate == B0 )
- {
- fprintf( stderr, "Unrecognized baud rate: '%s'\n", baudStr );
- exit( 1 );
- }
- }
-
- if (( gPortFd = open( devName, O_RDWR | O_EXCL )) < 0 )
- {
- fprintf( stderr, "Unable to open serial port '%s': %s\n", devName, strerror( errno ));
- exit( 2 );
- }
-
- if ( tcgetattr( gPortFd, &attr ) < 0 )
- {
- fprintf( stderr, "Call to tcgetattr failed: %s\n", strerror( errno ));
- exit( 3 );
- }
-
- attr.c_iflag = 0;
- attr.c_oflag = 0;
- attr.c_cflag = CLOCAL | CREAD | CS8;
- attr.c_lflag = 0;
- attr.c_cc[ VTIME ] = 0; // timeout in tenths of a second
- attr.c_cc[ VMIN ] = 1; // Only wait for a single char
-
- cfsetispeed( &attr, baudRate );
- cfsetospeed( &attr, baudRate );
-
- if ( tcsetattr( gPortFd, TCSAFLUSH, &attr ) < 0 )
- {
- fprintf( stderr, "Call to tcsetattr failed: %s\n", strerror( errno ));
- exit( 4 );
- }
-
- // Put stdin & stdout in unbuffered mode.
-
- setbuf( stdin, NULL );
- setbuf( stdout, NULL );
-
- // Put stdin in raw mode (i.e. turn off canonical mode). Canonical mode
- // causes the driver to wait for the RETURN character so that line editing
- // can take place. We also want to turn off ECHO.
-
- {
- struct termios tio;
-
- if ( tcgetattr( fileno( stdin ), &tio ) < 0 )
- {
- fprintf( stderr, "Unable to retrieve terminal settings: %s\n", strerror( errno ));
- exit( 5 );
- }
-
- tio.c_lflag &= ~( ICANON | ECHO );
- tio.c_cc[VTIME] = 0;
- tio.c_cc[VMIN] = 1;
-
- if ( tcsetattr( fileno( stdin ), TCSANOW, &tio ) < 0 )
- {
- fprintf( stderr, "Unable to update terminal settings: %s\n", strerror( errno ));
- exit( 6 );
- }
- }
-
- // Kick off the serial port reader thread.
-
- rc = pthread_create( &readerThreadId, NULL, ReaderThread, NULL );
- if ( rc != 0 )
- {
- fprintf( stderr, "Error creating ReaderThread: %s\n", strerror( rc ));
- exit( 7 );
- }
-
- // Read stdin and send rcvd chars to the serial port
-
- while ( 1 )
- {
- char ch;
- int chInt = fgetc( stdin );
- if ( chInt < 0 )
- {
- fprintf( stderr, "Exiting...\n" );
- break;
- }
- ch = (char)chInt;
-
- if ( gDebug )
- {
- if (( ch < ' ' ) || ( ch > '~' ))
- {
- fprintf( stderr, "stdin Read: 0x%02x '.'\n", ch );
- }
- else
- {
- fprintf( stderr, "stdin Read: 0x%02x '%c'\n", ch, ch );
- }
-
- }
-
- if ( write( gPortFd, &ch, 1 ) != 1 )
- {
- fprintf( stderr, "write to serial port failed: %s\n", strerror( errno ));
- break;
- }
- }
-
-
- close( gPortFd );
-
- exit( 0 );
- return 0; // Get rid of warning about not returning anything
-}
-
-/***************************************************************************/
-/**
-* Thread which processes the incoming serial data.
-*/
-
-void *ReaderThread( void *param )
-{
- while ( 1 )
- {
- char ch;
- int bytesRead;
-
- if (( bytesRead = read( gPortFd, &ch, 1 )) < 0 )
- {
- fprintf( stderr, "Serial port read failed: %s\n", strerror( errno ));
- exit( 1 );
- }
-
- if ( gDebug )
- {
- if (( ch < ' ' ) || ( ch > '~' ))
- {
- fprintf( stderr, "Serial Read: 0x%02x '.'\n", ch );
- }
- else
- {
- fprintf( stderr, "Serial Read: 0x%02x '%c'\n", ch, ch );
- }
-
- }
-
- putc( ch, stdout );
- }
-
- return 0;
-
-} // ReaderThread
-
-/***************************************************************************/
-/**
-* Concatenates source to the destination, but makes sure that the
-* destination string (including terminating null), doesn't exceed maxLen.
-*
-* @param dst (mod) String to concatnate onto.
-* @param src (in) String to being added to the end of @a dst.
-* @param maxLen (in) Maximum length that @a dst is allowed to be.
-*
-* @return A pointer to the destination string.
-*/
-
-char *StrMaxCat( char *dst, const char *src, size_t maxLen )
-{
- size_t dstLen = strlen( dst );
-
- if ( dstLen < maxLen )
- {
- StrMaxCpy( &dst[ dstLen ], src, maxLen - dstLen );
- }
-
- return dst;
-
-} /* StrMaxCat */
-
-/***************************************************************************/
-/**
-* Copies the source to the destination, but makes sure that the
-* destination string (including terminating null), doesn't exceed
-* maxLen.
-*
-* @param dst (out) Place to store the string copy.
-* @param src (in) String to copy.
-* @param maxLen (in) Maximum number of characters to copy into @a dst.
-*
-* @return A pointer to the destination string.
-*/
-
-char *StrMaxCpy( char *dst, const char *src, size_t maxLen )
-{
- if ( maxLen < 1 )
- {
- /*
- * There's no room in the buffer?
- */
-
- return "";
- }
-
- if ( maxLen == 1 )
- {
- /*
- * There's only room for the terminating null character
- */
-
- dst[ 0 ] = '\0';
- return dst;
- }
-
- /*
- * The Visual C++ version of strncpy writes to every single character
- * of the destination buffer, so we use a length one character smaller
- * and write in our own null (if required).
- *
- * This allows the caller to store a sentinel in the last byte of the
- * buffer to detect overflows (if desired).
- */
-
- strncpy( dst, src, maxLen - 1 );
- if (( strlen( src ) + 1 ) >= maxLen )
- {
- /*
- * The string exactly fits, or probably overflows the buffer.
- * Write in the terminating null character since strncpy doesn't in
- * this particular case.
- *
- * We don't do this arbitrarily so that the caller can use a sentinel
- * in the very end of the buffer to detect buffer overflows.
- */
-
- dst[ maxLen - 1 ] = '\0';
- }
-
- return dst;
-
-} /* StrMaxCpy */
-
-/***************************************************************************
-*
-* Usage
-*
-****************************************************************************/
-
-void Usage()
-{
- fprintf( stderr, "Usage: sertest [option(s)]\n" );
- fprintf( stderr, " Download a program via serial/i2c\n" );
- fprintf( stderr, "\n" );
- fprintf( stderr, " -b, --baud=baud Set the baudrate used\n" );
- fprintf( stderr, " -d, --debug Turn on debug output\n" );
- fprintf( stderr, " -h, --help Display this message\n" );
- fprintf( stderr, " -p, --port=port Set the I/O port\n" );
- fprintf( stderr, " -v, --verbose Turn on verbose messages\n" );
-
-} // Usage
-
-