From 5bb0f2aaf54450286822a4c7394c8fb78bab9b92 Mon Sep 17 00:00:00 2001 From: Liu_Weichao Date: Mon, 28 Aug 2023 16:15:32 +0800 Subject: [PATCH] add plc data store function for control framework --- .../Framework/control/shared/control_io.c | 30 +++++++++++++++++++ .../Framework/control/shared/control_io.h | 6 ++++ Ubiquitous/XiZi_IIoT/fs/fatfs/fatfs.c | 12 ++++++++ Ubiquitous/XiZi_IIoT/fs/fatfs/ffconf.h | 2 +- 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/APP_Framework/Framework/control/shared/control_io.c b/APP_Framework/Framework/control/shared/control_io.c index 5d9e00060..adeac87e3 100644 --- a/APP_Framework/Framework/control/shared/control_io.c +++ b/APP_Framework/Framework/control/shared/control_io.c @@ -190,3 +190,33 @@ int SerialRead(uint8_t *read_data, int length) return data_size; #endif } + +int ControlFileDataStore(uint8 *data, int data_length) +{ + int data_file_fd = -1; + struct stat data_file_status; + int i = 0; + + //Step1 : open data file from SD card or other store device + data_file_fd = PrivOpen(FILE_NAME, O_RDONLY); + if (data_file_fd < 0) { + printf("Open data file %s failed\n", FILE_NAME); + PrivClose(data_file_fd); + return -1; + } + + if (0 != fstat(data_file_fd, &data_file_status)) { + printf("Get data file information failed!\n"); + PrivClose(data_file_fd); + return -1; + } + + lseek(data_file_fd, data_file_status.st_size, SEEK_SET); + + //Step2 : write data to file in SD card or other store device + FatfsPrintf(GetFileDescriptor(data_file_fd), data, data_length); + + //Step3 : close data file from SD card or other store device + PrivClose(data_file_fd); + return 0; +} diff --git a/APP_Framework/Framework/control/shared/control_io.h b/APP_Framework/Framework/control/shared/control_io.h index 9446916a6..efbd11988 100644 --- a/APP_Framework/Framework/control/shared/control_io.h +++ b/APP_Framework/Framework/control/shared/control_io.h @@ -48,6 +48,9 @@ extern "C" { #endif #endif +#define FILE_NAME "plc_data.csv" +extern void FatfsPrintf(struct FileDescriptor *fdp, const void *src, size_t len); + /*Control Framework Socket Init*/ void SocketInit(char *ip, char *mask, char *gw); @@ -60,6 +63,9 @@ void SerialWrite(uint8_t *write_data, int length); /*Control Framework Serial Read*/ int SerialRead(uint8_t *read_data, int length); +/*Control Framework Store data in SD Card*/ +int ControlFileDataStore(uint8 *data, int data_length); + #ifdef __cplusplus } #endif diff --git a/Ubiquitous/XiZi_IIoT/fs/fatfs/fatfs.c b/Ubiquitous/XiZi_IIoT/fs/fatfs/fatfs.c index 2314af45f..3c75b7443 100644 --- a/Ubiquitous/XiZi_IIoT/fs/fatfs/fatfs.c +++ b/Ubiquitous/XiZi_IIoT/fs/fatfs/fatfs.c @@ -493,3 +493,15 @@ DWORD GetFatTime(void) return fat_time; } + +void FatfsPrintf(struct FileDescriptor *fdp, const void *src, size_t len) +{ + int i = 0; + for (i = 0; i < len; i ++) { + f_printf(fdp->data, "%d,", ((uint8 *)src)[i]); + } + if (i == len) { + f_printf(fdp->data, "\r\n"); + } +} + diff --git a/Ubiquitous/XiZi_IIoT/fs/fatfs/ffconf.h b/Ubiquitous/XiZi_IIoT/fs/fatfs/ffconf.h index 1462ec3c7..83a3ce20b 100644 --- a/Ubiquitous/XiZi_IIoT/fs/fatfs/ffconf.h +++ b/Ubiquitous/XiZi_IIoT/fs/fatfs/ffconf.h @@ -33,7 +33,7 @@ / 3: f_lseek() function is removed in addition to 2. */ -#define FF_USE_STRFUNC 0 +#define FF_USE_STRFUNC 1 /* This option switches string functions, f_gets(), f_putc(), f_puts() and f_printf(). / / 0: Disable string functions.