Add to 11U68 11E68
Dependencies: DirectoryList MODSERIAL mbed
Fork of ika_shouyu_poppoyaki by
Diff: main.cpp
- Revision:
- 2:8d75eb0ecd20
- Parent:
- 1:54e619428ae6
- Child:
- 3:3c380e643e74
--- a/main.cpp Sat Aug 24 13:08:37 2013 +0000 +++ b/main.cpp Sat Aug 24 14:41:38 2013 +0000 @@ -1,45 +1,72 @@ #include "mbed.h" -DigitalOut led1(LED1); -DigitalOut led2(LED2); - -DigitalOut reset_pin( p26 ); -DigitalOut isp_pin( p25 ); - -Serial pc (USBTX,USBRX); -Serial target (p28,p27); - -LocalFileSystem local("local"); +BusOut leds( LED4, LED3, LED2, LED1 ); +DigitalOut reset_pin( p26 ); +DigitalOut isp_pin( p25 ); +Serial target ( p28, p27 ); +LocalFileSystem local( "local" ); #define SOURCE_FILE "/local/bin" #define STR_BUFF_SIZE 64 #define RAM_START_ADDRESS 0x10000300L #define SECTOR_SIZE 4096 +enum { + ENTER_TO_ISP_MODE, + NO_ISP_MODE +}; + void put_string( char *s ); void get_string( char *s ); +void print_command( char *command ) +{ + char s[ STR_BUFF_SIZE ]; + char *pos; + + strcpy( s, command ); + + if ( pos = strchr( s, '\r' ) ) + *pos = '\0'; + + if ( pos = strchr( s, '\n' ) ) + *pos = '\0'; + + printf( " command-\"%s\" : ", s ); +} + +void print_result( int r ) +{ + printf( "%s\r\n", r ? "Fail" : "Pass" ); +} int try_and_check( char *command, char *expected_return_str, int mode ) { char rtn_str[ STR_BUFF_SIZE ]; + int result; + print_command( command ); put_string( command ); + get_string( rtn_str ); + print_result( result = strcmp( expected_return_str, rtn_str ) ); - return ( strcmp( expected_return_str, rtn_str ) ); + return ( result ); } int try_and_check2( char *command, char *expected_return_str, int mode ) { char rtn_str[ STR_BUFF_SIZE ]; + int result; + print_command( command ); put_string( command ); get_string( rtn_str ); // just readout echoback get_string( rtn_str ); + print_result( result = strcmp( expected_return_str, rtn_str ) ); - return ( strcmp( expected_return_str, rtn_str ) ); + return ( result ); } char read_byte( void ) @@ -112,11 +139,10 @@ char command_str[ STR_BUFF_SIZE ]; sprintf( command_str, "P 0 %d\r\n", last_sector ); - - printf( "\"%s\" %s\r\n", command_str, try_and_check( command_str, "0", 0 ) ? "Fail" : "Pass" ); + try_and_check( command_str, "0", 0 ); *(command_str) = 'E'; - printf( "\"%s\" %s\r\n", command_str, try_and_check( command_str, "0", 0 ) ? "Fail" : "Pass" ); + try_and_check( command_str, "0", 0 ); } #define FLASH_WRITING_SIZE 1024 @@ -143,11 +169,11 @@ } sprintf( command_str, "W %ld %ld\r\n", RAM_START_ADDRESS, 1080 ); - printf( "\"%s\" %s\r\n", command_str, try_and_check( command_str, "0", 0 ) ? "Fail" : "Pass" ); + try_and_check( command_str, "0", 0 ); for ( int i = 0; i < 24; i++ ) { checksum += bin2uue( b + (i * 45), command_str ); - printf( "%02d %s\r\n", i, command_str ); + printf( "%02d %s\r", i, command_str ); put_string( command_str ); if ( (i == 19) || (i == 23) ) { sprintf( command_str, "%ld\n", checksum ); @@ -161,11 +187,11 @@ printf( "\"P 0 0\" %s\r\n", try_and_check( "P 0 0\r\n", "0", 0 ) ? "Fail" : "Pass" ); sprintf( command_str, "C %ld %ld %ld\r\n", FLASH_WRITING_SIZE * transfer_count++, 0x10000300L, FLASH_WRITING_SIZE ); - printf( "\"%s\" %s\r\n", command_str, try_and_check( command_str, "0", 0 ) ? "Fail" : "Pass" ); + try_and_check( command_str, "0", 0 ); } - printf( "\"G 0 T\" %s\r\n", try_and_check( "G 0 T\r\n", "0", 0 ) ? "Fail" : "Pass" ); + try_and_check( "G 0 T\r\n", "0", 0 ); } int file_size( FILE *fp ) @@ -198,8 +224,7 @@ int data_size; int last_sector; - pc.baud(9600); - target.baud(9600); + target.baud( 9600 ); if ( NULL == (fp = fopen( SOURCE_FILE, "rb" )) ) { error( "couldn't open source file" ); @@ -211,50 +236,47 @@ printf( "\r\n\r\ntarget RESET\r\n" ); printf( "data size = %d bytes, it takes %d secotrs in flash area\r\n", data_size, last_sector + 1 ); - reset_target( 0 ); + reset_target( ENTER_TO_ISP_MODE ); + + try_and_check( "?", "Synchronized", 0 ); - printf( "\"?\" >> \"Synchronized\" %s\r\n", try_and_check( "?", "Synchronized", 0 ) ? "Fail" : "Pass" ); - printf( "\"Synchronized\\r\\n\" %s\r\n", try_and_check2( "Synchronized\r\n", "OK", 0 ) ? "Fail" : "Pass" ); - printf( "\"12000\" %s\r\n", try_and_check2( "12000\r\n", "OK", 0 ) ? "Fail" : "Pass" ); - printf( "\"U 23130\" %s\r\n", try_and_check2( "U 23130\r\n", "0", 0 ) ? "Fail" : "Pass" ); - printf( "\"A 0\" %s\r\n", try_and_check2( "A 0\r\n", "0", 0 ) ? "Fail" : "Pass" ); + try_and_check2( "Synchronized\r\n", "OK", 0 ); + try_and_check2( "12000\r\n", "OK", 0 ); + try_and_check2( "U 23130\r\n", "0", 0 ); + try_and_check2( "A 0\r\n", "0", 0 ); - printf( "\"K\" %s\r\n", try_and_check( "K\r\n", "0", 0 ) ? "Fail" : "Pass" ); + try_and_check( "K\r\n", "0", 0 ); get_string( str_buf0 ); get_string( str_buf1 ); printf( " result of \"K\" = %s %s\r\n", str_buf0, str_buf1 ); - printf( "\"J\" %s\r\n", try_and_check( "J\r\n", "0", 0 ) ? "Fail" : "Pass" ); + try_and_check( "J\r\n", "0", 0 ); get_string( str_buf0 ); printf( " result of \"J\" = %s\r\n", str_buf0 ); -#if 0 - printf( "\"N\" %s\r\n", try_and_check( "N\r\n", "0", 0 ) ? "Fail" : "Pass" ); - get_string( str_buf0 ); - printf( " result of \"N\" = %s %lX\r\n", str_buf0, atol( str_buf0 ) ); - get_string( str_buf0 ); - printf( " result of \"N\" = %s %lX\r\n", str_buf0, atol( str_buf0 ) ); - get_string( str_buf0 ); - printf( " result of \"N\" = %s %lX\r\n", str_buf0, atol( str_buf0 ) ); - get_string( str_buf0 ); - printf( " result of \"N\" = %s %lX\r\n", str_buf0, atol( str_buf0 ) ); -#endif + erase_sectors( last_sector ); + write_binary_data( fp ); - erase_sectors( last_sector ); - - write_binary_data( fp ); fclose( fp ); - while ( 1 ) - ; + int i = 0; + + while ( 1 ) { + leds = 0x1 << (i++ & 0x3); + wait( 0.1 ); + } } + void put_string( char *s ) { - char c; + char c; + static int i = 0; - while ( (c = *s++) ) + while ( (c = *s++) ) { target.putc( c ); + leds = i++ & 0x1; + } } void get_string( char *s ) @@ -272,11 +294,10 @@ *s++ = c; i++; - led2 = !led2; - } } while ( 1 ); } while ( !i ); + *s = '\0'; }