[Feature][T106-184][IRQ]add lynq_get_irq_type api and change demo
Only Configure: No
Affected branch: master
Affected module: irq
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: Yes
Change-Id: I61375b14caf8d687da6aa93b87ca1a6877a18c62
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-irq-demo/files/lynq-irq-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-irq-demo/files/lynq-irq-demo.cpp
index 537273e..0f8ddef 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-irq-demo/files/lynq-irq-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-irq-demo/files/lynq-irq-demo.cpp
@@ -5,10 +5,35 @@
#include <include/lynq-irq.h>
+#define CMD_SET_WAKE "set_wake"
+#define CMD_GET_WAKE "get_wake\n"
+#define CMD_SET_TYPE "set_type"
+#define CMD_GET_TYPE "get_type\n"
+#define CMD_UNINSTALL "uninstall\n"
+#define CMD_QUIT_TEST "quit\n"
+
+int line;
+
+
+static void printUsage(void)
+{
+ printf("Usage:\n");
+ printf("-set_wake <en>\n");
+ printf("-set_type <en>\n");
+ printf("-get_type\n");
+ printf("-get_wake\n");
+ printf("-uninstall\n");
+ printf("-quit\n");
+ printf("Please input an cmd:");
+}
+
static void irq_test_handler(void)
{
- printf("this is irq_test_handler\n");
+ int trig_type;
+ trig_type = lynq_irq_get_type(line);
+ printf("this is irq_test_handler\nthis irq is gpio %d,trig_type is %d\n", line_gpio[line], trig_type);
+ return NULL;
}
@@ -18,60 +43,45 @@
int irq;
int trig_type;
int en;
+ char cmd[16];
+ char *cmd2;
+ char *cmd1;
- if(argc < 2)
+ if(argc != 3)
{
- printf("wrong input format, please -h \n");
+ printf("wrong input format, please inout lynq-irq-demo <irq_line> <trig_type/wake_state> \n");
return -1;
}
-
- if(strcmp(argv[1],"-h") == 0)
- {
- printf(" -h --help\n");
- printf(" -t [irq][trig_type] --lynq_irq_set_type\n");
- printf(" -sw [irq][en] --lynq_irq_set_wake\n");
- printf(" -gw [irq] --lynq_irq_get_wake\n");
- return 0;
- }
-
- if(argv[2] == NULL)
- {
- printf("wrong input format, please -h \n");
- return -1;
- }
-
- irq = atoi(argv[2]);
- ret = lynq_irq_install(irq, irq_test_handler, 1);
+ irq = atoi(argv[1]);
+ trig_type = atoi(argv[2]);
+ ret = lynq_irq_install(irq, irq_test_handler, trig_type);
if(ret != 0)
{
printf("lynq_irq_install fail\n");
+ return 0;
}
else
{
printf("lynq_irq_install success\n");
+ line = irq;
}
- if(strcmp(argv[1],"-t") == 0)
+ while(1)
{
- if(argv[3] != NULL)
+ printUsage();
+ memset(cmd,0,sizeof(cmd));
+ fgets(cmd, sizeof(cmd), stdin);
+ printf("cmd:%s\n",cmd);
+ cmd1 = strtok(cmd, " ");
+ cmd2 = strtok(NULL, " ");
+ if(strcmp(cmd1, CMD_SET_WAKE) == 0)
{
- trig_type = atoi(argv[3]);
- ret = lynq_irq_set_type(irq, trig_type);
- if(ret < 0)
+ if(cmd2 == NULL)
{
- printf("lynq_irq_set_type fail\n");
+ printf("wake_state is NULL\n");
+ break;
}
- else
- {
- printf("lynq_irq_set_type success\n");
- }
- }
- }
- else if (strcmp(argv[1],"-sw") == 0)
- {
- if(argv[3] != NULL)
- {
- en = atoi(argv[3]);
+ en = atoi(cmd2);
ret = lynq_irq_set_wake(irq, en);
if(ret < 0)
{
@@ -84,30 +94,66 @@
printf("ret=%d\n", ret);
}
}
- }
- else if (strcmp(argv[1],"-gw") == 0)
- {
- ret = lynq_irq_get_wake(irq);
- printf("lynq_irq_get_wake ret %d\n", ret);
- }
- else
- {
- printf("wrong input format, please -h \n");
- return -1;
+ else if(strcmp(cmd1, CMD_GET_WAKE) == 0)
+ {
+ ret = lynq_irq_get_wake(irq);
+ printf("lynq_irq_get_wake ret %d\n", ret);
+ }
+ else if(strcmp(cmd1, CMD_SET_TYPE) == 0)
+ {
+ if(cmd2 == NULL)
+ {
+ printf("trig_type is NULL\n");
+ break;
+ }
+ trig_type = atoi(cmd2);
+ ret = lynq_irq_set_type(line, trig_type);
+ if(ret < 0)
+ {
+ printf("lynq_irq_set_type fail\n");
+ }
+ else
+ {
+ printf("lynq_irq_set_type success\n");
+ }
+ }
+ else if(strcmp(cmd1, CMD_GET_TYPE) == 0)
+ {
+ ret = lynq_irq_get_type(irq);
+ printf("lynq_irq_get_type ret %d\n", ret);
+ }
+ else if(strcmp(cmd1, CMD_UNINSTALL) == 0)
+ {
+ ret = lynq_irq_uninstall(irq);
+ if(ret != 0)
+ {
+ printf("lynq_irq_uninstall fail\n");
+ }
+ else
+ {
+ printf("lynq_irq_uninstall success\n");
+ }
+ }
+ else if(strcmp(cmd1, CMD_QUIT_TEST) == 0)
+ {
+ ret = lynq_irq_uninstall(irq);
+ if(ret != 0)
+ {
+ printf("lynq_irq_uninstall fail\n");
+ }
+ else
+ {
+ printf("lynq_irq_uninstall success\n");
+ break;
+ }
+ }
+ else
+ {
+ printf("wrong input format\n");
+ }
}
- ret = lynq_irq_uninstall(irq);
- if(ret != 0)
- {
- printf("lynq_irq_uninstall fail\n");
- }
- else
- {
- printf("lynq_irq_uninstall success\n");
- }
-
return 0;
-
}
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-irq/include/lynq-irq.h b/cap/zx297520v3/src/lynq/lib/liblynq-irq/include/lynq-irq.h
index 298e75a..36fd9ed 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-irq/include/lynq-irq.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-irq/include/lynq-irq.h
@@ -6,6 +6,9 @@
extern "C" {
#endif
+
+int line_gpio[15]={-1,48,49,50,51,52,53,54,119,128,129,-1,131,-1,125};//this is the line match gpio
+
typedef void (*irq_handler)(void);
int lynq_irq_install(int line, irq_handler irq_handler, int trig_type);
@@ -14,6 +17,8 @@
int lynq_irq_set_type(int line, int trig_type);
+int lynq_irq_get_type(int line);
+
int lynq_irq_set_wake(int line, int en);
int lynq_irq_get_wake(int line);
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-irq/lynq-irq.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-irq/lynq-irq.cpp
index 566961e..a48090e 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-irq/lynq-irq.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-irq/lynq-irq.cpp
@@ -12,7 +12,6 @@
extern "C" {
#endif
-#define USER_LOG_TAG "LYNQ_IRQ"
/*****************************************
* @brief:lynq_irq_install
@@ -27,8 +26,10 @@
int lynq_irq_install(int line, irq_handler irq_test_handler, int trig_type)
{
int ret;
- LYLOGSET(LOG_INFO);
- LYLOGEINIT(USER_LOG_TAG);
+ if(trig_type < 0)
+ {
+ return -1;
+ }
ret = sc_irq_install(line, irq_test_handler, trig_type);
if (ret != 0)
{
@@ -52,8 +53,6 @@
int lynq_irq_uninstall(int line)
{
int ret;
- LYLOGSET(LOG_INFO);
- LYLOGEINIT(USER_LOG_TAG);
ret = sc_irq_uninstall(line);
if (ret != 0)
{
@@ -77,8 +76,10 @@
int lynq_irq_set_type(int line, int trig_type)
{
int ret;
- LYLOGSET(LOG_INFO);
- LYLOGEINIT(USER_LOG_TAG);
+ if(trig_type < 0)
+ {
+ return -1;
+ }
ret = sc_irq_set_type(line, trig_type);
if (ret < 0)
{
@@ -89,6 +90,29 @@
}
+/*****************************************
+* @brief:lynq_irq_get_type
+* @param count [IN]:1
+* @param sum [OUT]:NA
+* @return :success >= 0, failed other
+* @todo:NA
+* @see:NA
+* @warning:NA
+******************************************/
+int lynq_irq_get_type(int line)
+{
+ int ret;
+ int trig_type;
+ ret = sc_irq_get_type(line, &trig_type);
+ if (ret != 0)
+ {
+ LYINFLOG("get_type failed, ret:%d\n", ret);
+ return ret;
+ }
+ LYINFLOG("get_type readback(%d)\n", trig_type);
+ return trig_type;
+}
+
/*****************************************
* @brief:lynq_irq_set_wake
@@ -102,8 +126,6 @@
int lynq_irq_set_wake(int line, int en)
{
int ret;
- LYLOGSET(LOG_INFO);
- LYLOGEINIT(USER_LOG_TAG);
ret = sc_irq_set_wake(line, en);
if (ret < 0)
{
@@ -126,8 +148,6 @@
{
int ret;
int en;
- LYLOGSET(LOG_INFO);
- LYLOGEINIT(USER_LOG_TAG);
ret = sc_irq_get_wake(line, &en);
if (ret != 0)
{