in common/shell/shell_platform.c [85:148]
static int gpio_access_cfg(const struct shell *shell, int gpio_idx, enum GPIO_ACCESS mode,
int *data)
{
if (!shell)
return 1;
if (gpio_idx >= GPIO_CFG_SIZE || gpio_idx < 0) {
shell_error(shell, "gpio_access_cfg - gpio index out of bound!");
return 1;
}
switch (mode) {
case GPIO_READ:
if (gpio_cfg[gpio_idx].is_init == DISABLE)
return 1;
uint32_t g_val = sys_read32(GPIO_GROUP_REG_ACCESS[gpio_idx / 32]);
uint32_t g_dir = sys_read32(GPIO_GROUP_REG_ACCESS[gpio_idx / 32] + 0x4);
char *pin_prop = (gpio_cfg[gpio_idx].property == OPEN_DRAIN) ? "OD" : "PP";
char *pin_dir = (gpio_cfg[gpio_idx].direction == GPIO_INPUT) ? "input" : "output";
char *pin_dir_reg = "I";
if (g_dir & BIT(gpio_idx % 32))
pin_dir_reg = "O";
int val = gpio_get(gpio_idx);
if (val == 0 || val == 1)
shell_print(shell, "[%-3d] %-35s: %-3s | %-6s(%s) | %d(%d)", gpio_idx,
gpio_name[gpio_idx], pin_prop, pin_dir, pin_dir_reg, val,
GET_BIT_VAL(g_val, gpio_idx % 32));
else
shell_print(shell, "[%-3d] %-35s: %-3s | %-6s(%s) | %s", gpio_idx,
gpio_name[gpio_idx], pin_prop, pin_dir, pin_dir_reg, "resv");
break;
case GPIO_WRITE:
if (!data) {
shell_error(shell, "gpio_access_cfg - GPIO_WRITE value empty!");
return 1;
}
if (*data != 0 && *data != 1) {
shell_error(
shell,
"gpio_access_cfg - GPIO_WRITE value should only accept 0 or 1!");
return 1;
}
if (gpio_set(gpio_idx, *data)) {
shell_error(shell, "gpio_access_cfg - GPIO_WRITE failed!");
return 1;
}
break;
default:
shell_error(shell, "gpio_access_cfg - No such mode %d!", mode);
break;
}
return 0;
}