Beispiel #1
0
bool ilka_save(struct ilka_region *r)
{
    return persist_save(&r->persist);
}
Beispiel #2
0
static void ICACHE_FLASH_ATTR
timer_fn(void *timer_data)
{
    uint32_t delay = MAX_LOOP_TIMER_MS;

    os_timer_disarm(&timer);

    PRINTF("state: %d\n\r", state);
    switch(state) { 
        case STATE_LOAD_PERSIST:
            if(persist_load()) {
            	PRINTF("persist data sensor value: %d\r\n", persist_data_ptr()->sensor_value);
            	PRINTF("persist data sensor poll count: %d\r\n", persist_data_ptr()->poll_counter);

                state = STATE_HF_READ;
                persist_data_ptr()->poll_counter += 1;

                if(persist_data_ptr()->poll_counter >= 10) {
                    // read low-frequency sensor (temp etc)
                    persist_data_ptr()->poll_counter = 0;
                }
                persist_dirty();
            } else {
                PRINTF("err loading persist\r\n");
                // todo: goto error state (blink led?)
                state = STATE_IDLE;
            }
            delay = MIN_LOOP_TIMER_MS;
            break;
        case STATE_INIT_PERSIST:
            persist_init();
            state = STATE_HF_READ;
            delay = MIN_LOOP_TIMER_MS;
            break;
        case STATE_HF_READ:
            state = STATE_LF_READ;
            if(GPIO_INPUT_GET(GPIO_SWITCH)) {
                if(!(persist_data_ptr()->sensor_value)) {
                    persist_data_ptr()->sensor_value = true;
                    persist_dirty();
                    state = STATE_HF_WIFI_CONNECT;
                }
            } else {
                if(persist_data_ptr()->sensor_value) {
                    persist_data_ptr()->sensor_value = false;
                    persist_dirty();
                    state = STATE_HF_WIFI_CONNECT;
                }
            }
            break;
        case STATE_HF_WIFI_CONNECT:
            if(wifi_station_get_connect_status()==STATION_GOT_IP) {
                state = STATE_HF_SEND;
            } else {
                wifi_connect();
                state = STATE_HF_WIFI_WAIT;
            }
            break;
        case STATE_HF_WIFI_WAIT:
            if(wifi_station_get_connect_status()==STATION_GOT_IP) {
                state = STATE_HF_SEND;
            }
            break;
        case STATE_HF_SEND:
            state = STATE_HF_SEND_WAIT;
            break;
        case STATE_HF_SEND_WAIT:
            state = STATE_LF_READ;
            break;
        case STATE_LF_READ:
            state = STATE_LF_WIFI_CONNECT;
            break;
        case STATE_LF_WIFI_CONNECT:
            if(wifi_station_get_connect_status()==STATION_GOT_IP) {
                state = STATE_LF_SEND;
            } else {
                wifi_connect();
                state = STATE_LF_WIFI_WAIT;
            }
            break;
        case STATE_LF_WIFI_WAIT:
            if(wifi_station_get_connect_status()==STATION_GOT_IP) {
                state = STATE_LF_SEND;
            }
            break;
        case STATE_LF_SEND:
            state = STATE_LF_SEND_WAIT;
            break;
        case STATE_LF_SEND_WAIT:
            state = STATE_IDLE;
            break;
        case STATE_IDLE:
            // go to deep sleep
            persist_save();
            system_deep_sleep(SLEEP_TIME_US);
            return;
            break;
        default:
            // uhoh
            PRINTF("invalid state, reset\n\r");
            state = STATE_IDLE;
            break;
    }
       
    os_timer_setfn(&timer, (os_timer_func_t *)timer_fn, NULL);
    os_timer_arm(&timer, delay, false); 
/*
        case STATE_IDLE:
            http_get("http://10.1.3.161/text", "", my_http_callback);
            state = STATE_HTTP_PENDING;
            timeout = 30;
            break;
        case STATE_HTTP_PENDING:
            timeout--;
            if(timeout==0) {
                PRINTF("timeout!\n\r");
                state=STATE_IDLE;
            } else {
                delay_ms(1000);
            }
            break;
        default:
            PRINTF("invalid state, reset\n\r");
            state=STATE_IDLE;
            break;
    }
    //system_os_post(user_procTaskPrio, 0, 0 ); */
}