fixed serial mouse glitch

This commit is contained in:
dekunukem
2022-02-03 11:32:01 +00:00
parent 0d0726746c
commit 52127912e1
13 changed files with 1241 additions and 1433 deletions

View File

File diff suppressed because one or more lines are too long

View File

Binary file not shown.

View File

@@ -28,17 +28,17 @@ Project File Date: 12/18/2021
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'ibmpc'
compiling main.c...
../Src/main.c(451): warning: #188-D: enumerated type mixed with another type
../Src/main.c(461): warning: #188-D: enumerated type mixed with another type
HAL_GPIO_WritePin(GAMEPAD_B1_GPIO_Port, GAMEPAD_B1_Pin, !(this_gamepad_event->button_1));
../Src/main.c(452): warning: #188-D: enumerated type mixed with another type
../Src/main.c(462): warning: #188-D: enumerated type mixed with another type
HAL_GPIO_WritePin(GAMEPAD_B2_GPIO_Port, GAMEPAD_B2_Pin, !(this_gamepad_event->button_2));
../Src/main.c(453): warning: #188-D: enumerated type mixed with another type
../Src/main.c(463): warning: #188-D: enumerated type mixed with another type
HAL_GPIO_WritePin(GAMEPAD_B3_GPIO_Port, GAMEPAD_B3_Pin, !(this_gamepad_event->button_3));
../Src/main.c(454): warning: #188-D: enumerated type mixed with another type
../Src/main.c(464): warning: #188-D: enumerated type mixed with another type
HAL_GPIO_WritePin(GAMEPAD_B4_GPIO_Port, GAMEPAD_B4_Pin, !(this_gamepad_event->button_4));
../Src/main.c: 4 warnings, 0 errors
linking...
Program Size: Code=16020 RO-data=428 RW-data=128 ZI-data=2160
Program Size: Code=14564 RO-data=428 RW-data=128 ZI-data=2160
FromELF: creating hex file...
"ibmpc\ibmpc.axf" - 0 Error(s), 4 Warning(s).

