working on adding KVM compatibility mode

This commit is contained in:
dekunukem
2022-05-02 22:08:38 +01:00
parent 46cdcbf7ad
commit 4834e32b62
22 changed files with 698 additions and 666 deletions

View File

@@ -170,6 +170,7 @@ void handle_protocol_switch(uint8_t spi_byte)
break;
case PROTOCOL_PS2_MOUSE:
case PROTOCOL_PS2_MOUSE_KVM:
ps2mouse_init(PS2MOUSE_CLK_GPIO_Port, PS2MOUSE_CLK_Pin, PS2MOUSE_DATA_GPIO_Port, PS2MOUSE_DATA_Pin);
break;
@@ -298,20 +299,8 @@ void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
HAL_GPIO_WritePin(ACT_LED_GPIO_Port, ACT_LED_Pin, GPIO_PIN_RESET);
}
uint8_t is_ps2_mouse_connected_prev;
void ps2mouse_update(void)
{
uint8_t is_ps2_mouse_connected = IS_PS2MOUSE_PRESENT();
uint8_t send_bat = 0;
if(is_ps2_mouse_connected == 1 && is_ps2_mouse_connected_prev == 0)
{
send_bat = 1;
HAL_Delay(50);
ps2mouse_restore_defaults();
}
is_ps2_mouse_connected_prev = is_ps2_mouse_connected;
ps2mouse_bus_status = ps2mouse_get_bus_status();
if(ps2mouse_bus_status == PS2_BUS_INHIBIT)
{
@@ -324,11 +313,6 @@ void ps2mouse_update(void)
ps2mouse_host_req_reply(ps2mouse_host_cmd, &latest_mouse_event);
return;
}
else if(send_bat)
{
ps2mouse_write(0xaa, 100);
ps2mouse_write(0, 100);
}
mouse_event* this_mouse_event = mouse_buf_peek(&my_mouse_buf);
if(this_mouse_event == NULL)
@@ -341,7 +325,10 @@ void ps2mouse_update(void)
return;
}
if(ps2mouse_send_update(&my_ps2_outbuf) != PS2_OK)
uint8_t inhibit_timeout_ms = 200;
if(is_protocol_enabled(PROTOCOL_PS2_MOUSE_KVM))
inhibit_timeout_ms = 3;
if(ps2mouse_send_update(&my_ps2_outbuf, inhibit_timeout_ms) != PS2_OK)
{
HAL_GPIO_WritePin(ERR_LED_GPIO_Port, ERR_LED_Pin, GPIO_PIN_SET);
uint32_t enter_time = HAL_GetTick();
@@ -474,6 +461,7 @@ void protocol_status_lookup_init(void)
protocol_status_lookup[PROTOCOL_AT_PS2_KB] = PROTOCOL_STATUS_ENABLED;
protocol_status_lookup[PROTOCOL_XT_KB] = PROTOCOL_STATUS_DISABLED;
protocol_status_lookup[PROTOCOL_PS2_MOUSE] = PROTOCOL_STATUS_ENABLED;
protocol_status_lookup[PROTOCOL_PS2_MOUSE_KVM] = PROTOCOL_STATUS_DISABLED;
protocol_status_lookup[PROTOCOL_MICROSOFT_SERIAL_MOUSE] = PROTOCOL_STATUS_DISABLED;
protocol_status_lookup[PROTOCOL_GENERIC_GAMEPORT_GAMEPAD] = PROTOCOL_STATUS_ENABLED;
}
@@ -615,7 +603,7 @@ int main(void)
/* USER CODE BEGIN 3 */
// If both enabled, PS2 mouse takes priority
if(is_protocol_enabled(PROTOCOL_PS2_MOUSE) && IS_PS2MOUSE_PRESENT())
if((is_protocol_enabled(PROTOCOL_PS2_MOUSE) || is_protocol_enabled(PROTOCOL_PS2_MOUSE_KVM)) && IS_PS2MOUSE_PRESENT())
ps2mouse_update();
else if(is_protocol_enabled(PROTOCOL_MICROSOFT_SERIAL_MOUSE))
microsoft_serial_mouse_update();