# aw981x-led **Repository Path**: home-coder/aw981x-led ## Basic Information - **Project Name**: aw981x-led - **Description**: this is a private project, a810 project use 2 aw9818 chips for supporting 36 RGB leds. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-04-17 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # aw981x-led this is a private project, a810 project use 2 aw9818 chips for supporting 36 RGB leds.# 2018-4-10 ## 文件目录树 ![文件目录](tree.png) ## 基本实现流程 - ## **1.硬件配置&手册&计划** 两块aw9818芯片,每颗芯片用到54颗原始输出引脚,每颗合计54/3 = 18颗RGB三色灯.共计18 x 2 = 36颗三色灯. [datasheet](https://github.com/home-coder/awled-custom/blob/master/A810_LED_V0.1_20180224.pdf) [项目周期](https://github.com/home-coder/awled-custom/blob/master/项目周期.pdf) --- - ## **2.流程实现** - ### uboot 中实现上电后的闪烁一下。 - ### kernel 驱动中实现开机过程startup时的呼吸效果,开机结束点通过开机自启动的app来通过jni接口传入complete完成开机, 其他app中的呼吸灯效果均类似,即通过jni来下发效果控制码。 - ### 按键: 特殊处理: 如果是**mute**按键,则在内核中实现; 如果是**volume**按键呢 - ## **监听服务的实现** `aw9818_server.c` >用来监听中断事件,比如按键,红外等不在app处实现的事件。 --- ## 3.**reconstruction** - **1.** do_ioctl_event和led_thread线程使用完成量**compete**来实现同步 更正:最后使用锁完全可以实现 - **2.** orietation 使用内部变量,因为全局会引起数据的篡改,而**局部变量**可以通过线程的同步做到变量的同步控制 - **3.** 去除led_effect结构体中的无效成员如background, foward等,通过局部变量来实现,同时注意代码中已存在的引用都要去除 - **4.** 按照**华为编程规范**,最好不使用全局变量原则,如果使用了要优化成**只在一个模块中修改**全局变量的值,其他地方仅仅是使用而不再修改 - **5.** **ctrl_arg**结构的优化和系统整体使用的优化 - **6.** 注销函数的完善 - **7.** 包括ac108中和aw9818中的锁的使用需要重新规划 - **8.** 上层接口如果是自定义颜色怎么办,需要一个接口整体的写入内核,然后对应起内核的各种效果,本方法可以应用层完全模拟:一个配置文件,一个读取函数,然后根据配置文件的内容序列化到结构体 --- ## Q&A + **Q-1** 内核中实现: 每次ioctl传入cmd=LEDS_EFFECT_WAKE_UP和参数arg=direction1 会唤醒wake_up一个阻塞的进程wait_event_interruptible(), 然后根据direction去实现当前角度的灯光闪烁5次 期间如果有其他的事件如又ioctl传入另外一个方向 direction2就打断当前的闪烁并重现根据direction2去实现灯光闪烁5次 + **Q-2** todolist: kthread_should_stop是什么 ? + **Q-3** 考虑如何不使用全局变量如g_aw9818, p_led_effect等 + **Q-4** 根据音量大小来操作灯光,具体是根据按键值是vol+ vol-还是音量值dB呢 + **Q-5** 单独开辟了线程处理循环事件,为什么串口仍然被占用了,这时adb shell的终端是可以使用的 ## 其他智能音箱知识扩展阅读 [如何开发一款Echo智能音响 ](https://mp.weixin.qq.com/s?__biz=MzU3NTAxMTQ3Mg==&mid=2247483651&idx=1&sn=dad95f085afbf0d0fc578a75caa7ada9&chksm=fd28eefcca5f67ea468161aa61bb33612909dbacf536988c4a362994327bceb51ab1d4c6371b&mpshare=1&scene=1&srcid=0301MmhB5HhxUTcx83EHnRMi#rd)