我这里有一个安卓线控耳机的sdk,请问怎样才能在这个sdk的基础上添加苹果耳机的线控功能?芯片是中科蓝讯的AB136D1
AT(.com_text.bsp.key)
void pwrkey10s_counter_clr(void)
{
if (POWKEY_10S_RESET) {
RTCCON10 = BIT(10); //clear pwrkey10s pending and counter
}
}
AT(.text.bsp.key)
u8 get_pwroff_pressed_time(void)
{
return PWROFF_PRESS_TIME;
}
AT(.text.bsp.key)
u8 get_double_key_time(void)
{
if(DOUBLE_KEY_TIME > 7) {
return 60;
} else {
return (u8)((u8)(DOUBLE_KEY_TIME + 2) * 20 + 1);
}
}
AT(.com_text.bsp.key)
bool get_poweron_flag(void)
{
return sys_cb.poweron_flag;
}
AT(.com_text.bsp.key)
void set_poweron_flag(bool flag)
{
sys_cb.poweron_flag = flag;
}
#if USER_KEY_KNOB_EN
AT(.com_text.bsp.key)
void key_knob_process(u16 adc_val, const u8 *knob_level, u8 *key_val)
{
u8 step = 0;
if (s_abs((int)knob_level[*key_val] - (int)adc_val) > 4) { //取绝对值消抖
while (adc_val > knob_level[step]) {
step++;
}
*key_val = step;
}
}
#endif
#if USER_KEY_KNOB2_EN
AT(.com_text.bsp.key)
u16 key_knob_process2(u16 *key_val)
{
static u8 key_flag = 0;
static u8 key_cnt_0 = 0, key_cnt_1 = 0;
// my_printf(test_printf,*key_val);
if (*key_val != KEY_VOL_DOWN_PREV && *key_val != KEY_VOL_UP_NEXT) { //过滤掉其他按键
key_flag = 0;
if (*key_val == NO_KEY) {
return NO_KEY;
}
return 0xffff;
}
if (*key_val == KEY_VOL_DOWN_PREV) {
if (key_cnt_0 > 1) { //消抖
key_cnt_0 = 0;
if (key_flag & BIT(1)) {
key_flag = 0;
return KEY_VOL_UP_NEXT | KEY_SHORT_UP; //顺时针
} else {
key_flag |= BIT(0);
}
} else {
key_cnt_0++;
}
}
if (*key_val == KEY_VOL_UP_NEXT) {
if (key_cnt_1 > 1) { //消抖
key_cnt_1 = 0;
if (key_flag & BIT(0)) {
key_flag = 0;
return KEY_VOL_DOWN_PREV | KEY_SHORT_UP; //逆时针
} else {
key_flag |= BIT(1);
}
} else {
key_cnt_1++;
}
}
*key_val = NO_KEY;
return NO_KEY;
}
#endif
AT(.com_text.bsp.key)
u16 bsp_key_process(u16 key_val)
{
u16 key_return = NO_KEY;
#if USER_KEY_KNOB2_EN
static u8 timer1ms_cnt=0;
timer1ms_cnt++;
u16 key_ret = key_knob_process2(&key_val);
if (key_ret != 0xffff && key_ret != NO_KEY) {
return key_ret;
}
if(timer1ms_cnt > 5) {
timer1ms_cnt=0;
key_return = key_process(key_val);
//双击处理
#if USER_MULTI_PRESS_EN
//配置工具是否使能了按键2/3/4/5击功能?
if (xcfg_cb.user_key_multi_press_en) {
key_return = key_multi_press_process(key_return);
}
#endif
return key_return;
}
return NO_KEY;
#else
key_return = key_process(key_val);
//双击处理
#if USER_MULTI_PRESS_EN
//配置工具是否使能了按键2/3/4/5击功能?
if (xcfg_cb.user_key_multi_press_en) {
key_return = key_multi_press_process(key_return);
}
#endif
return key_return;
#endif
}