TinyUI-按键对接

本文详细介绍如何在TinyUI中自定义按键接口TUIKeyInterface,包括创建自定义按键类UIKey,实现按键回调方法registerCallback,以及如何将UIKey实例注册到TinyUI中,实现与底层驱动的无缝对接。
部署运行你感兴趣的模型镜像

        对于无触摸的嵌入式设备来说,按键就是整个人机交互的入口点,TinyUI定义了按键接口类TUIKeyInterface,当需要把底层驱动和TinyUI对接时,需要实现一个自定义按键类,继承自TUIKeyInterface接口即可,最后把自定义按键类实例化,并调用TinyUI的按键注册接口TUIRegisterKeyInterface即可。

        TUIKeyInterface只有一个方法需要开发人员实现,即registerCallback(),当驱动把自定义按键类实例注册到TinyUI时,TinyUI注册回调方法给驱动,当按钮产生中断时调用该接口注册的回调方法即可,TUIKeyInterface定义如下:

#ifndef __TUI_KEY_INTERFACE_H__
#define __TUI_KEY_INTERFACE_H__
#include <TUIVKCode.h>
#include <TUIAction.h>


typedef void (*KeyCallback)(TUIACTION_KEY action, TUIVKCode keyCode);


class TUIKeyInterface
{
public:
    virtual void registerCallback(KeyCallback callback) = 0;
};

#endif // !__TUI_KEY_INTERFACE_H__

        该回调方法有2个参数分别是TUIACTION_KEY和TUIVKCode,TUIACTION_KEY代表按键是按下还是弹起,其定义如下:

enum class TUIACTION_KEY : uint8_t
{
    TUI_DOWN, // 按键按下(物理按键)
    TUI_UP, // 按键弹起(物理按键)
};

        TUIVKCode是TinyUI定义的虚拟按键码,其定义了大部分常用快捷键如F1~F12,上、下、左、右等等,移植时根据实际情况发出对应的键码和动作(按下还是弹起)。

移植

1. 自定义按键类,并继承自TUIKeyInterface

UIKey.h

#ifndef __UI_KEY_H__
#define __UI_KEY_H__
#include "device_driver_ioc.h"
#include <TUIKeyInterface.h>


class UIKey : public TUIKeyInterface
{
public:
    UIKey();
    virtual ~UIKey();

public:
    void registerCallback(KeyCallback callback);

private:
    input_t *input = nullptr; // 驱动中的按键实例/对象
};


#endif

UIKey.cpp

#include <UIKey.h>
#include <TUIVKCode.h>
#include <TUIAction.h>

KeyCallback gCallBack = nullptr; // 定义TinyUI回调接口

/* 
  由于驱动中的按键定义的回调方法和TinyUI不一致,把该方法注册到驱动作为回调
  当有按键产生时,在该方法中调用gCallBack,把按键传递到TinyUI中
*/
void UIKey_input_input_callback(enum VK_ACT act, enum VK_CODE vcode)
{
    if (nullptr == gCallBack) // 判断TinyUI是否注册了回调
    {
        return;
    }

    TUIACTION_KEY action;
    uint32_t vk = (uint32_t)vcode; // 驱动和TinyUI按键值都是枚举,转换一次

    /* 按键中断定义的按下和抬起与TinyUI不一致,此处转换一次 */
    if (VACT_DOWN == act)
    {
        action = TUIACTION_KEY::TUI_DOWN; // 按下
    }
    else if (VACT_UP == act)
    {
        action = TUIACTION_KEY::TUI_UP; // 弹起
    }

    gCallBack(action, (TUIVKCode)vk); // 调用TinyUI的回调函数
}

UIKey::UIKey()
{
    input = (input_t *)device_driver_autowired(DDTYPE_INPUT, DDID_INPUT_BUTTON); // 使用依赖注入技术获取驱动的按键实例
    if (nullptr != input)
    {
        input->ops->register_input_callback(UIKey_input_input_callback); // 把UIKey_input_input_callback注册到按键中断回调中
        input->ops->open(); // 打开按键驱动
    }
}

UIKey::~UIKey()
{
    input->ops->close(); // 关闭按键驱动
}

void UIKey::registerCallback(KeyCallback callback)
{
    gCallBack = callback; // gCallBack指向TinyUI的回调函数
}

2. 实例化UIKey并注册到TinyUI中

UIKey* key = new UIKey();
TUIRegisterKeyInterface(key);

 

 

 

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### 安装 Open-WebUI Ollama 对接 对于希望在本地环境中安装并配置 Open-WebUI 以及使其能够 Ollama 进行对接的情况,具体操作取决于操作系统环境和支持的技术栈。以下是针对不同场景下的解决方案。 #### 使用 Docker 方式部署 (适用于支持Docker的操作系统) 当使用 Docker 来部署时,可以利用容器化的优势简化应用程序及其依赖项的管理。具体的命令如下所示: ```bash docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway \ -v open-webui:/app/backend/data --name open-webui --restart always \ ghcr.io/open-webui/open-webui:main ``` 这条指令会启动一个名为 `open-webui` 的服务实例,并将其绑定到主机的端口 3000 上[^1]。 为了使该应用能 Ollama 协同工作,在完成上述步骤之后还需要进一步调整网络设置或API接口参数来确保两者之间的通信顺畅无阻。 #### 不借助 Docker 的 Python 环境安装方法 (适合无法运行Docker的情形) 考虑到部分用户的计算机可能不兼容 Docker 或者出于其他原因不愿意采用这种方式,则可以通过 pip 工具直接在Python虚拟环境中安装必要的软件包实现相同的功能目标。这通常涉及到以下几个方面的工作: - 创建一个新的 Python 虚拟环境; - 利用 pip 下载所需的库文件; - 修改默认配置使得前端界面可访问后端 API; 需要注意的是,此路径下需要手动处理更多细节问题,比如版本匹配度、跨平台差异等,因此建议具备一定编程基础后再尝试[^2]。 #### 关于 Ollama 和 Llama 模型集成的具体指导 要让已有的 Open-WebUI 实例成功连接至特定的大规模预训练语言模型(如Llama),则需按照官方文档指示执行相应脚本或者修改源码中的加载逻辑指向指定位置存储的权重文件。此外,还需确认所选框架是否提供了对这些先进架构的支持能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OneOnce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值