From ba6c490cb60976dc2fc141df54b42312faf9a5e5 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 6 Aug 2020 23:34:47 -0400 Subject: [PATCH] TS SD integration #1653 --- firmware/hw_layer/mmc_card_access.cpp | 53 ++++++++++++++++--- .../com/rusefi/ts_plugin/ConnectPanel.java | 4 +- simulator/file.mlg | 1 + simulator/file2.mlg | 1 + simulator/file3.mlg | 1 + 5 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 simulator/file.mlg create mode 100644 simulator/file2.mlg create mode 100644 simulator/file3.mlg diff --git a/firmware/hw_layer/mmc_card_access.cpp b/firmware/hw_layer/mmc_card_access.cpp index fb7215f997..2ab605cbea 100644 --- a/firmware/hw_layer/mmc_card_access.cpp +++ b/firmware/hw_layer/mmc_card_access.cpp @@ -5,6 +5,17 @@ #include "global.h" +#if EFI_SIMULATOR +#include +#include +#endif + +#define DIR_RESPONSE_SIZE 512 + +#define DIR_RESPONSE_BUFFER_SIZE (DIR_RESPONSE_SIZE + 2) + +#define DOT '.' + #if EFI_FILE_LOGGING || EFI_SIMULATOR || EFI_UNIT_TEST #include "mmc_card.h" @@ -14,7 +25,7 @@ * for funny reasons file name has to be at least 4 symbols before the dot */ bool isLogFile(const char *fileName) { - int dotIndex = indexOf(fileName, '.'); + int dotIndex = indexOf(fileName, DOT); if (dotIndex == -1) { return false; } @@ -38,7 +49,15 @@ static uint8_t buffer[TRANSFER_SIZE + 2]; static void setFileEntry(uint8_t *buffer, int index, const char *fileName, int fileSize) { int offset = 32 * index; - memcpy(buffer + offset, fileName, 11); + + int dotIndex = indexOf(fileName, DOT); + // assert dotIndex != -1 + memcpy(buffer + offset, fileName, dotIndex); + for (int i = dotIndex; i < 8 ; i++) { + buffer[offset + i] = 0; + } + memcpy(buffer + offset + 8, &fileName[dotIndex + 1], 3); + buffer[offset + 11] = 1; *(uint32_t *) (&buffer[offset + 28]) = fileSize; @@ -73,15 +92,37 @@ void handleTsR(ts_channel_s *tsChannel, char *input) { buffer[9] = 1; // number of files sr5SendResponse(tsChannel, TS_CRC, buffer, 16); - } else if (length == 0x202) { + } else if (length == DIR_RESPONSE_BUFFER_SIZE) { // SD read directory command - memset(buffer, 0, 512); + memset(buffer, 0, DIR_RESPONSE_BUFFER_SIZE); #if EFI_SIMULATOR + DIR *dr = opendir("."); - setFileEntry(buffer, 0, "hello123.msq", 123123); - setFileEntry(buffer, 1, "hello222.msq", 123123); + if (dr == NULL) { + // opendir returns NULL if couldn't open directory + printf("Could not open current directory" ); + return; + } + + int index = 0; + struct dirent *de; // Pointer for directory entry + while ((de = readdir(dr)) != NULL) { + printf("%s\n", de->d_name); + if (index >= DIR_RESPONSE_SIZE / 32) { + break; + } + if (isLogFile(de->d_name)) { + setFileEntry(buffer, index, de->d_name, 239); + index++; + } + } + + closedir(dr); + +// setFileEntry(buffer, 0, "hello123.msq", 123123); +// setFileEntry(buffer, 1, "hello222.msq", 123123); #endif // EFI_SIMULATOR sr5SendResponse(tsChannel, TS_CRC, buffer, 0x202); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/ConnectPanel.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/ConnectPanel.java index 67b1378c9f..0eb0714e02 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/ConnectPanel.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/ConnectPanel.java @@ -100,7 +100,7 @@ public class ConnectPanel { JPanel filePanel = new JPanel(new FlowLayout()); - filePanel.add(new JLabel(fileName + " " + size + " byte(0)")); + filePanel.add(new JLabel(fileName + " " + size + " byte(s)")); JButton download = new JButton("Download"); download.addActionListener(new ActionListener() { @@ -127,7 +127,7 @@ public class ConnectPanel { System.out.println("Filename " + fileName + " size " + size); - AutoupdateUtil.trueLayout(fileList.getParent()); + AutoupdateUtil.trueLayout(content.getParent()); } } catch (IOException ioException) { diff --git a/simulator/file.mlg b/simulator/file.mlg new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/simulator/file.mlg @@ -0,0 +1 @@ + diff --git a/simulator/file2.mlg b/simulator/file2.mlg new file mode 100644 index 0000000000..d8263ee986 --- /dev/null +++ b/simulator/file2.mlg @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/simulator/file3.mlg b/simulator/file3.mlg new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/simulator/file3.mlg @@ -0,0 +1 @@ +