8000 PYFW-334: Merge branch 'master' of https://github.com/psychogenic/pyc… · pycom/pycom-micropython-sigfox@dae007a · GitHub
[go: up one dir, main page]

Skip to content
8000
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< 10000 /span>(&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)
0