Explorar o código

Added API support for official firmware

Victor %!s(int64=3) %!d(string=hai) anos
pai
achega
f890f80adf
Modificáronse 2 ficheiros con 44 adicións e 36 borrados
  1. 22 16
      Sensors.c
  2. 22 20
      unitemp.c

+ 22 - 16
Sensors.c

@@ -1,5 +1,6 @@
 #include "Sensors.h"
 #include "Sensors.h"
 #include <furi_hal_power.h>
 #include <furi_hal_power.h>
+#include <m-string.h>
 
 
 //Порты ввода/вывода, которые не были обозначены в общем списке
 //Порты ввода/вывода, которые не были обозначены в общем списке
 const GpioPin SWC_10 = {.pin = LL_GPIO_PIN_14, .port = GPIOA};
 const GpioPin SWC_10 = {.pin = LL_GPIO_PIN_14, .port = GPIOA};
@@ -178,7 +179,7 @@ const GPIO* unitemp_gpio_getAviablePort(const Interface* interface, uint8_t inde
     return NULL;
     return NULL;
 }
 }
 
 
-bool unitemp_sensors_load() {
+bool unitemp_sensors_load(void) {
     FURI_LOG_D(APP_NAME, "Loading sensors...");
     FURI_LOG_D(APP_NAME, "Loading sensors...");
     app->sensors_count = 0;
     app->sensors_count = 0;
     memset(app->sensors, 0, sizeof(app->sensors));
     memset(app->sensors, 0, sizeof(app->sensors));
@@ -187,14 +188,13 @@ bool unitemp_sensors_load() {
     app->file_stream = file_stream_alloc(app->storage);
     app->file_stream = file_stream_alloc(app->storage);
 
 
     //Переменная пути к файлу
     //Переменная пути к файлу
-    char filepath[sizeof(APP_PATH_FOLDER) + sizeof(APP_FILENAME_SENSORS)] = {0};
+    FuriString* filepath = furi_string_alloc();
     //Составление пути к файлу
     //Составление пути к файлу
-    strcpy(filepath, APP_PATH_FOLDER);
-    strcat(filepath, "/");
-    strcat(filepath, APP_FILENAME_SENSORS);
+    furi_string_printf(filepath, "%s/%s", APP_PATH_FOLDER, APP_FILENAME_SENSORS);
 
 
     //Открытие потока к файлу с датчиками
     //Открытие потока к файлу с датчиками
-    if(!file_stream_open(app->file_stream, filepath, FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) {
+    if(!file_stream_open(
+           app->file_stream, furi_string_get_cstr(filepath), FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) {
         if(file_stream_get_error(app->file_stream) == FSE_NOT_EXIST) {
         if(file_stream_get_error(app->file_stream) == FSE_NOT_EXIST) {
             FURI_LOG_W(APP_NAME, "Missing sensors file");
             FURI_LOG_W(APP_NAME, "Missing sensors file");
             //Закрытие потока и освобождение памяти
             //Закрытие потока и освобождение памяти
@@ -239,15 +239,23 @@ bool unitemp_sensors_load() {
         return false;
         return false;
     }
     }
 
 
-    //Построчное чтение файла
-    char* line = strtok((char*)file_buf, "\n");
-    while(line != NULL) {
+    //Указатель на начало строки
+    FuriString* file = furi_string_alloc_set_str((char*)file_buf);
+    //Сколько байт до конца строки
+    size_t line_end = 0;
+
+    while(line_end != STRING_FAILURE) {
+        //Имя датчика
         char name[11] = {0};
         char name[11] = {0};
+        //Переменные для типа датчика и его аргументов
         int type = 255, arg = 255;
         int type = 255, arg = 255;
-        sscanf(line, "%s %d %d", name, &type, &arg);
+        //Чтение из строки
+        sscanf(((char*)(file_buf + line_end)), "%s %d %d", name, &type, &arg);
         //Ограничение длины имени
         //Ограничение длины имени
         name[10] = '\0';
         name[10] = '\0';
         FURI_LOG_D(APP_NAME, "%s %d %d", name, type, arg);
         FURI_LOG_D(APP_NAME, "%s %d %d", name, type, arg);
+        //Вычисление конца строки
+        line_end = furi_string_search_char(file, '\n', line_end + 1);
 
 
         char args[] = {arg};
         char args[] = {arg};
         //Проверка типа датчика
         //Проверка типа датчика
@@ -260,7 +268,6 @@ bool unitemp_sensors_load() {
         } else {
         } else {
             FURI_LOG_E(APP_NAME, "Unsupported sensor name (%s) or sensor type (%d)", name, type);
             FURI_LOG_E(APP_NAME, "Unsupported sensor name (%s) or sensor type (%d)", name, type);
         }
         }
-        line = strtok((char*)NULL, "\n");
     }
     }
 
 
     free(file_buf);
     free(file_buf);
@@ -278,15 +285,14 @@ bool unitemp_sensors_save(void) {
     app->file_stream = file_stream_alloc(app->storage);
     app->file_stream = file_stream_alloc(app->storage);
 
 
     //Переменная пути к файлу
     //Переменная пути к файлу
-    char filepath[sizeof(APP_PATH_FOLDER) + sizeof(APP_FILENAME_SENSORS)] = {0};
+    FuriString* filepath = furi_string_alloc();
     //Составление пути к файлу
     //Составление пути к файлу
-    strcpy(filepath, APP_PATH_FOLDER);
-    strcat(filepath, "/");
-    strcat(filepath, APP_FILENAME_SENSORS);
+    furi_string_printf(filepath, "%s/%s", APP_PATH_FOLDER, APP_FILENAME_SENSORS);
     //Создание папки плагина
     //Создание папки плагина
     storage_common_mkdir(app->storage, APP_PATH_FOLDER);
     storage_common_mkdir(app->storage, APP_PATH_FOLDER);
     //Открытие потока
     //Открытие потока
-    if(!file_stream_open(app->file_stream, filepath, FSAM_READ_WRITE, FSOM_CREATE_ALWAYS)) {
+    if(!file_stream_open(
+           app->file_stream, furi_string_get_cstr(filepath), FSAM_READ_WRITE, FSOM_CREATE_ALWAYS)) {
         FURI_LOG_E(
         FURI_LOG_E(
             APP_NAME,
             APP_NAME,
             "An error occurred while saving the sensors file: %d",
             "An error occurred while saving the sensors file: %d",

+ 22 - 20
unitemp.c

@@ -4,8 +4,9 @@
 #include "./views/UnitempViews.h"
 #include "./views/UnitempViews.h"
 
 
 #include <furi_hal_power.h>
 #include <furi_hal_power.h>
+#include <m-string.h>
 
 
-/* Статические переменные */
+/* Переменные */
 //Данные приложения
 //Данные приложения
 Unitemp* app;
 Unitemp* app;
 
 
@@ -14,21 +15,18 @@ void uintemp_celsiumToFarengate(Sensor* sensor) {
 }
 }
 
 
 bool unitemp_saveSettings(void) {
 bool unitemp_saveSettings(void) {
-    FURI_LOG_D(APP_NAME, "Saving settings...\r\n");
-
     //Выделение памяти для потока
     //Выделение памяти для потока
     app->file_stream = file_stream_alloc(app->storage);
     app->file_stream = file_stream_alloc(app->storage);
 
 
     //Переменная пути к файлу
     //Переменная пути к файлу
-    char filepath[sizeof(APP_PATH_FOLDER) + sizeof(APP_FILENAME_SETTINGS)] = {0};
+    FuriString* filepath = furi_string_alloc();
     //Составление пути к файлу
     //Составление пути к файлу
-    strcpy(filepath, APP_PATH_FOLDER);
-    strcat(filepath, "/");
-    strcat(filepath, APP_FILENAME_SETTINGS);
+    furi_string_printf(filepath, "%s/%s", APP_PATH_FOLDER, APP_FILENAME_SETTINGS);
     //Создание папки плагина
     //Создание папки плагина
     storage_common_mkdir(app->storage, APP_PATH_FOLDER);
     storage_common_mkdir(app->storage, APP_PATH_FOLDER);
     //Открытие потока
     //Открытие потока
-    if(!file_stream_open(app->file_stream, filepath, FSAM_READ_WRITE, FSOM_CREATE_ALWAYS)) {
+    if(!file_stream_open(
+           app->file_stream, furi_string_get_cstr(filepath), FSAM_READ_WRITE, FSOM_CREATE_ALWAYS)) {
         FURI_LOG_E(
         FURI_LOG_E(
             APP_NAME,
             APP_NAME,
             "An error occurred while saving the settings file: %d\r\n",
             "An error occurred while saving the settings file: %d\r\n",
@@ -58,14 +56,13 @@ bool unitemp_loadSettings(void) {
     app->file_stream = file_stream_alloc(app->storage);
     app->file_stream = file_stream_alloc(app->storage);
 
 
     //Переменная пути к файлу
     //Переменная пути к файлу
-    char filepath[sizeof(APP_PATH_FOLDER) + sizeof(APP_FILENAME_SETTINGS)] = {0};
+    FuriString* filepath = furi_string_alloc();
     //Составление пути к файлу
     //Составление пути к файлу
-    strcpy(filepath, APP_PATH_FOLDER);
-    strcat(filepath, "/");
-    strcat(filepath, APP_FILENAME_SETTINGS);
+    furi_string_printf(filepath, "%s/%s", APP_PATH_FOLDER, APP_FILENAME_SETTINGS);
 
 
     //Открытие потока к файлу настроек
     //Открытие потока к файлу настроек
-    if(!file_stream_open(app->file_stream, filepath, FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) {
+    if(!file_stream_open(
+           app->file_stream, furi_string_get_cstr(filepath), FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) {
         //Сохранение настроек по умолчанию в случае отсутствия файла
         //Сохранение настроек по умолчанию в случае отсутствия файла
         if(file_stream_get_error(app->file_stream) == FSE_NOT_EXIST) {
         if(file_stream_get_error(app->file_stream) == FSE_NOT_EXIST) {
             FURI_LOG_W(APP_NAME, "Missing settings file. Setting defaults and saving...\r\n");
             FURI_LOG_W(APP_NAME, "Missing settings file. Setting defaults and saving...\r\n");
@@ -115,15 +112,19 @@ bool unitemp_loadSettings(void) {
         return false;
         return false;
     }
     }
     //Построчное чтение файла
     //Построчное чтение файла
-    char* line = strtok((char*)file_buf, "\n");
-    while(line != NULL) {
-        char buff[20];
-        sscanf(line, "%s", buff);
+    //Указатель на начало строки
+    FuriString* file = furi_string_alloc_set_str((char*)file_buf);
+    //Сколько байт до конца строки
+    size_t line_end = 0;
+
+    while(line_end != STRING_FAILURE) {
+        char buff[20] = {0};
+        sscanf(((char*)(file_buf + line_end)), "%s", buff);
 
 
         if(!strcmp(buff, "INFINITY_BACKLIGHT")) {
         if(!strcmp(buff, "INFINITY_BACKLIGHT")) {
             //Чтение значения параметра
             //Чтение значения параметра
             int p = 0;
             int p = 0;
-            sscanf(line, "INFINITY_BACKLIGHT %d", &p);
+            sscanf(((char*)(file_buf + line_end)), "INFINITY_BACKLIGHT %d", &p);
             if(p == 0) {
             if(p == 0) {
                 app->settings.infinityBacklight = false;
                 app->settings.infinityBacklight = false;
             } else {
             } else {
@@ -132,7 +133,7 @@ bool unitemp_loadSettings(void) {
         } else if(!strcmp(buff, "UNIT")) {
         } else if(!strcmp(buff, "UNIT")) {
             //Чтение значения параметра
             //Чтение значения параметра
             int p = 0;
             int p = 0;
-            sscanf(line, "UNIT %d", &p);
+            sscanf(((char*)(file_buf + line_end)), "\nUNIT %d", &p);
             if(p == CELSIUS) {
             if(p == CELSIUS) {
                 app->settings.unit = CELSIUS;
                 app->settings.unit = CELSIUS;
             } else {
             } else {
@@ -142,7 +143,8 @@ bool unitemp_loadSettings(void) {
             FURI_LOG_W(APP_NAME, "Unknown settings parameter: %s\r\n", buff);
             FURI_LOG_W(APP_NAME, "Unknown settings parameter: %s\r\n", buff);
         }
         }
 
 
-        line = strtok((char*)NULL, "\n");
+        //Вычисление конца строки
+        line_end = furi_string_search_char(file, '\n', line_end + 1);
     }
     }
     free(file_buf);
     free(file_buf);
     file_stream_close(app->file_stream);
     file_stream_close(app->file_stream);