Compare commits

...

21 Commits

Author SHA1 Message Date
Ben V. Brown 2cc53ca4f5 Merge branch 'main' of github.com:Ralim/PineBuds-Open-SDK 2022-12-30 23:19:45 +11:00
Ben V. Brown 65de1f6637
Merge pull request #3 from Laar3/main
Added script to convert wav files for use in firmware.
2022-12-30 23:19:33 +11:00
Laar3 cab6c2c429 added script to convert wav files for use in firmware. 2022-12-30 22:41:52 +10:30
Ben V. Brown 8bdaa27267 Remove old button handlers 2022-12-30 22:57:25 +11:00
Ben V. Brown 8838372781 Long hold => ANC 2022-12-30 22:42:58 +11:00
Ben V. Brown 5af64d048c Update README.md 2022-12-30 22:33:47 +11:00
Ben V. Brown bce934e8ca Add handlers for forward/reverse events 2022-12-30 22:24:39 +11:00
Ben V. Brown 1c7d914285 Update hal_key.h 2022-12-30 22:23:34 +11:00
Ben V. Brown 1e0e9848ca Update README.md 2022-12-30 21:11:11 +11:00
Joe Maples ebc8e23da0 Redo the EQ, big improvement
Configured Peace to gernerate peak filters, and all 13 bands it provides by default
2022-12-30 21:09:49 +11:00
Joe Maples 24ffc8f78b Add custom EQ values
Signed-off-by: Joe Maples <joe@maples.dev>
2022-12-30 21:09:40 +11:00
Ben V. Brown 87ba448f54 TWS swap more reliable 2022-12-30 21:01:38 +11:00
Ben V. Brown bc29fb1aaa use local vol change 2022-12-30 20:30:59 +11:00
Ben V. Brown e426342bc1 have to be a better mock
It seems to assert >0 for success
2022-12-30 20:30:51 +11:00
Ben V. Brown 06543e9899 Stubs for anc to build with keyboard off 2022-12-30 20:23:10 +11:00
Ben V. Brown 19df067d84 Turn on indicators; turn off debug bt addr; turn off enumeration as a keyboard 2022-12-30 20:22:47 +11:00
Ben V. Brown 28c94ee276 Perform TWS handoff before shutting down the bud
Fixes audio pausing when you put one of them away
2022-12-29 23:17:17 +11:00
Ben V. Brown 34f5e0cd55 Reworking touch controls Part 1
Working:
Play pause
Previous/Next
Single or paired bud mode
2022-12-29 23:16:34 +11:00
Ben V. Brown 4b2cd907d1 On full charge shutdown into low power state 2022-12-29 21:22:46 +11:00
Ben V. Brown 4b7a565096 On full charge turn off LED's 2022-12-29 21:22:36 +11:00
Ben V. Brown 57cc5897e6 Annotating input path meaning guesses 2022-12-29 20:29:12 +11:00
12 changed files with 336 additions and 134 deletions

View File

