【RK2206】3. 处理迪文屏事件
文章目录
- 1 前言
- 2 基础
- 2.1 uart数据结构
- 2.2 事件结构体
- 2.3 迪文命令结构体
- 4 事件判断
- 5 结果
1 前言
使用小凌派和迪文屏进行通信,有一些特殊的命令,为了方便识别及处理,我设计了迪文屏事件接收结构体,用于存放命令以及需要执行的函数。
2 基础
2.1 uart数据结构
迪文屏uart传输的数据结构是uint8_t,使用十六进制显示为0x5A A5 XX 83 YY YY ZZ ZZ 。
命令结构:
5AA5为标志位,默认起始
XX为字节长度,也就是XX后面又多少字节。比如该条指令,XX就是05。(83 YY YY ZZ ZZ共5个字节)
83/82为读写状态位
YYYY为地址,比如3000
ZZZZ为地址内存放的数据,注意迪文屏一个地址存放2字节数据。
为了方便处理,我尝试将uint8_t存储为字符串char。
处理方法也较为简单,使用sprintf(“%x”)函数。
char temp_c[3];
char * uint8_t2char(uint8_t value)
{memset(temp_c,0x00,3);sprintf(temp_c, "%02X", value);// printf("temp_c = [%s]\n",temp_c);return temp_c;
}
temp_c用于临时存储数据,后续使用strcat(XXX,temp_c);将其存储到指定的字符串数组中。
2.2 事件结构体
#define EVENT_FLAG_NAME_MAX 30
#define EVENT_KEY_VALUE_MAX 11
typedef struct
{char key[EVENT_KEY_VALUE_MAX]; // key[0,3] addr key[4,7] valuechar event_name[EVENT_FLAG_NAME_MAX];void (*func)();
}dwin_event_key_spec;
这里包含三个数据
key是检索的命令内容,比如地址是1500,值是0001,那么key就是"15000001"。
event_name是事件的介绍信息,比如"cam_open",表示这个是camera事件。
func是函数指针,当匹配到这个key的时候就可以执行该函数。
#define EVENT_KEY_SPEC_VALUE "over"
#define EVENT_KEY_SPEC_NUM_MAX 20
dwin_event_key_spec event_key_spec[EVENT_KEY_SPEC_NUM_MAX]=
{{"1502010012", "search", func_search},/* ... */{EVENT_KEY_SPEC_VALUE, "end", func_spec_end}
};void func_search()
{printf("--- func_search\n");printf("--- func_search\n");return;
}
这是我列的一个特殊事件组。存放了key为"1502010012",介绍为search,执行函数是func_search。
2.3 迪文命令结构体
获取到了uart的uint8_t指针,我将信息都解析存储到dwin_cmd结构体中,方便后续使用。
typedef struct
{uint8_t head[2];uint8_t len;uint8_t wr;uint8_t addr[2];uint8_t * value;// uint8_t cmd_u8[DWIN_CMD_LEN_U8_MAX];uint8_t * cmd_u8;char * cmd_char;
}dwin_cmd;
cmd_u8和cmd_char需要使用malloc分配对应的空间用于存放命令。
4 事件判断
事件添加步骤
- 在event_key_spec中添加自己需要的关键字、介绍、执行函数
- 获取到uart的u8数据,将其存储到字符串数组中
- 获取char指针指向该命令的value位置
- strcmp指针以及表中的key
void searc_spec_event(dwin_cmd * cmd)
{printf("search spec event\n");dwin_event_key_spec * temp_value ;temp_value = &event_key_spec[0];// printf("spec event key = %s\n",temp_value->key);for(int i = 0; strcmp(temp_value->key,EVENT_KEY_SPEC_VALUE) != 0 && i<EVENT_KEY_SPEC_NUM_MAX ; i++){// printf("spec event key = %s\n",temp_value->key);// printf("spec event value = %s\n",cmd->cmd_char + DWIN_CMD_CHAR_ADDR_VALUE);if(strstr(cmd->cmd_char + DWIN_CMD_CHAR_ADDR_VALUE, temp_value->key ) != NULL){temp_value->func();printf("find spec event, value = %s, name = %s\n",temp_value->key,temp_value->event_name);return;}temp_value = &event_key_spec[i];}printf("unfind spec key\n");return;
}
5 结果
在迪文屏按下检索图标,自动上报1502010012,事件监听到并执行对应的func_search函数。
【RK2206】3. 处理迪文屏事件相关推荐
- 【OKT507】迪文屏事件
前言 本章介绍如何实现迪文屏与飞凌OKT507的uart事件通信. 代码 从上到下是uart_example.c.dwin.c.dwin.h.makefile #include "dwin. ...
- 22、T5L 迪文屏 C51开发之Hello World例程
T5L 迪文屏 C51开发之Hello World例程 1.写在前面 2.例程功能简介 3.GUI界面设计 4.C51代码设计 1.写在前面 前面已经介绍了如何使用DGUS Tool软件来进行迪文 ...
- 30、T5L 迪文屏 C51开发之 ADC模数转换
T5L 迪文屏 C51开发之 ADC模数转换 1.介绍 2.例程功能介绍 3.GUI界面设计 4.C51程序设计 1.介绍 T5L 芯片内部的 ADC 模数转换外设,有一点需要注意的是此 ADC ...
- 1、迪文屏基于T5L_C51开发手势6宫格解锁
演示视频 1.概述 基于迪文屏DMG32240C028-03WTC屏的滑动手势6宫格解锁功能,该功能运用了触摸屏状态读取和坐标读取的功能(系统变量接口0x0016),绘图功能,需要配合变量图标显示等基 ...
- 分享:STM32与迪文屏交互,轻松实现一些简单的功能!
最近,托朋友用STM32F103评估板和迪文屏做了交互(@田),没写多少代码,就实现了一些简单常用的功能,还是很简单的!今天跟大家分享一下: 一.评估板使用说明 1.功能 图1:整体效果图 图2:MC ...
- 一种迪文屏软件在线升级方法
--来自迪文开发者论坛 开发自己的项目中遇到文件升级不方便的问题,因此设计了一个在线升级方案,可以有效解决如下问题: 1. 当产品已发出需要修复Bug时,无法在线修复. 2. 无法判断新老版本,当数据 ...
- STM32串口中断程序-迪文屏,
STM32串口中断程序-迪文屏,串口接收准确数值 这几天一直在做原子开发板与迪文屏的通信,开发板向迪文屏写数据已经完成,但是从迪文屏读的数据总是无法返回开发板.原始及调试程序见下图: 在串口接收到从d ...
- 【资料分享】迪文屏使用经验分享
DIWEN 写在前面的话 我的屏幕 显示图片 SD卡 FLASH分配 举例工程 Diwen ico生成工具 使用经验总结 写在前面的话 以下内容是本人在观看迪文科技在哔哩哔哩的教学视频所做的笔记 几乎 ...
- 迪文屏OS汇编代码开发-参数修改 保存 翻页(七)
; DWIN OS ;程序功能:上翻页,下翻页,参数修改,保存 ;软件环境: DWIN OS ASM Builder V1.5 ;硬件环境:DW K600+平台 ;变量 ;用户数据区地址从0x0600 ...
- 迪文屏的音乐播放文件配置
针对T5L平台产品,WAE文件播放是通过生成软件将一个或多个WAV格式文件进行压缩,生成一个WAE文件(库),并将此文件存放在T5L的片内Flash中,开发者按需进行调用,最长可播放1024s.此功能 ...
最新文章
- 学爬虫,你敢说你不会 requests 模块
- 部分不能激活Win 7 的问题分析和解决方案
- 用VC写Assembly代码(6)--附录2[windows进程中的内存结构]
- 电大计算机应用基础考试复习,电大 《计算机应用基础》形考作业2
- vm安装diagram
- BZOJ 2821: 作诗(Poetize) [分块]
- 基于java的音乐网站的设计与实现
- Wireshark软件的使用教程
- 线性代数与空间解析几何重要知识点笔记
- cαr怎么发音_英文字母在线发音
- Android Studio实现文字识别(基于百度云OCR)
- 资产计提折旧日志查询(AFBP)和数据反查(FB03 / AW01N)
- 淘淘商城分布式电商系统项目总结
- 计算机管理用户和组无法访问,用户和组管理权限及文件访问控制
- 2021年建5G基站60万个;中兴遭减持;三大运营商2020年成绩单;电信发布新手机...
- stm32f302实现斩波控制步进电机_spwm超级无敌stm32步进电机控制教程
- 小语种翻译配音的软件推荐
- Android运行虚拟机怎样解锁,vm 虚拟机 android 如何解锁
- 对抗神经网络之对抗卷积神经网络[2]
- HomeBrew 安装软件慢的解决方法
热门文章
- 如何查看自己的qq邮箱服务器地址,怎么看自己设置的qq邮箱帐号
- 使用AIL(Android Init Language)解释servicemanager.rc语句作用
- WordPress插件 引流吸粉到微信公众号 提高用户关注量
- 多一份感动,多一份行动[动物园的猪 发表于 2004-11-15]
- 基于javaweb+jsp的学生档案管理系统
- 微信开放平台申请流程讲解与注意事项(未完待续)
- python人民币转大写_python实现人民币大写转换
- PLC的PNP和NPN概念
- RuntimeError: The size of tensor a (22) must match the size of tensor b (32) at non-singleton dimens
- 繁体转简体 java_在java中,怎么把繁体字转化为简体字