bool MicoShouldEnterATEMode(void) { if(MicoGpioInputGet((mico_gpio_t)BOOT_SEL)==false && MicoGpioInputGet((mico_gpio_t)EasyLink_BUTTON)==false) return true; else return false; }
// bootloader mode: SW1=ON, SW2=OFF bool MicoShouldEnterBootloader(void) { if(MicoGpioInputGet((mico_gpio_t)BOOT_SEL)==false && MicoGpioInputGet((mico_gpio_t)MFG_SEL)==true) return true; else return false; }
bool MicoShouldEnterMFGMode(void) { return false; if(MicoGpioInputGet((mico_gpio_t)BOOT_SEL)==false && MicoGpioInputGet((mico_gpio_t)MFG_SEL)==false) return true; else return false; }
bool host_platform_is_sdio_int_asserted(void) { if( MicoGpioInputGet( (mico_gpio_t)SDIO_INT)==0 ) return true; else return false; }
// add test mode for MiCOKit-EXT board,check Arduino_D5 pin when system startup bool MicoExtShouldEnterTestMode(void) { if( MicoGpioInputGet((mico_gpio_t)Arduino_D5)==false ){ return true; } else{ return false; } }
static void _button_EL_Timeout_handler( void* arg ) { (void)(arg); _default_start_time = 0; MicoGpioEnableIRQ( (mico_gpio_t)EasyLink_BUTTON, IRQ_TRIGGER_FALLING_EDGE, _button_EL_irq_handler, NULL ); if( MicoGpioInputGet( (mico_gpio_t)EasyLink_BUTTON ) == 0){ PlatformEasyLinkButtonLongPressedCallback(); } mico_stop_timer(&_button_EL_timer); }
// get function: get dc motor switch value int dc_motor_switch_get(struct mico_prop_t *prop, void *arg, void *val, uint32_t *val_len) { *val_len = int_len; if(MicoGpioInputGet( (mico_gpio_t)DC_MOTOR ) == 0){ *(int*)val = 0; } else{ *(int*)val = 1; } return 0; // get ok }
u8 KEY_getValue(void) { if ( MicoGpioInputGet( (mico_gpio_t)KEY_PIN ) == KEY_UP) { delay_ms(10); if ( MicoGpioInputGet( (mico_gpio_t)KEY_PIN ) == KEY_UP) { return KEY_UP; } } else { delay_ms(10); if ( MicoGpioInputGet( (mico_gpio_t)KEY_PIN ) == KEY_DOWN) { return KEY_DOWN; } } return KEY_DOWN; }
static void _user_key2_irq_handler( void* arg ) { (void)(arg); int interval = -1; if ( MicoGpioInputGet( (mico_gpio_t)USER_KEY2 ) == 0 ) { _default_key2_start_time = mico_get_time()+1; mico_start_timer(&_user_key2_timer); } else { interval = mico_get_time() + 1 - _default_key2_start_time; if ( (_default_key2_start_time != 0) && interval > 50 && interval < user_key2_long_press_timeout){ /* button clicked once */ user_key2_clicked_callback(); } mico_stop_timer(&_user_key2_timer); _default_key2_start_time = 0; } }
static void _button_EL_irq_handler( void* arg ) { (void)(arg); int interval = -1; if ( MicoGpioInputGet( (mico_gpio_t)EasyLink_BUTTON ) == 0 ) { _default_start_time = mico_get_time()+1; mico_start_timer(&_button_EL_timer); } else { interval = mico_get_time() + 1 - _default_start_time; if ( (_default_start_time != 0) && interval > 50 && interval < RestoreDefault_TimeOut){ /* EasyLink button clicked once */ PlatformEasyLinkButtonClickedCallback(); } mico_stop_timer(&_button_EL_timer); _default_start_time = 0; } }
static void _user_key1_irq_handler( void* arg ) { (void)(arg); int interval = -1; if ( MicoGpioInputGet( (mico_gpio_t)USER_KEY1 ) == 0 ) { MicoGpioEnableIRQ( (mico_gpio_t)USER_KEY1, IRQ_TRIGGER_RISING_EDGE, _user_key1_irq_handler, NULL ); _default_key1_start_time = mico_get_time()+1; mico_start_timer(&_user_key1_timer); } else { interval = mico_get_time() + 1 - _default_key1_start_time; if ( (_default_key1_start_time != 0) && interval > 50 && interval < user_key1_long_press_timeout){ /* button clicked once */ user_key1_clicked_callback(); } MicoGpioEnableIRQ( (mico_gpio_t)USER_KEY1, IRQ_TRIGGER_FALLING_EDGE, _user_key1_irq_handler, NULL ); mico_stop_timer(&_user_key1_timer); _default_key1_start_time = 0; } }
static void button_irq_handler( void* arg ) { button_context_t *_context = arg; int interval = -1; if ( MicoGpioInputGet( _context->gpio ) == 0 ) { MicoGpioEnableIRQ( _context->gpio, IRQ_TRIGGER_RISING_EDGE, button_irq_handler, _context ); _context->start_time = mico_get_time()+1; mico_start_timer(&_context->_user_button_timer); } else { interval = mico_get_time() + 1 - _context->start_time ; if ( (_context->start_time != 0) && interval > 50 && interval < _context->timeout){ /* button clicked once */ if( _context->pressed_func != NULL ) (_context->pressed_func)(); } MicoGpioEnableIRQ( _context->gpio, IRQ_TRIGGER_FALLING_EDGE, button_irq_handler, _context ); mico_stop_timer(&_context->_user_button_timer); _context->start_time = 0; } }
static void _button_EL_irq_handler( void* arg ) { (void)(arg); int interval = -1; mico_start_timer(&_button_EL_timer); if ( MicoGpioInputGet( (mico_gpio_t)EasyLink_BUTTON ) == 0 ) { _default_start_time = mico_get_time()+1; mico_start_timer(&_button_EL_timer); MicoGpioEnableIRQ( (mico_gpio_t)EasyLink_BUTTON, IRQ_TRIGGER_RISING_EDGE, _button_EL_irq_handler, NULL ); } else { interval = mico_get_time() + 1 - _default_start_time; if ( (_default_start_time != 0) && interval > 50 && interval < RestoreDefault_TimeOut){ /* EasyLink button clicked once */ PlatformEasyLinkButtonClickedCallback(); //platform_log("PlatformEasyLinkButtonClickedCallback!"); MicoGpioOutputLow( (mico_gpio_t)MICO_RF_LED ); MicoGpioEnableIRQ( (mico_gpio_t)EasyLink_BUTTON, IRQ_TRIGGER_FALLING_EDGE, _button_EL_irq_handler, NULL ); } mico_stop_timer(&_button_EL_timer); _default_start_time = 0; } }
void init_platform_bootloader( void ) { uint32_t BootNvmInfo; OSStatus err; MicoGpioInitialize( BOOT_SEL, INPUT_PULL_UP ); MicoGpioInitialize( MFG_SEL, INPUT_PULL_UP ); #ifdef MICO_ATE_START_ADDRESS MicoGpioInitialize( EasyLink_BUTTON, INPUT_PULL_UP ); #endif /* Check USB-HOST is inserted */ err = MicoGpioInitialize( (mico_gpio_t)USB_DETECT, INPUT_PULL_DOWN ); require_noerr(err, exit); mico_thread_msleep_no_os(2); require_string( MicoGpioInputGet( (mico_gpio_t)USB_DETECT ) == true, exit, "USB device is not inserted" ); //platform_log("USB device inserted"); if( HardwareInit(DEV_ID_USB) ){ FolderOpenByNum(&RootFolder, NULL, 1); FileBrowse(RootFolder.FsContext); } /* Check last firmware update is success or not. */ NvmRead(UPGRADE_NVM_ADDR, (uint8_t*)&BootNvmInfo, 4); if(false == UpgradeFileFound) { if(BootNvmInfo == UPGRADE_SUCC_MAGIC) { /* * boot up check for the last time */ platform_log("[UPGRADE]:upgrade successful completely"); } else if(BootNvmInfo == (uint32_t)UPGRADE_ERRNO_NOERR) { platform_log("[UPGRADE]:no upgrade, boot normallly"); } else if(BootNvmInfo == (uint32_t)UPGRADE_ERRNO_CODBUFDAT) { platform_log("[UPGRADE]:upgrade successful partly, data fail"); } else { platform_log("[UPGRADE]:upgrade error, errno = %d", (int32_t)BootNvmInfo); } } else { if(BootNvmInfo == (uint32_t)UPGRADE_ERRNO_NOERR) { platform_log("[UPGRADE]:found upgrade ball, prepare to boot upgrade"); BootNvmInfo = UPGRADE_REQT_MAGIC; NvmWrite(UPGRADE_NVM_ADDR, (uint8_t*)&BootNvmInfo, 4); //if you want PORRESET to reset GPIO only,uncomment it //GpioPorSysReset(GPIO_RSTSRC_PORREST); NVIC_SystemReset(); while(1);;; } else if(BootNvmInfo == UPGRADE_SUCC_MAGIC) { BootNvmInfo = (uint32_t)UPGRADE_ERRNO_NOERR; NvmWrite(UPGRADE_NVM_ADDR, (uint8_t*)&BootNvmInfo, 4); platform_log("[UPGRADE]:found upgrade ball file for the last time, re-plugin/out, if you want to upgrade again"); } else { platform_log("[UPGRADE]:upgrade error, errno = %d", (int32_t)BootNvmInfo); if( BootNvmInfo == -9 ) { platform_log("[UPGRADE]:Same file, no need to update"); goto exit; } BootNvmInfo = (uint32_t)UPGRADE_ERRNO_NOERR; NvmWrite(UPGRADE_NVM_ADDR, (uint8_t*)&BootNvmInfo, 4); BootNvmInfo = UPGRADE_REQT_MAGIC; NvmWrite(UPGRADE_NVM_ADDR, (uint8_t*)&BootNvmInfo, 4); //if you want PORRESET to reset GPIO only,uncomment it //GpioPorSysReset(GPIO_RSTSRC_PORREST); NVIC_SystemReset(); } } exit: return; }