Add to 11U68 11E68

Dependencies:   DirectoryList MODSERIAL mbed

Fork of ika_shouyu_poppoyaki by Tedd OKANO

serial_utilities.cpp

Committer:
okano
Date:
2013-09-13
Revision:
26:a63e73885b21
Parent:
22:bd98a782fba6
Child:
28:689c3880e0e4

File content as of revision 26:a63e73885b21:

#include    "mbed.h"
#include    "serial_utilities.h"
#include    "ika.h"

Serial          pc ( USBTX,USBRX );

#if 0
Serial          target( p28, p27 );
#else
#define MODSERIAL_DEFAULT_RX_BUFFER_SIZE 512
#define MODSERIAL_DEFAULT_TX_BUFFER_SIZE 512
#include "MODSERIAL.h"
MODSERIAL       target( p28, p27 ); //
#endif

Timeout timeout;

int timeout_flag    = 0;


void set_target_baud_rate( int baud_rate )
{
    target.baud( baud_rate );
}


void usb_serial_bridge_operation( void )
{
    while (1) {

        if ( pc.readable() ) {
            target.putc( pc.getc() );
        }

        if ( target.readable() ) {
            pc.putc( target.getc() );
        }
    }
}


void put_string( char *s )
{
    char            c;
    static int      i   = 0;

    while ( c = *s++ ) {
        target.putc( c );
        set_leds( i++ & 0x1 );
    }
}


void put_binary( char *b, int size )
{
    for ( int i = 0; i < size; i++ )
        target.putc( *b++ );
}


void set_flag()
{
    timeout_flag    = 1;
}


void get_string( char *s )
{
    int     i   = 0;
    char    c   = 0;
    timeout_flag    = 0;

    timeout.attach( &set_flag, 1 );

    do {
        do {
            if ( target.readable() ) {
                c  = target.getc();

                if ( ( c == '\n') || (c == '\r') )
                    break;

                *s++    = c;
                i++;
            }

            if ( timeout_flag )
                return;
        } while ( 1 );
    } while ( !i );

    *s  = '\0';
}


int get_binary( char *b, int length )
{
    int i;

    timeout_flag    = 0;
    timeout.attach( &set_flag, 1 );

    for ( i = 0; i < length; i++ ) {
        if ( target.readable() )
            *b++    = target.getc();

        if ( timeout_flag )
            return ( i );
    }

    return ( i );
}


char read_byte( void )
{
    while ( !target.readable() )
        ;

    return ( target.getc() );
}