|
@@ -177,9 +177,66 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
|
|
locals_dict,
|
|
locals_dict,
|
|
|
&mp_flipper_file_locals_dict);
|
|
&mp_flipper_file_locals_dict);
|
|
|
|
|
|
|
|
|
|
+mp_obj_t mp_flipper_builtin_open(size_t n_args, const mp_obj_t* args, mp_map_t* kwargs) {
|
|
|
|
|
+ const char* file_name = mp_obj_str_get_str(args[0]);
|
|
|
|
|
+
|
|
|
|
|
+ uint8_t access_mode = MP_FLIPPER_FILE_ACCESS_MODE_READ;
|
|
|
|
|
+ uint8_t open_mode = MP_FLIPPER_FILE_OPEN_MODE_OPEN_EXIST;
|
|
|
|
|
+ bool is_text = true;
|
|
|
|
|
+
|
|
|
|
|
+ if(n_args > 1) {
|
|
|
|
|
+ size_t len;
|
|
|
|
|
+
|
|
|
|
|
+ const char* mode = mp_obj_str_get_data(args[1], &len);
|
|
|
|
|
+
|
|
|
|
|
+ for(size_t i = 0; i < len; i++) {
|
|
|
|
|
+ if(i == 0 && mode[i] == 'r') {
|
|
|
|
|
+ access_mode = MP_FLIPPER_FILE_ACCESS_MODE_READ;
|
|
|
|
|
+ open_mode = MP_FLIPPER_FILE_OPEN_MODE_OPEN_EXIST;
|
|
|
|
|
+
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(i == 0 && mode[i] == 'w') {
|
|
|
|
|
+ access_mode = MP_FLIPPER_FILE_ACCESS_MODE_WRITE;
|
|
|
|
|
+ open_mode = MP_FLIPPER_FILE_OPEN_MODE_CREATE_ALWAYS;
|
|
|
|
|
+
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(i == 1 && mode[i] == 'b') {
|
|
|
|
|
+ is_text = false;
|
|
|
|
|
+
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(i == 1 && mode[i] == 't') {
|
|
|
|
|
+ is_text = true;
|
|
|
|
|
+
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(i >= 1 && mode[i] == '+') {
|
|
|
|
|
+ access_mode = MP_FLIPPER_FILE_ACCESS_MODE_READ | MP_FLIPPER_FILE_ACCESS_MODE_WRITE;
|
|
|
|
|
+ open_mode = MP_FLIPPER_FILE_OPEN_MODE_OPEN_APPEND;
|
|
|
|
|
+
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ mp_raise_OSError(MP_EINVAL);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ void* handle = mp_flipper_file_open(file_name, access_mode, open_mode);
|
|
|
|
|
+ void* fd = mp_flipper_file_new_file_descriptor(handle, file_name, access_mode, open_mode, is_text);
|
|
|
|
|
+
|
|
|
|
|
+ return MP_OBJ_FROM_PTR(fd);
|
|
|
|
|
+}
|
|
|
|
|
+MP_DEFINE_CONST_FUN_OBJ_KW(mp_flipper_builtin_open_obj, 1, mp_flipper_builtin_open);
|
|
|
|
|
+
|
|
|
static const mp_rom_map_elem_t mp_module_io_globals_table[] = {
|
|
static const mp_rom_map_elem_t mp_module_io_globals_table[] = {
|
|
|
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_io)},
|
|
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_io)},
|
|
|
- {MP_ROM_QSTR(MP_QSTR_open), MP_ROM_PTR(&mp_builtin_open_obj)},
|
|
|
|
|
|
|
+ {MP_ROM_QSTR(MP_QSTR_open), MP_ROM_PTR(&mp_flipper_builtin_open_obj)},
|
|
|
{MP_ROM_QSTR(MP_QSTR_FileIO), MP_ROM_PTR(&mp_flipper_fileio_type)},
|
|
{MP_ROM_QSTR(MP_QSTR_FileIO), MP_ROM_PTR(&mp_flipper_fileio_type)},
|
|
|
{MP_ROM_QSTR(MP_QSTR_TextIO), MP_ROM_PTR(&mp_flipper_textio_type)},
|
|
{MP_ROM_QSTR(MP_QSTR_TextIO), MP_ROM_PTR(&mp_flipper_textio_type)},
|
|
|
};
|
|
};
|