LVGL8编码器移植

编码器

使用编码器,您可以执行以下操作:

  • 按下它的按钮
  • 长按它的按钮
  • 转左
  • 右转

简而言之,编码器输入设备的工作方式如下:

  • 通过转动编码
    器,您可以专注于下一个/上一个对象。
  • 当您在一个简单的对象(如按钮)上按下编码器时,它将被点击。
    如果您按下复杂对象(如列表、消息框等)上的编码器,该对象将进入编辑模式,您可以通过转动编码器在对象内部导航。
  • 要退出编辑模式,请长按按钮。
  • 要使用编码器(类似于键盘),应将对象添加到组中。
indev_drv.type = LV_INDEV_TYPE_ENCODER;
indev_drv.read_cb = encoder_read;

...

void encoder_read(lv_indev_drv_t * drv, lv_indev_data_t*data){
  data->enc_diff = enc_get_new_moves();

  if(enc_pressed()) data->state = LV_INDEV_STATE_PRESSED;
  else data->state = LV_INDEV_STATE_RELEASED;
}

使用带有编码器逻辑的按钮

除了标准编码器行为之外,您还可以利用其逻辑来使用按钮导航(聚焦)和编辑小部件。如果您只有几个按钮可用,或者您想使用除编码轮之外的其他按钮,这将特别方便。

您需要有 3 个按钮可用:

  • LV_KEY_ENTER 将模拟按下或按下编码器按钮
  • LV_KEY_LEFT 将模拟向左转动编码器
  • LV_KEY_RIGHT 将模拟向右旋转编码器

其他键将传递给聚焦的小部件

如果您按住这些键,它将模拟编码器前进,其周期在 中指定

indev_drv.type = LV_INDEV_TYPE_ENCODER;
indev_drv.read_cb = encoder_with_keys_read;

...

void encoder_with_keys_read(lv_indev_drv_t * drv, lv_indev_data_t*data){
  data->key = last_key();            /*Get the last pressed or released key*/
                                     /* use LV_KEY_ENTER for encoder press */
  if(key_pressed()) data->state = LV_INDEV_STATE_PRESSED;
  else {
      data->state = LV_INDEV_STATE_RELEASED;
      /* Optionally you can also use enc_diff, if you have encoder*/
      data->enc_diff = enc_get_new_moves();
  }
}
上一篇:LVM----从CentOS7默认安装的/home中转移空间到根目录/


下一篇:SUSE11安装系统后,做LVM挂文件系统后,重启报错提示LV不存在