void uploadFont() { uint16_t byte_count = 0; byte bit_count; byte ascii_binary[0x08]; // move these local to prevent ram usage uint8_t character_bitmap[0x40]; int font_count = 0; osd.clear(); osd.setPanel(6,9); osd.openPanel(); osd.printf_P(PSTR("Update CharSet")); osd.closePanel(); Serial.printf_P(PSTR("Ready for Font\n")); while(font_count < 256) { int8_t incomingByte = Serial.read(); switch(incomingByte) // parse and decode mcm file { case 0x0d: // carridge return, end of line //Serial.println("cr"); if (bit_count == 8 && (ascii_binary[0] == 0x30 || ascii_binary[0] == 0x31)) { // turn 8 ascii binary bytes to single byte '01010101' = 0x55 // fill in 64 bytes of character data // made this local to prevent needing a global byte ascii_byte; ascii_byte = 0; if (ascii_binary[0] == 0x31) // ascii '1' ascii_byte = ascii_byte + 128; if (ascii_binary[1] == 0x31) ascii_byte = ascii_byte + 64; if (ascii_binary[2] == 0x31) ascii_byte = ascii_byte + 32; if (ascii_binary[3] == 0x31) ascii_byte = ascii_byte + 16; if (ascii_binary[4] == 0x31) ascii_byte = ascii_byte + 8; if (ascii_binary[5] == 0x31) ascii_byte = ascii_byte + 4; if (ascii_binary[6] == 0x31) ascii_byte = ascii_byte + 2; if (ascii_binary[7] == 0x31) ascii_byte = ascii_byte + 1; character_bitmap[byte_count] = ascii_byte; byte_count++; bit_count = 0; } else bit_count = 0; break; case 0x0a: // line feed, ignore //Serial.println("ln"); break; case 0x30: // ascii '0' case 0x31: // ascii '1' ascii_binary[bit_count] = incomingByte; bit_count++; break; default: break; } // we have one completed character // write the character to NVM if(byte_count == 64) { osd.write_NVM(font_count, character_bitmap); byte_count = 0; font_count++; Serial.printf_P(PSTR("Char Done\n")); } } // character_bitmap[] }