Add to 11U68 11E68

Dependencies:   DirectoryList MODSERIAL mbed

Fork of ika_shouyu_poppoyaki by Tedd OKANO

serial_utilities.cpp

Committer:
okano
Date:
2013-09-20
Revision:
28:689c3880e0e4
Parent:
26:a63e73885b21
Child:
29:96e28bc1bd99

File content as of revision 28:689c3880e0e4:

#include    "mbed.h"
#include    "serial_utilities.h"
#include    "ika.h"
#include    "error_code.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;

    while ( c = *s++ ) {
        target.putc( c );
        toggle_led( 0 );
    }
}


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

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++;
                toggle_led( 1 );
            }

            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();
            toggle_led( 1 );
        }
        
        if ( timeout_flag )
            return ( i );
    }

    return ( i );
}


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

    return ( target.getc() );
}