Oliver Fabel 1 год назад
Родитель
Сommit
a92199d3c3
4 измененных файлов с 18 добавлено и 10 удалено
  1. 1 0
      genhdr/qstrdefs.generated.h
  2. 12 3
      mp_flipper_fileio.c
  3. 3 3
      mp_flipper_fileio.h
  4. 2 4
      mp_flipper_halport.c

+ 1 - 0
genhdr/qstrdefs.generated.h

@@ -423,6 +423,7 @@ QDEF1(MP_QSTR_max, 177, 3, "max")
 QDEF1(MP_QSTR_maximum_space_recursion_space_depth_space_exceeded, 115, 32, "maximum recursion depth exceeded")
 QDEF1(MP_QSTR_min, 175, 3, "min")
 QDEF1(MP_QSTR_module, 191, 6, "module")
+QDEF1(MP_QSTR_name, 162, 4, "name")
 QDEF1(MP_QSTR_oct, 253, 3, "oct")
 QDEF1(MP_QSTR_on_gpio, 106, 7, "on_gpio")
 QDEF1(MP_QSTR_on_input, 141, 8, "on_input")

+ 12 - 3
mp_flipper_fileio.c

@@ -1,6 +1,7 @@
 #include <stdio.h>
 #include <stdbool.h>
 #include <stdint.h>
+#include <string.h>
 
 #include "py/obj.h"
 #include "py/stream.h"
@@ -15,17 +16,17 @@ extern const mp_obj_type_t mp_flipper_textio_type;
 typedef struct _mp_flipper_fileio_file_descriptor_t {
     mp_obj_base_t base;
     void* handle;
-    size_t offset;
+    mp_obj_t name;
     uint8_t access_mode;
     uint8_t open_mode;
 } mp_flipper_fileio_file_descriptor_t;
 
-void* mp_flipper_file_new_file_descriptor(void* handle, size_t offset, uint8_t access_mode, uint8_t open_mode, bool is_text) {
+void* mp_flipper_file_new_file_descriptor(void* handle, const char* name, uint8_t access_mode, uint8_t open_mode, bool is_text) {
     mp_flipper_fileio_file_descriptor_t* fd = mp_obj_malloc_with_finaliser(
         mp_flipper_fileio_file_descriptor_t, is_text ? &mp_flipper_textio_type : &mp_flipper_fileio_type);
 
     fd->handle = handle;
-    fd->offset = offset;
+    fd->name = mp_obj_new_str(name, strlen(name));
     fd->access_mode = access_mode;
     fd->open_mode = open_mode;
 
@@ -105,6 +106,13 @@ static mp_uint_t mp_flipper_fileio_ioctl(mp_obj_t self, mp_uint_t request, uintp
     return MP_STREAM_ERROR;
 }
 
+static mp_obj_t mp_flipper_fileio_name(mp_obj_t self) {
+    mp_flipper_fileio_file_descriptor_t* fd = MP_OBJ_TO_PTR(self);
+
+    return fd->name;
+}
+static MP_DEFINE_CONST_FUN_OBJ_1(mp_flipper_fileio_name_obj, mp_flipper_fileio_name);
+
 static mp_obj_t mp_flipper_fileio_writable(mp_obj_t self) {
     mp_flipper_fileio_file_descriptor_t* fd = MP_OBJ_TO_PTR(self);
 
@@ -113,6 +121,7 @@ static mp_obj_t mp_flipper_fileio_writable(mp_obj_t self) {
 static MP_DEFINE_CONST_FUN_OBJ_1(mp_flipper_fileio_writable_obj, mp_flipper_fileio_writable);
 
 static const mp_map_elem_t mp_flipper_file_locals_dict_table[] = {
+    {MP_OBJ_NEW_QSTR(MP_QSTR_name), MP_ROM_PTR(&mp_flipper_fileio_name_obj)},
     {MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&mp_stream_read_obj)},
     {MP_ROM_QSTR(MP_QSTR_readinto), MP_ROM_PTR(&mp_stream_readinto_obj)},
     {MP_ROM_QSTR(MP_QSTR_readline), MP_ROM_PTR(&mp_stream_unbuffered_readline_obj)},

+ 3 - 3
mp_flipper_fileio.h

@@ -13,9 +13,9 @@ extern uint8_t MP_FLIPPER_FILE_OPEN_MODE_OPEN_APPEND;
 extern uint8_t MP_FLIPPER_FILE_OPEN_MODE_CREATE_NEW;
 extern uint8_t MP_FLIPPER_FILE_OPEN_MODE_CREATE_ALWAYS;
 
-void* mp_flipper_file_open(const char* name, uint8_t access_mode, uint8_t open_mode, size_t* offset);
-void* mp_flipper_file_new_file_descriptor(void* handle, size_t offset, uint8_t access_mode, uint8_t open_mode, bool is_text);
-uint8_t mp_flipper_file_close(void* handle);
+void* mp_flipper_file_open(const char* name, uint8_t access_mode, uint8_t open_mode);
+void* mp_flipper_file_new_file_descriptor(void* handle, const char* name, uint8_t access_mode, uint8_t open_mode, bool is_text);
+bool mp_flipper_file_close(void* handle);
 size_t mp_flipper_file_seek(void* handle, uint32_t offset);
 size_t mp_flipper_file_tell(void* handle);
 size_t mp_flipper_file_size(void* handle);

+ 2 - 4
mp_flipper_halport.c

@@ -59,10 +59,8 @@ mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t* args, mp_map_t* kwargs)
         }
     }
 
-    size_t offset;
-
-    void* handle = mp_flipper_file_open(file_name, access_mode, open_mode, &offset);
-    void* fd = mp_flipper_file_new_file_descriptor(handle, offset, access_mode, open_mode, is_text);
+    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);
 }