gpio: fix gpio AT test
Change-Id: I0a6377cad378e24dbda37e969d9f64262f467a6d
diff --git a/mbtk/mbtk_lib/src/mbtk_gpio.c b/mbtk/mbtk_lib/src/mbtk_gpio.c
index c761476..a0f54c7 100755
--- a/mbtk/mbtk_lib/src/mbtk_gpio.c
+++ b/mbtk/mbtk_lib/src/mbtk_gpio.c
@@ -7,7 +7,6 @@
* \Version: 1.0.0
* \Date: 2022-04-26
*/
-
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
@@ -25,6 +24,14 @@
#include "gpio-define.h"
#define gpio_log(...) if(gpio_debug)printf(__VA_ARGS__)
+#define HWMAP_DEVICE "/dev/hwmap"
+#define PAGE_OFFS_BITS(pgsz) ((unsigned int)(pgsz)-1)
+#define PAGE_MASK_BITS(pgsz) (~PAGE_OFFS_BITS(pgsz))
+
+typedef enum {
+ MBTK_ADC0 = 0, /* ADC 0 */
+ MBTK_ADC1 /* ADC 1 */
+} mbtk_adc_enum;
static int gpio_debug = 0;
@@ -128,70 +135,26 @@
{GPIO_FUNC_VCXO_OUT, 1}, //GPIO_126
{0,0},
};
-#if 0
-/**
- * \brief strstr_n
- *
- * find string return number
- *
- * \param param
- * \return return type
- */
-int strstr_n(const char *s1, const char *s2)
-{
- int n;
- int strlen = 0;
- if(*s2)
- {
- while(*s1)
- {
- for(n = 0; *(s1+n) == *(s2 + n); n++)
- {
- if(!*(s2 + n + 1))
- {
- strlen++;
- return strlen;
- }
- }
- s1++;
- strlen++;
- }
- return 0;
- }else
- return 0;
-}
-static short int from_hex(char a)
-{
- if (a >= 'A' && a <= 'F')
- return a - 'A' + 10;
- else if (a >= 'a' && a <= 'f')
- return a - 'a' + 10;
- else
- return a - '0';
-}
-int str_to_hex(char *str)
+static int mbtk_gpio_adc()
{
- unsigned char str_len = strlen(str);
- int i;
int ret = 0;
- if(str[0] != '0' || (str[1] != 'x' && str[1] != 'X'))
- {
- printf("%s error, %s!\n", __FUNCTION__, str);
- return ret;
+ ret = mbtk_adc_get(0);
+ printf("ADC_value =%d\n", ret);
+ if(ret >= 500 ){
+ ret = 1;
}
- for (i = 2; i < str_len; ++i) {
- ret = ret * 16 + from_hex(str[i]);
+ else if (ret>=0 && ret<=480){
+ ret = 0;
+ }
+ else{
+ ret = -1;
}
return ret;
}
-#endif
-#define HWMAP_DEVICE "/dev/hwmap"
-#define PAGE_OFFS_BITS(pgsz) ((unsigned int)(pgsz)-1)
-#define PAGE_MASK_BITS(pgsz) (~PAGE_OFFS_BITS(pgsz))
static int hwacc_register(int rw, unsigned int addr, unsigned int *data)
{
@@ -314,7 +277,9 @@
pclose(fp);
#else
+ usleep(50);
hwacc_register(1, reg, &value);
+ usleep(50);
#endif
}
/*
@@ -343,7 +308,7 @@
ret = gpio_register_read(reg->reg);
if((ret & 0x7) != reg->func_gpio)
{
- gpio_log("Gpio set func [%d] [0x%x]!\n", reg->func_gpio, (ret & 0xfffffff8) | reg->func_gpio);
+ //printf("Gpio set func [%d] [0x%x]!\n", reg->func_gpio, (ret & 0xfffffff8) | reg->func_gpio);
gpio_register_write(reg->reg, (ret & 0xfffffff8) | reg->func_gpio);
}
return 0;
@@ -370,15 +335,18 @@
reg += 0x0c;
port = port % 0x20;
ret = gpio_register_read(reg);
+ //printf("[Direction] reg_value=%x\n", ret);
// 设置 输出 0 && 1
if(!(ret & (0x1 << port)) && dir)
{
gpio_register_write(reg, ret | (0x1 << port));
+ //printf("[Direction out] reg_value=%x\n", gpio_register_read(reg));
}
// 设置 输入 1 && 0
if((ret & (0x1 << port)) && !dir)
{
gpio_register_write(reg, ret | !(0x1 << port));
+ //printf("[Direction in] reg_value=%x\n", gpio_register_read(reg));
}
}
/*
@@ -423,16 +391,19 @@
port = port % 0x20;
ret = gpio_register_read(reg);
+ //printf("[Value] reg_value=%x\n", gpio_register_read(0xD4019004));
// 设置 高电平 0 && 1
if(value)
{
gpio_register_write(reg, ret | (0x1 << port));
+ //printf("[Value high] reg_value=%x\n", gpio_register_read(0xD4019004));
return;
}
// 设置 低电平 1 && 0
if(!(ret & (0x1 << port)) && !value)
{
gpio_register_write(reg, ret | (0x1 << port));
+ //printf("[Value low] reg_value=%x\n", gpio_register_read(0xD4019004));
}
}
/*
@@ -471,61 +442,124 @@
int gpio_register_test_out(int port, int value)
{
int ret;
- gpio_log("Gpio port [%d] test start!\n", port);
- ret = gpio_register_set_func_0(port);
- if(ret)
- {
+ int i;
+ int valueh = 0;
+ int valuel = 1;
+
+ printf("Gpio port [%d] test start!\n", port);
+ ret = gpio_register_set_func_0(port); //设功能为GPIO
+ if(ret){
printf("gpio_port can't support!\n");
return -1;
}
-
- gpio_register_set_direction(port, 1);
+ gpio_register_set_direction(port, 1); //设方向为输出
ret = gpio_register_get_value(port);
- gpio_log("gpio default value is : %d.\n", ret);
-
- gpio_register_set_value(port, 1);
- ret = gpio_register_get_value(port);
- gpio_log("######gpio should is high: %d.######\n", ret);
- if(1 != ret)
+ printf("gpio default value is : %d.\n", ret);
+
+
+ //[High]
+ for(i = 0; i <= 10; i++){
+ gpio_register_set_value(port, 1);
+ usleep(50);
+ valueh = gpio_register_get_value(port);
+ printf("set high? %d\n",valueh);
+ if(1 == valueh){
+ break;
+ }
+ }
+ usleep(200000);
+ for(i = 0; i <= 20; i++){
+ ret = mbtk_gpio_adc();
+ usleep(100000);
+ if(1 == ret){
+ break;
+ }
+ }
+ printf("------gpio should is high: %d.------\n", ret);
+ if(1 != ret){
+ ret=-1;
goto exit;
- usleep(50);
+ }
- gpio_register_set_value(port, 0);
- ret = gpio_register_get_value(port);
- gpio_log("######gpio should is low: %d.######\n", ret);
- if(0 != ret)
- {
+
+ //[Low]
+ usleep(200);
+ for(i = 0; i <= 10; i++){
+ gpio_register_set_value(port, 0); //输出低
+ usleep(50);
+ valuel = gpio_register_get_value(port);
+ printf("set low? %d\n",valuel);
+ if(0 == valuel){
+ break;
+ }
+ }
+ usleep(200000);
+ for(i = 0; i <= 20; i++){
+ ret = mbtk_gpio_adc();
+ usleep(100000);
+ if(0 == ret){
+ break;
+ }
+ }
+ printf("******gpio should is low: %d.******\n", ret);
+ if(0 != ret){
+ ret=-1;
goto exit;
}
exit:
- gpio_register_set_direction(port, 0);
-
+ //gpio_register_set_direction(port, 0); //设方向为输入
return ret;
}
int mbtk_at_gpio(void* arg)
{
- int test_gpio[] = {33, 35, 36, 34, 82, 83, 81, /*41, 40, 39, 38, 37, 42,*/
- 21, 4, 122, 123, 20, 43, 13, 12, 14, 118, 19, 120,
- 49, 50, 32, 31, /*51, 52, */53, 54, 119, 23, 24, 27, 28, 26, 25, 5, 9,
- 0, 1, 2, 3, 6, 7, 15, 18, 16, 17,
- 126, 125, 56, 55, 58, 48, 57, 59, 117, 29, 30};
+ /*
+ error:53
+ */
+ int test_gpio[] =
+ {
+ 56, 55, 58, 57, 48, 59, 12, 20, 5, 43, 21,
+ 49, 50, 27, 28, 26, 25, 16, 17, 15, 126, 125,
+ 4, 0, 3, 18, 7, 6, 1, 2, 54, 19, 13,
+ 32, 31, 23, 24, 22, 122, 33, 35, 36, 34, 14,
+ 99,/*53,*/37,38,39,40,41,42};
- int i, ret, total, n = 0;
+ int i, j, ret, total, n = 0;
int *fail_io = (int *)arg;
total = (sizeof(test_gpio)/sizeof(int));
- printf("Start test gpio total: %d\n", total);
- for(i = 0; i < total; i++)
- {
+ //printf("Start test gpio total: %d\n", total);
+
+ /* [1 all gpio set to low] */
+ for(j = 0; j < 6 ; j++){
+ for(i = 0; i < total; i++){
+ gpio_register_set_func_0(test_gpio[i]);
+ gpio_register_set_direction(test_gpio[i], 1);
+ gpio_register_set_value(test_gpio[i], 0);
+ }
+ usleep(200000);
+ for(i = 0; i <= 20; i++){
+ ret = mbtk_gpio_adc();
+ usleep(100000);
+ if(0 == ret){
+ break;
+ }
+ }
+ printf("pre set ADC: %d, times: %d\n",ret, j);
+ if(0 == ret){
+ break;
+ }
+ }
+
+ /* [2 GPIOTEST] */
+ for(i = 0; i < total; i++){
ret = gpio_register_test_out(test_gpio[i], 0);
- if(-1 == ret)
- {
- LOGI("######gpio [%d] test failed!!!!!!######\n", test_gpio[i]);
+ if(-1 == ret){
+ printf("!!!!!!!!!!!!gpio [%d] test failed!!!!!!!!!!!!\n", test_gpio[i]);
fail_io[n] = test_gpio[i];
n++;
}else{
- LOGI("######gpio [%d] test success!!!!!!######\n", test_gpio[i]);
+ printf("############gpio [%d] test success############\n", test_gpio[i]);
}
}
return n;