ISVP-SDK  3.12.0
Ingenic Smart Video Platform SDK
枚举 | 枚举值 | 函数
Sysutils_Misc

其他功能. 更多...

Sysutils_Misc 的协作图:

枚举

enum  SUKeyEvent { KEY_RELEASED, KEY_PRESSED }
 按键事件. 更多...
 
enum  SULedCmd { LED_OFF, LED_ON }
 LED行为命令. 更多...
 

函数

int SU_Key_OpenEvent (void)
 获得按键事件句柄. 更多...
 
int SU_Key_CloseEvent (int evfd)
 关闭按键事件. 更多...
 
int SU_Key_ReadEvent (int evfd, int *keyCode, SUKeyEvent *event)
 读取按键事件. 更多...
 
int SU_Key_DisableEvent (int keyCode)
 Disable按键事件. 更多...
 
int SU_Key_EnableEvent (int keyCode)
 Enable按键事件. 更多...
 
int SU_LED_Command (int ledNum, SULedCmd cmd)
 发送LED命令. 更多...
 

详细描述

其他功能.

枚举类型说明

enum SUKeyEvent

按键事件.

枚举值
KEY_RELEASED 

按键抬起

KEY_PRESSED 

按键按下

enum SULedCmd

LED行为命令.

枚举值
LED_OFF 

LED关闭

LED_ON 

LED打开

函数说明

int SU_Key_CloseEvent ( int  evfd)

关闭按键事件.

参数
[in]evfd按键事件句柄
返回值
0成功.
非0失败.
备注
注意
无。
int SU_Key_DisableEvent ( int  keyCode)

Disable按键事件.

参数
[in]keyCode按键码
返回值
0成功.
非0失败.
备注
如果按键被配置为唤醒源,那么在系统suspend时,(无论该按键是否被Open)按下按键会使系统唤醒。 在Disable按键事件后,系统会关闭按键事件的中断,该按键也就无法唤醒系统
该API可用来Disable PIR"按键"唤醒系统。
注意
无。
int SU_Key_EnableEvent ( int  keyCode)

Enable按键事件.

参数
[in]keyCode按键码
返回值
0成功.
非0失败.
备注
作为Disable按键事件的反过程。详见SU_Key_DisableEvent(int keyCode)
注意
无。
int SU_Key_OpenEvent ( void  )

获得按键事件句柄.

参数
返回值
>0按键事件句柄.
<=0失败.
备注
在成功获得一个按键事件句柄之后,即开始“记录”按键事件,直到关闭这个按键事件。
若打开多个句柄,则每个按键事件会记录一份按键事件。
例如,两个线程分别打开了一个按键事件,每个线程持有一个句柄,则这两个线程会读取到相同的事件序列。 但是如果两个线程共享同一个句柄,则每个按键事件只能被读取到一次。
注意
无。
int SU_Key_ReadEvent ( int  evfd,
int *  keyCode,
SUKeyEvent event 
)

读取按键事件.

参数
[in]evfd按键事件句柄
[in]keyCode按键码
[out]event按键事件指针.
返回值
0成功.
非0失败.
备注
该函数阻塞,直到有按键事件发生返回.
按键码的定义在linux/input.h中,与GPIO的映射关系定义在kernel板级文件中。
例如几个常用的按键:
1 #define KEY_HOME 102 //HOME键
2 #define KEY_POWER 116 //开关机键,一般也可用来作为唤醒键
3 #define KEY_WAKEUP 143 //唤醒键,除POWER键之外用来唤醒系统的按键
4 #define KEY_F13 183 //当PIR作为按键使用时被定义为F13键
按键键码与GPIO号的定义,是否作为唤醒源,有效电平等信息均定义在内核板级文件中,如下所示:
1 struct gpio_keys_button __attribute__((weak)) board_buttons[] = {
2 #ifdef GPIO_HOME
3  {
4  .gpio = GPIO_HOME, //定义GPIO号
5  .code = KEY_HOME, //定义按键码
6  .desc = "home key",
7  .active_low = ACTIVE_LOW_HOME, //定义有效电平
8 #ifdef WAKEUP_HOME
9  .wakeup = WAKEUP_HOME, //定义是否可做为唤醒源,1为可唤醒suspend
10 #endif
11 #ifdef CAN_DISABLE_HOME
12  .can_disable = CAN_DISABLE_HOME, //定义是否可以被Disable
13 #endif
14  },
15 #endif
16 #ifdef GPIO_POWER
17  {
18  .gpio = GPIO_POWER,
19  .code = KEY_POWER,
20  .desc = "power key",
21  .active_low = ACTIVE_LOW_POWER,
22 #ifdef WAKEUP_POWER
23  .wakeup = WAKEUP_POWER,
24 #endif
25 #ifdef CAN_DISABLE_POWER
26  .can_disable = CAN_DISABLE_POWER,
27 #endif
28  },
29 #endif
30 }
备注
对于数字PIR,一种使用方式是把PIR作为一个按键定义,PIR触发相当于按键按下事件(KEY_PRESSED), PIR恢复相当于按键抬起事件(KEY_RELEASED)。若需要PIR唤醒功能,则把PIR对应的按键定义为唤醒源即可。
API详细使用方法请参考sample-keyevent.c.
注意
无。
int SU_LED_Command ( int  ledNum,
SULedCmd  cmd 
)

发送LED命令.

参数
[in]ledNumLED号.
[in]cmdLED行为命令.
返回值
0成功.
非0失败.
备注
LED号根据开发板的不同而不同。LED号定义在内核板级文件中,注册为Linux标 准Fixed Regulator设备。在板级文件中需定义LED的GPIO号,有效电平,电源递归关系等 信息。下面是定义了两个LED fixed regulator的例子:
1 FIXED_REGULATOR_DEF( //定义fixed regulator
2  led0,
3  "LED0", 3300000, GPIO_PA(14),
4  HIGH_ENABLE, UN_AT_BOOT, 0,
5  "ldo7", "vled0", NULL);
6 
7 FIXED_REGULATOR_DEF(
8  led1,
9  "LED1", 3300000, GPIO_PA(15),
10  HIGH_ENABLE, UN_AT_BOOT, 0,
11  "ldo7", "vled1", NULL);
12 
13 static struct platform_device *fixed_regulator_devices[] __initdata = {
14  &gsensor_regulator_device,
15  &led0_regulator_device,
16  &led1_regulator_device,
17 };
18 
19 static int __init fix_regulator_init(void) //在subsys_initcall_sync中注册regulator
20 {
21  int i;
22 
23  for (i = 0; i < ARRAY_SIZE(fixed_regulator_devices); i++)
24  fixed_regulator_devices[i]->id = i;
25 
26  return platform_add_devices(fixed_regulator_devices,
27  ARRAY_SIZE(fixed_regulator_devices));
28 }
29 subsys_initcall_sync(fix_regulator_init);
此API的使用示例:
1 if (SU_LED_Command(0, LED_ON) < 0) //使能LED0
2  printf("LED0 turn on error\n");
3 if (SU_LED_Command(1, LED_ON) < 0) //使能LED1
4  printf("LED0 turn on error\n");
5 if (SU_LED_Command(0, LED_OFF) < 0) //关闭LED0
6  printf("LED1 turn off error\n");
7 if (SU_LED_Command(1, LED_OFF) < 0) //关闭LED1
8  printf("LED1 turn off error\n");
注意
无。