外设控制

更新时间:2023-08-09 09:25:02下载pdf

灯效提示音按键 是 IPC(IP Camera)产品常见的跟外设相关的功能。

  • 指示灯和喇叭:根据设备所处状态分别展示不同的灯效和音效,是用户了解设备运行状态的最直观的方式。
  • 按键:用户通过按键重置设备,卡刷升级等。

功能描述

IPC 通用指示灯逻辑

设备功能现象 外设表现
设备启动中(正常上电) 红灯常亮
设备等待配网 红灯快闪
设备收到配网信息开始连接路由器 绿灯慢闪(若此步骤失败:红绿交替慢闪)
设备连接路由器成功开始在网上注册 绿灯快闪(若此步骤失败:红绿交替快闪)
设备上线 绿灯常亮
设备故障 红灯常亮
固件 OTA 升级 黄灯慢闪(红绿同时闪烁)

快闪和慢闪的定义:

  • 快闪:250ms 亮,250ms 灭
  • 慢闪:1500ms 亮,1500ms 灭

IPC 通用提示音逻辑

设备功能现象 外设表现
设备进入待配网状态 提示音 1
设备收到配网信息 提示音 2
设备重置成功 提示音 2(擦写文件完成,重启前)
设备升级成功 提示音 2(擦写 Flash 完成,重启前)
  • 提示音 1:对应产品目录下的 resource/audio/beepA.pcm
  • 提示音 2:对应产品目录下的 resource/audio/beepB.pcm

IPC 通用按键逻辑

设备功能现象 外设表现
设备重置 长按 Reset 3 秒

开发指导

关联组件

  • app_sys_led
  • app_sys_panel

数据结构

指示灯状态模式

typedef enum
{
    TY_LED_RED_ON,                     ///< 红灯常亮
    TY_LED_RED_OFF,                    ///< 红灯关闭
    TY_LED_BLUE_ON,                    ///< 蓝灯常亮
    TY_LED_BLUE_OFF,                   ///< 蓝灯关闭
    TY_LED_GREEN_ON,                   ///< 绿灯常亮
    TY_LED_GREEN_OFF = 5,              ///< 绿灯关闭
    TY_LED_YELLOW_ON,                  ///< 黄灯常亮
    TY_LED_YELLOW_OFF,                 ///< 黄灯关闭
    TY_LED_RGB_ON,                     ///< 三色白灯常亮
    TY_LED_RGB_OFF,                    ///< 三色白灯关闭
    TY_IRLED_ON = 10,                  ///< 红外灯常亮
    TY_IRLED_OFF,                      ///< 红外灯关闭
    TY_LED_RED_BLINK_FAST,             ///< 红灯快闪
    TY_LED_RED_BLINK_SLOW,             ///< 红灯慢闪
    TY_LED_BLUE_BLINK_FAST,            ///< 蓝灯快闪
    TY_LED_BLUE_BLINK_SLOW = 15,       ///< 蓝灯慢闪
    TY_LED_GREEN_BLINK_FAST,           ///< 绿灯快闪
    TY_LED_GREEN_BLINK_SLOW,           ///< 绿灯慢闪
    TY_LED_YELLOW_BLINK_FAST,          ///< 黄灯快闪
    TY_LED_YELLOW_BLINK_SLOW,          ///< 黄灯慢闪
    TY_LED_RING_BLINK = 20,            ///< 环形交替闪烁
    TY_WHITELED_ON,                    ///< 白光补光灯常亮
    TY_WHITELED_OFF,                   ///< 白光补光灯关闭
    TY_LED_WHITE_BLINK_FAST,           ///< 白光快闪
    TY_LED_WHITE_BLINK_SLOW,           ///< 白光慢闪
    TY_LED_RG_BLINK_FAST = 25,         ///< 红绿灯交替快闪
    TY_LED_RG_BLINK_SLOW,              ///< 红绿灯交替慢闪
    TY_LED_RB_BLINK_FAST,              ///< 红蓝灯交替快闪
    TY_LED_RB_BLINK_SLOW,              ///< 红蓝灯交替慢闪
    TY_LED_RING_ON,                    ///< 环形交替常亮
    TY_LED_RING_OFF = 30,              ///< 环形交替关闭
    TY_LED_RING_BLINK_FAST,            ///< 环形交替快闪
    TY_LED_RING_BLINK_SLOW,            ///< 环形交替慢闪
    TY_LED_RING_BLINK_BREATH_START,    ///< 环形呼吸灯开始
    TY_LED_RING_BLINK_BREATH_STOP,     ///< 环形呼吸灯停止
    TY_LED_RING_BLINK_ROLL,            ///< 环形跑马灯
    TY_LED_RING_BLINK_BREATH_ONCE,     ///< 单次呼吸灯
    TY_LED_RING_BLINK_BREATH_TWICE,    ///< 两次呼吸灯
    TY_FILL_LIGHT_ON,                  ///< 白光补光灯打开
    TY_FILL_LIGHT_OFF,                 ///< 白光补光灯关闭
    TY_LED_STATUS_NULL,                ///< 无灯效
    TY_LED_STATUS_MAX,
} TY_SYS_LED_STATUS;