@ -18,17 +18,58 @@ In order to program the buds from inside of the docker container; privileged mod
./build.sh # This will run make and build the output program. If you have weird build errors try running clean.sh or rm -rf'ing the out folder first
# Now that the firmware has finished building; if there are no errors you can load it to your buds
# You may need to take the buds out of the case, wait three seconds, place them back. This wakes them up and the programmer needs to catch this reboot.
# You can try the helper script by running
./download.sh
# Or do it manually by :
# Assuming that your serial ports are 0 and 1, run the following to commands to program each bud in series.
# You may need to take the buds out of the case, wait three seconds, place them back. This wakes them up.
bestool write-image out/open_source/open_source.bin --port /dev/ttyACM0
bestool write-image out/open_source/open_source.bin --port /dev/ttyACM1
```
## Changelist from stock opeen source SDK
+ Long hold (5 ish seconds) the button on the back when buds are in the case to force a device reboot (so it can be programmed)
+ Use the resistor in the buds to pick Left/Right rather than TWS master/slave pairing
+ Pressing the button on the back while in the case no longer triggers DFU mode
+ Debugging baud rate raised to 200000 to match stock firmware
- Long hold (5 ish seconds) the button on the back when buds are in the case to force a device reboot (so it can be programmed)
- Use the resistor in the buds to pick Left/Right rather than TWS master/slave pairing
- Pressing the button on the back while in the case no longer triggers DFU mode
- Debugging baud rate raised to 200000 to match stock firmware
- Fixed TWS operation such that putting either bud into the case correctly switches to the other bud
- Working (mostly) audio controls using the touch button on the buds
- Turned off showing up as a HID keyboard, as not sure _why_ you would; but it stops android nagging me about a new keyboard
## Current bud tap codes
### Both pods active
#### Right Ear:
- Single tap : Play/Pause
- Double tap : Next track
- Hold : Toggle ANC(Currently non functional, WIP)
- Triple tap : Volume Up
#### Left Ear:
- Single tap : Play/Pause
- Double tap : Previous track
- Hold : Toggle ANC(Currently non functional, WIP)
- Triple tap : Volume Down
### Single pod active
- Single tap : Play/Pause
- Double tap : Next track
- Hold : Previous track
- Triple tap : Volume Up
- Quad tap : Volume Down
## Changing audio alerts
The audio alerts are stored in:
`config/_default_cfg_src_/res/en/`
You can convert these .txt files to .wav files by using the script `convert.sh` with the -T flag, the resulting file will be named `output.wav`.
If you want to change the alert to a custom sound use the -W flag on your wav file and then move the resulting `SOUND.txt` file to the place you want to replace (eg. `config/_default_cfg_src_/res/en/SOUND_POWER_ON.txt`)

View File

@ -401,6 +401,7 @@ int app_battery_handle_process_charging(uint32_t status, union APP_BATTERY_MSG_
{
TRACE(1,"FULL_CHARGING:%d", app_battery_measure.currvolt);
app_status_indication_set(APP_STATUS_INDICATION_FULLCHARGE);
app_shutdown();
#ifdef MEDIA_PLAYER_SUPPORT
#if defined(BT_USB_AUDIO_DUAL_MODE) || defined(IBRT)
#else

View File

@ -786,21 +786,6 @@ void app_bt_key_enter_nosignal_mode(APP_KEY_STATUS *status, void *param)
}
}
void app_bt_singleclick(APP_KEY_STATUS *status, void *param)
{
TRACE(3,"%s %d,%d",__func__, status->code, status->event);
}
void app_bt_doubleclick(APP_KEY_STATUS *status, void *param)
{
TRACE(3,"%s %d,%d",__func__, status->code, status->event);
}
void app_power_off(APP_KEY_STATUS *status, void *param)
{
TRACE(0,"app_power_off\n");
}
extern "C" void OS_NotifyEvm(void);
#define PRESS_KEY_TO_ENTER_OTA_INTERVEL (15000) // press key 15s enter to ota
@ -1369,37 +1354,190 @@ void app_latency_switch_key_handler(void)
}
}
void app_bt_function_key(APP_KEY_STATUS *status, void *param)
{
TRACE(2,"%s event %d", __func__, status->event);
bt_key_send(status);
/*
* handling of touch events when the devices are turned on
* Both pods active:
* Right Ear:
* Single tap : Play/Pause
* Double tap : Next track
* Hold : ANC on/off
* Triple tap : Volume Up
*
* Left Ear:
* Single tap : Play/Pause
* Double tap : Previous track
* Hold : ANC on/off
* Triple tap : Volume Down
* Single pod active:
* Single tap : Play/Pause
* Double tap : Next track
* Hold : Previous track
* Triple tap : Volume Up
* Quad tap : Volume Down
* We use app_ibrt_if_start_user_action for handling actions, as this will apply locally if we are link master
* OR send it over the link to the other bud if we are not
*/
void send_vol_up(void){
uint8_t action[] = {IBRT_ACTION_LOCAL_VOLUP};
app_ibrt_if_start_user_action(action, sizeof(action));
}
void send_play_pause(void){
if (app_bt_device.a2dp_play_pause_flag!=0) {
uint8_t action[] = {IBRT_ACTION_PAUSE};
app_ibrt_if_start_user_action(action, sizeof(action));
}else {
uint8_t action[] = {IBRT_ACTION_PLAY};
app_ibrt_if_start_user_action(action, sizeof(action));
}
}
void send_vol_down(void){
uint8_t action[] = {IBRT_ACTION_LOCAL_VOLDN};
app_ibrt_if_start_user_action(action, sizeof(action));
}
void send_next_track(void){
uint8_t action[] = {IBRT_ACTION_FORWARD};
app_ibrt_if_start_user_action(action, sizeof(action));
}
void send_prev_track(void){
uint8_t action[] = {IBRT_ACTION_BACKWARD};
app_ibrt_if_start_user_action(action, sizeof(action));
}
void app_key_single_tap(APP_KEY_STATUS *status, void *param){
TRACE(2,"%s event %d", __func__, status->event);
if (!app_tws_ibrt_tws_link_connected()){
//No other bud paired
TRACE(0,"Handling %s in single bud mode",__func__);
send_play_pause();
}else {
//Bud's are working as a pair
if (app_tws_is_left_side()){
TRACE(0,"Handling %s as left bud",__func__);
//Lefty
send_play_pause();
}else {
TRACE(0,"Handling %s as right bud",__func__);
//Righty
send_play_pause();
}
}
}
void app_key_double_tap(APP_KEY_STATUS *status, void *param){
TRACE(2,"%s event %d", __func__, status->event);
if (!app_tws_ibrt_tws_link_connected()){
//No other bud paired
TRACE(0,"Handling %s in single bud mode",__func__);
send_next_track();
}else {
//Bud's are working as a pair
if (app_tws_is_left_side()){
TRACE(0,"Handling %s as left bud",__func__);
//Lefty
send_prev_track();
}else {
TRACE(0,"Handling %s as right bud",__func__);
//Righty
send_next_track();
}
}
}
void app_key_triple_tap(APP_KEY_STATUS *status, void *param){
TRACE(2,"%s event %d", __func__, status->event);
if (!app_tws_ibrt_tws_link_connected()){
//No other bud paired
TRACE(0,"Handling %s in single bud mode",__func__);
send_vol_up();
}else {
//Bud's are working as a pair
if (app_tws_is_left_side()){
TRACE(0,"Handling %s as left bud",__func__);
//Lefty
send_vol_down();
}else {
TRACE(0,"Handling %s as right bud",__func__);
//Righty
send_vol_up();
}
}
}
void app_key_quad_tap(APP_KEY_STATUS *status, void *param){
TRACE(2,"%s event %d", __func__, status->event);
if (!app_tws_ibrt_tws_link_connected()){
//No other bud paired
TRACE(0,"Handling %s in single bud mode",__func__);
send_vol_down();
}else {
//Bud's are working as a pair
if (app_tws_is_left_side()){
TRACE(0,"Handling %s as left bud",__func__);
//Lefty
}else {
TRACE(0,"Handling %s as right bud",__func__);
//Righty
}
}
}
void app_key_long_press_down(APP_KEY_STATUS *status, void *param)
{
TRACE(2,"%s event %d", __func__, status->event);
if (!app_tws_ibrt_tws_link_connected()){
//No other bud paired
TRACE(0,"Handling %s in single bud mode",__func__);
send_prev_track();
}else {
//Bud's are working as a pair
app_anc_key(status,param);
}
}
void app_key_reboot(APP_KEY_STATUS *status, void *param)
{
TRACE(1,"%s ",__func__);
hal_cmu_sys_reboot();
}
void app_key_init(void)
{
#if defined(IBRT_TESTMODE)
app_ibrt_ui_test_key_init();
#else
uint8_t i = 0;
TRACE(1,"%s",__func__);
const APP_KEY_HANDLE key_cfg[] = {
{{APP_KEY_CODE_PWR,APP_KEY_EVENT_CLICK},"bt function key",app_bt_function_key, NULL},
{{APP_KEY_CODE_PWR,APP_KEY_EVENT_DOUBLECLICK},"bt function key",app_bt_function_key, NULL},
{{APP_KEY_CODE_PWR,APP_KEY_EVENT_LONGPRESS},"bt function key",app_bt_function_key, NULL},
{{APP_KEY_CODE_PWR,APP_KEY_EVENT_TRIPLECLICK},"bt anc key",app_anc_key, NULL},
{{APP_KEY_CODE_PWR,APP_KEY_EVENT_CLICK},"",app_key_single_tap, NULL},
{{APP_KEY_CODE_PWR,APP_KEY_EVENT_DOUBLECLICK},"",app_key_double_tap, NULL},
{{APP_KEY_CODE_PWR,APP_KEY_EVENT_TRIPLECLICK},"",app_key_triple_tap, NULL},
{{APP_KEY_CODE_PWR,APP_KEY_EVENT_ULTRACLICK},"",app_key_quad_tap, NULL},
{{APP_KEY_CODE_PWR,APP_KEY_EVENT_LONGPRESS},"",app_key_long_press_down, NULL},
};
app_key_handle_clear();
for (i=0; i<(sizeof(key_cfg)/sizeof(APP_KEY_HANDLE)); i++){
app_key_handle_registration(&key_cfg[i]);
}
#endif
}
void app_key_reboot(APP_KEY_STATUS *status, void *param)
{
TRACE(1,"%s ",__func__);
hal_cmu_sys_reboot();
}
void app_key_init_on_charging(void)
@ -1786,7 +1924,8 @@ int app_deinit(int deinit_case)
{
int nRet = 0;
TRACE(2,"%s case:%d",__func__, deinit_case);
app_tws_if_trigger_role_switch();
osDelay(200); // This is a hack; a hackkitttyy hack. To wait for the tws exchange to occur
#ifdef WL_DET
app_mic_alg_audioloop(false,APP_SYSFREQ_78M);
#endif

View File

@ -97,14 +97,14 @@ int app_status_indication_set(APP_STATUS_INDICATION_T status)
struct APP_PWL_CFG_T cfg0;
struct APP_PWL_CFG_T cfg1;
TRACE(2,"%s %d",__func__, status);
if (app_status == status)
return 0;
if (app_status_ind_filter == status)
return 0;
TRACE(2,"%s %d",__func__, status);
app_status = status;
memset(&cfg0, 0, sizeof(struct APP_PWL_CFG_T));
memset(&cfg1, 0, sizeof(struct APP_PWL_CFG_T));
@ -160,6 +160,7 @@ int app_status_indication_set(APP_STATUS_INDICATION_T status)
app_pwl_start(APP_PWL_ID_1);
break;
case APP_STATUS_INDICATION_CONNECTING:
// LED's alternating Red/Blue
cfg0.part[0].level = 1;
cfg0.part[0].time = (300);
cfg0.part[1].level = 0;
@ -212,25 +213,32 @@ int app_status_indication_set(APP_STATUS_INDICATION_T status)
app_pwl_start(APP_PWL_ID_1);
break;
case APP_STATUS_INDICATION_FULLCHARGE:
cfg0.part[0].level = 1;
cfg0.part[0].level = 0;
cfg0.part[0].time = (5000);
cfg0.parttotal = 1;
cfg0.startlevel = 1;
cfg0.periodic = true;
cfg0.periodic = false;
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
app_pwl_setup(APP_PWL_ID_1, &cfg0);
app_pwl_start(APP_PWL_ID_1);
break;
case APP_STATUS_INDICATION_POWEROFF:
cfg1.part[0].level = 1;
cfg1.part[0].time = (3000);
cfg1.part[1].level = 0;
cfg1.part[1].time = (200);
cfg1.parttotal = 2;
cfg1.part[0].level = 0;
cfg1.part[0].time = (100);
cfg1.parttotal = 1;
cfg1.startlevel = 1;
cfg1.periodic = false;
cfg0.part[0].level = 0;
cfg0.part[0].time = (100);
cfg0.parttotal = 1;
cfg0.startlevel = 1;
cfg0.periodic = false;
app_pwl_setup(APP_PWL_ID_1, &cfg1);
app_pwl_start(APP_PWL_ID_1);
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
break;
case APP_STATUS_INDICATION_CHARGENEED:
cfg1.part[0].level = 1;

View File

@ -315,7 +315,7 @@ export TX_IQ_CAL ?= 0
export BT_XTAL_SYNC ?= 1
export BTADDR_FOR_DEBUG ?= 1
export BTADDR_FOR_DEBUG ?= 0
export POWERKEY_I2C_SWITCH ?=0
@ -331,7 +331,7 @@ export DUMP_NORMAL_LOG ?= 0
SUPPORT_BATTERY_REPORT ?= 1
SUPPORT_HF_INDICATORS ?= 0
SUPPORT_HF_INDICATORS ?= 1
SUPPORT_SIRI ?= 1
@ -425,7 +425,7 @@ KBUILD_CFLAGS +=
LIB_LDFLAGS += -lstdc++ -lsupc++
export BTIF_HID_DEVICE ?= 1
export BTIF_HID_DEVICE ?= 0
ifeq ($(BTIF_HID_DEVICE),1)
KBUILD_CPPFLAGS += -DBTIF_HID_DEVICE
endif

View File

@ -988,13 +988,21 @@ const struct_anc_cfg * anc_coef_list_44p1k[ANC_COEF_LIST_NUM] = {
const IIR_CFG_T audio_eq_sw_iir_cfg = {
.gain0 = 0,
.gain1 = 0,
.num = 5,
.num = 13,
.param = {
{IIR_TYPE_PEAK, .0, 200, 2},
{IIR_TYPE_PEAK, .0, 600, 2},
{IIR_TYPE_PEAK, .0, 2000.0, 2},
{IIR_TYPE_PEAK, .0, 6000.0, 2},
{IIR_TYPE_PEAK, .0, 12000.0, 2}
{IIR_TYPE_PEAK, -2.2, 10, 2},
{IIR_TYPE_PEAK, 5.1, 21, 2},
{IIR_TYPE_PEAK, 0.9, 42, 2},
{IIR_TYPE_PEAK, -6, 83, 2},
{IIR_TYPE_PEAK, -6, 166, 2},
{IIR_TYPE_PEAK, -4.6, 333, 2},
{IIR_TYPE_PEAK, -2, 577, 2},
{IIR_TYPE_PEAK, -0.7, 1000, 2},
{IIR_TYPE_PEAK, 1.7, 2000, 2},
{IIR_TYPE_PEAK, 3.2, 4000, 2},
{IIR_TYPE_PEAK, -5.6, 8000, 2},
{IIR_TYPE_PEAK, 10.1, 16000, 2},
{IIR_TYPE_PEAK, 5.9, 20000, 2},
}
};
@ -1037,59 +1045,21 @@ const FIR_CFG_T * const audio_eq_hw_fir_cfg_list[EQ_HW_FIR_LIST_NUM]={
};
//hardware dac iir eq
const IIR_CFG_T audio_eq_hw_dac_iir_cfg = {
.gain0 = 0,
.gain1 = 0,
.num = 8,
.param = {
{IIR_TYPE_PEAK, 0, 1000.0, 0.7},
{IIR_TYPE_PEAK, 0, 1000.0, 0.7},
{IIR_TYPE_PEAK, 0, 1000.0, 0.7},
{IIR_TYPE_PEAK, 0, 1000.0, 0.7},
{IIR_TYPE_PEAK, 0, 1000.0, 0.7},
{IIR_TYPE_PEAK, 0, 1000.0, 0.7},
{IIR_TYPE_PEAK, 0, 1000.0, 0.7},
{IIR_TYPE_PEAK, 0, 1000.0, 0.7},
}
};
const IIR_CFG_T audio_eq_hw_dac_iir_cfg = audio_eq_sw_iir_cfg;
const IIR_CFG_T * const POSSIBLY_UNUSED audio_eq_hw_dac_iir_cfg_list[EQ_HW_DAC_IIR_LIST_NUM]={
&audio_eq_hw_dac_iir_cfg,
};
//hardware dac iir eq
const IIR_CFG_T audio_eq_hw_adc_iir_adc_cfg = {
.gain0 = 0,
.gain1 = 0,
.num = 1,
.param = {
{IIR_TYPE_PEAK, 0.0, 1000.0, 0.7},
}
};
const IIR_CFG_T audio_eq_hw_adc_iir_adc_cfg = audio_eq_sw_iir_cfg;
const IIR_CFG_T * const POSSIBLY_UNUSED audio_eq_hw_adc_iir_cfg_list[EQ_HW_ADC_IIR_LIST_NUM]={
&audio_eq_hw_adc_iir_adc_cfg,
};
//hardware iir eq
const IIR_CFG_T audio_eq_hw_iir_cfg = {
.gain0 = 0,
.gain1 = 0,
.num = 8,
.param = {
{IIR_TYPE_PEAK, -10.1, 100.0, 7},
{IIR_TYPE_PEAK, -10.1, 400.0, 7},
{IIR_TYPE_PEAK, -10.1, 700.0, 7},
{IIR_TYPE_PEAK, -10.1, 1000.0, 7},
{IIR_TYPE_PEAK, -10.1, 3000.0, 7},
{IIR_TYPE_PEAK, -10.1, 5000.0, 7},
{IIR_TYPE_PEAK, -10.1, 7000.0, 7},
{IIR_TYPE_PEAK, -10.1, 9000.0, 7},
}
};
const IIR_CFG_T audio_eq_hw_iir_cfg = audio_eq_sw_iir_cfg;
const IIR_CFG_T * const POSSIBLY_UNUSED audio_eq_hw_iir_cfg_list[EQ_HW_IIR_LIST_NUM]={
&audio_eq_hw_iir_cfg,

26
convert.sh Executable file
View File

@ -0,0 +1,26 @@
#!/bin/sh
txt_to_wav() {
xxd -r -p $args > out.raw
ffmpeg -f sbc -ac 1 -i ./out.raw output.wav
rm ./out.raw
}
wav_to_txt() {
ffmpeg -i $args -f sbc -ac 16000 -ac 1 -map_metadata -1 out.raw
xxd -i ./out.raw | head -n -2 \
| tail -n +2 | sed 's/ //g' \
| tr --delete '\n' \
| sed 's/,/\,\n/16; P; D' > SOUND.txt
rm ./out.raw
}
[ ${1} = "-T" ] || [ ${1} = "--txt-to-wav" ] && shift 1 && args=$@ && txt_to_wav && exit
[ ${1} = "-W" ] || [ ${1} = "--wav-to-txt" ] && shift 1 && args=$@ && wav_to_txt && exit
echo "
Sound format converter:
Usage:
./convert.sh [option] [input-file]
Options:
-T or --txt-to-wav Converts the text file to a wav audio file (output.wav)
-W or --wav-to-txt Converts a wav file to a file readable by the pinebuds firmware (SOUND.txt)
"

View File

@ -1,7 +1,15 @@
#! /bin/bash
num=$(ls -l /dev/ttyUSB* | rev | cut -c 1)
#num=3
num=$(ls -l /dev/ttyACM* | rev | cut -c 1)
echo com is:$num
sudo -S dldtool -c $num -f out/open_source/open_source.bin
sudo minicom port$num
splitPorts=($num)
echo "This tool assumes your buds are the only thing connected and are enumerated {right,left} order. YMMV"
echo "Right bud is at ${splitPorts[0]}"
echo "Left bud is at ${splitPorts[1]}"
echo "Please disconnect and reconnect the bud on the right"
bestool write-image out/open_source/open_source.bin --port /dev/ttyACM${splitPorts[0]}
echo "Please disconnect and reconnect the bud on the left"
bestool write-image out/open_source/open_source.bin --port /dev/ttyACM${splitPorts[1]}

View File

@ -223,12 +223,12 @@ enum AUD_IO_PATH_T {
AUD_IO_PATH_NULL = 0,
// Input path
AUD_INPUT_PATH_MAINMIC,
AUD_INPUT_PATH_VADMIC,
AUD_INPUT_PATH_ASRMIC,
AUD_INPUT_PATH_MAINMIC, // Main User Mic
AUD_INPUT_PATH_VADMIC, // Voice Activity Detection
AUD_INPUT_PATH_ASRMIC, // Ambient Sound Reduction? (? Is this the external mic?)
AUD_INPUT_PATH_LINEIN,
AUD_INPUT_PATH_NTMIC,
AUD_INPUT_PATH_ANC_WNR,
AUD_INPUT_PATH_ANC_WNR, // Wind Noise Reduction
AUD_INPUT_PATH_USBAUDIO,
#ifdef __ANC_ASSIST__
AUD_INPUT_PATH_AF_ANC,

View File

@ -45,31 +45,31 @@ enum HAL_KEY_CODE_T {
enum HAL_KEY_EVENT_T {
HAL_KEY_EVENT_NONE = 0,
HAL_KEY_EVENT_DOWN,
HAL_KEY_EVENT_FIRST_DOWN,
HAL_KEY_EVENT_CONTINUED_DOWN,
HAL_KEY_EVENT_UP,
HAL_KEY_EVENT_UP_AFTER_LONGPRESS,
HAL_KEY_EVENT_LONGPRESS,
HAL_KEY_EVENT_LONGLONGPRESS,
HAL_KEY_EVENT_CLICK,
HAL_KEY_EVENT_DOUBLECLICK,
HAL_KEY_EVENT_TRIPLECLICK,
HAL_KEY_EVENT_ULTRACLICK,
HAL_KEY_EVENT_RAMPAGECLICK,
HAL_KEY_EVENT_SIXTHCLICK,
HAL_KEY_EVENT_SEVENTHCLICK,
HAL_KEY_EVENT_EIGHTHCLICK,
HAL_KEY_EVENT_NINETHCLICK,
HAL_KEY_EVENT_TENTHCLICK,
HAL_KEY_EVENT_REPEAT,
HAL_KEY_EVENT_GROUPKEY_DOWN,
HAL_KEY_EVENT_GROUPKEY_REPEAT,
HAL_KEY_EVENT_INITDOWN,
HAL_KEY_EVENT_INITUP,
HAL_KEY_EVENT_INITLONGPRESS,
HAL_KEY_EVENT_INITLONGLONGPRESS,
HAL_KEY_EVENT_INITFINISHED,
HAL_KEY_EVENT_DOWN, // 1
HAL_KEY_EVENT_FIRST_DOWN, // 2
HAL_KEY_EVENT_CONTINUED_DOWN, // 3
HAL_KEY_EVENT_UP, // 4
HAL_KEY_EVENT_UP_AFTER_LONGPRESS, // 5
HAL_KEY_EVENT_LONGPRESS, // 6
HAL_KEY_EVENT_LONGLONGPRESS, // 7
HAL_KEY_EVENT_CLICK, // 8
HAL_KEY_EVENT_DOUBLECLICK, // 9
HAL_KEY_EVENT_TRIPLECLICK, // 10
HAL_KEY_EVENT_ULTRACLICK, // 11
HAL_KEY_EVENT_RAMPAGECLICK, // 12
HAL_KEY_EVENT_SIXTHCLICK, // 13
HAL_KEY_EVENT_SEVENTHCLICK, // 14
HAL_KEY_EVENT_EIGHTHCLICK, // 15
HAL_KEY_EVENT_NINETHCLICK, // 16
HAL_KEY_EVENT_TENTHCLICK, // 17
HAL_KEY_EVENT_REPEAT, // 18
HAL_KEY_EVENT_GROUPKEY_DOWN, // 19
HAL_KEY_EVENT_GROUPKEY_REPEAT, // 20
HAL_KEY_EVENT_INITDOWN, // 21
HAL_KEY_EVENT_INITUP, // 22
HAL_KEY_EVENT_INITLONGPRESS, // 23
HAL_KEY_EVENT_INITLONGLONGPRESS, // 24
HAL_KEY_EVENT_INITFINISHED, // 25
HAL_KEY_EVENT_NUM,
};

View File

@ -4840,6 +4840,17 @@ uint32_t app_bt_restore_hid_app_ctx(uint8_t *buf)
return offset;
}
#else
uint32_t app_bt_restore_hid_app_ctx(uint8_t *buf)
{return 4;}
uint32_t app_bt_save_hid_app_ctx(uint8_t *buf)
{
buf[0]=0;
buf[1]=0;
buf[2]=0;
buf[3]=0;
return 4;}
#endif
#endif /* ENHANCED_STACK */

View File

@ -229,10 +229,8 @@ uint32_t app_bt_restore_spp_app_ctx(uint8_t *buf, uint32_t buf_len, uint32_t app
uint32_t app_bt_save_map_app_ctx(btif_remote_device_t *rem_dev, uint8_t *buf, uint32_t buf_len);
uint32_t app_bt_restore_map_app_ctx(uint8_t *buf, uint32_t buf_len);
#endif
#ifdef BTIF_HID_DEVICE
uint32_t app_bt_save_hid_app_ctx(uint8_t *buf);
uint32_t app_bt_restore_hid_app_ctx(uint8_t *buf);
#endif
uint32_t app_bt_save_hid_app_ctx(uint8_t *buf);
#endif /* ENHANCED_STACK */
#endif