void ets_timer_setfn(ETSTimer *ptimer, ETSTimerFunc *pfunction, void *parg) { if (!timer_initialized(ptimer)) { memset(ptimer, 0, sizeof(*ptimer)); TIMER_INITIALIZED_FIELD(ptimer) = TIMER_INITIALIZED_VAL; } if (ESP_TIMER(ptimer) == NULL) { const esp_timer_create_args_t create_args = { .callback = pfunction, .arg = parg, .name = "ETSTimer", .dispatch_method = ESP_TIMER_TASK }; ESP_ERROR_CHECK( esp_timer_create(&create_args, (esp_timer_handle_t*)&(ptimer->timer_arg)) ); } } void IRAM_ATTR ets_timer_arm_us(ETSTimer *ptimer, uint32_t time_us, bool repeat_flag) { assert(timer_initialized(ptimer)); esp_timer_stop(ESP_TIMER(ptimer)); // no error check if (!repeat_flag) { ESP_ERROR_CHECK( esp_timer_start_once(ESP_TIMER(ptimer), time_us) ); } else { ESP_ERROR_CHECK( esp_timer_start_periodic(ESP_TIMER(ptimer), time_us) ); } }
esp_err_t app_prov_start_console_provisioning(int security, const protocomm_security_pop_t *pop) { /* If provisioning app data present, * means provisioning app is already running */ if (g_prov) { ESP_LOGI(TAG, "Invalid provisioning state"); return ESP_FAIL; } /* Allocate memory for provisioning app data */ g_prov = (struct app_prov_data *) calloc(1, sizeof(struct app_prov_data)); if (!g_prov) { ESP_LOGI(TAG, "Unable to allocate prov data"); return ESP_ERR_NO_MEM; } /* Initialize app data */ g_prov->pop = pop; g_prov->security = security; /* Create timer object as a member of app data */ esp_timer_create_args_t timer_conf = { .callback = _stop_prov_cb, .arg = NULL, .dispatch_method = ESP_TIMER_TASK, .name = "stop_console_tm" }; esp_err_t err = esp_timer_create(&timer_conf, &g_prov->timer); if (err != ESP_OK) { ESP_LOGE(TAG, "Failed to create timer"); return err; } /* Start provisioning service through console */ err = app_prov_start_service(); if (err != ESP_OK) { ESP_LOGE(TAG, "Provisioning failed to start"); return err; } ESP_LOGI(TAG, "Console provisioning started"); return ESP_OK; }