Ika Shouyu Poppoyaki - LPC82x supported

Dependencies:   MODSERIAL mbed

Fork of ika_shouyu_poppoyaki by Tedd OKANO

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';
 }