Browse Source

Adding basic support for LCDLayerDisplay using capabilities

- Requires lcdFuncMap.kll instead of stdFuncMap.kll
capsense
Jacob Alexander 8 years ago
parent
commit
c0fb084eb4

+ 11
- 0
Scan/STLcd/capabilities.kll View File

@@ -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;


+ 89
- 0
Scan/STLcd/lcd_scan.c View File

@@ -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 )

BIN
Scan/STLcd/numbers/0.bmp View File


BIN
Scan/STLcd/numbers/1.bmp View File


BIN
Scan/STLcd/numbers/2.bmp View File


BIN
Scan/STLcd/numbers/3.bmp View File


BIN
Scan/STLcd/numbers/4.bmp View File


BIN
Scan/STLcd/numbers/5.bmp View File


BIN
Scan/STLcd/numbers/6.bmp View File


BIN
Scan/STLcd/numbers/7.bmp View File


BIN
Scan/STLcd/numbers/8.bmp View File


BIN
Scan/STLcd/numbers/9.bmp View File