micropython 273 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. commit 69839afcf5230388ceb9c88da7ffc6bd3c1c4a0a
  2. Author: Oliver Fabel <28701799+ofabel@users.noreply.github.com>
  3. Date: Tue Oct 1 18:31:14 2024 +0200
  4. library update
  5. diff --git a/mp_flipper_fileio.c b/mp_flipper_fileio.c
  6. index 378c2c4ff..6de786ba5 100644
  7. --- a/mp_flipper_fileio.c
  8. +++ b/mp_flipper_fileio.c
  9. @@ -177,9 +177,66 @@ MP_DEFINE_CONST_OBJ_TYPE(
  10. locals_dict,
  11. &mp_flipper_file_locals_dict);
  12. +mp_obj_t mp_flipper_builtin_open(size_t n_args, const mp_obj_t* args, mp_map_t* kwargs) {
  13. + const char* file_name = mp_obj_str_get_str(args[0]);
  14. +
  15. + uint8_t access_mode = MP_FLIPPER_FILE_ACCESS_MODE_READ;
  16. + uint8_t open_mode = MP_FLIPPER_FILE_OPEN_MODE_OPEN_EXIST;
  17. + bool is_text = true;
  18. +
  19. + if(n_args > 1) {
  20. + size_t len;
  21. +
  22. + const char* mode = mp_obj_str_get_data(args[1], &len);
  23. +
  24. + for(size_t i = 0; i < len; i++) {
  25. + if(i == 0 && mode[i] == 'r') {
  26. + access_mode = MP_FLIPPER_FILE_ACCESS_MODE_READ;
  27. + open_mode = MP_FLIPPER_FILE_OPEN_MODE_OPEN_EXIST;
  28. +
  29. + continue;
  30. + }
  31. +
  32. + if(i == 0 && mode[i] == 'w') {
  33. + access_mode = MP_FLIPPER_FILE_ACCESS_MODE_WRITE;
  34. + open_mode = MP_FLIPPER_FILE_OPEN_MODE_CREATE_ALWAYS;
  35. +
  36. + continue;
  37. + }
  38. +
  39. + if(i == 1 && mode[i] == 'b') {
  40. + is_text = false;
  41. +
  42. + continue;
  43. + }
  44. +
  45. + if(i == 1 && mode[i] == 't') {
  46. + is_text = true;
  47. +
  48. + continue;
  49. + }
  50. +
  51. + if(i >= 1 && mode[i] == '+') {
  52. + access_mode = MP_FLIPPER_FILE_ACCESS_MODE_READ | MP_FLIPPER_FILE_ACCESS_MODE_WRITE;
  53. + open_mode = MP_FLIPPER_FILE_OPEN_MODE_OPEN_APPEND;
  54. +
  55. + continue;
  56. + }
  57. +
  58. + mp_raise_OSError(MP_EINVAL);
  59. + }
  60. + }
  61. +
  62. + void* handle = mp_flipper_file_open(file_name, access_mode, open_mode);
  63. + void* fd = mp_flipper_file_new_file_descriptor(handle, file_name, access_mode, open_mode, is_text);
  64. +
  65. + return MP_OBJ_FROM_PTR(fd);
  66. +}
  67. +MP_DEFINE_CONST_FUN_OBJ_KW(mp_flipper_builtin_open_obj, 1, mp_flipper_builtin_open);
  68. +
  69. static const mp_rom_map_elem_t mp_module_io_globals_table[] = {
  70. {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_io)},
  71. - {MP_ROM_QSTR(MP_QSTR_open), MP_ROM_PTR(&mp_builtin_open_obj)},
  72. + {MP_ROM_QSTR(MP_QSTR_open), MP_ROM_PTR(&mp_flipper_builtin_open_obj)},
  73. {MP_ROM_QSTR(MP_QSTR_FileIO), MP_ROM_PTR(&mp_flipper_fileio_type)},
  74. {MP_ROM_QSTR(MP_QSTR_TextIO), MP_ROM_PTR(&mp_flipper_textio_type)},
  75. };
  76. diff --git a/mp_flipper_halport.c b/mp_flipper_halport.c
  77. index 3be95e436..918044496 100644
  78. --- a/mp_flipper_halport.c
  79. +++ b/mp_flipper_halport.c
  80. @@ -9,64 +9,6 @@
  81. #include "mp_flipper_halport.h"
  82. #include "mp_flipper_fileio.h"
  83. -mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t* args, mp_map_t* kwargs) {
  84. - const char* file_name = mp_obj_str_get_str(args[0]);
  85. -
  86. - uint8_t access_mode = MP_FLIPPER_FILE_ACCESS_MODE_READ;
  87. - uint8_t open_mode = MP_FLIPPER_FILE_OPEN_MODE_OPEN_EXIST;
  88. - bool is_text = true;
  89. -
  90. - if(n_args > 1) {
  91. - size_t len;
  92. -
  93. - const char* mode = mp_obj_str_get_data(args[1], &len);
  94. -
  95. - for(size_t i = 0; i < len; i++) {
  96. - if(i == 0 && mode[i] == 'r') {
  97. - access_mode = MP_FLIPPER_FILE_ACCESS_MODE_READ;
  98. - open_mode = MP_FLIPPER_FILE_OPEN_MODE_OPEN_EXIST;
  99. -
  100. - continue;
  101. - }
  102. -
  103. - if(i == 0 && mode[i] == 'w') {
  104. - access_mode = MP_FLIPPER_FILE_ACCESS_MODE_WRITE;
  105. - open_mode = MP_FLIPPER_FILE_OPEN_MODE_CREATE_ALWAYS;
  106. -
  107. - continue;
  108. - }
  109. -
  110. - if(i == 1 && mode[i] == 'b') {
  111. - is_text = false;
  112. -
  113. - continue;
  114. - }
  115. -
  116. - if(i == 1 && mode[i] == 't') {
  117. - is_text = true;
  118. -
  119. - continue;
  120. - }
  121. -
  122. - if(i >= 1 && mode[i] == '+') {
  123. - access_mode = MP_FLIPPER_FILE_ACCESS_MODE_READ | MP_FLIPPER_FILE_ACCESS_MODE_WRITE;
  124. - open_mode = MP_FLIPPER_FILE_OPEN_MODE_OPEN_APPEND;
  125. -
  126. - continue;
  127. - }
  128. -
  129. - mp_raise_OSError(MP_EINVAL);
  130. - }
  131. - }
  132. -
  133. - void* handle = mp_flipper_file_open(file_name, access_mode, open_mode);
  134. - void* fd = mp_flipper_file_new_file_descriptor(handle, file_name, access_mode, open_mode, is_text);
  135. -
  136. - return MP_OBJ_FROM_PTR(fd);
  137. -}
  138. -
  139. -MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open);
  140. -
  141. void mp_hal_stdout_tx_str(const char* str) {
  142. mp_flipper_stdout_tx_str(str);
  143. }