summaryrefslogtreecommitdiff
path: root/src/system/dlt-system-log.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/system/dlt-system-log.c')
-rw-r--r--src/system/dlt-system-log.c106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/system/dlt-system-log.c b/src/system/dlt-system-log.c
index de40176..dc556e2 100644
--- a/src/system/dlt-system-log.c
+++ b/src/system/dlt-system-log.c
@@ -10,11 +10,117 @@
#include "dlt_common.h"
#include "dlt_user.h"
+#include "dlt_filetransfer.h"
#include "dlt-system.h"
#include "dlt-system_cfg.h"
#include "dlt-system-log.h"
+void dlt_system_filetransfer_init(DltSystemOptions *options,DltSystemRuntime *runtime)
+{
+ runtime->filetransferFile[0] = 0;
+ runtime->filetransferRunning = 0;
+ runtime->filetransferCountPackages = 0;
+}
+
+void dlt_system_filetransfer_run(DltSystemOptions *options,DltSystemRuntime *runtime,DltContext *context)
+{
+ struct dirent *dp;
+ char filename[256];
+ unsigned long size_oldest = 0;
+ struct stat status;
+ time_t time_oldest = 0;
+ int transferResult;
+ int total_size, used_size;
+
+ if(runtime->filetransferRunning == 0) {
+ /* delete last transmitted file */
+ if(runtime->filetransferFile[0]!=0) {
+ printf("Remove File: %s\n",runtime->filetransferFile);
+ if(remove(runtime->filetransferFile)) {
+ printf("Remove file %s failed!\n",runtime->filetransferFile);
+ return;
+ }
+ runtime->filetransferFile[0]=0;
+ }
+
+ /* filetransfer not running, check directory */
+ filename[0] = 0;
+ DIR *dir = opendir(options->FiletransferDirectory);
+ while ((dp=readdir(dir)) != NULL) {
+ if(strcmp(dp->d_name,".")!=0 && strcmp(dp->d_name,"..")!=0) {
+ sprintf(filename,"%s/%s",options->FiletransferDirectory,dp->d_name);
+ stat(filename,&status);
+ if(time_oldest == 0 || status.st_mtime < time_oldest) {
+ time_oldest = status.st_mtime;
+ size_oldest = status.st_size;
+ strcpy(runtime->filetransferFile,filename);
+ }
+ }
+ }
+ closedir(dir);
+
+ /* start filetransfer if file exists */
+ if(runtime->filetransferFile[0]) {
+ printf("Start Filetransfer: %s\n",runtime->filetransferFile);
+ runtime->filetransferCountPackages = dlt_user_log_file_packagesCount(context,runtime->filetransferFile);
+ if(runtime->filetransferCountPackages < 0 )
+ {
+ printf("Error: dlt_user_log_file_packagesCount\n");
+ runtime->filetransferCountPackages = 0;
+ runtime->timeFiletransferDelay = options->FiletransferTimeDelay;
+ return;
+ }
+ runtime->filetransferRunning = 1;
+ transferResult = dlt_user_log_file_header(context,runtime->filetransferFile);
+ if(transferResult < 0)
+ {
+ printf("Error: dlt_user_log_file_header\n");
+ runtime->filetransferCountPackages = 0;
+ runtime->filetransferRunning = 0;
+ runtime->timeFiletransferDelay = options->FiletransferTimeDelay;
+ return;
+ }
+ runtime->filetransferLastSentPackage = 0;
+ }
+
+ }
+
+ if (runtime->filetransferRunning == 1) {
+ /* filetransfer is running, send next data */
+ while(runtime->filetransferLastSentPackage<runtime->filetransferCountPackages) {
+ runtime->filetransferLastSentPackage++;
+ transferResult = dlt_user_log_file_data(context,runtime->filetransferFile,runtime->filetransferLastSentPackage,0);
+ if(transferResult < 0)
+ {
+ printf("Error: dlt_user_log_file_data\n");
+ return;
+ }
+ /* wait sending next package if more than 50% of buffer used */
+ dlt_user_check_buffer(&total_size, &used_size);
+ if((total_size - used_size) < (total_size/2))
+ break;
+ }
+ if(runtime->filetransferLastSentPackage==runtime->filetransferCountPackages) {
+ transferResult = dlt_user_log_file_end(context,runtime->filetransferFile,0);
+ if(transferResult < 0)
+ {
+ printf("Error: dlt_user_log_file_end\n");
+ runtime->filetransferCountPackages = 0;
+ runtime->filetransferRunning = 0;
+ runtime->timeFiletransferDelay = options->FiletransferTimeDelay;
+ return;
+ }
+ runtime->timeFiletransferDelay = options->FiletransferTimeDelay;
+ runtime->filetransferRunning = 0;
+ }
+
+ }
+
+
+
+}
+
void dlt_system_log_kernel_version(DltSystemOptions *options,DltContext *context) {
FILE * pFile;
char buffer[1024];