首页 > 其他分享 >中科蓝汛 长按10s开关机

中科蓝汛 长按10s开关机

时间:2025-01-14 16:25:44浏览次数:1  
标签:开关机 SIRI 蓝汛 sys cb1 5S FUNC 10s hold

中科蓝汛 长按10s开关机

  • 长按触控5秒唤醒智能语音助手

    • 事件定义和长按四秒逻辑函数定义:

      在config.h定义:

      #define FUNC_HOLD_5S_SIRI   1   //长按五秒打开siri
      

      bsp_sys.h:sys_cb1_t​结构体中定义变量:

      #if FUNC_HOLD_5S_SIRI
          bool hold_flag;//按住标志
          u8 hold_count;//按住1S的次数统计
      #endif
      
      //结尾处定义函数
      #if FUNC_HOLD_5S_SIRI
      void key_5s_siri(void);
      #endif
      

      bsp_sys.c的bsp_var_init:

          #if FUNC_HOLD_5S_SIRI
          sys_cb1.hold_flag = false;
          sys_cb1.hold_count = 0;
          #endif // FUNC_HOLD_5S_SIRI
      

      bsp_sys.c的函数实现:

      #if FUNC_HOLD_5S_SIRI
      void key_5s_siri(void)
      {
          if(sys_cb1.hold_flag){
              sys_cb1.hold_count++;//统计长按1S的次数
              printf("LONG PRESS ONE TIMES=%d\n",sys_cb1.hold_count);
              if(sys_cb1.hold_count == 5){
                  user_def_key_msg(UDK_SIRI);
              }
          }
      }
      #endif // FUNC_HOLD_5S_SIRI
      
    • 长按5秒逻辑实现:

      msg_bt.c的func_bt_message_do:记录是否长按状态

          //长按调音量
          case KH_PLAY_PWR_USER_DEF:
              printf("KH_PLAY_PWR_USER_DEF\n");
           #if FUNC_HOLD_5S_SIRI
           	sys_cb1.hold_flag = true;
          #endif
              if (!xcfg_cb.kl_pwrdwn_dis) {
                  break;
              }
          case KH_PLAY_USER_DEF:
              printf("KH_PLAY_USER_DEF\n");
              #if FUNC_HOLD_5S_SIRI
           	sys_cb1.hold_flag = true;
              #endif
              func_message(get_user_def_vol_msg(xcfg_cb.user_def_kl_sel));
              break;
      

      注意不同芯片长按按键可能定义不一样,x工给我的板子是KH_PLAY_PWR_USER_DEF,我实测的调试板子出来长按是KH_PLAY_USER_DEF。

      msg_bt.c的func_bt_message:每隔一秒发送一个消息MSG_SYS_1S,在这里进行定时处理。

      void func_bt_message(u16 msg)
      {
          if (msg == NO_MSG || msg == MSG_SYS_1S) {       //减少flash缺页
              func_bt_message_m(msg);
              if (msg == MSG_SYS_1S) {
                  #if FUNC_HOLD_5S_SIRI
                      key_5s_siri();
                  #endif // FUNC_HOLD_5S_SIRI
              }
      

      如果松开按键重新统计:

           //SIRI, NEXT, PREV在长按抬键的时候响应,避免关机前切歌或呼SIRI了
          case KLU_PLAY_PWR_USER_DEF:
      #if FUNC_HOLD_5S_SIRI
              printf("CLEAR 5S SIRI\n");
              sys_cb1.hold_flag = false;  //松开清除按键
              sys_cb1.hold_count=0;
      

  • 长按触控10秒关机开机(会有提示音)

    • 长按10s开机:

downloader软开机最长只有3.5秒的选项,需要自己实现代码:

* 开关时间定义:

  ```c
  u32 pwron_press_time                 : 3;   //软开机长按时间选择: 0.1秒: 0, 0.5秒: 1, 1秒: 2, 1.5秒: 3, 2秒: 4, 2.5秒: 5, 3秒: 6, 3.5秒: 7

  #define PWRON_PRESS_TIME                (500*xcfg_cb.pwron_press_time)                  //长按PWRKEY多长时间开机?
  #define PWROFF_PRESS_TIME               (3+3*xcfg_cb.pwroff_press_time)                 //长按PWRKEY多长时间关机?
  ```

  可以推出pwron_press_time为20时是10s。
* 修改宏定义为:

  ```c
  #define PWRON_PRESS_TIME                (500*20)                  //长按PWRKEY多长时间开机?
  ```
  • 长按10s关机:

    在长按5s的逻辑函数key_5s_siri下实现关机:(因为懒得改函数名了,姑且这样看着)

    
    #if FUNC_HOLD_5S_SIRI
    void key_5s_siri(void)
    {
        if(sys_cb1.hold_flag){
            sys_cb1.hold_count++;//统计长按1S的次数
            printf("LONG PRESS ONE TIMES=%d\n",sys_cb1.hold_count);
            if(sys_cb1.hold_count == 10){
                sys_cb.discon_reason = !xcfg_cb.bt_tswi_kpwr_en;       //按键关机是否主从切换
                sys_cb.pwrdwn_tone_en = 1;
                func_cb.sta = FUNC_PWROFF;
            }
            if(sys_cb1.hold_count == 5){
                user_def_key_msg(UDK_SIRI);
            }
        }
    }
    #endif // FUNC_HOLD_5S_SIRI
    
  • 相关设置:

标签:开关机,SIRI,蓝汛,sys,cb1,5S,FUNC,10s,hold
From: https://www.cnblogs.com/rose24/p/18671040/chinese-science-lan-flood-long-press-and-open-10

相关文章

  • ADI公司推出多款用于无线通信设备和数据处理的 ADUM7703-8BRIZ/ADL6010SCPZNHMC342LC4
    ADI公司推出多款用于无线通信设备和数据处理的ADUM7703-8BRIZ/ADL6010SCPZNHMC342LC4TR/ADAU1772BCPZ器件ADAU1772BCPZ是一款具有四个输入和两个输出的编解码器,内置数字处理引擎,可执行滤波、电平控制、信号电平监控和混合。从模拟输入至DSP内核再到模拟输出的路径经过优化,实现......
  • Weblogic 12c 12.2.1.10SPB 补丁文件 以及补丁升级
            最近公司项目上新接手了一个weblogic12的运维项目,小版本号码为12.2.1.1.0。为了安全稳定性,决定升级最新版补丁文件。   从oracle官网下载补丁(个人账户无法查看补丁以及下载),解压文件后发现目录文件与之前的补丁文件格式不一样,是一个SPB的补丁List。结构......
  • YOLOv10s训练代码解析7:TaskAlignedAssigner正负样本匹配
    本专栏会手把手带你从源码了解YOLOv10(后续会陆续介绍YOLOv8、RTDETR等模型),尽可能地完整介绍整个算法,这个专栏会持续创作与更新,大家如果想要本文PDF和思维导图,后台私信我即可(创作不易,不喜勿喷),大家如果发现任何错误和需要修改的地方都可以私信我,我会统一修改。注:训练batch为......
  • 单键开关机电路原理分析
    一、文章简介由于项目需要,需设计单键开关机电路,在网上找了参考电路,很遗憾不能正常工作,经过自己一番分析、测试及改进,最终形成可靠电路,在此与大家分享,共同进步!注:本文所述电路适用于电压3~6VDC系统。二、电路原理图及分析1、电路图:假设VIN=3.0V2、开机工作过程:(1)初始状态,Q1......
  • 科大讯飞学习机c10s和p30怎么选
    科大讯飞学习机P30和C10两者区别主要在硬件配置方面;软件的核心功能差别不大,都搭载了星火大模型、精准学、及1对1英语口语陪练等。硬件上:1、科大讯飞学习机P30屏幕更大些,是10.95英寸屏幕(近11英寸大小),科大讯飞学习机C10是10.1英寸2、科大讯飞学习机P30定配的是二代作答笔(白色),科大......
  • 科大讯飞p30和c10s、c10区别 选哪个好
    硬件配置方面,科大讯飞AI学习机P30采用了6+256GB的内存配置,11英寸屏幕,适合全年龄段的学生使用。而C10S和C10则分别采用了10.1英寸和4+128GB、10.1英寸和4GB的内存配置,适合小学生使用。此外,三款学习机都支持IPv6,具备较快的网络连接速度。学习资源方面,科大讯飞AI学习机P30涵盖了小学......
  • 科大讯飞学习机c10s和p30怎么选
    科大讯飞学习机P30和C10两者区别主要在硬件配置方面;软件的核心功能差别不大,都搭载了星火大模型、精准学、及1对1英语口语陪练等。硬件上:1、科大讯飞学习机P30屏幕更大些,是10.95英寸屏幕(近11英寸大小),科大讯飞学习机C10是10.1英寸2、科大讯飞学习机P30定配的是二代作答笔(白色),科大......
  • 银河麒麟V10SP1搭建oracle19c(单库)
    遇到的坑:1.PRVG-0282问题解决:在先决条件检查步骤,PRVG-0282:无法检索操作系统分发ID的报错,该问题是由于字符集和环境变量问题,只需在执行安装前:使用oracle用户登录,不要root跳到oracle用户下exportCV_ASSUME_DISTID=RHEL7.6exportLANG=en_US然后刷新环境变量在执行./runInstal......
  • Kylin V10SP2安装openGauss5.0.2企业版
    一、本地系统环境[root@localhost~]#cat/etc/os-releaseNAME="KylinLinuxAdvancedServer"VERSION="V10(Sword)"ID="kylin"VERSION_ID="V10"PRETTY_NAME="KylinLinuxAdvancedServerV10(Sword)"ANSI_COLOR="......
  • kylinV10SP3安装MySQL5.7.44
    需要的安装包:mysql-community-common-5.7.44-1.el7.x86_64.rpmmysql-community-libs-5.7.44-1.el7.x86_64.rpmmysql-community-client-5.7.44-1.el7.x86_64.rpmmysql-community-server-5.7.44-1.el7.x86_64.rpm开始安装,安装顺序:common->libs->client->serverrpm-ivhmysq......