[Feature][ZXW-209]add at+gpioset,can control GPIO direction and value
Only Configure:No
Affected branch:master
Affected module:at-factory
Is it affected on both ZXIC and MTK:only ZXIC
Self-test:Yes
Doc Update:NO
Change-Id: Ifb547ff5d5b08b716d1acf8858e995abaf3342f8
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp
index ed8ca40..612d968 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp
@@ -139,6 +139,87 @@
pull_sel : 0 - bias disable 1 - pull down 2 - pull up
test_gpio_handle[gpio]:gpio handle get by init
*/
+void lynq_handle_gpioset(char *input)
+{
+/*1.gpio_num 0-135
+ 2.direction_set //0 - in; 1 - out
+ 3.value_set
+ 4.pullsel_set // 0 - bias disable; 1 - pull down; 2 - pull up
+*/
+ input = input + strlen("gpioset");
+ int gpio_configure[4];
+ int k = 0;
+ for (int i = 0; i < strlen(input) ; i++)
+ {
+ int num = 0;
+ for (; input[i] != ',' && input[i] != '\0'; i++)
+ {
+ if (input[i] >= '0' && input[i] <= '9')
+ {
+ num = num * 10 + (input[i] - '0');
+ }
+ else
+ {
+ handle_output("+GPIOSET:input error\r\n", strlen("+GPIOSET:input error\r\n"), Response);
+ lynq_response_error(100);
+ return;
+ }
+ }
+ if(k >= 4)
+ {
+ handle_output("+GPIOSET:Too many parameters\r\n", strlen("+GPIOSET:Too many parameters\r\n"), Response);
+ lynq_response_error(100);
+ return;
+ }
+ gpio_configure[k] = num;
+ k++;
+ }
+
+ int gpio = gpio_configure[0];
+ if(gpio < 0 || gpio > 135)
+ {
+ lynq_response_error(1);
+ return;
+ }
+ int direction_set = gpio_configure[1];
+ if(direction_set != 0 && direction_set != 1)
+ {
+ lynq_response_error(2);
+ return;
+ }
+ int value_set = gpio_configure[2];
+ if(value_set != 0 && value_set != 1)
+ {
+ lynq_response_error(3);
+ return;
+ }
+ int pullsel_set = gpio_configure[3];
+ if(pullsel_set != 0 && pullsel_set != 1 && pullsel_set != 2)
+ {
+ lynq_response_error(4);
+ return;
+ }
+
+ int ret;
+ test_gpio_handle[gpio] = sc_gpio_init(gpio, direction_set, value_set, pullsel_set);
+ if(test_gpio_handle[gpio] == NULL)
+ {
+ ALOGE("init%d fail\n",gpio);
+ lynq_response_error(100);
+ return;
+ }
+ ret = sc_gpio_uninit(test_gpio_handle[gpio]);
+ if(ret)
+ {
+ ALOGE("uninit%d fail\n",gpio);
+ lynq_response_error(100);
+ return;
+ }
+ test_gpio_handle[gpio] = NULL;
+ lynq_response_ok();
+ return;
+}
+
int lynq_gpio_analysis(char *input,int *lynq_gpio_arr,int lynq_gpio_total_arr[],int total_length)
{
int j = 0;
@@ -747,6 +828,7 @@
{
{"adc",lynq_handle_adc},
{"emmc",lynq_handle_emmc},
+ {"gpioset",lynq_handle_gpioset},
{"gpio",lynq_handle_gpio},
{"rmii",lynq_handle_rgmii},
{"sdio",lynq_handle_sdio},