Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit dae007a

Browse files
author
iwahdan88
committed
PYFW-334: Merge branch 'master' of https://github.com/psychogenic/pycom-micropython-sigfox into psychogenic-master #226 @psychogenic
1 parent 499946d commit dae007a

File tree

1 file changed

+50
-7
lines changed

1 file changed

+50
-7
lines changed

esp32/mods/modpycom.c

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -162,30 +162,73 @@ STATIC mp_obj_t mod_pycom_pulses_get (mp_obj_t gpio, mp_obj_t timeout) {
162162
}
163163
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_pycom_pulses_get_obj, mod_pycom_pulses_get);
164164

165+
165166
STATIC mp_obj_t mod_pycom_nvs_set (mp_obj_t _key, mp_obj_t _value) {
167+
166168
const char *key = mp_obj_str_get_str(_key);
167-
uint32_t value = mp_obj_get_int_truncated(_value);
169+
esp_err_t esp_err = ESP_OK;
170+
171+
if (MP_OBJ_IS_STR_OR_BYTES(_value)) {
172+
const char *value = mp_obj_str_get_str(_value);
173+
if (strlen(value) >= 1984) {
174+
// Maximum length (including null character) can be 1984 bytes
175+
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "value too long (max: 1984)"));
176+
}
177+
esp_err = nvs_set_str(pycom_nvs_handle, key, value);
178+
} else if(MP_OBJ_IS_INT(_value)) {
179+
uint32_t value = mp_obj_get_int_truncated(_value);
180+
esp_err = nvs_set_u32(pycom_nvs_handle, key, value);
181+
} else {
182+
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Value must be string, bytes or integer"));
183+
}
168184

169-
esp_err_t esp_err = nvs_set_u32(pycom_nvs_handle, key, value);
170185
if (ESP_OK == esp_err) {
171186
nvs_commit(pycom_nvs_handle);
172187
} else if (ESP_ERR_NVS_NOT_ENOUGH_SPACE == esp_err || ESP_ERR_NVS_PAGE_FULL == esp_err || ESP_ERR_NVS_NO_FREE_PAGES == esp_err) {
173-
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, "no space available"));
188+
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, "No free space available"));
174189
} else if (ESP_ERR_NVS_INVALID_NAME == esp_err || ESP_ERR_NVS_KEY_TOO_LONG == esp_err) {
175-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "invalid key (or too long)"));
190+
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Key is invalid"));
191+
} else {
192+
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_Exception, "Error occurred while storing value, code: %d", esp_err));
176193
}
177194
return mp_const_none;
178195
}
179196
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_pycom_nvs_set_obj, mod_pycom_nvs_set);
180197

181198
STATIC mp_obj_t mod_pycom_nvs_get (mp_obj_t _key) {
199+
182200
const char *key = mp_obj_str_get_str(_key);
201+
esp_err_t esp_err = ESP_OK;
202+
mp_obj_t ret = mp_const_none;
183203
uint32_t value;
184204

185-
if (ESP_ERR_NVS_NOT_FOUND == nvs_get_u32(pycom_nvs_handle, key, &value)) {
186-
return mp_const_none;
205+
esp_err = nvs_get_u32(pycom_nvs_handle, key, &value);
206+
if (esp_err == ESP_OK) {
207+
ret = mp_obj_new_int(value);
208+
}
209+
else {
210+
esp_err = nvs_get_str(pycom_nvs_handle, key, NULL, &value);
211+
if(esp_err == ESP_OK) {
212+
char* value_string = (char*)m_malloc(value);
213+
214+
esp_err = nvs_get_str(pycom_nvs_handle, key, value_string, &value);
215+
216+
if(esp_err == ESP_OK) {
217+
//do not count the terminating \0
218+
ret = mp_obj_new_str(value_string, value-1);
219+
m_free(value_string);
220+
}
221+
m_free(value_string);
222+
}
223+
}
224+
225+
if(esp_err == ESP_ERR_NVS_NOT_FOUND) {
226+
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "No matching object for the provided key"));
227+
} else if(esp_err != ESP_OK) {
228+
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_Exception, "Error occurred while fetching value, code: %d", esp_err));
187229
}
188-
return mp_obj_new_int(value);
230+
231+
return ret;
189232
}
190233
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_pycom_nvs_get_obj, mod_pycom_nvs_get);
191234

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy