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
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 }
Generated on Sat Jul 16 2022 08:56:48 by 1.7.2