View File

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@
<title>Static Call Graph - [ibmpc\ibmpc.axf]</title></head>
<body><HR>
<H1>Static Call Graph for image ibmpc\ibmpc.axf</H1><HR>
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Sun Jan 30 15:20:49 2022
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Thu Feb 03 11:28:22 2022
<BR><P>
<H3>Maximum Stack Usage = 212 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
Call chain for Maximum Stack Depth:</H3>
@@ -74,7 +74,7 @@ Global Symbols
<P><STRONG><a name="[28]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072xb.o(.text)
</UL>
<P><STRONG><a name="[d7]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
<P><STRONG><a name="[cd]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
<P><STRONG><a name="[30]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
<BR><BR>[Calls]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
@@ -84,15 +84,15 @@ Global Symbols
<BR><BR>[Called By]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
</UL>
<P><STRONG><a name="[d8]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
<P><STRONG><a name="[ce]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
<P><STRONG><a name="[d9]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
<P><STRONG><a name="[cf]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
<P><STRONG><a name="[da]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
<P><STRONG><a name="[d0]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
<P><STRONG><a name="[db]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
<P><STRONG><a name="[d1]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
<P><STRONG><a name="[dc]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
<P><STRONG><a name="[d2]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
<P><STRONG><a name="[0]"></a>Reset_Handler</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f072xb.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072xb.o(RESET)
@@ -188,14 +188,14 @@ Global Symbols
<P><STRONG><a name="[6]"></a>WWDG_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f072xb.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072xb.o(RESET)
</UL>
<P><STRONG><a name="[dd]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
<P><STRONG><a name="[d3]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
<P><STRONG><a name="[49]"></a>__aeabi_uidivmod</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = __aeabi_uidivmod
</UL>
<BR>[Called By]<UL><LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
<LI><a href="#[bd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_pop
<LI><a href="#[bb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_is_full
<LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_pop
<LI><a href="#[bd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_is_full
<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_add
<LI><a href="#[ac]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_pop
<LI><a href="#[a9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_is_full
@@ -218,34 +218,34 @@ Global Symbols
<BR><BR>[Called By]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_TxRxCpltCallback
</UL>
<P><STRONG><a name="[de]"></a>__aeabi_memcpy8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
<P><STRONG><a name="[d4]"></a>__aeabi_memcpy8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
<P><STRONG><a name="[33]"></a>__aeabi_memset</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, memseta.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_memset$wrapper
<LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
</UL>
<P><STRONG><a name="[df]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[d5]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[e0]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[d6]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[32]"></a>__aeabi_memclr</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text))
<BR><BR>[Calls]<UL><LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
</UL>
<BR>[Called By]<UL><LI><a href="#[b1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;protocol_status_lookup_init
<LI><a href="#[c5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_get_outgoing_data
<LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_reset
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;microsoft_serial_mouse_update
<LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_reset
<LI><a href="#[ab]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_reset
<LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gamepad_buf_reset
</UL>
<P><STRONG><a name="[5e]"></a>__aeabi_memclr4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<BR><BR>[Called By]<UL><LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_TxRxCpltCallback
</UL>
<P><STRONG><a name="[e1]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[d7]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[34]"></a>_memset$wrapper</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
@@ -257,7 +257,7 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_main_scatterload
</UL>
<P><STRONG><a name="[e2]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
<P><STRONG><a name="[d8]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
<P><STRONG><a name="[b]"></a>EXTI0_1_IRQHandler</STRONG> (Thumb, 10 bytes, Stack size 8 bytes, stm32f0xx_it.o(i.EXTI0_1_IRQHandler))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = EXTI0_1_IRQHandler &rArr; HAL_GPIO_EXTI_IRQHandler &rArr; HAL_GPIO_EXTI_Callback
@@ -278,8 +278,8 @@ Global Symbols
</UL>
<BR>[Calls]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
</UL>
<BR>[Called By]<UL><LI><a href="#[d3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
<LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<BR>[Called By]<UL><LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
@@ -308,45 +308,40 @@ Global Symbols
<LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_I2C_MspInit
</UL>
<P><STRONG><a name="[b5]"></a>HAL_GPIO_ReadPin</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin))
<BR><BR>[Called By]<UL><LI><a href="#[d3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
<P><STRONG><a name="[b6]"></a>HAL_GPIO_ReadPin</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin))
<BR><BR>[Called By]<UL><LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write_nowait
<LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_read
<LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_get_bus_status
<LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write_nowait
<LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write_nowait
<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
<LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[d4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_write
<LI><a href="#[d2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_clk_high
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_write
<LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_clk_high
</UL>
<P><STRONG><a name="[d1]"></a>HAL_GPIO_TogglePin</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_TogglePin))
<BR><BR>[Called By]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<P><STRONG><a name="[c7]"></a>HAL_GPIO_TogglePin</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_TogglePin))
<BR><BR>[Called By]<UL><LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
</UL>
<P><STRONG><a name="[58]"></a>HAL_GPIO_WritePin</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin))
<BR><BR>[Called By]<UL><LI><a href="#[d5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_reset_bus
<BR><BR>[Called By]<UL><LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_reset_bus
<LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_release_lines
<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gameport_init
<LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gamepad_update
<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_TxRxCpltCallback
<LI><a href="#[7b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_GPIO_Init
<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mcp4451_reset
<LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write_nowait
<LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_release_lines
<LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_read
<LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write_nowait
<LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write_nowait
<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_release_lines
<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
<LI><a href="#[d4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_write
<LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_write
</UL>
<P><STRONG><a name="[38]"></a>HAL_GetTick</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, stm32f0xx_hal.o(i.HAL_GetTick))
<BR><BR>[Called By]<UL><LI><a href="#[d6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_press_key
<BR><BR>[Called By]<UL><LI><a href="#[cc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_press_key
<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_enable
<LI><a href="#[d3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
<LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
<LI><a href="#[77]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit
<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_OscConfig
<LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_ClockConfig
@@ -354,8 +349,6 @@ Global Symbols
<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Delay
<LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_I2C_Mem_Write
<LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_I2C_IsDeviceReady
<LI><a href="#[ce]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_wait_for_idle
<LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_read
<LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
<LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_WaitFlagStateUntilTimeout
@@ -365,7 +358,7 @@ Global Symbols
<LI><a href="#[43]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;I2C_WaitOnSTOPFlagUntilTimeout
<LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;I2C_WaitOnFlagUntilTimeout
<LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;I2C_IsAcknowledgeFailed
<LI><a href="#[d2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_clk_high
<LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_clk_high
<LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_WaitOnFlagUntilTimeout
<LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_CheckIdleState
</UL>
@@ -695,13 +688,13 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fputc
</UL>
<P><STRONG><a name="[d0]"></a>HAL_UART_Transmit_IT</STRONG> (Thumb, 88 bytes, Stack size 12 bytes, stm32f0xx_hal_uart.o(i.HAL_UART_Transmit_IT))
<P><STRONG><a name="[ba]"></a>HAL_UART_Transmit_IT</STRONG> (Thumb, 88 bytes, Stack size 12 bytes, stm32f0xx_hal_uart.o(i.HAL_UART_Transmit_IT))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = HAL_UART_Transmit_IT
</UL>
<BR>[Called By]<UL><LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;serial_mouse_update
<BR>[Called By]<UL><LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;microsoft_serial_mouse_update
</UL>
<P><STRONG><a name="[8c]"></a>HAL_UART_TxCpltCallback</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, main.o(i.HAL_UART_TxCpltCallback))
<P><STRONG><a name="[8c]"></a>HAL_UART_TxCpltCallback</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, main.o(i.HAL_UART_TxCpltCallback))
<BR><BR>[Called By]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_EndTransmit_IT
</UL>
@@ -831,29 +824,28 @@ Global Symbols
<BR><BR>[Calls]<UL><LI><a href="#[90]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_core
</UL>
<P><STRONG><a name="[e3]"></a>__1printf$3</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf3.o(i.__0printf$3), UNUSED)
<P><STRONG><a name="[d9]"></a>__1printf$3</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf3.o(i.__0printf$3), UNUSED)
<P><STRONG><a name="[b0]"></a>__2printf</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf3.o(i.__0printf$3))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = __2printf
</UL>
<BR>[Called By]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<BR>[Called By]<UL><LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[a0]"></a>__ARM_common_switch8</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, ps2kb.o(i.__ARM_common_switch8))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __ARM_common_switch8
</UL>
<BR>[Called By]<UL><LI><a href="#[d6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_press_key
<BR>[Called By]<UL><LI><a href="#[cc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_press_key
<LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
<LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_host_req_reply
<LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;keyboard_reply
</UL>
<P><STRONG><a name="[e4]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
<P><STRONG><a name="[da]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
<P><STRONG><a name="[e5]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
<P><STRONG><a name="[db]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
<P><STRONG><a name="[e6]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
<P><STRONG><a name="[dc]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
<P><STRONG><a name="[5b]"></a>byte_to_int16_t</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, main.o(i.byte_to_int16_t))
<BR><BR>[Called By]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_TxRxCpltCallback
@@ -864,13 +856,10 @@ Global Symbols
</UL>
<BR>[Calls]<UL><LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;micros
</UL>
<BR>[Called By]<UL><LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write_nowait
<LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write_delay_start
<LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_read
<LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write_nowait
<BR>[Called By]<UL><LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write_nowait
<LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
<LI><a href="#[d4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_write
<LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_write
</UL>
<P><STRONG><a name="[93]"></a>delay_us_init</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, delay_us.o(i.delay_us_init))
@@ -1003,11 +992,11 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_add
</UL>
<P><STRONG><a name="[c2]"></a>kb_buf_peek</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_peek))
<P><STRONG><a name="[c3]"></a>kb_buf_peek</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_peek))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = kb_buf_peek
</UL>
<BR>[Called By]<UL><LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
<LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
</UL>
<P><STRONG><a name="[ac]"></a>kb_buf_pop</STRONG> (Thumb, 24 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_pop))
@@ -1015,8 +1004,8 @@ Global Symbols
</UL>
<BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
</UL>
<BR>[Called By]<UL><LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
<LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
</UL>
<P><STRONG><a name="[ab]"></a>kb_buf_reset</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_reset))
@@ -1035,10 +1024,10 @@ Global Symbols
<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
<LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_common_switch8
</UL>
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<BR>[Called By]<UL><LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
</UL>
<P><STRONG><a name="[26]"></a>main</STRONG> (Thumb, 322 bytes, Stack size 16 bytes, main.o(i.main))
<P><STRONG><a name="[26]"></a>main</STRONG> (Thumb, 282 bytes, Stack size 16 bytes, main.o(i.main))
<BR><BR>[Stack]<UL><LI>Max Depth = 212<LI>Call Chain = main &rArr; SystemClock_Config &rArr; HAL_RCC_ClockConfig &rArr; HAL_RCC_GetSysClockFreq &rArr; __aeabi_uidivmod
</UL>
<BR>[Calls]<UL><LI><a href="#[b2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_init
@@ -1046,12 +1035,11 @@ Global Symbols
<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_TransmitReceive_IT
<LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Init
<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Delay
<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
<LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;serial_mouse_update
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_update
<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<LI><a href="#[b1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;protocol_status_lookup_init
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;microsoft_serial_mouse_update
<LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;is_protocol_enabled
<LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gamepad_update
<LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
@@ -1064,7 +1052,7 @@ Global Symbols
<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mcp4451_reset
<LI><a href="#[b4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mcp4451_is_available
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_init
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_init
<LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_init
<LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_init
@@ -1112,10 +1100,21 @@ Global Symbols
<BR><BR>[Called By]<UL><LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<P><STRONG><a name="[b5]"></a>microsoft_serial_mouse_update</STRONG> (Thumb, 194 bytes, Stack size 16 bytes, main.o(i.microsoft_serial_mouse_update))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = microsoft_serial_mouse_update &rArr; mouse_buf_pop &rArr; __aeabi_uidivmod
</UL>
<BR>[Calls]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit_IT
<LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_pop
<LI><a href="#[bb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_peek
<LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[5c]"></a>mouse_buf_add</STRONG> (Thumb, 50 bytes, Stack size 16 bytes, helpers.o(i.mouse_buf_add))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = mouse_buf_add &rArr; mouse_buf_is_full &rArr; __aeabi_uidivmod
</UL>
<BR>[Calls]<UL><LI><a href="#[bb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_is_full
<BR>[Calls]<UL><LI><a href="#[bd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_is_full
<LI><a href="#[96]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy
<LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
</UL>
@@ -1125,13 +1124,13 @@ Global Symbols
<P><STRONG><a name="[b3]"></a>mouse_buf_init</STRONG> (Thumb, 24 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_init))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = mouse_buf_init &rArr; malloc
</UL>
<BR>[Calls]<UL><LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_reset
<BR>[Calls]<UL><LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_reset
<LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;malloc
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[bb]"></a>mouse_buf_is_full</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_is_full))
<P><STRONG><a name="[bd]"></a>mouse_buf_is_full</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_is_full))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = mouse_buf_is_full &rArr; __aeabi_uidivmod
</UL>
<BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
@@ -1139,21 +1138,19 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_add
</UL>
<P><STRONG><a name="[cd]"></a>mouse_buf_peek</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, helpers.o(i.mouse_buf_peek))
<BR><BR>[Called By]<UL><LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;serial_mouse_update
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_update
<P><STRONG><a name="[bb]"></a>mouse_buf_peek</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, helpers.o(i.mouse_buf_peek))
<BR><BR>[Called By]<UL><LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;microsoft_serial_mouse_update
</UL>
<P><STRONG><a name="[bd]"></a>mouse_buf_pop</STRONG> (Thumb, 24 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_pop))
<P><STRONG><a name="[bc]"></a>mouse_buf_pop</STRONG> (Thumb, 24 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_pop))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = mouse_buf_pop &rArr; __aeabi_uidivmod
</UL>
<BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
</UL>
<BR>[Called By]<UL><LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;serial_mouse_update
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_update
<BR>[Called By]<UL><LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;microsoft_serial_mouse_update
</UL>
<P><STRONG><a name="[bc]"></a>mouse_buf_reset</STRONG> (Thumb, 22 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_reset))
<P><STRONG><a name="[be]"></a>mouse_buf_reset</STRONG> (Thumb, 22 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_reset))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = mouse_buf_reset
</UL>
<BR>[Calls]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
@@ -1169,12 +1166,12 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[be]"></a>ps2kb_get_bus_status</STRONG> (Thumb, 62 bytes, Stack size 16 bytes, ps2kb.o(i.ps2kb_get_bus_status))
<P><STRONG><a name="[bf]"></a>ps2kb_get_bus_status</STRONG> (Thumb, 62 bytes, Stack size 16 bytes, ps2kb.o(i.ps2kb_get_bus_status))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = ps2kb_get_bus_status
</UL>
<BR>[Calls]<UL><LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<BR>[Calls]<UL><LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
</UL>
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<BR>[Called By]<UL><LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
</UL>
@@ -1189,29 +1186,29 @@ Global Symbols
<LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
</UL>
<P><STRONG><a name="[bf]"></a>ps2kb_press_key</STRONG> (Thumb, 40 bytes, Stack size 8 bytes, ps2kb.o(i.ps2kb_press_key))
<P><STRONG><a name="[c0]"></a>ps2kb_press_key</STRONG> (Thumb, 40 bytes, Stack size 8 bytes, ps2kb.o(i.ps2kb_press_key))
<BR><BR>[Stack]<UL><LI>Max Depth = 68<LI>Call Chain = ps2kb_press_key &rArr; ps2kb_press_key_scancode_2 &rArr; ps2kb_write &rArr; ps2kb_write_nowait &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key_scancode_2
<LI><a href="#[c0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key_scancode_1
<BR>[Calls]<UL><LI><a href="#[c2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key_scancode_2
<LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key_scancode_1
</UL>
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<BR>[Called By]<UL><LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
</UL>
<P><STRONG><a name="[c0]"></a>ps2kb_press_key_scancode_1</STRONG> (Thumb, 40 bytes, Stack size 8 bytes, ps2kb.o(i.ps2kb_press_key_scancode_1))
<P><STRONG><a name="[c1]"></a>ps2kb_press_key_scancode_1</STRONG> (Thumb, 40 bytes, Stack size 8 bytes, ps2kb.o(i.ps2kb_press_key_scancode_1))
<BR><BR>[Stack]<UL><LI>Max Depth = 60<LI>Call Chain = ps2kb_press_key_scancode_1 &rArr; ps2kb_write &rArr; ps2kb_write_nowait &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
</UL>
<BR>[Called By]<UL><LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key
<BR>[Called By]<UL><LI><a href="#[c0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key
</UL>
<P><STRONG><a name="[c1]"></a>ps2kb_press_key_scancode_2</STRONG> (Thumb, 302 bytes, Stack size 8 bytes, ps2kb.o(i.ps2kb_press_key_scancode_2))
<P><STRONG><a name="[c2]"></a>ps2kb_press_key_scancode_2</STRONG> (Thumb, 302 bytes, Stack size 8 bytes, ps2kb.o(i.ps2kb_press_key_scancode_2))
<BR><BR>[Stack]<UL><LI>Max Depth = 60<LI>Call Chain = ps2kb_press_key_scancode_2 &rArr; ps2kb_write &rArr; ps2kb_write_nowait &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
</UL>
<BR>[Called By]<UL><LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key
<BR>[Called By]<UL><LI><a href="#[c0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key
</UL>
<P><STRONG><a name="[af]"></a>ps2kb_read</STRONG> (Thumb, 246 bytes, Stack size 32 bytes, ps2kb.o(i.ps2kb_read))
@@ -1219,11 +1216,11 @@ Global Symbols
</UL>
<BR>[Calls]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<BR>[Called By]<UL><LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;keyboard_reply
</UL>
@@ -1232,7 +1229,7 @@ Global Symbols
</UL>
<BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
</UL>
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<BR>[Called By]<UL><LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_update
<LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
<LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_init
</UL>
@@ -1243,17 +1240,17 @@ Global Symbols
<LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;keyboard_reply
</UL>
<P><STRONG><a name="[b8]"></a>ps2kb_update</STRONG> (Thumb, 152 bytes, Stack size 16 bytes, main.o(i.ps2kb_update))
<P><STRONG><a name="[b7]"></a>ps2kb_update</STRONG> (Thumb, 152 bytes, Stack size 16 bytes, main.o(i.ps2kb_update))
<BR><BR>[Stack]<UL><LI>Max Depth = 84<LI>Call Chain = ps2kb_update &rArr; ps2kb_press_key &rArr; ps2kb_press_key_scancode_2 &rArr; ps2kb_write &rArr; ps2kb_write_nowait &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_release_lines
<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_read
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key
<LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[c0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;keyboard_reply
<LI><a href="#[ac]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_pop
<LI><a href="#[c2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_peek
<LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_peek
<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
@@ -1263,57 +1260,25 @@ Global Symbols
<BR><BR>[Stack]<UL><LI>Max Depth = 52<LI>Call Chain = ps2kb_write &rArr; ps2kb_write_nowait &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write_nowait
<LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write_nowait
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_get_bus_status
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key_scancode_2
<LI><a href="#[c0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key_scancode_1
<BR>[Called By]<UL><LI><a href="#[c2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key_scancode_2
<LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_press_key_scancode_1
<LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;keyboard_reply
</UL>
<P><STRONG><a name="[c3]"></a>ps2kb_write_nowait</STRONG> (Thumb, 282 bytes, Stack size 24 bytes, ps2kb.o(i.ps2kb_write_nowait))
<P><STRONG><a name="[c4]"></a>ps2kb_write_nowait</STRONG> (Thumb, 282 bytes, Stack size 24 bytes, ps2kb.o(i.ps2kb_write_nowait))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = ps2kb_write_nowait &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2kb_write
</UL>
<P><STRONG><a name="[c4]"></a>ps2mouse_get_bus_status</STRONG> (Thumb, 92 bytes, Stack size 8 bytes, ps2mouse.o(i.ps2mouse_get_bus_status))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = ps2mouse_get_bus_status
</UL>
<BR>[Calls]<UL><LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
</UL>
<BR>[Called By]<UL><LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_update
<LI><a href="#[ce]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_wait_for_idle
<LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_read
</UL>
<P><STRONG><a name="[c5]"></a>ps2mouse_get_outgoing_data</STRONG> (Thumb, 166 bytes, Stack size 16 bytes, ps2mouse.o(i.ps2mouse_get_outgoing_data))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = ps2mouse_get_outgoing_data
</UL>
<BR>[Calls]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
</UL>
<BR>[Called By]<UL><LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_update
</UL>
<P><STRONG><a name="[c6]"></a>ps2mouse_host_req_reply</STRONG> (Thumb, 402 bytes, Stack size 24 bytes, ps2mouse.o(i.ps2mouse_host_req_reply))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = ps2mouse_host_req_reply &rArr; ps2mouse_read &rArr; ps2mouse_get_bus_status
</UL>
<BR>[Calls]<UL><LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_accumulators
<LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write_delay_start
<LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write
<LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_restore_defaults
<LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_reset
<LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_read
<LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_common_switch8
</UL>
<BR>[Called By]<UL><LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_update
</UL>
<P><STRONG><a name="[a3]"></a>ps2mouse_init</STRONG> (Thumb, 22 bytes, Stack size 8 bytes, ps2mouse.o(i.ps2mouse_init))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = ps2mouse_init &rArr; ps2mouse_reset &rArr; ps2mouse_restore_defaults
</UL>
@@ -1324,162 +1289,71 @@ Global Symbols
<LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
</UL>
<P><STRONG><a name="[cb]"></a>ps2mouse_read</STRONG> (Thumb, 244 bytes, Stack size 32 bytes, ps2mouse.o(i.ps2mouse_read))
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = ps2mouse_read &rArr; ps2mouse_get_bus_status
</UL>
<BR>[Calls]<UL><LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_get_bus_status
<LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_update
<LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_host_req_reply
</UL>
<P><STRONG><a name="[a8]"></a>ps2mouse_release_lines</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, ps2mouse.o(i.ps2mouse_release_lines))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = ps2mouse_release_lines
</UL>
<BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
</UL>
<BR>[Called By]<UL><LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_update
<LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
<BR>[Called By]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_init
</UL>
<P><STRONG><a name="[a7]"></a>ps2mouse_reset</STRONG> (Thumb, 20 bytes, Stack size 4 bytes, ps2mouse.o(i.ps2mouse_reset))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = ps2mouse_reset &rArr; ps2mouse_restore_defaults
</UL>
<BR>[Calls]<UL><LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_restore_defaults
<BR>[Calls]<UL><LI><a href="#[c5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_restore_defaults
</UL>
<BR>[Called By]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_init
<LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_host_req_reply
</UL>
<P><STRONG><a name="[c9]"></a>ps2mouse_restore_defaults</STRONG> (Thumb, 30 bytes, Stack size 4 bytes, ps2mouse.o(i.ps2mouse_restore_defaults))
<P><STRONG><a name="[c5]"></a>ps2mouse_restore_defaults</STRONG> (Thumb, 30 bytes, Stack size 4 bytes, ps2mouse.o(i.ps2mouse_restore_defaults))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = ps2mouse_restore_defaults
</UL>
<BR>[Calls]<UL><LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_accumulators
<BR>[Calls]<UL><LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_accumulators
</UL>
<BR>[Called By]<UL><LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_reset
<LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_host_req_reply
</UL>
<P><STRONG><a name="[cc]"></a>ps2mouse_send_update</STRONG> (Thumb, 38 bytes, Stack size 16 bytes, ps2mouse.o(i.ps2mouse_send_update))
<BR><BR>[Stack]<UL><LI>Max Depth = 52<LI>Call Chain = ps2mouse_send_update &rArr; ps2mouse_write &rArr; ps2mouse_write_nowait &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write
</UL>
<BR>[Called By]<UL><LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_update
<P><STRONG><a name="[c6]"></a>reset_accumulators</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, ps2mouse.o(i.reset_accumulators))
<BR><BR>[Called By]<UL><LI><a href="#[c5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_restore_defaults
</UL>
<P><STRONG><a name="[b6]"></a>ps2mouse_update</STRONG> (Thumb, 90 bytes, Stack size 8 bytes, main.o(i.ps2mouse_update))
<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = ps2mouse_update &rArr; ps2mouse_host_req_reply &rArr; ps2mouse_read &rArr; ps2mouse_get_bus_status
</UL>
<BR>[Calls]<UL><LI><a href="#[cc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_send_update
<LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_release_lines
<LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_read
<LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_host_req_reply
<LI><a href="#[c5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_get_outgoing_data
<LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_get_bus_status
<LI><a href="#[bd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_pop
<LI><a href="#[cd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_peek
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[ce]"></a>ps2mouse_wait_for_idle</STRONG> (Thumb, 38 bytes, Stack size 16 bytes, ps2mouse.o(i.ps2mouse_wait_for_idle))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = ps2mouse_wait_for_idle &rArr; ps2mouse_get_bus_status
</UL>
<BR>[Calls]<UL><LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_get_bus_status
<LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
</UL>
<BR>[Called By]<UL><LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write_delay_start
<LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write
</UL>
<P><STRONG><a name="[c8]"></a>ps2mouse_write</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, ps2mouse.o(i.ps2mouse_write))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = ps2mouse_write &rArr; ps2mouse_write_nowait &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write_nowait
<LI><a href="#[ce]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_wait_for_idle
</UL>
<BR>[Called By]<UL><LI><a href="#[cc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_send_update
<LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_host_req_reply
</UL>
<P><STRONG><a name="[c7]"></a>ps2mouse_write_delay_start</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, ps2mouse.o(i.ps2mouse_write_delay_start))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = ps2mouse_write_delay_start &rArr; ps2mouse_write_nowait &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write_nowait
<LI><a href="#[ce]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_wait_for_idle
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_host_req_reply
</UL>
<P><STRONG><a name="[cf]"></a>ps2mouse_write_nowait</STRONG> (Thumb, 282 bytes, Stack size 24 bytes, ps2mouse.o(i.ps2mouse_write_nowait))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = ps2mouse_write_nowait &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write_delay_start
<LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_write
</UL>
<P><STRONG><a name="[ca]"></a>reset_accumulators</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, ps2mouse.o(i.reset_accumulators))
<BR><BR>[Called By]<UL><LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_restore_defaults
<LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ps2mouse_host_req_reply
</UL>
<P><STRONG><a name="[b7]"></a>serial_mouse_update</STRONG> (Thumb, 170 bytes, Stack size 16 bytes, main.o(i.serial_mouse_update))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = serial_mouse_update &rArr; mouse_buf_pop &rArr; __aeabi_uidivmod
</UL>
<BR>[Calls]<UL><LI><a href="#[d0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Transmit_IT
<LI><a href="#[bd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_pop
<LI><a href="#[cd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_peek
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[ba]"></a>spi_error_dump_reboot</STRONG> (Thumb, 72 bytes, Stack size 0 bytes, main.o(i.spi_error_dump_reboot))
<P><STRONG><a name="[b9]"></a>spi_error_dump_reboot</STRONG> (Thumb, 72 bytes, Stack size 0 bytes, main.o(i.spi_error_dump_reboot))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = spi_error_dump_reboot &rArr; __2printf
</UL>
<BR>[Calls]<UL><LI><a href="#[d1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_TogglePin
<BR>[Calls]<UL><LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_TogglePin
<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Delay
<LI><a href="#[b0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[d2]"></a>wait_for_clk_high</STRONG> (Thumb, 44 bytes, Stack size 16 bytes, xt_kb.o(i.wait_for_clk_high))
<P><STRONG><a name="[c8]"></a>wait_for_clk_high</STRONG> (Thumb, 44 bytes, Stack size 16 bytes, xt_kb.o(i.wait_for_clk_high))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = wait_for_clk_high
</UL>
<BR>[Calls]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
</UL>
<BR>[Called By]<UL><LI><a href="#[d3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
<BR>[Called By]<UL><LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
</UL>
<P><STRONG><a name="[d3]"></a>xtkb_check_for_softreset</STRONG> (Thumb, 60 bytes, Stack size 8 bytes, xt_kb.o(i.xtkb_check_for_softreset))
<P><STRONG><a name="[c9]"></a>xtkb_check_for_softreset</STRONG> (Thumb, 60 bytes, Stack size 8 bytes, xt_kb.o(i.xtkb_check_for_softreset))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = xtkb_check_for_softreset &rArr; xtkb_write &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Delay
<LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[d4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_write
<LI><a href="#[d2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_clk_high
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_write
<LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_clk_high
</UL>
<BR>[Called By]<UL><LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
</UL>
<P><STRONG><a name="[a2]"></a>xtkb_enable</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, xt_kb.o(i.xtkb_enable))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = xtkb_enable &rArr; xtkb_reset_bus
</UL>
<BR>[Calls]<UL><LI><a href="#[d5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_reset_bus
<BR>[Calls]<UL><LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_reset_bus
<LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
@@ -1492,14 +1366,14 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[d6]"></a>xtkb_press_key</STRONG> (Thumb, 116 bytes, Stack size 16 bytes, xt_kb.o(i.xtkb_press_key))
<P><STRONG><a name="[cc]"></a>xtkb_press_key</STRONG> (Thumb, 116 bytes, Stack size 16 bytes, xt_kb.o(i.xtkb_press_key))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = xtkb_press_key &rArr; xtkb_write &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_common_switch8
<LI><a href="#[d4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_write
<LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_write
</UL>
<BR>[Called By]<UL><LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
</UL>
<P><STRONG><a name="[a6]"></a>xtkb_release_lines</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, xt_kb.o(i.xtkb_release_lines))
@@ -1510,36 +1384,36 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
</UL>
<P><STRONG><a name="[d5]"></a>xtkb_reset_bus</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, xt_kb.o(i.xtkb_reset_bus))
<P><STRONG><a name="[cb]"></a>xtkb_reset_bus</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, xt_kb.o(i.xtkb_reset_bus))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = xtkb_reset_bus
</UL>
<BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
</UL>
<BR>[Called By]<UL><LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_enable
<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_update
</UL>
<P><STRONG><a name="[b9]"></a>xtkb_update</STRONG> (Thumb, 50 bytes, Stack size 8 bytes, main.o(i.xtkb_update))
<P><STRONG><a name="[b8]"></a>xtkb_update</STRONG> (Thumb, 50 bytes, Stack size 8 bytes, main.o(i.xtkb_update))
<BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = xtkb_update &rArr; xtkb_press_key &rArr; xtkb_write &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[d5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_reset_bus
<LI><a href="#[d6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_press_key
<LI><a href="#[d3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
<BR>[Calls]<UL><LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_reset_bus
<LI><a href="#[cc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_press_key
<LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
<LI><a href="#[ac]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_pop
<LI><a href="#[c2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_peek
<LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_peek
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[d4]"></a>xtkb_write</STRONG> (Thumb, 186 bytes, Stack size 16 bytes, xt_kb.o(i.xtkb_write))
<P><STRONG><a name="[ca]"></a>xtkb_write</STRONG> (Thumb, 186 bytes, Stack size 16 bytes, xt_kb.o(i.xtkb_write))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = xtkb_write &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[d6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_press_key
<LI><a href="#[d3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
<BR>[Called By]<UL><LI><a href="#[cc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_press_key
<LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;xtkb_check_for_softreset
</UL>
<P>
<H3>

View File

File diff suppressed because it is too large Load Diff

View File

@@ -193,7 +193,7 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_spi.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_spi_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
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)
@@ -301,7 +301,7 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
I (../Inc/helpers.h)(0x61F30951)
I (../Inc/ps2kb.h)(0x61BC5950)
I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5D9B4298)
I (../Inc/ps2mouse.h)(0x61BC59D5)
I (../Inc/ps2mouse.h)(0x61BC59D5)
I (../Inc/mcp4451.h)(0x61B64C4C)
I (../Inc/xt_kb.h)(0x61C35C36)
F (../Src/stm32f0xx_it.c)(0x61BE3FF7)(--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

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

@@ -67,7 +67,7 @@ UART_HandleTypeDef huart3;
const uint8_t board_id = 1;
const uint8_t version_major = 0;
const uint8_t version_minor = 1;
const uint8_t version_patch = 3;
const uint8_t version_patch = 4;
uint8_t hw_revision;
uint8_t spi_transmit_buf[SPI_BUF_SIZE];
@@ -367,13 +367,15 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
rts_active = 1;
}
uint8_t serial_mouse_is_tx_in_progress;
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
;
serial_mouse_is_tx_in_progress = 0;
}
// https://everything2.com/title/Mouse+protocol
void serial_mouse_update(void)
void microsoft_serial_mouse_update(void)
{
if(rts_active)
{
@@ -386,6 +388,12 @@ void serial_mouse_update(void)
if(this_mouse_event == NULL)
return;
if(serial_mouse_is_tx_in_progress)
{
mouse_buf_pop(&my_mouse_buf);
return;
}
memset(serial_mouse_output_buf, 0, SERIAL_MOUSE_BUF_SIZE);
serial_mouse_output_buf[0] = 0xc0;
if(this_mouse_event->button_left)
@@ -393,21 +401,23 @@ void serial_mouse_update(void)
if(this_mouse_event->button_right)
serial_mouse_output_buf[0] |= 0x10;
int8_t serial_y = -1 * this_mouse_event->movement_y;
int16_t serial_x = this_mouse_event->movement_x;
int16_t serial_y = -1* this_mouse_event->movement_y;
if(serial_y & 0x80)
serial_mouse_output_buf[0] |= 0x8;
if(serial_y & 0x40)
serial_mouse_output_buf[0] |= 0x4;
if(this_mouse_event->movement_x & 0x80)
if(serial_x & 0x80)
serial_mouse_output_buf[0] |= 0x2;
if(this_mouse_event->movement_x & 0x40)
if(serial_x & 0x40)
serial_mouse_output_buf[0] |= 0x1;
serial_mouse_output_buf[1] = 0x3f & this_mouse_event->movement_x;
serial_mouse_output_buf[1] = 0x3f & serial_x;
serial_mouse_output_buf[2] = 0x3f & serial_y;
mouse_buf_pop(&my_mouse_buf);
HAL_UART_Transmit_IT(&huart3, serial_mouse_output_buf, 3);
serial_mouse_is_tx_in_progress = 1;
}
void spi_error_dump_reboot(void)
@@ -550,11 +560,11 @@ int main(void)
/* USER CODE BEGIN 3 */
// If both enabled, PS2 mouse takes priority
if(is_protocol_enabled(PROTOCOL_PS2_MOUSE) && IS_PS2MOUSE_PRESENT())
ps2mouse_update();
else if(is_protocol_enabled(PROTOCOL_MICROSOFT_SERIAL_MOUSE))
serial_mouse_update();
// if(is_protocol_enabled(PROTOCOL_PS2_MOUSE) && IS_PS2MOUSE_PRESENT())
// ps2mouse_update();
// else if(is_protocol_enabled(PROTOCOL_MICROSOFT_SERIAL_MOUSE))
// microsoft_serial_mouse_update();
microsoft_serial_mouse_update();
// If both enabled, PS2 keyboard takes priority
if(is_protocol_enabled(PROTOCOL_AT_PS2_KB) && IS_KB_PRESENT())
ps2kb_update();

View File

@@ -1,3 +1,19 @@
for (int i = 0; i < 3; ++i)
printf("0x%x ", serial_mouse_output_buf[i]);
printf("\n");
// printf("%d 0x%x 0x%x\n", serial_y, serial_mouse_output_buf[0], serial_mouse_output_buf[2]);
// if(serial_y >= -1)
// serial_y = 0;
// printf("%d\n", serial_y);
// printf("%d 0x%x\n", serial_y, serial_y);
uint8_t y_result = 0;
if(serial_mouse_output_buf[0] & 0x8)
y_result |= 0x80;
if(serial_mouse_output_buf[0] & 0x4)
y_result |= 0x40;
y_result |= serial_mouse_output_buf[2] & 0x3f;
printf("0x%x 0x%x\n", serial_y, y_result);
for (int i = 0; i < SERIAL_MOUSE_BUF_SIZE; ++i)
printf("0x%x ", serial_mouse_output_buf[i]);
printf("\n");