- Requires lcdFuncMap.kll instead of stdFuncMap.kllcapsense
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
"; | "; | ||||
# Layer Status Display | |||||
LCDLayerDisplay => LCD_layerStack_capability(); | |||||
# LCD Module Enabled | |||||
LCDEnabled => LCDEnabled_define; | |||||
LCDEnabled = 1; | |||||
// ----- Capabilities ----- | |||||
uint16_t LCD_layerStack_prevSize = 0; | |||||
void LCD_layerStack_capability( uint8_t state, uint8_t stateType, uint8_t *args ) | |||||
{ | |||||
// Display capability name | |||||
if ( stateType == 0xFF && state == 0xFF ) | |||||
{ | |||||
print("LCD_layerStack_capability"); | |||||
return; | |||||
} | |||||
// Parse the layer stack, top to bottom | |||||
extern uint16_t macroLayerIndexStack[]; | |||||
extern uint16_t macroLayerIndexStackSize; | |||||
// Only process if the stack size has changed | |||||
if ( macroLayerIndexStackSize == LCD_layerStack_prevSize ) | |||||
{ | |||||
return; | |||||
} | |||||
LCD_layerStack_prevSize = macroLayerIndexStackSize; | |||||
// Number data for LCD | |||||
const uint8_t numbers[10][128] = { | |||||
{ STLcdNumber0_define }, | |||||
{ STLcdNumber1_define }, | |||||
{ STLcdNumber2_define }, | |||||
{ STLcdNumber3_define }, | |||||
{ STLcdNumber4_define }, | |||||
{ STLcdNumber5_define }, | |||||
{ STLcdNumber6_define }, | |||||
{ STLcdNumber7_define }, | |||||
{ STLcdNumber8_define }, | |||||
{ STLcdNumber9_define }, | |||||
}; | |||||
// Only display if there are layers active | |||||
if ( macroLayerIndexStackSize > 0 ) | |||||
{ | |||||
// Iterate through each of the pages | |||||
// XXX Many of the values here are hard-coded | |||||
// Eventually a proper font rendering engine should take care of things like this... -HaaTa | |||||
for ( uint8_t page = 0; page < LCD_TOTAL_VISIBLE_PAGES; page++ ) | |||||
{ | |||||
// Set the register page | |||||
LCD_writeControlReg( 0xB0 | ( 0x0F & page ) ); | |||||
// Set starting address | |||||
LCD_writeControlReg( 0x10 ); | |||||
LCD_writeControlReg( 0x00 ); | |||||
// Write data | |||||
for ( uint16_t layer = 1; layer <= macroLayerIndexStackSize; layer++ ) | |||||
{ | |||||
uint16_t layerIndex = macroLayerIndexStack[ macroLayerIndexStackSize - layer ]; | |||||
// Default to 0, if over 9 | |||||
if ( layerIndex > 9 ) | |||||
{ | |||||
layerIndex = 0; | |||||
} | |||||
// Write page of number to display | |||||
SPI_write( (uint8_t*)&numbers[ layerIndex ][ page * 32 ], 32 ); | |||||
} | |||||
// Blank out rest of display | |||||
uint8_t data = 0; | |||||
for ( uint8_t c = 0; c < 4 - macroLayerIndexStackSize; c++ ) | |||||
{ | |||||
for ( uint8_t byte = 0; byte < 32; byte++ ) | |||||
{ | |||||
SPI_write( &data, 1 ); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
// Write default image | |||||
for ( uint8_t page = 0; page < LCD_TOTAL_VISIBLE_PAGES; page++ ) | |||||
LCD_writeDisplayReg( page, (uint8_t *)&STLcdDefaultImage[page * LCD_PAGE_LEN], LCD_PAGE_LEN ); | |||||
} | |||||
} | |||||
// ----- CLI Command Functions ----- | // ----- CLI Command Functions ----- | ||||
void cliFunc_lcdInit( char* args ) | void cliFunc_lcdInit( char* args ) |