[Bugfix][API-967][GPIO]optimize thegpio test paln for factory
Change-Id: I4e33e01215a678dc76649d3eb30b76886f753894
(cherry picked from commit 25ed1823001e22b3e9d7dc9acdd7f1700e732eb8)
diff --git a/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp b/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp
index f4cb966..84e8896 100755
--- a/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp
+++ b/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp
@@ -125,12 +125,43 @@
while(fgets(buf, sizeof(buf), fp) != NULL){
lynq_response_ok();
pclose(fp);
- return;
+ return;
}
lynq_response_error(100);
pclose(fp);
}
+static int set_all_gpio_status_and_check(int lynq_gpio_arr[], char status)
+{
+ int m =0;
+ FILE *fp;
+ char lynq_set_gpio_arr[256] = {0};
+ char lynq_get_gpio_state[512] = {0};
+ for(m = 0; m < 85; m++)
+ {
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"echo mode %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[m]);
+ system(lynq_set_gpio_arr);
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"echo out %d %c > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[m], status);
+ system(lynq_set_gpio_arr);
+ }
+
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"cat /sys/devices/platform/10005000.pinctrl/mt_gpio | grep 006");
+ fp=popen(lynq_set_gpio_arr, "r");
+ bzero(lynq_get_gpio_state, 512);
+ fgets(lynq_get_gpio_state,sizeof(lynq_get_gpio_state),fp);
+ pclose(fp);
+
+ if(lynq_get_gpio_state[7] != status)
+ {
+ return 1;
+ }
+ //usleep(10000);
+ return 0;
+}
+
void lynq_handle_gpio(char *input)
{
FILE *fp;
@@ -140,76 +171,134 @@
char lynq_show_gpio_state[64] = {0};
int lynq_gpio_low = 0;
int lynq_gpio_hig = 0;
- int i = 0,m = 0;
+ int lynq_gpio_test_env_error = 1;
+ int i = 0,m = 0,j = 0;
+ int need_int = 1;
int lynq_gpio_beta_state = 1;
-
- for(m = 0; m < 85; m++)
+ RLOGD("start function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+
+ for(i=0; i < 85; i++)
{
- bzero(lynq_set_gpio_arr, 256);
- sprintf(lynq_set_gpio_arr,"echo mode %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[m]);
- system(lynq_set_gpio_arr);
- bzero(lynq_set_gpio_arr, 256);
- sprintf(lynq_set_gpio_arr,"echo out %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[m]);
- system(lynq_set_gpio_arr);
- }
- for(i = 0; i < 85; i++)
- {
- lynq_gpio_low = 0;
- lynq_gpio_hig = 0;
-
- bzero(lynq_set_gpio_arr, 256);
- sprintf(lynq_set_gpio_arr,"echo mode %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[i]);
- system(lynq_set_gpio_arr);
-
- bzero(lynq_set_gpio_arr, 256);
- sprintf(lynq_set_gpio_arr,"echo out %d 1 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[i]);
- system(lynq_set_gpio_arr);
-
- bzero(lynq_set_gpio_arr, 256);
- sprintf(lynq_set_gpio_arr,"cat /sys/devices/platform/10005000.pinctrl/mt_gpio | grep 006");
- fp=popen(lynq_set_gpio_arr, "r");
- bzero(lynq_get_gpio_state, 512);
- fgets(lynq_get_gpio_state,sizeof(lynq_get_gpio_state),fp);
- pclose(fp);
- if(lynq_get_gpio_state[7] == '1')
+ for(j=0;j<3;j++)
{
- lynq_gpio_hig = 1;
- }
+ if (j > 0) // reset gpio when retry
+ {
+ need_int = 1;
+ }
- bzero(lynq_set_gpio_arr, 256);
- sprintf(lynq_set_gpio_arr,"echo out %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[i]);
- system(lynq_set_gpio_arr);
-
- bzero(lynq_set_gpio_arr, 256);
- sprintf(lynq_set_gpio_arr,"cat /sys/devices/platform/10005000.pinctrl/mt_gpio | grep 006");
- fp=popen(lynq_set_gpio_arr, "r");
- bzero(lynq_get_gpio_state, 512);
- fgets(lynq_get_gpio_state,sizeof(lynq_get_gpio_state),fp);
- pclose(fp);
- if(lynq_get_gpio_state[7] == '0')
+ if (need_int == 1)
+ {
+ if (set_all_gpio_status_and_check(lynq_gpio_arr, '0') != 0)
+ {
+ continue;
+ }
+ else
+ {
+ need_int = 0;
+ }
+ RLOGD("finsh peizhi function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+ }
+
+ lynq_gpio_low = 0;
+ lynq_gpio_hig = 0;
+
+ for(int n=0;n<3;n++)
+ {
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"echo mode %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[i]);
+ system(lynq_set_gpio_arr);
+
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"echo out %d 1 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[i]);
+ system(lynq_set_gpio_arr);
+
+
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"cat /sys/devices/platform/10005000.pinctrl/mt_gpio | grep 006");
+ fp=popen(lynq_set_gpio_arr, "r");
+ bzero(lynq_get_gpio_state, 512);
+ fgets(lynq_get_gpio_state,sizeof(lynq_get_gpio_state),fp);
+ pclose(fp);
+ if(lynq_get_gpio_state[7] == '1')
+ {
+ RLOGD("high function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+ lynq_gpio_hig = 1;
+ lynq_gpio_test_env_error = 0;
+ break;
+ }
+ else
+ {
+ RLOGD("high function %s line %d input %s num %d\n", __FUNCTION__, __LINE__, input,lynq_gpio_arr[i]);
+ if(i == 0 && j == 0)
+ {
+
+ lynq_gpio_test_env_error = set_all_gpio_status_and_check(lynq_gpio_arr, '1') == 0 ? 0 : 1;
+ }
+
+ }
+ }
+ if (lynq_gpio_test_env_error == 1)
+ break;
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"echo out %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[i]);
+ system(lynq_set_gpio_arr);
+
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"cat /sys/devices/platform/10005000.pinctrl/mt_gpio | grep 006");
+ fp=popen(lynq_set_gpio_arr, "r");
+ bzero(lynq_get_gpio_state, 512);
+ fgets(lynq_get_gpio_state,sizeof(lynq_get_gpio_state),fp);
+ pclose(fp);
+ if(lynq_get_gpio_state[7] == '0')
+ {
+ RLOGI("*low function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+ lynq_gpio_low = 1;
+ }
+ else
+ {
+ RLOGD("low function fail %s line %d input %s num %d\n", __FUNCTION__, __LINE__, input,lynq_gpio_arr[i]);
+ }
+ bzero(lynq_show_gpio_state, 64);
+ if((lynq_gpio_low != 1) || (lynq_gpio_hig != 1))
+ {
+ RLOGD("fail function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+ }
+ else
+ {
+ RLOGD("success function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+ sprintf(lynq_show_gpio_state,"gpio%d\n",(char *)lynq_gpio_arr[i]);
+ handle_output(lynq_show_gpio_state, strlen(lynq_show_gpio_state), Response);
+ break; // do not retry when pass
+ }
+ } // for(j=0;j<3;j++)
+ if (lynq_gpio_test_env_error == 1)
{
- lynq_gpio_low = 1;
+ lynq_gpio_beta_state = 0;
+ break;
}
- bzero(lynq_show_gpio_state, 64);
- if((lynq_gpio_low != 1) || (lynq_gpio_hig != 1))
+ if (j >= 3 )
{
lynq_gpio_beta_state = 0;
sprintf(lynq_show_gpio_state,"[gpio%d][result]:FAIL \n",(char *)lynq_gpio_arr[i]);
handle_output(lynq_show_gpio_state, strlen(lynq_show_gpio_state), Response);
}
- else
- {
- sprintf(lynq_show_gpio_state,"gpio%d\n",(char *)lynq_gpio_arr[i]);
- handle_output(lynq_show_gpio_state, strlen(lynq_show_gpio_state), Response);
- }
+
+ } // for(i=0; i < 85; i++)
+
+ if(lynq_gpio_test_env_error == 1)
+ {
+ handle_output("tool error", strlen("tool error"), Response);
}
+
if(lynq_gpio_beta_state == 1)
{
+ RLOGD("total success function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
lynq_response_ok();
}
else
{
+ RLOGD("total fail function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
lynq_response_error(100);
}
}
@@ -329,15 +418,15 @@
static Command commands[] =
{
-{"adc",lynq_handle_adc},
-{"sink",lynq_handle_sink},
-{"emmc",lynq_handle_emmc},
-{"gpio",lynq_handle_gpio},
-{"pcie",lynq_handle_pcie},
-{"rgmii",lynq_handle_rgmii},
-{"sgmii",lynq_handle_sgmii},
-{"usb",lynq_handle_usb},
-{NULL, NULL}
+ {"adc",lynq_handle_adc},
+ {"sink",lynq_handle_sink},
+ {"emmc",lynq_handle_emmc},
+ {"gpio",lynq_handle_gpio},
+ {"pcie",lynq_handle_pcie},
+ {"rgmii",lynq_handle_rgmii},
+ {"sgmii",lynq_handle_sgmii},
+ {"usb",lynq_handle_usb},
+ {NULL, NULL}
};
Command* find_command (char *input)