this transfers data (which is stored in "bin" file in mbed storage) into LPC1114, LPC1115, LPC81x, LPC82x, LPC1768/LPC1769 and LPC11U68/LPC11E68 internal flash memory through ISP.

Dependencies:   mbed MODSERIAL DirectoryList

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers uu_coding.cpp Source File

uu_coding.cpp

00001 char    uu_table[ 0x60 + 1 ];
00002 
00003 
00004 void initialize_uue_table( void )
00005 {
00006     int     i;
00007 
00008     uu_table[ 0 ] = 0x60;           // 0x20 is translated to 0x60 !
00009 
00010     for ( i = 1; i < 64; i++ ) {
00011         uu_table[ i ] = (char)(' ' + i);
00012     }
00013 }
00014 
00015 
00016 void initialize_uud_table( void )
00017 {
00018     int     i;
00019 
00020     uu_table[ 0x60 ] = 0;
00021 
00022     for ( i = 0x21; i < 0x60; i++ ) {
00023         uu_table[ i ] = i - 0x20;
00024     }
00025 }
00026 
00027 
00028 int uudecode_a_line( char *b, char *s )
00029 {
00030 
00031     unsigned long   v;
00032     int             read_size;
00033 
00034     read_size   = (*s++) - ' ';
00035 
00036     for ( int i = 0; i < read_size; i += 3 ) {
00037         v        = uu_table[ *s++ ] << 18;
00038         v       |= uu_table[ *s++ ] << 12;
00039         v       |= uu_table[ *s++ ] <<  6;
00040         v       |= uu_table[ *s++ ] <<  0;
00041 
00042         *b++     = (v >> 16) & 0xFF;
00043         *b++     = (v >>  8) & 0xFF;
00044         *b++     = (v >>  0) & 0xFF;
00045     }
00046 
00047     return ( read_size );
00048 }
00049 
00050 
00051 long bin2uue( char *bin, char *str, int size )
00052 {
00053     unsigned long   v;
00054     long            checksum    = 0;
00055     int             strpos      = 0;
00056 
00057     *(str + strpos++) = ' ' + size;
00058 
00059     for ( int i = 0; i < size; i += 3 ) {
00060         checksum    += *(bin + i + 0) + *(bin + i + 1) + *(bin + i + 2);
00061         v   = (*(bin + i + 0) << 16) | (*(bin + i + 1) << 8) | (*(bin + i + 2) << 0);
00062         *(str + strpos++) = uu_table[ (v >> 18) & 0x3F ];
00063         *(str + strpos++) = uu_table[ (v >> 12) & 0x3F ];
00064         *(str + strpos++) = uu_table[ (v >>  6) & 0x3F ];
00065         *(str + strpos++) = uu_table[ (v >>  0) & 0x3F ];
00066     }
00067     *(str + strpos++) = '\n';
00068     *(str + strpos++) = '\0';
00069 
00070     return checksum;
00071 }