mirror of
https://github.com/dekuNukem/USB4VC.git
synced 2025-10-31 11:26:46 -07:00
added ADB to new card
This commit is contained in:
@@ -37,11 +37,19 @@
|
||||
#define DEBUG1_HI() HAL_GPIO_WritePin(DEBUG1_GPIO_Port, DEBUG1_Pin, GPIO_PIN_SET)
|
||||
#define DEBUG1_LOW() HAL_GPIO_WritePin(DEBUG1_GPIO_Port, DEBUG1_Pin, GPIO_PIN_RESET)
|
||||
|
||||
// #define DEBUG0_HI() {}
|
||||
// #define DEBUG0_LOW() {}
|
||||
#define KEY_DELETE 111
|
||||
#define KEY_CAPSLOCK 58
|
||||
#define KEY_LEFTCTRL 29
|
||||
#define KEY_LEFTSHIFT 42
|
||||
#define KEY_LEFTALT 56
|
||||
#define KEY_LEFTMETA 125
|
||||
#define KEY_NUMLOCK 69
|
||||
#define KEY_SCROLLLOCK 70
|
||||
|
||||
// #define DEBUG1_HI() {}
|
||||
// #define DEBUG1_LOW() {}
|
||||
#define KEY_RIGHTCTRL 97
|
||||
#define KEY_RIGHTSHIFT 54
|
||||
#define KEY_RIGHTALT 100
|
||||
#define KEY_RIGHTMETA 126
|
||||
|
||||
#define ADB_CLK_35 34
|
||||
#define ADB_CLK_65 64
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -27,6 +27,7 @@ Project File Date: 03/04/2023
|
||||
<h2>Output:</h2>
|
||||
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
|
||||
Build target 'my_adb'
|
||||
compiling adb.c...
|
||||
compiling main.c...
|
||||
linking...
|
||||
Program Size: Code=10556 RO-data=496 RW-data=64 ZI-data=1952
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<title>Static Call Graph - [my_adb\my_adb.axf]</title></head>
|
||||
<body><HR>
|
||||
<H1>Static Call Graph for image my_adb\my_adb.axf</H1><HR>
|
||||
<BR><P>#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Sat Mar 04 18:12:57 2023
|
||||
<BR><P>#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Sat Mar 04 18:18:46 2023
|
||||
<BR><P>
|
||||
<H3>Maximum Stack Usage = 180 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
|
||||
Call chain for Maximum Stack Depth:</H3>
|
||||
|
||||
@@ -2328,7 +2328,7 @@ Image component sizes
|
||||
1036 80 186 20 0 460386 adb.o
|
||||
52 10 0 4 0 1923 delay_us.o
|
||||
350 0 0 0 0 7511 helpers.o
|
||||
2376 276 61 16 416 19829 main.o
|
||||
2376 276 61 16 416 19593 main.o
|
||||
88 38 192 0 1536 640 startup_stm32f042x6.o
|
||||
122 18 0 4 0 3587 stm32f0xx_hal.o
|
||||
178 28 0 0 0 10471 stm32f0xx_hal_cortex.o
|
||||
@@ -2345,7 +2345,7 @@ Image component sizes
|
||||
92 14 24 4 0 1123 system_stm32f0xx.o
|
||||
|
||||
----------------------------------------------------------------------
|
||||
9712 726 496 48 1952 546967 Object Totals
|
||||
9712 726 496 48 1952 546731 Object Totals
|
||||
0 0 32 0 0 0 (incl. Generated)
|
||||
30 0 1 0 0 0 (incl. Padding)
|
||||
|
||||
@@ -2392,8 +2392,8 @@ Image component sizes
|
||||
|
||||
Code (inc. data) RO Data RW Data ZI Data Debug
|
||||
|
||||
10556 782 496 64 1952 542691 Grand Totals
|
||||
10556 782 496 64 1952 542691 ELF Image Totals
|
||||
10556 782 496 64 1952 542455 Grand Totals
|
||||
10556 782 496 64 1952 542455 ELF Image Totals
|
||||
10556 782 496 64 0 0 ROM Totals
|
||||
|
||||
==============================================================================
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Dependencies for Project 'my_adb', Target 'my_adb': (DO NOT MODIFY !)
|
||||
CompilerVersion: 5060750::V5.06 update 6 (build 750)::ARMCC
|
||||
F (startup_stm32f042x6.s)(0x637DDD5C)(--cpu Cortex-M0 -g --apcs=interwork --pd "__MICROLIB SETA 1"
|
||||
|
||||
|
||||
-I.\RTE\_my_adb
|
||||
|
||||
-IC:\Users\allen\AppData\Local\Arm\Packs\ARM\CMSIS\5.6.0\CMSIS\Core\Include
|
||||
@@ -39,7 +39,7 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h)(0x637DDD5C)
|
||||
I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x637DDD5C)
|
||||
I (../Drivers/CMSIS/Include/core_cmFunc.h)(0x637DDD5C)
|
||||
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h)(0x637DDD5C)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h)(0x637DDD5C)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h)(0x637DDD5C)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h)(0x637DDD5C)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h)(0x637DDD5C)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h)(0x637DDD5C)
|
||||
@@ -114,10 +114,10 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h)(0x637DDD5C)
|
||||
|
||||
-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_ -DSTM32F042x6 -DUSE_HAL_DRIVER -DSTM32F042x6
|
||||
-D__UVISION_VERSION="529" -D_RTE_ -DSTM32F042x6 -DUSE_HAL_DRIVER -DSTM32F042x6
|
||||
|
||||
-o my_adb\helpers.o --omf_browse my_adb\helpers.crf --depend my_adb\helpers.d)
|
||||
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5D9B429A)
|
||||
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5D9B429A)
|
||||
I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5D9B4298)
|
||||
I (C:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x5D9B429A)
|
||||
I (../Inc/helpers.h)(0x637DDD5C)
|
||||
@@ -156,7 +156,7 @@ I (C:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x5D9B429A)
|
||||
I (../Inc/shared.h)(0x637DDD5C)
|
||||
F (..\Inc\adb.h)(0x64038B83)()
|
||||
F (..\Inc\delay_us.h)(0x637DDD5C)()
|
||||
F (..\Inc\helpers.h)(0x637DDD5C)()
|
||||
F (..\Inc\helpers.h)(0x637DDD5C)()
|
||||
F (../Src/main.c)(0x64038B77)(--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\_my_adb
|
||||
|
||||
@@ -299,20 +299,6 @@ void adb_mouse_update(void)
|
||||
adb_send_response_16b(response);
|
||||
}
|
||||
|
||||
#define KEY_DELETE 111
|
||||
#define KEY_CAPSLOCK 58
|
||||
#define KEY_LEFTCTRL 29
|
||||
#define KEY_LEFTSHIFT 42
|
||||
#define KEY_LEFTALT 56
|
||||
#define KEY_LEFTMETA 125
|
||||
#define KEY_NUMLOCK 69
|
||||
#define KEY_SCROLLLOCK 70
|
||||
|
||||
#define KEY_RIGHTCTRL 97
|
||||
#define KEY_RIGHTSHIFT 54
|
||||
#define KEY_RIGHTALT 100
|
||||
#define KEY_RIGHTMETA 126
|
||||
|
||||
uint8_t capslock_counter;
|
||||
void adb_keyboard_update(void)
|
||||
{
|
||||
@@ -484,10 +470,10 @@ int main(void)
|
||||
if(IS_ADB_HOST_PRESENT() == 0)
|
||||
continue;
|
||||
|
||||
kb_enabled = is_protocol_enabled(PROTOCOL_ADB_KB);
|
||||
mouse_enabled = is_protocol_enabled(PROTOCOL_ADB_MOUSE);
|
||||
adb_kb_enabled = is_protocol_enabled(PROTOCOL_ADB_KB);
|
||||
adb_mouse_enabled = is_protocol_enabled(PROTOCOL_ADB_MOUSE);
|
||||
|
||||
if(kb_enabled == 0 && mouse_enabled == 0)
|
||||
if(adb_kb_enabled == 0 && adb_mouse_enabled == 0)
|
||||
{
|
||||
adb_reset();
|
||||
continue;
|
||||
@@ -512,17 +498,17 @@ int main(void)
|
||||
mouse_srq = 0;
|
||||
}
|
||||
|
||||
if((kb_srq && kb_enabled) || (mouse_srq && mouse_enabled))
|
||||
if((kb_srq && adb_kb_enabled) || (mouse_srq && adb_mouse_enabled))
|
||||
send_srq();
|
||||
else
|
||||
wait_until_change(ADB_DEFAULT_TIMEOUT_US);
|
||||
|
||||
adb_status = parse_adb_cmd(adb_data);
|
||||
if(adb_status == ADB_MOUSE_POLL && mouse_enabled)
|
||||
if(adb_status == ADB_MOUSE_POLL && adb_mouse_enabled)
|
||||
adb_mouse_update();
|
||||
else if(adb_status == ADB_KB_POLL && kb_enabled)
|
||||
else if(adb_status == ADB_KB_POLL && adb_kb_enabled)
|
||||
adb_keyboard_update();
|
||||
else if(adb_status == ADB_KB_POLL_REG2 && kb_enabled)
|
||||
else if(adb_status == ADB_KB_POLL_REG2 && adb_kb_enabled)
|
||||
adb_send_response_16b(adb_kb_reg2);
|
||||
else if(adb_status == ADB_KB_CHANGE_LED)
|
||||
{
|
||||
|
||||
89
firmware/apple_pre_usb/Inc/adb.h
Normal file
89
firmware/apple_pre_usb/Inc/adb.h
Normal file
@@ -0,0 +1,89 @@
|
||||
#ifndef __ADB_H
|
||||
#define __ADB_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "stm32f0xx_hal.h"
|
||||
|
||||
#define ADB_LINE_STATUS_ATTEN 1
|
||||
#define ADB_LINE_STATUS_IDLE 2
|
||||
#define ADB_LINE_STATUS_RESET 3
|
||||
#define ADB_LINE_STATUS_BUSY 4
|
||||
#define ADB_LINE_STATUS_ERROR 5
|
||||
#define ADB_LINE_STATUS_COLLISION 6
|
||||
|
||||
#define ADB_TIMEOUT -1
|
||||
#define ADB_OK 0
|
||||
#define ADB_KB_POLL 2
|
||||
#define ADB_KB_POLL_REG2 3
|
||||
#define ADB_KB_CHANGE_LED 4
|
||||
#define ADB_MOUSE_POLL 5
|
||||
#define ADB_ERROR ADB_LINE_STATUS_ERROR
|
||||
|
||||
#define ADB_KB_DEFAULT_ADDR 2
|
||||
#define ADB_MOUSE_DEFAULT_ADDR 3
|
||||
|
||||
#define ADB_CMD_TYPE_FLUSH 0
|
||||
#define ADB_CMD_TYPE_LISTEN 2
|
||||
#define ADB_CMD_TYPE_TALK 3
|
||||
|
||||
#define ADB_CHANGE_ADDR 0xFE
|
||||
|
||||
// #define DEBUG0_HI() HAL_GPIO_WritePin(DEBUG0_GPIO_Port, DEBUG0_Pin, GPIO_PIN_SET)
|
||||
// #define DEBUG0_LOW() HAL_GPIO_WritePin(DEBUG0_GPIO_Port, DEBUG0_Pin, GPIO_PIN_RESET)
|
||||
|
||||
// #define DEBUG1_HI() HAL_GPIO_WritePin(DEBUG1_GPIO_Port, DEBUG1_Pin, GPIO_PIN_SET)
|
||||
// #define DEBUG1_LOW() HAL_GPIO_WritePin(DEBUG1_GPIO_Port, DEBUG1_Pin, GPIO_PIN_RESET)
|
||||
|
||||
#define DEBUG0_HI() {}
|
||||
#define DEBUG0_LOW() {}
|
||||
|
||||
#define DEBUG1_HI() {}
|
||||
#define DEBUG1_LOW() {}
|
||||
|
||||
#define IS_ADB_HOST_PRESENT() HAL_GPIO_ReadPin(ADB_DET_GPIO_Port, ADB_DET_Pin)
|
||||
|
||||
#define KEY_DELETE 111
|
||||
#define KEY_CAPSLOCK 58
|
||||
#define KEY_LEFTCTRL 29
|
||||
#define KEY_LEFTSHIFT 42
|
||||
#define KEY_LEFTALT 56
|
||||
#define KEY_LEFTMETA 125
|
||||
#define KEY_NUMLOCK 69
|
||||
#define KEY_SCROLLLOCK 70
|
||||
|
||||
#define KEY_RIGHTCTRL 97
|
||||
#define KEY_RIGHTSHIFT 54
|
||||
#define KEY_RIGHTALT 100
|
||||
#define KEY_RIGHTMETA 126
|
||||
|
||||
#define ADB_CLK_35 34
|
||||
#define ADB_CLK_65 64
|
||||
#define EV_TO_ADB_LOOKUP_SIZE 186
|
||||
#define ADB_DEFAULT_TIMEOUT_US 10000
|
||||
#define ADB_KEY_UNKNOWN 255
|
||||
#define ADB_KEY_CAPSLOCK 57
|
||||
|
||||
void adb_init(GPIO_TypeDef* data_port, uint16_t data_pin, GPIO_TypeDef* psw_port, uint16_t psw_pin);
|
||||
uint8_t adb_recv_cmd(uint8_t* data);
|
||||
uint8_t parse_adb_cmd(uint8_t data);
|
||||
void adb_reset(void);
|
||||
void adb_release_lines(void);
|
||||
uint8_t adb_send_response_16b(uint16_t data);
|
||||
void send_srq(void);
|
||||
int32_t adb_wait_until_change(int32_t timeout_us);
|
||||
|
||||
extern uint8_t adb_mouse_current_addr, adb_kb_current_addr, adb_rw_in_progress;
|
||||
extern const uint8_t linux_ev_to_adb_lookup[EV_TO_ADB_LOOKUP_SIZE];
|
||||
extern uint16_t adb_kb_reg2;
|
||||
extern uint8_t adb_kb_enabled, adb_mouse_enabled;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -383,6 +383,30 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Inc\adb.h</PathWithFileName>
|
||||
<FilenameWithoutPath>adb.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Src\adb.c</PathWithFileName>
|
||||
<FilenameWithoutPath>adb.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
@@ -393,7 +417,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -405,7 +429,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -417,7 +441,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -429,7 +453,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -441,7 +465,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -453,7 +477,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -465,7 +489,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -477,7 +501,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -489,7 +513,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -501,7 +525,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -513,7 +537,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -525,7 +549,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -537,7 +561,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -549,7 +573,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -561,7 +585,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -573,7 +597,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -585,7 +609,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -597,7 +621,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileNumber>34</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -617,7 +641,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileNumber>35</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
||||
@@ -457,6 +457,16 @@
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Src/stm32f0xx_hal_msp.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>adb.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\Inc\adb.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>adb.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Src\adb.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
||||
BIN
firmware/apple_pre_usb/MDK-ARM/apple_all/adb.crf
Normal file
BIN
firmware/apple_pre_usb/MDK-ARM/apple_all/adb.crf
Normal file
Binary file not shown.
40
firmware/apple_pre_usb/MDK-ARM/apple_all/adb.d
Normal file
40
firmware/apple_pre_usb/MDK-ARM/apple_all/adb.d
Normal file
@@ -0,0 +1,40 @@
|
||||
apple_all\adb.o: ..\Src\adb.c
|
||||
apple_all\adb.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
apple_all\adb.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
|
||||
apple_all\adb.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
|
||||
apple_all\adb.o: ../Inc/helpers.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h
|
||||
apple_all\adb.o: ../Inc/stm32f0xx_hal_conf.h
|
||||
apple_all\adb.o: ../Inc/main.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h
|
||||
apple_all\adb.o: ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h
|
||||
apple_all\adb.o: ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f072xb.h
|
||||
apple_all\adb.o: ../Drivers/CMSIS/Include/core_cm0.h
|
||||
apple_all\adb.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
apple_all\adb.o: ../Drivers/CMSIS/Include/core_cmInstr.h
|
||||
apple_all\adb.o: ../Drivers/CMSIS/Include/cmsis_armcc.h
|
||||
apple_all\adb.o: ../Drivers/CMSIS/Include/core_cmFunc.h
|
||||
apple_all\adb.o: ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_spi.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_spi_ex.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h
|
||||
apple_all\adb.o: ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h
|
||||
apple_all\adb.o: ../Inc/shared.h
|
||||
apple_all\adb.o: ../Inc/adb.h
|
||||
apple_all\adb.o: ../Inc/delay_us.h
|
||||
BIN
firmware/apple_pre_usb/MDK-ARM/apple_all/adb.o
Normal file
BIN
firmware/apple_pre_usb/MDK-ARM/apple_all/adb.o
Normal file
Binary file not shown.
Binary file not shown.
@@ -22,17 +22,17 @@ Dialog DLL: TARMCM1.DLL V1.14.1.0
|
||||
|
||||
<h2>Project:</h2>
|
||||
C:\Users\allen\Desktop\repos\USB4VC\firmware\apple_pre_usb\MDK-ARM\apple_all.uvprojx
|
||||
Project File Date: 03/03/2023
|
||||
Project File Date: 03/04/2023
|
||||
|
||||
<h2>Output:</h2>
|
||||
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
|
||||
Build target 'apple_all'
|
||||
compiling main.c...
|
||||
../Src/main.c(435): warning: #188-D: enumerated type mixed with another type
|
||||
../Src/main.c(641): warning: #188-D: enumerated type mixed with another type
|
||||
HAL_GPIO_WritePin(ERR_LED_GPIO_Port, ERR_LED_Pin, spi_error_occured);
|
||||
../Src/main.c: 1 warning, 0 errors
|
||||
linking...
|
||||
Program Size: Code=11496 RO-data=944 RW-data=92 ZI-data=2204
|
||||
Program Size: Code=13548 RO-data=1132 RW-data=124 ZI-data=2204
|
||||
FromELF: creating hex file...
|
||||
"apple_all\apple_all.axf" - 0 Error(s), 1 Warning(s).
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,7 @@
|
||||
"apple_all\main.o"
|
||||
"apple_all\stm32f0xx_it.o"
|
||||
"apple_all\stm32f0xx_hal_msp.o"
|
||||
"apple_all\adb.o"
|
||||
"apple_all\stm32f0xx_hal_spi.o"
|
||||
"apple_all\stm32f0xx_hal_spi_ex.o"
|
||||
"apple_all\stm32f0xx_hal_rcc.o"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -194,7 +194,7 @@ I (../Inc/shared.h)(0x617487BD)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.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.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_ex.h)(0x5DFA0893)
|
||||
@@ -235,6 +235,7 @@ I (../Inc/helpers.h)(0x64015A0E)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h)(0x5DFA0893)
|
||||
@@ -302,6 +303,46 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
|
||||
I (../Inc/shared.h)(0x617487BD)
|
||||
I (../Inc/helpers.h)(0x64015A0E)
|
||||
I (../Inc/quad_encoder.h)(0x62E9EEF5)
|
||||
I (../Inc/m0110a.h)(0x64028814)
|
||||
I (../Inc/lisa_kb.h)(0x64026FB5)
|
||||
I (../Inc/adb.h)(0x64039017)
|
||||
F (../Src/stm32f0xx_it.c)(0x6401427F)(--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
|
||||
|
||||
-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\stm32f0xx_it.o --omf_browse apple_all\stm32f0xx_it.crf --depend apple_all\stm32f0xx_it.d)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h)(0x5DFA0893)
|
||||
I (../Inc/stm32f0xx_hal_conf.h)(0x64014280)
|
||||
I (../Inc/main.h)(0x64014280)
|
||||
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/Include/core_cm0.h)(0x5DFA0892)
|
||||
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5D9B4298)
|
||||
I (../Drivers/CMSIS/Include/core_cmInstr.h)(0x5DFA0892)
|
||||
I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x5DFA0892)
|
||||
I (../Drivers/CMSIS/Include/core_cmFunc.h)(0x5DFA0892)
|
||||
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h)(0x5DFA0880)
|
||||
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5D9B429A)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h)(0x5DFA0893)
|
||||
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.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)
|
||||
|
||||
Binary file not shown.
@@ -40,3 +40,4 @@ apple_all\main.o: ../Inc/helpers.h
|
||||
apple_all\main.o: ../Inc/quad_encoder.h
|
||||
apple_all\main.o: ../Inc/m0110a.h
|
||||
apple_all\main.o: ../Inc/lisa_kb.h
|
||||
apple_all\main.o: ../Inc/adb.h
|
||||
|
||||
Binary file not shown.
465
firmware/apple_pre_usb/Src/adb.c
Normal file
465
firmware/apple_pre_usb/Src/adb.c
Normal file
@@ -0,0 +1,465 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "helpers.h"
|
||||
#include "shared.h"
|
||||
#include "adb.h"
|
||||
#include "delay_us.h"
|
||||
|
||||
GPIO_TypeDef* adb_psw_port;
|
||||
uint16_t adb_psw_pin;
|
||||
GPIO_TypeDef* adb_data_port;
|
||||
uint16_t adb_data_pin;
|
||||
uint16_t adb_kb_reg2 = 0xffff; // all key released, all LED off
|
||||
uint8_t adb_mouse_current_addr, adb_kb_current_addr, adb_rw_in_progress;
|
||||
uint8_t adb_kb_enabled, adb_mouse_enabled;
|
||||
|
||||
#define ADB_PSW_HI() HAL_GPIO_WritePin(adb_psw_port, adb_psw_pin, GPIO_PIN_SET)
|
||||
#define ADB_PSW_LOW() HAL_GPIO_WritePin(adb_psw_port, adb_psw_pin, GPIO_PIN_RESET)
|
||||
|
||||
#define ADB_DATA_HI() HAL_GPIO_WritePin(adb_data_port, adb_data_pin, GPIO_PIN_SET)
|
||||
#define ADB_DATA_LOW() HAL_GPIO_WritePin(adb_data_port, adb_data_pin, GPIO_PIN_RESET)
|
||||
|
||||
#define ADB_READ_DATA_PIN() HAL_GPIO_ReadPin(adb_data_port, adb_data_pin)
|
||||
|
||||
const uint8_t linux_ev_to_adb_lookup[EV_TO_ADB_LOOKUP_SIZE] =
|
||||
{
|
||||
ADB_KEY_UNKNOWN, // EV0 KEY_RESERVED
|
||||
53, // EV1 KEY_ESC
|
||||
18, // EV2 KEY_1
|
||||
19, // EV3 KEY_2
|
||||
20, // EV4 KEY_3
|
||||
21, // EV5 KEY_4
|
||||
23, // EV6 KEY_5
|
||||
22, // EV7 KEY_6
|
||||
26, // EV8 KEY_7
|
||||
28, // EV9 KEY_8
|
||||
25, // EV10 KEY_9
|
||||
29, // EV11 KEY_0
|
||||
27, // EV12 KEY_MINUS
|
||||
24, // EV13 KEY_EQUAL
|
||||
51, // EV14 KEY_BACKSPACE
|
||||
48, // EV15 KEY_TAB
|
||||
12, // EV16 KEY_Q
|
||||
13, // EV17 KEY_W
|
||||
14, // EV18 KEY_E
|
||||
15, // EV19 KEY_R
|
||||
17, // EV20 KEY_T
|
||||
16, // EV21 KEY_Y
|
||||
32, // EV22 KEY_U
|
||||
34, // EV23 KEY_I
|
||||
31, // EV24 KEY_O
|
||||
35, // EV25 KEY_P
|
||||
33, // EV26 KEY_LEFTBRACE
|
||||
30, // EV27 KEY_RIGHTBRACE
|
||||
36, // EV28 KEY_ENTER
|
||||
54, // EV29 KEY_LEFTCTRL
|
||||
0, // EV30 KEY_A
|
||||
1, // EV31 KEY_S
|
||||
2, // EV32 KEY_D
|
||||
3, // EV33 KEY_F
|
||||
5, // EV34 KEY_G
|
||||
4, // EV35 KEY_H
|
||||
38, // EV36 KEY_J
|
||||
40, // EV37 KEY_K
|
||||
37, // EV38 KEY_L
|
||||
41, // EV39 KEY_SEMICOLON
|
||||
39, // EV40 KEY_APOSTROPHE
|
||||
50, // EV41 KEY_GRAVE
|
||||
56, // EV42 KEY_LEFTSHIFT
|
||||
ADB_KEY_UNKNOWN, // EV43 KEY_BACKSLASH
|
||||
6, // EV44 KEY_Z
|
||||
7, // EV45 KEY_X
|
||||
8, // EV46 KEY_C
|
||||
9, // EV47 KEY_V
|
||||
11, // EV48 KEY_B
|
||||
45, // EV49 KEY_N
|
||||
46, // EV50 KEY_M
|
||||
43, // EV51 KEY_COMMA
|
||||
47, // EV52 KEY_DOT
|
||||
44, // EV53 KEY_SLASH
|
||||
123, // EV54 KEY_RIGHTSHIFT
|
||||
67, // EV55 KEY_KPASTERISK
|
||||
58, // EV56 KEY_LEFTALT
|
||||
49, // EV57 KEY_SPACE
|
||||
57, // EV58 KEY_CAPSLOCK
|
||||
122, // EV59 KEY_F1
|
||||
120, // EV60 KEY_F2
|
||||
99, // EV61 KEY_F3
|
||||
118, // EV62 KEY_F4
|
||||
96, // EV63 KEY_F5
|
||||
97, // EV64 KEY_F6
|
||||
98, // EV65 KEY_F7
|
||||
100, // EV66 KEY_F8
|
||||
101, // EV67 KEY_F9
|
||||
109, // EV68 KEY_F10
|
||||
71, // EV69 KEY_NUMLOCK
|
||||
ADB_KEY_UNKNOWN, // EV70 KEY_SCROLLLOCK
|
||||
89, // EV71 KEY_KP7
|
||||
91, // EV72 KEY_KP8
|
||||
92, // EV73 KEY_KP9
|
||||
78, // EV74 KEY_KPMINUS
|
||||
86, // EV75 KEY_KP4
|
||||
87, // EV76 KEY_KP5
|
||||
88, // EV77 KEY_KP6
|
||||
69, // EV78 KEY_KPPLUS
|
||||
83, // EV79 KEY_KP1
|
||||
84, // EV80 KEY_KP2
|
||||
85, // EV81 KEY_KP3
|
||||
82, // EV82 KEY_KP0
|
||||
65, // EV83 KEY_KPDOT
|
||||
ADB_KEY_UNKNOWN, // EV84 UNKNOWN
|
||||
ADB_KEY_UNKNOWN, // EV85 KEY_ZENKAKUHANKAKU
|
||||
10, // EV86 KEY_102ND
|
||||
103, // EV87 KEY_F11
|
||||
111, // EV88 KEY_F12
|
||||
ADB_KEY_UNKNOWN, // EV89 KEY_RO
|
||||
ADB_KEY_UNKNOWN, // EV90 KEY_KATAKANA
|
||||
ADB_KEY_UNKNOWN, // EV91 KEY_HIRAGANA
|
||||
ADB_KEY_UNKNOWN, // EV92 KEY_HENKAN
|
||||
ADB_KEY_UNKNOWN, // EV93 KEY_KATAKANAHIRAGANA
|
||||
ADB_KEY_UNKNOWN, // EV94 KEY_MUHENKAN
|
||||
ADB_KEY_UNKNOWN, // EV95 KEY_KPJPCOMMA
|
||||
76, // EV96 KEY_KPENTER
|
||||
125, // EV97 KEY_RIGHTCTRL
|
||||
75, // EV98 KEY_KPSLASH
|
||||
ADB_KEY_UNKNOWN, // EV99 KEY_SYSRQ
|
||||
124, // EV100 KEY_RIGHTALT
|
||||
ADB_KEY_UNKNOWN, // EV101 KEY_LINEFEED
|
||||
115, // EV102 KEY_HOME
|
||||
62, // EV103 KEY_UP
|
||||
116, // EV104 KEY_PAGEUP
|
||||
59, // EV105 KEY_LEFT
|
||||
60, // EV106 KEY_RIGHT
|
||||
119, // EV107 KEY_END
|
||||
61, // EV108 KEY_DOWN
|
||||
121, // EV109 KEY_PAGEDOWN
|
||||
114, // EV110 KEY_INSERT
|
||||
117, // EV111 KEY_DELETE
|
||||
ADB_KEY_UNKNOWN, // EV112 KEY_MACRO
|
||||
ADB_KEY_UNKNOWN, // EV113 KEY_MUTE
|
||||
ADB_KEY_UNKNOWN, // EV114 KEY_VOLUMEDOWN
|
||||
ADB_KEY_UNKNOWN, // EV115 KEY_VOLUMEUP
|
||||
127, // EV116 KEY_POWER
|
||||
81, // EV117 KEY_KPEQUAL
|
||||
ADB_KEY_UNKNOWN, // EV118 KEY_KPPLUSMINUS
|
||||
ADB_KEY_UNKNOWN, // EV119 KEY_PAUSE
|
||||
ADB_KEY_UNKNOWN, // EV120 KEY_SCALE
|
||||
ADB_KEY_UNKNOWN, // EV121 KEY_KPCOMMA
|
||||
ADB_KEY_UNKNOWN, // EV122 KEY_HANGEUL
|
||||
ADB_KEY_UNKNOWN, // EV123 KEY_HANJA
|
||||
ADB_KEY_UNKNOWN, // EV124 KEY_YEN
|
||||
55, // EV125 KEY_LEFTMETA
|
||||
ADB_KEY_UNKNOWN, // EV126 KEY_RIGHTMETA
|
||||
ADB_KEY_UNKNOWN, // EV127 KEY_COMPOSE
|
||||
ADB_KEY_UNKNOWN, // EV128 KEY_STOP
|
||||
ADB_KEY_UNKNOWN, // EV129 KEY_AGAIN
|
||||
ADB_KEY_UNKNOWN, // EV130 KEY_PROPS
|
||||
ADB_KEY_UNKNOWN, // EV131 KEY_UNDO
|
||||
ADB_KEY_UNKNOWN, // EV132 KEY_FRONT
|
||||
ADB_KEY_UNKNOWN, // EV133 KEY_COPY
|
||||
ADB_KEY_UNKNOWN, // EV134 KEY_OPEN
|
||||
ADB_KEY_UNKNOWN, // EV135 KEY_PASTE
|
||||
ADB_KEY_UNKNOWN, // EV136 KEY_FIND
|
||||
ADB_KEY_UNKNOWN, // EV137 KEY_CUT
|
||||
ADB_KEY_UNKNOWN, // EV138 KEY_HELP
|
||||
ADB_KEY_UNKNOWN, // EV139 KEY_MENU
|
||||
ADB_KEY_UNKNOWN, // EV140 KEY_CALC
|
||||
ADB_KEY_UNKNOWN, // EV141 KEY_SETUP
|
||||
ADB_KEY_UNKNOWN, // EV142 KEY_SLEEP
|
||||
ADB_KEY_UNKNOWN, // EV143 KEY_WAKEUP
|
||||
ADB_KEY_UNKNOWN, // EV144 KEY_FILE
|
||||
ADB_KEY_UNKNOWN, // EV145 KEY_SENDFILE
|
||||
ADB_KEY_UNKNOWN, // EV146 KEY_DELETEFILE
|
||||
ADB_KEY_UNKNOWN, // EV147 KEY_XFER
|
||||
ADB_KEY_UNKNOWN, // EV148 KEY_PROG1
|
||||
ADB_KEY_UNKNOWN, // EV149 KEY_PROG2
|
||||
ADB_KEY_UNKNOWN, // EV150 KEY_WWW
|
||||
ADB_KEY_UNKNOWN, // EV151 KEY_MSDOS
|
||||
ADB_KEY_UNKNOWN, // EV152 KEY_COFFEE
|
||||
ADB_KEY_UNKNOWN, // EV153 KEY_ROTATE_DISPLAY
|
||||
ADB_KEY_UNKNOWN, // EV154 KEY_CYCLEWINDOWS
|
||||
ADB_KEY_UNKNOWN, // EV155 KEY_MAIL
|
||||
ADB_KEY_UNKNOWN, // EV156 KEY_BOOKMARKS
|
||||
ADB_KEY_UNKNOWN, // EV157 KEY_COMPUTER
|
||||
ADB_KEY_UNKNOWN, // EV158 KEY_BACK
|
||||
ADB_KEY_UNKNOWN, // EV159 KEY_FORWARD
|
||||
ADB_KEY_UNKNOWN, // EV160 KEY_CLOSECD
|
||||
ADB_KEY_UNKNOWN, // EV161 KEY_EJECTCD
|
||||
ADB_KEY_UNKNOWN, // EV162 KEY_EJECTCLOSECD
|
||||
ADB_KEY_UNKNOWN, // EV163 KEY_NEXTSONG
|
||||
ADB_KEY_UNKNOWN, // EV164 KEY_PLAYPAUSE
|
||||
ADB_KEY_UNKNOWN, // EV165 KEY_PREVIOUSSONG
|
||||
ADB_KEY_UNKNOWN, // EV166 KEY_STOPCD
|
||||
ADB_KEY_UNKNOWN, // EV167 KEY_RECORD
|
||||
ADB_KEY_UNKNOWN, // EV168 KEY_REWIND
|
||||
ADB_KEY_UNKNOWN, // EV169 KEY_PHONE
|
||||
ADB_KEY_UNKNOWN, // EV170 KEY_ISO
|
||||
ADB_KEY_UNKNOWN, // EV171 KEY_CONFIG
|
||||
ADB_KEY_UNKNOWN, // EV172 KEY_HOMEPAGE
|
||||
ADB_KEY_UNKNOWN, // EV173 KEY_REFRESH
|
||||
ADB_KEY_UNKNOWN, // EV174 KEY_EXIT
|
||||
ADB_KEY_UNKNOWN, // EV175 KEY_MOVE
|
||||
ADB_KEY_UNKNOWN, // EV176 KEY_EDIT
|
||||
ADB_KEY_UNKNOWN, // EV177 KEY_SCROLLUP
|
||||
ADB_KEY_UNKNOWN, // EV178 KEY_SCROLLDOWN
|
||||
ADB_KEY_UNKNOWN, // EV179 KEY_KPLEFTPAREN
|
||||
ADB_KEY_UNKNOWN, // EV180 KEY_KPRIGHTPAREN
|
||||
ADB_KEY_UNKNOWN, // EV181 KEY_NEW
|
||||
ADB_KEY_UNKNOWN, // EV182 KEY_REDO
|
||||
105, // EV183 KEY_F13
|
||||
107, // EV184 KEY_F14
|
||||
113, // EV185 KEY_F15
|
||||
};
|
||||
|
||||
void adb_release_lines(void)
|
||||
{
|
||||
ADB_PSW_HI();
|
||||
ADB_DATA_HI();
|
||||
}
|
||||
|
||||
void adb_reset(void)
|
||||
{
|
||||
adb_kb_current_addr = ADB_KB_DEFAULT_ADDR;
|
||||
adb_mouse_current_addr = ADB_MOUSE_DEFAULT_ADDR;
|
||||
adb_release_lines();
|
||||
}
|
||||
|
||||
void adb_init(GPIO_TypeDef* data_port, uint16_t data_pin, GPIO_TypeDef* psw_port, uint16_t psw_pin)
|
||||
{
|
||||
adb_psw_port = psw_port;
|
||||
adb_psw_pin = psw_pin;
|
||||
adb_data_port = data_port;
|
||||
adb_data_pin = data_pin;
|
||||
adb_reset();
|
||||
}
|
||||
|
||||
int32_t adb_wait_until_change(int32_t timeout_us)
|
||||
{
|
||||
uint32_t start_time = micros();
|
||||
uint8_t start_state = ADB_READ_DATA_PIN();
|
||||
uint32_t duration;
|
||||
while(ADB_READ_DATA_PIN() == start_state)
|
||||
{
|
||||
duration = micros() - start_time;
|
||||
if(timeout_us != 0 && duration > timeout_us)
|
||||
return ADB_TIMEOUT;
|
||||
}
|
||||
return duration;
|
||||
}
|
||||
|
||||
uint8_t look_for_atten(void)
|
||||
{
|
||||
// if ADB data line is high
|
||||
if(ADB_READ_DATA_PIN() == GPIO_PIN_SET && adb_wait_until_change(ADB_DEFAULT_TIMEOUT_US) == ADB_TIMEOUT)
|
||||
return ADB_TIMEOUT;
|
||||
// now data line is low
|
||||
adb_rw_in_progress = 1;
|
||||
int32_t atten_duration = adb_wait_until_change(ADB_DEFAULT_TIMEOUT_US);
|
||||
if(atten_duration > 2000 || atten_duration == ADB_TIMEOUT)
|
||||
return ADB_LINE_STATUS_RESET;
|
||||
if(atten_duration < 500)
|
||||
return ADB_LINE_STATUS_BUSY; // not an attention signal
|
||||
return ADB_LINE_STATUS_ATTEN;
|
||||
}
|
||||
|
||||
uint8_t adb_read_bit(void)
|
||||
{
|
||||
if(ADB_READ_DATA_PIN() != GPIO_PIN_RESET)
|
||||
return ADB_ERROR;
|
||||
int32_t lo_time = adb_wait_until_change(ADB_DEFAULT_TIMEOUT_US);
|
||||
int32_t hi_time = adb_wait_until_change(ADB_DEFAULT_TIMEOUT_US);
|
||||
if(lo_time == ADB_TIMEOUT || hi_time == ADB_TIMEOUT)
|
||||
return ADB_ERROR;
|
||||
return hi_time > lo_time;
|
||||
}
|
||||
|
||||
uint8_t adb_recv_cmd(uint8_t* data)
|
||||
{
|
||||
*data = 0;
|
||||
uint8_t atten_result = look_for_atten();
|
||||
if(atten_result != ADB_LINE_STATUS_ATTEN)
|
||||
return atten_result;
|
||||
int32_t sync_duration = adb_wait_until_change(ADB_DEFAULT_TIMEOUT_US);
|
||||
if(sync_duration > 90 || sync_duration < 50)
|
||||
return ADB_ERROR;
|
||||
|
||||
uint8_t temp = 0;
|
||||
PCARD_BUSY_HI();
|
||||
for (int i = 0; i < 8; ++i)
|
||||
{
|
||||
uint8_t this_bit = adb_read_bit();
|
||||
if(this_bit == ADB_ERROR)
|
||||
return ADB_ERROR;
|
||||
temp |= this_bit << (7 - i);
|
||||
}
|
||||
PCARD_BUSY_LOW();
|
||||
*data = temp;
|
||||
return ADB_OK;
|
||||
}
|
||||
|
||||
uint8_t adb_write_byte(uint8_t data)
|
||||
{
|
||||
for (int i = 0; i < 8; ++i)
|
||||
{
|
||||
if((data >> (7-i)) & 0x1)
|
||||
{
|
||||
ADB_DATA_LOW();
|
||||
delay_us(ADB_CLK_35);
|
||||
ADB_DATA_HI();
|
||||
// if the line doesnt actually go high, then there has been a bus collision
|
||||
if(ADB_READ_DATA_PIN() != GPIO_PIN_SET)
|
||||
return ADB_LINE_STATUS_COLLISION;
|
||||
delay_us(ADB_CLK_65);
|
||||
}
|
||||
else
|
||||
{
|
||||
ADB_DATA_LOW();
|
||||
delay_us(ADB_CLK_65);
|
||||
ADB_DATA_HI();
|
||||
if(ADB_READ_DATA_PIN() != GPIO_PIN_SET)
|
||||
return ADB_LINE_STATUS_COLLISION;
|
||||
delay_us(ADB_CLK_35);
|
||||
}
|
||||
}
|
||||
return ADB_OK;
|
||||
}
|
||||
|
||||
uint8_t adb_write_16(uint16_t data)
|
||||
{
|
||||
PCARD_BUSY_HI();
|
||||
if(adb_write_byte((uint8_t)(data >> 8)) == ADB_LINE_STATUS_COLLISION) // MSB
|
||||
{
|
||||
PCARD_BUSY_LOW();
|
||||
return ADB_LINE_STATUS_COLLISION;
|
||||
}
|
||||
if(adb_write_byte((uint8_t)(data & 0xff)) == ADB_LINE_STATUS_COLLISION) // LSB
|
||||
{
|
||||
PCARD_BUSY_LOW();
|
||||
return ADB_LINE_STATUS_COLLISION;
|
||||
}
|
||||
PCARD_BUSY_LOW();
|
||||
return ADB_OK;
|
||||
}
|
||||
|
||||
// to be called right after a LISTEN command from host
|
||||
uint8_t adb_send_response_16b(uint16_t data)
|
||||
{
|
||||
adb_rw_in_progress = 1;
|
||||
delay_us(200); // stop-to-start time
|
||||
ADB_DATA_LOW();
|
||||
delay_us(ADB_CLK_35);
|
||||
ADB_DATA_HI();
|
||||
delay_us(ADB_CLK_65);
|
||||
if(adb_write_16(data) == ADB_LINE_STATUS_COLLISION)
|
||||
{
|
||||
adb_rw_in_progress = 0;
|
||||
return ADB_LINE_STATUS_COLLISION;
|
||||
}
|
||||
ADB_DATA_LOW();
|
||||
delay_us(ADB_CLK_65);
|
||||
ADB_DATA_HI();
|
||||
adb_rw_in_progress = 0;
|
||||
return ADB_OK;
|
||||
}
|
||||
|
||||
uint8_t adb_listen_16b(uint16_t* data)
|
||||
{
|
||||
*data = 0;
|
||||
if(ADB_READ_DATA_PIN() != GPIO_PIN_SET)
|
||||
return ADB_ERROR;
|
||||
// stop-to-start
|
||||
if(adb_wait_until_change(ADB_DEFAULT_TIMEOUT_US) == ADB_TIMEOUT)
|
||||
return ADB_ERROR;
|
||||
// start pulse
|
||||
if(adb_wait_until_change(ADB_DEFAULT_TIMEOUT_US) == ADB_TIMEOUT)
|
||||
return ADB_ERROR;
|
||||
if(adb_wait_until_change(ADB_DEFAULT_TIMEOUT_US) == ADB_TIMEOUT)
|
||||
return ADB_ERROR;
|
||||
|
||||
uint16_t temp = 0;
|
||||
PCARD_BUSY_HI();
|
||||
for (int i = 0; i < 16; ++i)
|
||||
{
|
||||
uint8_t this_bit = adb_read_bit();
|
||||
if(this_bit == ADB_ERROR)
|
||||
return ADB_ERROR;
|
||||
temp |= this_bit << (15 - i);
|
||||
}
|
||||
PCARD_BUSY_LOW();
|
||||
adb_wait_until_change(ADB_DEFAULT_TIMEOUT_US);
|
||||
*data = temp;
|
||||
return ADB_OK;
|
||||
}
|
||||
|
||||
// addr 2 keyboard, 3 mouse
|
||||
uint8_t parse_adb_cmd(uint8_t data)
|
||||
{
|
||||
uint8_t addr = data >> 4;
|
||||
uint8_t cmd = (data >> 2) & 0x3;
|
||||
uint8_t reg = data & 0x3;
|
||||
|
||||
if(addr == 0)
|
||||
return ADB_ERROR;
|
||||
|
||||
if(cmd == ADB_CMD_TYPE_TALK && reg == 3 && addr == adb_mouse_current_addr && adb_mouse_enabled)
|
||||
{
|
||||
uint16_t response = 0x6001; // 0110 0000 0000 0001, device handler 0x1, 100dps apple desktop bus mouse
|
||||
uint16_t rand_id = (rand() % 0xf) << 8;
|
||||
response |= rand_id;
|
||||
adb_send_response_16b(response);
|
||||
}
|
||||
|
||||
if(cmd == ADB_CMD_TYPE_TALK && reg == 3 && addr == adb_kb_current_addr && adb_kb_enabled)
|
||||
{
|
||||
uint16_t response = 0x6005; // 0110 0000 0000 0101, device handler 0x5, appledesign keyboard
|
||||
uint16_t rand_id = (rand() % 0xf) << 8;
|
||||
response |= rand_id;
|
||||
adb_send_response_16b(response);
|
||||
}
|
||||
|
||||
if(cmd == ADB_CMD_TYPE_LISTEN && reg == 3 && addr == adb_mouse_current_addr)
|
||||
{
|
||||
uint16_t host_cmd;
|
||||
adb_listen_16b(&host_cmd);
|
||||
if((host_cmd & ADB_CHANGE_ADDR) == ADB_CHANGE_ADDR)
|
||||
adb_mouse_current_addr = (host_cmd & 0xf00) >> 8;
|
||||
}
|
||||
|
||||
if(cmd == ADB_CMD_TYPE_LISTEN && reg == 3 && addr == adb_kb_current_addr)
|
||||
{
|
||||
uint16_t host_cmd;
|
||||
adb_listen_16b(&host_cmd);
|
||||
if((host_cmd & ADB_CHANGE_ADDR) == ADB_CHANGE_ADDR)
|
||||
adb_kb_current_addr = (host_cmd & 0xf00) >> 8;
|
||||
}
|
||||
|
||||
if(cmd == ADB_CMD_TYPE_TALK && reg == 0 && addr == adb_mouse_current_addr)
|
||||
return ADB_MOUSE_POLL;
|
||||
|
||||
if(cmd == ADB_CMD_TYPE_TALK && reg == 0 && addr == adb_kb_current_addr)
|
||||
return ADB_KB_POLL;
|
||||
|
||||
if(cmd == ADB_CMD_TYPE_TALK && reg == 2 && addr == adb_kb_current_addr)
|
||||
return ADB_KB_POLL_REG2;
|
||||
|
||||
if(cmd == ADB_CMD_TYPE_LISTEN && reg == 2 && addr == adb_kb_current_addr)
|
||||
{
|
||||
DEBUG1_HI();
|
||||
adb_listen_16b(&adb_kb_reg2);
|
||||
DEBUG1_LOW();
|
||||
return ADB_KB_CHANGE_LED;
|
||||
}
|
||||
return ADB_OK;
|
||||
}
|
||||
|
||||
void send_srq(void)
|
||||
{
|
||||
ADB_DATA_LOW();
|
||||
delay_us(300);
|
||||
ADB_DATA_HI();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "quad_encoder.h"
|
||||
#include "m0110a.h"
|
||||
#include "lisa_kb.h"
|
||||
#include "adb.h"
|
||||
|
||||
#define PROTOCOL_STATUS_NOT_AVAILABLE 0
|
||||
#define PROTOCOL_STATUS_ENABLED 1
|
||||
@@ -118,13 +119,20 @@ int16_t byte_to_int16_t(uint8_t lsb, uint8_t msb)
|
||||
void protocol_status_lookup_init(void)
|
||||
{
|
||||
memset(protocol_status_lookup, PROTOCOL_STATUS_NOT_AVAILABLE, PROTOCOL_LOOKUP_SIZE);
|
||||
protocol_status_lookup[PROTOCOL_ADB_KB] = PROTOCOL_STATUS_DISABLED;
|
||||
protocol_status_lookup[PROTOCOL_ADB_MOUSE] = PROTOCOL_STATUS_DISABLED;
|
||||
protocol_status_lookup[PROTOCOL_M0100_MOUSE] = PROTOCOL_STATUS_ENABLED;
|
||||
protocol_status_lookup[PROTOCOL_M0110_KB] = PROTOCOL_STATUS_ENABLED;
|
||||
protocol_status_lookup[PROTOCOL_ADB_KB] = PROTOCOL_STATUS_ENABLED;
|
||||
protocol_status_lookup[PROTOCOL_ADB_MOUSE] = PROTOCOL_STATUS_ENABLED;
|
||||
protocol_status_lookup[PROTOCOL_M0100_MOUSE] = PROTOCOL_STATUS_DISABLED;
|
||||
protocol_status_lookup[PROTOCOL_M0110_KB] = PROTOCOL_STATUS_DISABLED;
|
||||
protocol_status_lookup[PROTOCOL_LISA_KB] = PROTOCOL_STATUS_DISABLED;
|
||||
}
|
||||
|
||||
uint8_t is_protocol_enabled(uint8_t this_protocol)
|
||||
{
|
||||
if(this_protocol >= PROTOCOL_LOOKUP_SIZE)
|
||||
return 0;
|
||||
return protocol_status_lookup[this_protocol] == PROTOCOL_STATUS_ENABLED;
|
||||
}
|
||||
|
||||
void handle_protocol_switch(uint8_t spi_byte)
|
||||
{
|
||||
uint8_t index = spi_byte & 0x7f;
|
||||
@@ -374,6 +382,199 @@ void run_mac_kb(void)
|
||||
m0100a_handle_inquiry();
|
||||
}
|
||||
|
||||
uint8_t int16_to_uint6(int16_t value)
|
||||
{
|
||||
if(abs(value) <= 3)
|
||||
return (uint8_t)value;
|
||||
value = value >> 1;
|
||||
if(value >= 63)
|
||||
value = 63;
|
||||
if(value <= -63)
|
||||
value = -63;
|
||||
return (uint8_t)value;
|
||||
}
|
||||
|
||||
void adb_mouse_update(void)
|
||||
{
|
||||
if(mouse_buf_peek(&my_mouse_buf) == NULL)
|
||||
return;
|
||||
|
||||
get_consolidated_mouse_event(&my_mouse_buf, &consolidated_mouse_event);
|
||||
// mouse buffer now empty
|
||||
|
||||
uint16_t response = 0;
|
||||
if(consolidated_mouse_event.button_left == 0)
|
||||
response |= 0x8000;
|
||||
if(consolidated_mouse_event.button_right == 0)
|
||||
response |= 0x80;
|
||||
response |= int16_to_uint6(consolidated_mouse_event.movement_x) & 0x7f;
|
||||
response |= (int16_to_uint6(consolidated_mouse_event.movement_y) & 0x7f) << 8;
|
||||
adb_send_response_16b(response);
|
||||
}
|
||||
|
||||
uint8_t capslock_counter;
|
||||
void adb_keyboard_update(void)
|
||||
{
|
||||
uint8_t buffered_code, buffered_value, adb_code;
|
||||
uint16_t response = 0x8080;
|
||||
if(kb_buf_peek(&my_kb_buf, &buffered_code, &buffered_value) == 0)
|
||||
{
|
||||
if(buffered_code >= EV_TO_ADB_LOOKUP_SIZE)
|
||||
goto adb_kb_end;
|
||||
adb_code = linux_ev_to_adb_lookup[buffered_code];
|
||||
if(adb_code == ADB_KEY_UNKNOWN)
|
||||
goto adb_kb_end;
|
||||
/*
|
||||
adb mac keyboard capslock key seems to behave differently than PC keyboards
|
||||
On PC: Capslock down then up = Caps lock on, Capslock down then up again = Caps lock off
|
||||
on adb mac: Capslock down = Capslock on, Capslock up = Caps lock off
|
||||
looks like mac keyboard uses a locking capslock, so need to convert the PC code to suit
|
||||
*/
|
||||
if(adb_code == ADB_KEY_CAPSLOCK)
|
||||
{
|
||||
if(buffered_value != 1)
|
||||
goto adb_kb_end;
|
||||
capslock_counter++;
|
||||
buffered_value = capslock_counter % 2;
|
||||
}
|
||||
if(buffered_value)
|
||||
response &= 0x7fff;
|
||||
response |= ((uint16_t)adb_code & 0x7f) << 8;
|
||||
adb_send_response_16b(response);
|
||||
adb_kb_end:
|
||||
kb_buf_pop(&my_kb_buf);
|
||||
|
||||
if(buffered_code == KEY_DELETE)
|
||||
{
|
||||
if(buffered_value == 0)
|
||||
adb_kb_reg2 |= 0x4000;
|
||||
else
|
||||
adb_kb_reg2 &= 0xbfff;
|
||||
}
|
||||
if(buffered_code == KEY_CAPSLOCK)
|
||||
{
|
||||
if(buffered_value == 0)
|
||||
adb_kb_reg2 |= 0x2000;
|
||||
else
|
||||
adb_kb_reg2 &= 0xdfff;
|
||||
}
|
||||
if(buffered_code == KEY_LEFTCTRL || buffered_code == KEY_RIGHTCTRL)
|
||||
{
|
||||
if(buffered_value == 0)
|
||||
adb_kb_reg2 |= 0x800;
|
||||
else
|
||||
adb_kb_reg2 &= 0xf7ff;
|
||||
}
|
||||
if(buffered_code == KEY_LEFTSHIFT || buffered_code == KEY_RIGHTSHIFT)
|
||||
{
|
||||
if(buffered_value == 0)
|
||||
adb_kb_reg2 |= 0x400;
|
||||
else
|
||||
adb_kb_reg2 &= 0xfbff;
|
||||
}
|
||||
if(buffered_code == KEY_LEFTALT || buffered_code == KEY_RIGHTALT)
|
||||
{
|
||||
if(buffered_value == 0)
|
||||
adb_kb_reg2 |= 0x200;
|
||||
else
|
||||
adb_kb_reg2 &= 0xfdff;
|
||||
}
|
||||
if(buffered_code == KEY_LEFTMETA || buffered_code == KEY_RIGHTMETA)
|
||||
{
|
||||
if(buffered_value == 0)
|
||||
adb_kb_reg2 |= 0x100;
|
||||
else
|
||||
adb_kb_reg2 &= 0xfeff;
|
||||
}
|
||||
// if(buffered_code == KEY_NUMLOCK)
|
||||
// {
|
||||
// if(buffered_value == 0)
|
||||
// adb_kb_reg2 |= 0x80;
|
||||
// else
|
||||
// adb_kb_reg2 &= 0xff7f;
|
||||
// }
|
||||
// if(buffered_code == KEY_SCROLLLOCK)
|
||||
// {
|
||||
// if(buffered_value == 0)
|
||||
// adb_kb_reg2 |= 0x40;
|
||||
// else
|
||||
// adb_kb_reg2 &= 0xffbf;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t adb_data, adb_status, this_addr, kb_srq, mouse_srq;
|
||||
|
||||
void run_adb(void)
|
||||
{
|
||||
if(IS_ADB_HOST_PRESENT() == 0)
|
||||
return;
|
||||
|
||||
adb_kb_enabled = is_protocol_enabled(PROTOCOL_ADB_KB);
|
||||
adb_mouse_enabled = is_protocol_enabled(PROTOCOL_ADB_MOUSE);
|
||||
|
||||
if(adb_kb_enabled == 0 && adb_mouse_enabled == 0)
|
||||
{
|
||||
adb_reset();
|
||||
return;
|
||||
}
|
||||
|
||||
adb_status = adb_recv_cmd(&adb_data);
|
||||
adb_rw_in_progress = 0;
|
||||
if(adb_status == ADB_LINE_STATUS_RESET)
|
||||
{
|
||||
adb_reset();
|
||||
}
|
||||
else if(adb_status != ADB_OK)
|
||||
{
|
||||
adb_reset();
|
||||
return;
|
||||
}
|
||||
|
||||
// we are just at the end of a ADB command, check address, assert SRQ if needed
|
||||
this_addr = adb_data >> 4;
|
||||
if(!kb_buf_is_empty(&my_kb_buf))
|
||||
{
|
||||
kb_srq = (this_addr != adb_kb_current_addr);
|
||||
}
|
||||
else if(!mouse_buf_is_empty(&my_mouse_buf))
|
||||
{
|
||||
mouse_srq = (this_addr != adb_mouse_current_addr);
|
||||
}
|
||||
else
|
||||
{
|
||||
kb_srq = 0;
|
||||
mouse_srq = 0;
|
||||
}
|
||||
|
||||
if((kb_srq && adb_kb_enabled) || (mouse_srq && adb_mouse_enabled))
|
||||
send_srq();
|
||||
else
|
||||
adb_wait_until_change(ADB_DEFAULT_TIMEOUT_US);
|
||||
|
||||
adb_status = parse_adb_cmd(adb_data);
|
||||
if(adb_status == ADB_MOUSE_POLL && adb_mouse_enabled)
|
||||
adb_mouse_update();
|
||||
else if(adb_status == ADB_KB_POLL && adb_kb_enabled)
|
||||
adb_keyboard_update();
|
||||
else if(adb_status == ADB_KB_POLL_REG2 && adb_kb_enabled)
|
||||
adb_send_response_16b(adb_kb_reg2);
|
||||
else if(adb_status == ADB_KB_CHANGE_LED)
|
||||
{
|
||||
// kb reg2 top 13 bits is button status, 1 = released 0 = pressed
|
||||
// bottom 3 bits is LED, 1 = off, 0 = on
|
||||
memset(spi_transmit_buf, 0, SPI_BUF_SIZE);
|
||||
spi_transmit_buf[SPI_BUF_INDEX_MAGIC] = SPI_MISO_MAGIC;
|
||||
spi_transmit_buf[SPI_BUF_INDEX_MSG_TYPE] = SPI_MISO_MSG_TYPE_KB_LED_REQUEST;
|
||||
if(!(adb_kb_reg2 & 0x4)) // scroll lock LED
|
||||
spi_transmit_buf[3] = 1;
|
||||
if(!(adb_kb_reg2 & 0x1)) // num lock LED
|
||||
spi_transmit_buf[4] = 1;
|
||||
if(!(adb_kb_reg2 & 0x2)) // caps lock LED
|
||||
spi_transmit_buf[5] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/**
|
||||
@@ -422,9 +623,14 @@ int main(void)
|
||||
memset(spi_transmit_buf, 0, SPI_BUF_SIZE);
|
||||
HAL_SPI_TransmitReceive_IT(&hspi1, spi_transmit_buf, spi_recv_buf, SPI_BUF_SIZE);
|
||||
|
||||
quad_init(&my_mouse_buf, &htim17, &htim16, &htim14, GPIOA, GPIO_PIN_8, GPIOB, GPIO_PIN_14, GPIOB, GPIO_PIN_15, GPIOB, GPIO_PIN_12);
|
||||
quad_enable();
|
||||
lisa_init(&lh);
|
||||
adb_init(ADB_DATA_GPIO_Port, ADB_DATA_Pin, ADB_PWR_GPIO_Port, ADB_PWR_Pin);
|
||||
quad_init(&my_mouse_buf, &htim17, &htim16, &htim14, GPIOA, GPIO_PIN_8, GPIOB, GPIO_PIN_14, GPIOB, GPIO_PIN_15, GPIOB, GPIO_PIN_12);
|
||||
if(is_protocol_enabled(PROTOCOL_M0100_MOUSE))
|
||||
quad_enable();
|
||||
else
|
||||
quad_disable();
|
||||
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
@@ -438,7 +644,7 @@ int main(void)
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
|
||||
run_adb();
|
||||
run_mac_kb();
|
||||
run_lisa_kb();
|
||||
HAL_SPI_TransmitReceive_IT(&hspi1, spi_transmit_buf, spi_recv_buf, SPI_BUF_SIZE);
|
||||
|
||||
Reference in New Issue
Block a user