文章目录

  • 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 事件判断

事件添加步骤

  1. 在event_key_spec中添加自己需要的关键字、介绍、执行函数
  2. 获取到uart的u8数据,将其存储到字符串数组中
  3. 获取char指针指向该命令的value位置
  4. 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. 处理迪文屏事件相关推荐

  1. 【OKT507】迪文屏事件

    前言 本章介绍如何实现迪文屏与飞凌OKT507的uart事件通信. 代码 从上到下是uart_example.c.dwin.c.dwin.h.makefile #include "dwin. ...

  2. 22、T5L 迪文屏 C51开发之Hello World例程

    T5L 迪文屏 C51开发之Hello World例程 1.写在前面 2.例程功能简介 3.GUI界面设计 4.C51代码设计 1.写在前面   前面已经介绍了如何使用DGUS Tool软件来进行迪文 ...

  3. 30、T5L 迪文屏 C51开发之 ADC模数转换

    T5L 迪文屏 C51开发之 ADC模数转换 1.介绍 2.例程功能介绍 3.GUI界面设计 4.C51程序设计 1.介绍   T5L 芯片内部的 ADC 模数转换外设,有一点需要注意的是此 ADC ...

  4. 1、迪文屏基于T5L_C51开发手势6宫格解锁

    演示视频 1.概述 基于迪文屏DMG32240C028-03WTC屏的滑动手势6宫格解锁功能,该功能运用了触摸屏状态读取和坐标读取的功能(系统变量接口0x0016),绘图功能,需要配合变量图标显示等基 ...

  5. 分享:STM32与迪文屏交互,轻松实现一些简单的功能!

    最近,托朋友用STM32F103评估板和迪文屏做了交互(@田),没写多少代码,就实现了一些简单常用的功能,还是很简单的!今天跟大家分享一下: 一.评估板使用说明 1.功能 图1:整体效果图 图2:MC ...

  6. 一种迪文屏软件在线升级方法

    --来自迪文开发者论坛 开发自己的项目中遇到文件升级不方便的问题,因此设计了一个在线升级方案,可以有效解决如下问题: 1. 当产品已发出需要修复Bug时,无法在线修复. 2. 无法判断新老版本,当数据 ...

  7. STM32串口中断程序-迪文屏,

    STM32串口中断程序-迪文屏,串口接收准确数值 这几天一直在做原子开发板与迪文屏的通信,开发板向迪文屏写数据已经完成,但是从迪文屏读的数据总是无法返回开发板.原始及调试程序见下图: 在串口接收到从d ...

  8. 【资料分享】迪文屏使用经验分享

    DIWEN 写在前面的话 我的屏幕 显示图片 SD卡 FLASH分配 举例工程 Diwen ico生成工具 使用经验总结 写在前面的话 以下内容是本人在观看迪文科技在哔哩哔哩的教学视频所做的笔记 几乎 ...

  9. 迪文屏OS汇编代码开发-参数修改 保存 翻页(七)

    ; DWIN OS ;程序功能:上翻页,下翻页,参数修改,保存 ;软件环境: DWIN OS ASM Builder V1.5 ;硬件环境:DW K600+平台 ;变量 ;用户数据区地址从0x0600 ...

  10. 迪文屏的音乐播放文件配置

    针对T5L平台产品,WAE文件播放是通过生成软件将一个或多个WAV格式文件进行压缩,生成一个WAE文件(库),并将此文件存放在T5L的片内Flash中,开发者按需进行调用,最长可播放1024s.此功能 ...

最新文章

  1. 学爬虫,你敢说你不会 requests 模块
  2. 部分不能激活Win 7 的问题分析和解决方案
  3. 用VC写Assembly代码(6)--附录2[windows进程中的内存结构]
  4. 电大计算机应用基础考试复习,电大 《计算机应用基础》形考作业2
  5. vm安装diagram
  6. BZOJ 2821: 作诗(Poetize) [分块]
  7. 基于java的音乐网站的设计与实现
  8. Wireshark软件的使用教程
  9. 线性代数与空间解析几何重要知识点笔记
  10. cαr怎么发音_英文字母在线发音
  11. Android Studio实现文字识别(基于百度云OCR)
  12. 资产计提折旧日志查询(AFBP)和数据反查(FB03 / AW01N)
  13. 淘淘商城分布式电商系统项目总结
  14. 计算机管理用户和组无法访问,用户和组管理权限及文件访问控制
  15. 2021年建5G基站60万个;中兴遭减持;三大运营商2020年成绩单;电信发布新手机...
  16. stm32f302实现斩波控制步进电机_spwm超级无敌stm32步进电机控制教程
  17. 小语种翻译配音的软件推荐
  18. Android运行虚拟机怎样解锁,vm 虚拟机 android 如何解锁
  19. 对抗神经网络之对抗卷积神经网络[2]
  20. HomeBrew 安装软件慢的解决方法

热门文章

  1. 如何查看自己的qq邮箱服务器地址,怎么看自己设置的qq邮箱帐号
  2. 使用AIL(Android Init Language)解释servicemanager.rc语句作用
  3. WordPress插件 引流吸粉到微信公众号 提高用户关注量
  4. 多一份感动,多一份行动[动物园的猪 发表于 2004-11-15]
  5. 基于javaweb+jsp的学生档案管理系统
  6. 微信开放平台申请流程讲解与注意事项(未完待续)
  7. python人民币转大写_python实现人民币大写转换
  8. PLC的PNP和NPN概念
  9. RuntimeError: The size of tensor a (22) must match the size of tensor b (32) at non-singleton dimens
  10. 繁体转简体 java_在java中,怎么把繁体字转化为简体字