Explorar o código

Добавляю api для архива.

TelenkovDmitry hai 9 meses
pai
achega
5c7fcc57c4

+ 2 - 2
fw/modules/log/log.c

@@ -18,7 +18,7 @@
 static struct ringfs fs_log;
 struct ringfs fs_archive;
 
-static SemaphoreHandle_t log_mutex;
+SemaphoreHandle_t log_mutex;
 
 
 //
@@ -91,7 +91,7 @@ void log_init(bool format)
     // Архив
     
 	ringfs_flash_archive.sector_size = spi_flash_desc.sector_size;
-	ringfs_flash_archive.sector_count = 2; //ARCHIVE_FLASH_SECTOR_COUNT;
+	ringfs_flash_archive.sector_count = 4; //ARCHIVE_FLASH_SECTOR_COUNT;
 
 	ringfs_init(&fs_archive, &ringfs_flash_archive, ARCHIV_ENTRY_VERSION, sizeof(archive_entry_t));
     

+ 17 - 18
fw/modules/log/log_api.c

@@ -16,8 +16,10 @@
 
 extern struct ringfs fs_archive;
 
+extern SemaphoreHandle_t log_mutex;
+
 //
-void log_get_entry_count(entry_type_t entry_type)
+void log_get_entry_count(void)
 {
     int count_flash = 0;
     
@@ -26,27 +28,24 @@ void log_get_entry_count(entry_type_t entry_type)
 }
 
 //
-//void log_get_entry(uint32_t position)
-void log_get_entry(uint32_t position, uint32_t sector, uint32_t slot)
+int log_get_entry(uint32_t index, struct ringfs *fs)
 {
-    archive_entry_t entry = {0};
-    
-    int cur_position = fs_archive.cursor_position = position;
-    int cur_sector = fs_archive.cursor.sector;
-    int cur_slot = fs_archive.cursor.slot;
+	archive_entry_t entry;
+	int start = ringfs_count_estimate(fs);
+	
+    fs->cursor_position =  start - (index - 1) - 1;
     
-    fs_archive.cursor_position = position;
-    fs_archive.cursor.sector = sector;
-    fs_archive.cursor.slot = slot;
+	if (fs->cursor_position < 0)
+		return -1;
+	else
+    {
+		fs->cursor.sector = (fs->read.sector + fs->cursor_position/fs->slots_per_sector)%fs->flash->sector_count;
+		fs->cursor.slot = fs->cursor_position%fs->slots_per_sector;
+	}
     
     log_fetch(&entry, ARCHIVE_ENTRY, portMAX_DELAY);
     
-    fs_archive.cursor_position = cur_position;
-    fs_archive.cursor.sector = cur_sector;
-    fs_archive.cursor.slot = cur_slot;
-    
     printf("[entry] timestamp = % " PRId64 ", value = %u, crc = %u\r\n", entry.timestamp, entry.input_value, entry.crc);
+    
+    return 0;
 }
-
-
-

+ 4 - 1
fw/modules/log/log_api.h

@@ -2,12 +2,15 @@
 #define __LOG_API_H
 
 #include "at32f403a_407.h"
+#include "ringfs.h"
 #include <stdbool.h>
 
 
+//
+void log_get_entry_count(void);
 
 //
-void log_get_entry(uint32_t position, uint32_t sector, uint32_t slot);
+int log_get_entry(uint32_t index, struct ringfs *fs);
 
 
 #endif /* __LOG_API_H */

+ 4 - 3
fw/modules/terminal/terminal_sbs.cpp

@@ -12,6 +12,8 @@ extern "C" {
 #include "rtc.h"  
 }
 
+extern struct ringfs fs_archive;
+
 SbsTerminal sbsTerminal;
 Terminal* pTerminal; //Глобальный указатель на терминал
 
@@ -78,11 +80,10 @@ int SbsTerminal::execute(int argc, const char * const *argv)
         return 0;
     }
     // 
-    if (strcmp(argv[0], "aentry") == 0) {
-        log_get_entry(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]));
+    if (strcmp(argv[0], "get") == 0) {
+        log_get_entry(atoi(argv[1]), &fs_archive);
         return 0;
     }
-    
     // ---------------------------------------------------------------------- //
     if (strcmp(argv[0], "mstime") == 0) {
         printf("\r\n%" PRId64 " [ms]\r\n", rtc_get_ms());

+ 1 - 1
libs/thirdparty/ringfs/ringfs.c

@@ -156,7 +156,7 @@ int ringfs_init(struct ringfs *fs, struct ringfs_flash_partition *flash, uint32_
                            (sizeof(struct slot_header) + fs->object_size);
 #endif
     
-    fs->slots_per_sector = 2;
+    fs->slots_per_sector = 20;
     
     return 0;
 }

BIN=BIN
output/fw.bin


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 397 - 412
project/ewarm/iap/iap.dep


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 679 - 679
project/ewarm/module_universal_io.dep


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio