multibyte m0110a command working, capslock working

This commit is contained in:
dekunukem
2022-06-27 15:45:59 +01:00
parent e9d819a029
commit 27298473bf
14 changed files with 1820 additions and 1767 deletions

View File

@@ -11,12 +11,12 @@
#define M0110A_LINE_IDLE 1
#define M0110A_LINE_HOST_REQ 2
#define M0110A_TIMEOUT 3
#define M0110A_UNKNOWN_CODE 4
#define M0110A_KB_TO_PC_CMD_BUF_SIZE 4
#define LINUX_KEYCODE_TO_M0110A_SCANCODE_SIZE 128
#define CODE_UNUSED 0
#define CODE_HANDLE_SEPARATELY 0xff
extern const uint8_t linux_keycode_to_m0110a_scancode_lookup[LINUX_KEYCODE_TO_M0110A_SCANCODE_SIZE];
@@ -37,6 +37,8 @@ uint8_t m0110a_cmd_buf_peek(m0110a_cmd_buf *lb, uint8_t* code);
void m0110a_cmd_buf_pop(m0110a_cmd_buf *lb);
uint8_t m0110a_cmd_buf_is_empty(m0110a_cmd_buf *lb);
void m0110a_cmd_buf_reset(m0110a_cmd_buf *lb);
uint8_t make_m0110a_scancode(uint8_t linux_key_code, uint8_t linux_key_value, m0110a_cmd_buf *lb);
#ifdef __cplusplus
}

View File

@@ -111,7 +111,7 @@
<RegID>0</RegID>
<MDITabState>
<Len>1222</Len>
<Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000009000000000000000100000042433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF6C433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C447269766572735C53544D3332463078785F48414C5F4472697665725C496E635C73746D3332663078785F68616C5F74696D2E68000000001373746D3332663078785F68616C5F74696D2E6800000000FFDC7800FFFFFFFF6F433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C447269766572735C434D5349535C4465766963655C53545C53544D3332463078785C496E636C7564655C73746D33326630373278622E68000000000D73746D33326630373278622E6800000000BECEA100FFFFFFFF55433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C4D444B2D41524D5C737461727475705F73746D33326630373278622E730000000015737461727475705F73746D33326630373278622E7300000000F0A0A100FFFFFFFF4A433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C5372635C717561645F656E636F6465722E63000000000E717561645F656E636F6465722E6300000000BCA8E100FFFFFFFF4A433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C496E635C717561645F656E636F6465722E68000000000E717561645F656E636F6465722E68000000009CC1B600FFFFFFFF44433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C5372635C6D30313130612E6300000000086D30313130612E6300000000F7B88600FFFFFFFF45433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C5372635C68656C706572732E63000000000968656C706572732E6300000000D9ADC200FFFFFFFF6D433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C447269766572735C53544D3332463078785F48414C5F4472697665725C5372635C73746D3332663078785F68616C5F6770696F2E63000000001473746D3332663078785F68616C5F6770696F2E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007408000066000000000F000004030000</Data>
<Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000009000000060000000100000042433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF6C433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C447269766572735C53544D3332463078785F48414C5F4472697665725C496E635C73746D3332663078785F68616C5F74696D2E68000000001373746D3332663078785F68616C5F74696D2E6800000000FFDC7800FFFFFFFF6F433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C447269766572735C434D5349535C4465766963655C53545C53544D3332463078785C496E636C7564655C73746D33326630373278622E68000000000D73746D33326630373278622E6800000000BECEA100FFFFFFFF55433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C4D444B2D41524D5C737461727475705F73746D33326630373278622E730000000015737461727475705F73746D33326630373278622E7300000000F0A0A100FFFFFFFF4A433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C5372635C717561645F656E636F6465722E63000000000E717561645F656E636F6465722E6300000000BCA8E100FFFFFFFF4A433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C496E635C717561645F656E636F6465722E68000000000E717561645F656E636F6465722E68000000009CC1B600FFFFFFFF44433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C5372635C6D30313130612E6300000000086D30313130612E6300000000F7B88600FFFFFFFF45433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C5372635C68656C706572732E63000000000968656C706572732E6300000000D9ADC200FFFFFFFF6D433A5C55736572735C616C6C656E5C4465736B746F705C7265706F735C757362327073325C6669726D776172655C6170706C655F616C6C5C447269766572735C53544D3332463078785F48414C5F4472697665725C5372635C73746D3332663078785F68616C5F6770696F2E63000000001473746D3332663078785F68616C5F6770696F2E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007408000066000000000F000004030000</Data>
</MDITabState>
</MDIClientArea>
<ViewEx>
@@ -3603,12 +3603,12 @@
<ActiveMDIGroup>0</ActiveMDIGroup>
<MDIGroup>
<Size>100</Size>
<ActiveTab>0</ActiveTab>
<ActiveTab>6</ActiveTab>
<Doc>
<Name>../Src/main.c</Name>
<ColumnNumber>25</ColumnNumber>
<TopLine>212</TopLine>
<CurrentLine>237</CurrentLine>
<ColumnNumber>4</ColumnNumber>
<TopLine>255</TopLine>
<CurrentLine>279</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>
<PaneID>0</PaneID>
@@ -3660,9 +3660,9 @@
</Doc>
<Doc>
<Name>..\Src\m0110a.c</Name>
<ColumnNumber>0</ColumnNumber>
<TopLine>19</TopLine>
<CurrentLine>45</CurrentLine>
<ColumnNumber>76</ColumnNumber>
<TopLine>250</TopLine>
<CurrentLine>263</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>
<PaneID>0</PaneID>

View File

Binary file not shown.

View File

@@ -27,9 +27,10 @@ Project File Date: 06/24/2022
<h2>Output:</h2>
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'apple_all'
compiling m0110a.c...
compiling main.c...
linking...
Program Size: Code=10632 RO-data=520 RW-data=68 ZI-data=2164
Program Size: Code=10364 RO-data=520 RW-data=72 ZI-data=2168
FromELF: creating hex file...
"apple_all\apple_all.axf" - 0 Error(s), 0 Warning(s).

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -114,7 +114,7 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h)(0x5DFA0893)
-IC:\Users\allen\AppData\Local\Arm\Packs\ARM\CMSIS\5.6.0\CMSIS\Core\Include
-IC:\Users\allen\AppData\Local\Arm\Packs\Keil\STM32F0xx_DFP\2.0.0\Drivers\CMSIS\Device\ST\STM32F0xx\Include
-D__UVISION_VERSION="529" -D_RTE_ -DSTM32F072xB -DUSE_HAL_DRIVER -DSTM32F072xB
-o apple_all\helpers.o --omf_browse apple_all\helpers.crf --depend apple_all\helpers.d)
@@ -153,7 +153,7 @@ I (../Inc/delay_us.h)(0x617487C7)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h)(0x5DFA0893)
I (../Inc/shared.h)(0x617487BD)
I (../Inc/shared.h)(0x617487BD)
F (../Src/main.c)(0x62B9C226)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O3 --apcs=interwork --split_sections -I ../Inc -I ../Drivers/STM32F0xx_HAL_Driver/Inc -I ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F0xx/Include -I ../Drivers/CMSIS/Include
-I.\RTE\_apple_all
@@ -221,7 +221,7 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h)(0x5DFA0893)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h)(0x5DFA0880)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f072xb.h)(0x5DFA0880)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f072xb.h)(0x5DFA0880)
I (../Drivers/CMSIS/Include/core_cm0.h)(0x5DFA0892)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5D9B4298)
I (../Drivers/CMSIS/Include/core_cmInstr.h)(0x5DFA0892)
@@ -258,7 +258,7 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h)(0x5DFA0893)
-D__UVISION_VERSION="529" -D_RTE_ -DSTM32F072xB -DUSE_HAL_DRIVER -DSTM32F072xB
-o apple_all\stm32f0xx_hal_msp.o --omf_browse apple_all\stm32f0xx_hal_msp.crf --depend apple_all\stm32f0xx_hal_msp.d)
-o apple_all\stm32f0xx_hal_msp.o --omf_browse apple_all\stm32f0xx_hal_msp.crf --depend apple_all\stm32f0xx_hal_msp.d)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h)(0x5DFA0893)
I (../Inc/stm32f0xx_hal_conf.h)(0x626D7BBD)
I (../Inc/main.h)(0x626D7BBE)

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

@@ -55,12 +55,12 @@ const uint8_t linux_keycode_to_m0110a_scancode_lookup[LINUX_KEYCODE_TO_M0110A_SC
0x3d, // KEY_RIGHTBRACE 27
0x49, // KEY_ENTER 28
0x75, // KEY_LEFTCTRL 29 !!!!! MAPPED TO LEFT OPTION
0x1, // KEY_A 30
0x3, // KEY_S 31
0x5, // KEY_D 32
0x7, // KEY_F 33
0xb, // KEY_G 34
0x9, // KEY_H 35
0x01, // KEY_A 30
0x03, // KEY_S 31
0x05, // KEY_D 32
0x07, // KEY_F 33
0x0b, // KEY_G 34
0x09, // KEY_H 35
0x4d, // KEY_J 36
0x51, // KEY_K 37
0x4b, // KEY_L 38
@@ -69,8 +69,8 @@ const uint8_t linux_keycode_to_m0110a_scancode_lookup[LINUX_KEYCODE_TO_M0110A_SC
0x65, // KEY_GRAVE 41
0x71, // KEY_LEFTSHIFT 42
0x55, // KEY_BACKSLASH 43
0xd, // KEY_Z 44
0xf, // KEY_X 45
0x0d, // KEY_Z 44
0x0f, // KEY_X 45
0x11, // KEY_C 46
0x13, // KEY_V 47
0x17, // KEY_B 48
@@ -80,10 +80,10 @@ const uint8_t linux_keycode_to_m0110a_scancode_lookup[LINUX_KEYCODE_TO_M0110A_SC
0x5f, // KEY_DOT 52
0x59, // KEY_SLASH 53
0x71, // KEY_RIGHTSHIFT 54
CODE_HANDLE_SEPARATELY, // KEY_KPASTERISK 55
0x05, // KEY_KPASTERISK 55
0x6f, // KEY_LEFTALT 56 !!!!! MAPPED TO LEFT COMMAND
0x63, // KEY_SPACE 57
CODE_HANDLE_SEPARATELY, // KEY_CAPSLOCK 58
0x73, // KEY_CAPSLOCK 58
CODE_UNUSED, // KEY_F1 59
CODE_UNUSED, // KEY_F2 60
CODE_UNUSED, // KEY_F3 61
@@ -94,24 +94,24 @@ const uint8_t linux_keycode_to_m0110a_scancode_lookup[LINUX_KEYCODE_TO_M0110A_SC
CODE_UNUSED, // KEY_F8 66
CODE_UNUSED, // KEY_F9 67
CODE_UNUSED, // KEY_F10 68
CODE_HANDLE_SEPARATELY, // KEY_NUMLOCK 69 !!!!! MAPPED TO CLEAR
0x0f, // KEY_NUMLOCK 69 !!!!! MAPPED TO CLEAR
CODE_UNUSED, // KEY_SCROLLLOCK 70
CODE_HANDLE_SEPARATELY, // KEY_KP7 71
CODE_HANDLE_SEPARATELY, // KEY_KP8 72
CODE_HANDLE_SEPARATELY, // KEY_KP9 73
CODE_HANDLE_SEPARATELY, // KEY_KPMINUS 74
CODE_HANDLE_SEPARATELY, // KEY_KP4 75
CODE_HANDLE_SEPARATELY, // KEY_KP5 76
CODE_HANDLE_SEPARATELY, // KEY_KP6 77
CODE_HANDLE_SEPARATELY, // KEY_KPPLUS 78
CODE_HANDLE_SEPARATELY, // KEY_KP1 79
CODE_HANDLE_SEPARATELY, // KEY_KP2 80
CODE_HANDLE_SEPARATELY, // KEY_KP3 81
CODE_HANDLE_SEPARATELY, // KEY_KP0 82
CODE_HANDLE_SEPARATELY, // KEY_KPDOT 83
0x33, // KEY_KP7 71
0x37, // KEY_KP8 72
0x39, // KEY_KP9 73
0x1d, // KEY_KPMINUS 74
0x2d, // KEY_KP4 75
0x2f, // KEY_KP5 76
0x31, // KEY_KP6 77
0x0d, // KEY_KPPLUS 78
0x27, // KEY_KP1 79
0x29, // KEY_KP2 80
0x2b, // KEY_KP3 81
0x25, // KEY_KP0 82
0x03, // KEY_KPDOT 83
CODE_UNUSED, // KEY_UNUSED 84
CODE_UNUSED, // KEY_ZENKAKUHANKAKU 85
CODE_UNUSED, // KEY_102ND 86
0x55, // KEY_102ND 86
CODE_UNUSED, // KEY_F11 87
CODE_UNUSED, // KEY_F12 88
CODE_UNUSED, // KEY_RO 89
@@ -121,19 +121,19 @@ const uint8_t linux_keycode_to_m0110a_scancode_lookup[LINUX_KEYCODE_TO_M0110A_SC
CODE_UNUSED, // KEY_KATAKANAHIRAGANA 93
CODE_UNUSED, // KEY_MUHENKAN 94
CODE_UNUSED, // KEY_KPJPCOMMA 95
CODE_HANDLE_SEPARATELY, // KEY_KPENTER 96
0x19, // KEY_KPENTER 96
0x75, // KEY_RIGHTCTRL 97 !!!!! MAPPED TO LEFT OPTION
CODE_HANDLE_SEPARATELY, // KEY_KPSLASH 98
0x1b, // KEY_KPSLASH 98
CODE_UNUSED, // KEY_SYSRQ 99
0x6f, // KEY_RIGHTALT 100 !!!!! MAPPED TO LEFT COMMAND
CODE_UNUSED, // KEY_LINEFEED 101
CODE_UNUSED, // KEY_HOME 102
CODE_HANDLE_SEPARATELY, // KEY_UP 103
0x1b, // KEY_UP 103
CODE_UNUSED, // KEY_PAGEUP 104
CODE_HANDLE_SEPARATELY, // KEY_LEFT 105
CODE_HANDLE_SEPARATELY, // KEY_RIGHT 106
0x0d, // KEY_LEFT 105
0x05, // KEY_RIGHT 106
CODE_UNUSED, // KEY_END 107
CODE_HANDLE_SEPARATELY, // KEY_DOWN 108
0x11, // KEY_DOWN 108
CODE_UNUSED, // KEY_PAGEDOWN 109
CODE_UNUSED, // KEY_INSERT 110
CODE_UNUSED, // KEY_DELETE 111
@@ -228,6 +228,109 @@ uint8_t m0110a_write(uint8_t data)
return M0110A_OK;
}
#define KEY_CAPSLOCK 58
#define KEY_KPASTERISK 55
#define KEY_KPPLUS 78
#define KEY_KPSLASH 98
#define KEY_NUMLOCK 69
#define KEY_KP7 71
#define KEY_KP8 72
#define KEY_KP9 73
#define KEY_KPMINUS 74
#define KEY_KP4 75
#define KEY_KP5 76
#define KEY_KP6 77
#define KEY_KP1 79
#define KEY_KP2 80
#define KEY_KP3 81
#define KEY_KP0 82
#define KEY_KPDOT 83
#define KEY_KPENTER 96
#define KEY_UP 103
#define KEY_LEFT 105
#define KEY_RIGHT 106
#define KEY_DOWN 108
uint8_t is_capslock_on;
uint8_t make_m0110a_scancode(uint8_t linux_key_code, uint8_t linux_key_value, m0110a_cmd_buf *lb)
{
uint8_t lookup_result = CODE_UNUSED;
if(linux_key_code < LINUX_KEYCODE_TO_M0110A_SCANCODE_SIZE)
lookup_result = linux_keycode_to_m0110a_scancode_lookup[linux_key_code];
// m0110a does not generate key autorepeat itself
if(linux_key_value == 2 || lookup_result == CODE_UNUSED)
return M0110A_UNKNOWN_CODE;
if(linux_key_code == KEY_CAPSLOCK)
{
if(linux_key_value == 0)
return M0110A_UNKNOWN_CODE;
is_capslock_on = (is_capslock_on + 1) % 2;
if(is_capslock_on)
m0110a_cmd_buf_add(lb, lookup_result);
else
m0110a_cmd_buf_add(lb, lookup_result | 0x80);
}
else if(linux_key_code == KEY_KPASTERISK || linux_key_code == KEY_KPPLUS || linux_key_code == KEY_KPSLASH)
{
if(linux_key_value)
{
m0110a_cmd_buf_add(lb, 0x71);
m0110a_cmd_buf_add(lb, 0x79);
m0110a_cmd_buf_add(lb, lookup_result);
}
else
{
m0110a_cmd_buf_add(lb, 0xf1);
m0110a_cmd_buf_add(lb, 0x79);
m0110a_cmd_buf_add(lb, lookup_result | 0x80);
}
}
else if(linux_key_code == KEY_NUMLOCK ||
linux_key_code == KEY_KP7 ||
linux_key_code == KEY_KP8 ||
linux_key_code == KEY_KP9 ||
linux_key_code == KEY_KPMINUS ||
linux_key_code == KEY_KP4 ||
linux_key_code == KEY_KP5 ||
linux_key_code == KEY_KP6 ||
linux_key_code == KEY_KP1 ||
linux_key_code == KEY_KP2 ||
linux_key_code == KEY_KP3 ||
linux_key_code == KEY_KP0 ||
linux_key_code == KEY_KPDOT ||
linux_key_code == KEY_KPENTER ||
linux_key_code == KEY_UP ||
linux_key_code == KEY_LEFT ||
linux_key_code == KEY_RIGHT ||
linux_key_code == KEY_DOWN)
{
if(linux_key_value)
{
m0110a_cmd_buf_add(lb, 0x79);
m0110a_cmd_buf_add(lb, lookup_result);
}
else
{
m0110a_cmd_buf_add(lb, 0x79);
m0110a_cmd_buf_add(lb, lookup_result | 0x80);
}
return M0110A_OK;
}
else
{
if(linux_key_value)
m0110a_cmd_buf_add(lb, lookup_result);
else
m0110a_cmd_buf_add(lb, lookup_result | 0x80);
}
return M0110A_OK;
}
// -----------------------
void m0110a_cmd_buf_reset(m0110a_cmd_buf *lb)

View File

@@ -213,7 +213,7 @@ void m0110a_write_1b_from_buf(void)
m0110a_cmd_buf_peek(&my_m0110a_buf, &m0100a_byte);
m0110a_cmd_buf_pop(&my_m0110a_buf);
m0110a_write(m0100a_byte);
printf("w%x", m0100a_byte);
// printf("w%x", m0100a_byte);
}
void m0110a_update(void)
@@ -240,8 +240,7 @@ void m0110a_update(void)
m0110a_write(0xb);
else if(m0110a_host_cmd == 0x36) // test
m0110a_write(0x7d);
printf("r%x", m0110a_host_cmd);
// printf("r%x", m0110a_host_cmd);
}
void m0100a_handle_inquiry(void)
@@ -261,25 +260,11 @@ void m0100a_handle_inquiry(void)
else if(m0110a_inquiry_active && kb_buf_peek(&my_kb_buf, &buffered_code, &buffered_value) == 0)
{
m0110a_cmd_buf_reset(&my_m0110a_buf);
uint8_t lookup_result = CODE_UNUSED;
if(buffered_code < LINUX_KEYCODE_TO_M0110A_SCANCODE_SIZE)
lookup_result = linux_keycode_to_m0110a_scancode_lookup[buffered_code];
if(lookup_result == CODE_UNUSED || lookup_result == CODE_HANDLE_SEPARATELY)
goto m0110a_kb_write_end;
if(buffered_value)
if(make_m0110a_scancode(buffered_code, buffered_value, &my_m0110a_buf) == M0110A_OK)
{
m0110a_cmd_buf_add(&my_m0110a_buf, lookup_result);
m0110a_write_1b_from_buf();
m0110a_inquiry_active = 0;
}
else
{
m0110a_cmd_buf_add(&my_m0110a_buf, lookup_result | 0x80);
}
m0110a_write_1b_from_buf();
m0110a_inquiry_active = 0;
m0110a_kb_write_end:
kb_buf_pop(&my_kb_buf);
}
}