int check_boot_recovery_key(void) { user_gpio_set_t gpio_recovery; __u32 gpio_hd; int ret; int gpio_value = 0; int used = 0; int mode = 0; if(uboot_spare_head.boot_data.work_mode != WORK_MODE_BOOT) { return 0; } ret = script_parser_fetch("recovery_para", "used", (int *)&used, sizeof(int) / 4); if (ret || !used) { printf("[recovery] no use\n"); return 0; } ret = script_parser_fetch("recovery_para", "recovery_key", (int *)&gpio_recovery, sizeof(user_gpio_set_t) / 4); if (!ret) { gpio_recovery.mul_sel = 0; //强制设置成输入 gpio_hd = gpio_request(&gpio_recovery, 1); if (gpio_hd) { int time; gpio_value = 0; for(time = 0; time < 4; time++) { gpio_value += gpio_read_one_pin_value(gpio_hd, 0); __msdelay(5); } if (!gpio_value) { script_parser_fetch("recovery_para", "mode", (int *)&mode, sizeof(int) / 4); if (mode == ONEKEY_USB_RECOVERY) { printf("set to one key usb recovery\n"); write_usb_recovery_to_misc(); } else if (mode == ONEKEY_SPRITE_RECOVERY) { printf("set to one key sprite recovery\n"); setenv("bootcmd", "sprite_recovery"); } else { printf("[recovery] no option for one key recovery's mode\n"); } } } } return 0; }
/* ************************************************************************************************************ * * function * * name : 按键检测后的事件处理 * * parmeters : * * return : * * note : [email protected] * * ************************************************************************************************************ */ void respond_physical_key_action(void) { int key_value; key_value = gd->key_pressd_value; if (key_value == USB_RECOVERY_KEY_VALUE) { printf("[box recovery] set to one key usb recovery\n"); write_usb_recovery_to_misc(); } else if (key_value == SPRITE_RECOVERY_KEY_VALUE) { printf("[box recovery] set to one key sprite recovery\n"); //setenv("bootcmd", "sprite_recovery"); } }