updated keymap for new led functions
parent
2c5b551970
commit
5df74f3ba7
@ -1,78 +0,0 @@
|
||||
/* LED layout mainly based on default Standard configuration
|
||||
* ,-----------------------------------------------------------.
|
||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ | ` |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bksp|
|
||||
* |-----------------------------------------------------------|
|
||||
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Enter |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
|
||||
* |-----------------------------------------------------------'
|
||||
* | LCtl|LGui|LAlt | Space | RAlt|RGui|RMenu|RCtl|
|
||||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
|
||||
|
||||
#define ADDR_LED_ESC 0x24
|
||||
#define ADDR_LED_1 0x25
|
||||
#define ADDR_LED_2 0x26
|
||||
#define ADDR_LED_3 0x27
|
||||
#define ADDR_LED_4 0x28
|
||||
#define ADDR_LED_5 0x29
|
||||
#define ADDR_LED_6 0x2A
|
||||
#define ADDR_LED_7 0x2B
|
||||
#define ADDR_LED_8 0x34
|
||||
#define ADDR_LED_9 0x35
|
||||
#define ADDR_LED_0 0x36
|
||||
#define ADDR_LED_MINS 0x37
|
||||
#define ADDR_LED_EQL 0x38
|
||||
#define ADDR_LED_BSLS 0x39
|
||||
//#define ADDR_LED_GRV 0x3A //not used by Alphabet layout
|
||||
#define ADDR_LED_TAB 0x3B
|
||||
#define ADDR_LED_Q 0x44
|
||||
#define ADDR_LED_W 0x45
|
||||
#define ADDR_LED_E 0x46
|
||||
#define ADDR_LED_R 0x47
|
||||
#define ADDR_LED_T 0x48
|
||||
#define ADDR_LED_Y 0x49
|
||||
#define ADDR_LED_U 0x4A
|
||||
#define ADDR_LED_I 0x4B
|
||||
#define ADDR_LED_O 0x54
|
||||
#define ADDR_LED_P 0x55
|
||||
#define ADDR_LED_LBRC 0x56
|
||||
#define ADDR_LED_RBRC 0x57
|
||||
#define ADDR_LED_BSPC 0x58
|
||||
#define ADDR_LED_CAPS 0x59
|
||||
#define ADDR_LED_A 0x5A
|
||||
#define ADDR_LED_S 0x5B
|
||||
#define ADDR_LED_D 0x64
|
||||
#define ADDR_LED_F 0x65
|
||||
#define ADDR_LED_G 0x66
|
||||
#define ADDR_LED_H 0x67
|
||||
#define ADDR_LED_J 0x68
|
||||
#define ADDR_LED_K 0x69
|
||||
#define ADDR_LED_L 0x6A
|
||||
#define ADDR_LED_SCLN 0x6B
|
||||
#define ADDR_LED_QUOT 0x74
|
||||
#define ADDR_LED_ENT 0x75
|
||||
#define ADDR_LED_LSFT 0x76
|
||||
#define ADDR_LED_Z 0x77
|
||||
#define ADDR_LED_X 0x78
|
||||
#define ADDR_LED_C 0x79
|
||||
#define ADDR_LED_V 0x7A
|
||||
#define ADDR_LED_B 0x7B
|
||||
#define ADDR_LED_N 0x84
|
||||
#define ADDR_LED_M 0x85
|
||||
#define ADDR_LED_COMM 0x86
|
||||
#define ADDR_LED_DOT 0x87
|
||||
#define ADDR_LED_SLSH 0x88
|
||||
#define ADDR_LED_RSFT 0x89
|
||||
//#define ADDR_LED_FN0 0x8A //not used by Alphabet layout
|
||||
#define ADDR_LED_LCTL 0x8B
|
||||
#define ADDR_LED_LGUI 0x94
|
||||
#define ADDR_LED_LALT 0x95
|
||||
#define ADDR_LED_SPC 0x96
|
||||
#define ADDR_LED_RALT 0x97
|
||||
#define ADDR_LED_RGUI 0x98
|
||||
#define ADDR_LED_MENU 0x99
|
||||
#define ADDR_LED_RCTL 0x9A
|
@ -0,0 +1,79 @@
|
||||
Backlight for Infinity60
|
||||
========================
|
||||
|
||||
## Led Controller Specs
|
||||
|
||||
The Infinity60 pcb uses the IS31FL3731C matrix LED driver from ISSI [datasheet](http://www.issi.com/WW/pdf/31FL3731C.pdf). The IS31 has the ability to control two led matrices (A & B), each matrix controlling 9 pins, each pin controlling 8 leds. The Infinity only utilizes matrix A.
|
||||
|
||||
Infinity60 LED MAP:
|
||||
digits mean "row" and "col", i.e. 45 means C4-5 in the IS31 datasheet, matrix A
|
||||
```c
|
||||
11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
|
||||
28 31 32 33 34 35 36 37 38 41 42 43 44 45
|
||||
46 47 48 51 52 53 54 55 56 57 58 61 62
|
||||
63 64 65 66 67 68 71 72 73 74 75 76 77*
|
||||
78 81 82 83 84 85 86 87
|
||||
```
|
||||
*Unused in Alphabet Layout
|
||||
|
||||
The IS31 includes 8 pages (or frames) 0-7 and each page consists of 0xB4 (144) bytes
|
||||
- **0 - 17** LED control (on/off). 18 pins which alternate between A and B matrices (CA1, CB1, CA2, CB2, ..). Each byte controls the 8 leds on that pin with bits (8 to 1).
|
||||
- **18 - 35** Blink control. Same as LED control above, but sets blink on/off.
|
||||
- **36 - 143** PWM control. One byte per LED, sets PWM from 0 to 255. Same as above, the register alternates bytes between the A & B matrices.
|
||||
|
||||
## Led Controller Code
|
||||
led_controller.c sets up ability to write led layers at startup or control leds on demand as part of fn_actions. By default led_controller.c assumes page 0 will be used for full on/off and page 7 for controlling individual leds. The remaining 6 pages (1-6) are free to preset led maps at init or on demand. Communication with the IS31 is primarily done through the led_mailbox using chMBPost described further below under "Sending messages in Keymap.c"
|
||||
|
||||
One function is available to directly control leds:
|
||||
```
|
||||
write_led_page(page#, array of leds by address, # of leds in array)
|
||||
```
|
||||
This function saves a full page using a supplied array of led locations such as:
|
||||
```
|
||||
uint8_t led_numpad[16] = {
|
||||
18,21,22,23,
|
||||
37,38,41,42,
|
||||
55,56,57,58,
|
||||
72,73,74,75
|
||||
}
|
||||
write_led_page(5, led_numpad, 16);
|
||||
```
|
||||
|
||||
Remaining led control is done through the led mailbox using these message types.
|
||||
- **SET_FULL_ROW** - 3 bytes: row#, message type, 8-bit mask. Sets all leds on one pin per the bit mask.
|
||||
- **OFF_LED** - 2 bytes: message type, led address. Turn off specific led.
|
||||
- **ON_LED** - 2 bytes: message type, led address. Turn on specific led.
|
||||
- **TOGGLE_LED** - 2 bytes: message type, led address. Toggle specific led on/off.
|
||||
- **BLINK_OFF_LED** - 2 bytes: message type, led address. Set blink off for specific led.
|
||||
- **BLINK_ON_LED** - 2 bytes: message type, led address. Set blink on for specific led.
|
||||
- **BLINK_TOGGLE_LED** - 2 bytes: message type, led address. Toggle blink for specific led.
|
||||
- **TOGGLE_ALL** - 2 bytes: message type, not used. Turn on/off full backlight.
|
||||
- **TOGGLE_BACKLIGHT** - 2 bytes: message type, on/off. Sets backlight completely off, no leds will display.
|
||||
- **DISPLAY_PAGE** - 2 bytes: message type, page to display. Switch to specific pre-set page.
|
||||
- **RESET_PAGE** - 2 bytes: message type, page to reset. Reset/erase specific page.
|
||||
- **TOGGLE_NUM_LOCK** - 2 bytes: message type, on/off (NUM_LOCK_LED_ADDRESS). Toggle numlock on/off. Usually run with the `set_leds` function to check state of numlock or capslock. If all leds are on (e.i. TOGGLE_ALL) then this sets numlock to blink instead (this is still a little buggy if toggling on/off quickly).
|
||||
- **TOGGLE_CAPS_LOCK** - 2 bytes: message type, on/off (CAPS_LOCK_LED_ADDRESS). Same as numlock.
|
||||
- **STEP_BRIGHTNESS** - 2 bytes: message type, and step up (1) or step down (0). Increase or decrease led brightness.
|
||||
|
||||
## Sending messages in Keymap.c
|
||||
Sending an action to the led mailbox is done using chMBPost with the following form.
|
||||
```
|
||||
chMBPost(&led_mailbox, message, timeout);
|
||||
```
|
||||
- &led_mailbox - pointer to led mailbox
|
||||
- message - up to 4 bytes but most messages use only 2. First byte (LSB) is the message to process, the second byte is type. The third is only used to pass row information in SET_FULL_ROW. The fourth byte is currently unused.
|
||||
-timeout is usually TIME_IMMEDIATE
|
||||
|
||||
An example:
|
||||
1. set the message to be sent. First byte (LSB) is the led address, and second is the message type
|
||||
`msg=(ON_LED << 8) | 42;`
|
||||
2. send msg to the led mailbox
|
||||
`chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);`
|
||||
|
||||
Another:
|
||||
`msg=(BLINK_TOGGLE_LED << 8) | 46;`
|
||||
`chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);`
|
||||
|
||||
Finally, SET_FULL_ROW requires an extra byte with row information in the message so sending this message looks like:
|
||||
`msg=(row<<16) | (SET_FULL_ROW << 8) | (led_pin_byte);`
|
||||
`chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);`
|
Loading…
Reference in New Issue