From: Jacob Alexander Date: Tue, 18 Aug 2015 08:10:44 +0000 (-0700) Subject: Adding basic support for LCDLayerDisplay using capabilities X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=c0fb084eb4624b71d5761edd49a0dd987dbaf25f;p=kiibohd-controller.git Adding basic support for LCDLayerDisplay using capabilities - Requires lcdFuncMap.kll instead of stdFuncMap.kll --- diff --git a/Scan/STLcd/capabilities.kll b/Scan/STLcd/capabilities.kll index 49319d2..62d52c0 100644 --- a/Scan/STLcd/capabilities.kll +++ b/Scan/STLcd/capabilities.kll @@ -63,3 +63,14 @@ STLcdDefaultImage = " 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; + diff --git a/Scan/STLcd/lcd_scan.c b/Scan/STLcd/lcd_scan.c index a7d7d44..639920b 100644 --- a/Scan/STLcd/lcd_scan.c +++ b/Scan/STLcd/lcd_scan.c @@ -342,6 +342,95 @@ inline uint8_t LCD_scan() +// ----- 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 ----- void cliFunc_lcdInit( char* args ) diff --git a/Scan/STLcd/numbers/0.bmp b/Scan/STLcd/numbers/0.bmp new file mode 100644 index 0000000..9eb7e67 Binary files /dev/null and b/Scan/STLcd/numbers/0.bmp differ diff --git a/Scan/STLcd/numbers/1.bmp b/Scan/STLcd/numbers/1.bmp new file mode 100644 index 0000000..c203d1a Binary files /dev/null and b/Scan/STLcd/numbers/1.bmp differ diff --git a/Scan/STLcd/numbers/2.bmp b/Scan/STLcd/numbers/2.bmp new file mode 100644 index 0000000..07b5e85 Binary files /dev/null and b/Scan/STLcd/numbers/2.bmp differ diff --git a/Scan/STLcd/numbers/3.bmp b/Scan/STLcd/numbers/3.bmp new file mode 100644 index 0000000..7ec47ce Binary files /dev/null and b/Scan/STLcd/numbers/3.bmp differ diff --git a/Scan/STLcd/numbers/4.bmp b/Scan/STLcd/numbers/4.bmp new file mode 100644 index 0000000..bd3bc5f Binary files /dev/null and b/Scan/STLcd/numbers/4.bmp differ diff --git a/Scan/STLcd/numbers/5.bmp b/Scan/STLcd/numbers/5.bmp new file mode 100644 index 0000000..545747f Binary files /dev/null and b/Scan/STLcd/numbers/5.bmp differ diff --git a/Scan/STLcd/numbers/6.bmp b/Scan/STLcd/numbers/6.bmp new file mode 100644 index 0000000..5f7a3c1 Binary files /dev/null and b/Scan/STLcd/numbers/6.bmp differ diff --git a/Scan/STLcd/numbers/7.bmp b/Scan/STLcd/numbers/7.bmp new file mode 100644 index 0000000..24d5597 Binary files /dev/null and b/Scan/STLcd/numbers/7.bmp differ diff --git a/Scan/STLcd/numbers/8.bmp b/Scan/STLcd/numbers/8.bmp new file mode 100644 index 0000000..eaf2c52 Binary files /dev/null and b/Scan/STLcd/numbers/8.bmp differ diff --git a/Scan/STLcd/numbers/9.bmp b/Scan/STLcd/numbers/9.bmp new file mode 100644 index 0000000..1a0bcdc Binary files /dev/null and b/Scan/STLcd/numbers/9.bmp differ