LED 的初始化参数

typedef struct s_tycam_led
{
    int slow_blink_ms;                 ///< 慢闪时间间隔,ms
    int fast_blink_ms;                 ///< 快闪时间间隔,ms
    int white_light_mode;              ///< 白光灯声音告警、手动控制
    int white_light_pwm_highest;       ///< 白光灯 PWM 最大值
    int white_light_pwm_lowest;        ///< 白光灯 PWM 最小值
    char white_light_pwm_path[128];    ///< 白光灯 pwm 文件路径
} TY_LED_INIT_PARAM;

管脚方向

typedef enum {
    INPUT,     ///< 输入模式
    OUTPUT,    ///< 输出模式
}ty_gpio_mode;

管脚控制方式

typedef enum {
    COMMON_MODE,    ///< 通用模式
    IOCTL_MODE,     ///< ioctl 模式
}ty_gpio_ctrl_mode;

GPIO 通用配置设置

typedef struct s_tycam_gpio {
    int gpio_num;              ///< GPIO num
    ty_gpio_mode dir;          ///< GPIO 方向,0 为输入,1 为输出
    char default_val;          ///< GPIO 初始化电平
    ty_gpio_ctrl_mode mode;    ///< gpio 控制模式
    char ioctl_path[64];       ///< ioctrl 模式时的节点路径
}ty_sys_gpio;

重置按键初始化参数

typedef struct TY_KEY_INIT_PARAM_ {
    int long_press_ms;                      ///< 长按,ms
    int short_press_ms;                     ///< 短按,ms
    TY_SYS_KEY_MSG_CB ty_sys_key_msg_cb;    ///< 重置按键回调
}TY_KEY_INIT_PARAM_S;

按键操作类型

typedef enum {
    TY_SYS_KEY_PRESS_TYPE_NO,           ///< 没有按键响应
    TY_SYS_KEY_PRESS_TYPE_UP,           ///< 抬起
    TY_SYS_KEY_PRESS_TYPE_LONG = 500,   ///< 长按
    TY_SYS_KEY_PRESS_TYPE_SHORT,        ///< 短按
    TY_SYS_KEY_TRIG_PRESS,              ///< 按键触发
    TY_SYS_KEY_SINGLE_CLICK,            ///< 单击
    TY_SYS_KEY_DOUBLE_CLICK,            ///< 双击
    TY_SYS_KEY_TRIPLE_CLICK,            ///< 三击
}TY_SYS_KEY_PRESS_TYPE;

API 说明

LED 初始化

该 API 用于初始化接口资源,并起线程管理灯效。

/**
 * @brief Set the light Flash interval
 *
 * @param[in] led_param: Led initialization parameter
 *
 * @return int; 0:success, others:failed
 */
int ty_sys_led_init(TY_LED_INIT_PARAM *led_param);

LED 反初始化

/**
 * @brief LED uninit
 *
 * @return int; 0:success, others:failed
 */
int ty_sys_led_deinit(void);

LED 控制开关

面板操作指示灯开关时,调用该接口,控制所有指示灯状态。

/**
 * @brief LED control switch
 *
 * @param[in] onoff:Turn the lights on or off
 *
 * @return void
 */
void ty_sys_led_switch(int onoff);

灯效设置

/**
 * @brief Lamp effect setting
 *
 * @param[in] status:Indicator status mode
 *
 * @return void
 */
void ty_sys_led_mode_set(TY_SYS_LED_STATUS status);

初始化 GPIO

/**
 * @brief init GPIO
 *
 * @param[in] p_gpio:GPIO configuration parameters
 *
 * @return int; 0:success, others:failed
 */
int ty_sys_gpio_init(ty_sys_gpio *p_gpio);

设置 GPIO 的值

/**
 * @brief Set the value of GPIO
 *
 * @param[in] num:GPIO pin number
 * @param[in] value:Value to be set for GPIO
 *
 * @return int; 0:success, others:failed
 */
int ty_sys_panel_set_value(int num, int value);

注册按键操作接口

注册按键操作接口需要您自己定义长按,短按和重置按钮的回调接口。

/**
 * @brief Key config param
 *
 * @param[in] key_param:
 *
 * @return int; 0:success, others:failed
 */
int ty_sys_key_press_init(TY_KEY_INIT_PARAM_S *key_param);

注意事项

对于 PCM 格式的音频,设备只支持:

  • 8000 采样率
  • 16bit 深度
  • 单声道格式

常见问题

指示灯没有按预期亮灭,如何排查?

软件层面上,排查 GPIO 管脚配置是否正确,极性是否正确。

如何替换自定义提示音?

请参考 apps/xxx/resource/audio 目录,替换文件请保存在该目录下。