杰理AC692X 开机模式选择上次关机的模式 通过按键消息自定义切换模式的顺序

AC692X模式的相关处理

  • 一、开始模式选择上次关机最后一次的模式
    • 1.1开对应存储的VM区:
    • 1.2在你需要存储最后一次工作模式的task_**.C文件下面添加以下代码,以蓝牙为例:
      • 1.2.1 在flash_api.C定义一个变量
      • 1.2.2 在各个模式下的task_**.C下添加flash_api.h的头文件,board.C也需要添加
      • 1.2.3 在对应的模式下添加类似的代码,我的1代表的是蓝牙模
    • 1.3 在board.C的主函数下面添加以下程序
  • 二、通过按键消息自定义切换模式的顺序

一、开始模式选择上次关机最后一次的模式

首先需要将最后一次模式保存在类似单片机的flash或者eeprom等存储器里面。杰理的AC692X有VM区,类似于这些存储芯片,可断电保存数据。

1.1开对应存储的VM区:

杰理AC692X 开机模式选择上次关机的模式 通过按键消息自定义切换模式的顺序_第1张图片
在VM的枚举列表添加VM_WORK_MODE
杰理AC692X 开机模式选择上次关机的模式 通过按键消息自定义切换模式的顺序_第2张图片
在同一个文件下定义存储的长度
杰理AC692X 开机模式选择上次关机的模式 通过按键消息自定义切换模式的顺序_第3张图片
添加对应开启的VM存储单元

经过上面的设置,VM区就多出来一块存储最后一次工作模式的空间了。

接着要知道VM的读写函数:

s32 vm_write(u8 hdl, const void *data_buf, u16 len);
s32 vm_read(u8 hdl, void *data_buf, u16 len);

他们是SDK集成好的函数,我们根据在SDK里面原有的使用情况

fmtx_printf("fre:%d\n", fmtx_var.freq);
            vm_write(VM_FM_TRANSMIT_FREQ, &fmtx_var.freq, VM_FM_TRANSMIT_FREQ_LEN)

可以知道u8 hdl对应的是我们的VM枚举类型,const void *data_buf 对应的是需要存储的变量名的指针(地址),u16 len 是对应的存储长度。

1.2在你需要存储最后一次工作模式的task_**.C文件下面添加以下代码,以蓝牙为例:

1.2.1 在flash_api.C定义一个变量

杰理AC692X 开机模式选择上次关机的模式 通过按键消息自定义切换模式的顺序_第4张图片
杰理AC692X 开机模式选择上次关机的模式 通过按键消息自定义切换模式的顺序_第5张图片

这个变量一定要初始化为你模式对应的数据之一,不然开始会进入不了模式。我这里对应的是蓝牙模式的代号。

1.2.2 在各个模式下的task_**.C下添加flash_api.h的头文件,board.C也需要添加

杰理AC692X 开机模式选择上次关机的模式 通过按键消息自定义切换模式的顺序_第6张图片

1.2.3 在对应的模式下添加类似的代码,我的1代表的是蓝牙模

在对应的文件的地方添加代码
杰理AC692X 开机模式选择上次关机的模式 通过按键消息自定义切换模式的顺序_第7张图片

    power_work_mode = 1;
    vm_write(VM_WORK_MODE,&power_work_mode,VM_WORK_MODE_LEN);

1.3 在board.C的主函数下面添加以下程序

杰理AC692X 开机模式选择上次关机的模式 通过按键消息自定义切换模式的顺序_第8张图片

 vm_read(VM_WORK_MODE, &power_work_mode,VM_WORK_MODE_LEN);
   if(power_work_mode == 1)
    {
      task_switch(TASK_ID_BT, NULL);
    }
    else if(power_work_mode == 2)
    {
      task_switch(TASK_ID_LINEIN, NULL);
    }
    else if(power_work_mode == 3)
    {
      task_switch(TASK_ID_MUSIC, NULL);
    }
    else if(power_work_mode == 4)
    {
      task_switch(TASK_ID_FM, NULL);
    }

添加上面的代码 ,把原来的注释掉;

这样第一次开始选择的是蓝牙,后面再次开机时你关机前的模式。

二、通过按键消息自定义切换模式的顺序

在task_common.c找到消息处理函数

tbool task_common_msg_deal(void *hdl, u32 msg)

杰理AC692X 开机模式选择上次关机的模式 通过按键消息自定义切换模式的顺序_第9张图片

在切换模式的消息下添加代码,原来的切换到下一个模式注销掉

 if(task_get_cur() == TASK_ID_BT)
        {
             task_switch(TASK_ID_LINEIN, NULL);
            Typemode = UMUSIC_mode;
        }
        else if(task_get_cur() == TASK_ID_LINEIN)
        {
            task_switch(TASK_ID_MUSIC, NULL) ;
            Typemode = MUSIC_mode;
        }
        else if(task_get_cur() == TASK_ID_MUSIC)
        {
            task_switch(TASK_ID_FM, NULL);
            Typemode = UMUSIC_mode;
        }
         else if(task_get_cur() == TASK_ID_FM)
        {
            task_switch(TASK_ID_BT, NULL);
            Typemode = UMUSIC_mode;
        }
        exit = false;

Typemode = UMUSIC_mode; 这个你们可以去掉 ,我是因为需要在无USB和SD卡插入的情况下也要保持在音乐模式,而且在其他模式下,插入也不会主动跳转到音乐模式。

你可能感兴趣的:(杰理开发,杰理模式处理)