全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > LED照明 >

利用pio的API控制LED的设计与实现

时间:2022-10-19 11:46

人气:

作者:admin

标签: LED  API  高通 

导读:利用pio的API控制LED的设计与实现-在高通的QCC51xx软件框架下,LED的控制都是在headset_led.c/h和headset_leds_config_table.c/h中定义并且统一管理的,但遇到一些特殊情况,则不希望用这些代码来控...

 

内容简介

高通的QCC51xx软件框架下,LED的控制都是在headset_led.c/h和headset_leds_config_table.c/h中定义并且统一管理的,但遇到一些特殊情况,则不希望用这些代码来控制LED,本文为介绍如何做到这一点。

测试工具

MDE:MDE_WIN_2.8.0.37_x64

Toolkit:ADK Toolkit 1.2.13.21_x64

QACT:NULL

Bluesuite:NULL

Hardware:Qualcomm QCC5171 DEV.

Software:adk-src-1-0_qtil_standard_oem_qcc517x-qcc307x,ADK-22.2-CS1-r00344.1

正文

本文来处理这么一个场景,假设耳机物理上有LED1、LED2和LED3三颗LED,其中LED1和LED2作为正常的LED指使用,比如配对、播放音乐、打电话等状态,而LED3作为ANC是否开启来使用,很明显LED3的点亮与否跟其他状态没有关系,LED3只是根据ANC状态进行动作,所以如果采用headset_led.c里的方式进行app_led_pattern_xxx的配置的话,需要为每一个状态分别配置一个LED3开启和关闭的app_led_pattern_xxx,这样在状态上处理起来就比较麻烦。

从手册上了解到,LED口本质上也就是一个PIO口:

2a27c8e6-4ee9-11ed-a3b6-dac502259ad0.png

所以我们能否用pio.h中的API来直接控制LED呢?答案肯定是可以的。

首先假设我们之前定义了三颗LED,那么我们可以按照以下步骤来修改。

更改工程属性,把LED数量相关的宏定义由3改为2:

2aa35182-4ee9-11ed-a3b6-dac502259ad0.png

在headset_led.c中添加以下代码:

2ace4f2c-4ee9-11ed-a3b6-dac502259ad0.png

#elif defined(HAVE_2_LEDS)

{

.number_of_leds = 2,

.leds_use_pio = TRUE,

.led0_pio = CHIP_LED_0_PIO,

.led1_pio = CHIP_LED_1_PIO,

.led2_pio = 0,

};

#elif defined(HAVE_2_LEDS)

#define LED_0_STATE (1 << 0)

#define LED_1_STATE (1 << 1)

#define LED_2_STATE (1 << 1)

在led_manager_config.h中添加以下代码:

2b9cfb6a-4ee9-11ed-a3b6-dac502259ad0.png

#elif defined(HAVE_2_LEDS)

/* The number of LEDs led_manager will control. */

#define appConfigNumberOfLeds()(2)

/*! PIO to control LED0 */

#define appConfigLed0Pio()CHIP_LED_0_PIO

/*! PIO to control LED1 */

#define appConfigLed1Pio()CHIP_LED_1_PIO

/*! PIO to control LED2 */

#define appConfigLed2Pio()(0)

在headset_sm_private.h中添加一个事件,用于每500ms检查一次anc状态:

2c4b7d02-4ee9-11ed-a3b6-dac502259ad0.png

在headset_sm.c中添加宏定义,这里的LED3对应的pio口为61:

2c8548ac-4ee9-11ed-a3b6-dac502259ad0.png

#define pio_num 61

#define PIO2BANK(pio) ((uint16)((pio) / 32))

#define PIO2MASK(pio) (1UL << ((pio) % 32))

在headsetSmInit函数中添加对LED3端口的初始化代码:

2cc8d1da-4ee9-11ed-a3b6-dac502259ad0.png

PanicNotZero(PioSetMapPins32Bank(PIO2BANK(pio_num), PIO2MASK(pio_num), PIO2MASK(pio_num)));

PanicNotZero(PioSetDir32Bank(PIO2BANK(pio_num), PIO2MASK(pio_num),PIO2MASK(pio_num)));

MessageSendLater(headsetSmGetTask(), SM_INTERNAL_ANC_USE_SEPARATE_LED,NULL, 500);

在headsetSmHandleMessage函数中添加事件处理代码:

2d0a8c24-4ee9-11ed-a3b6-dac502259ad0.png

case SM_INTERNAL_ANC_USE_SEPARATE_LED:

if(AncStateManager_IsEnabled())

{

PanicNotZero(PioSet32Bank(PIO2BANK(pio_num), PIO2MASK(pio_num),0));//LED ON

}

else

{

PanicNotZero(PioSet32Bank(PIO2BANK(pio_num), PIO2MASK(pio_num),PIO2MASK(pio_num)));//LED OFF

}

MessageSendLater(headsetSmGetTask(), SM_INTERNAL_ANC_USE_SEPARATE_LED,NULL, 500);

break;

这样处理后,headset_led.c/h相关的代码就只控制了LED1和LED2,LED3则可以直接通过PioSet32Bank函数来进行控制了。

 

  审核编辑:汤梓红

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信