From ac7bafcc4db453e89c9e83a158f11fd28fea7a9c Mon Sep 17 00:00:00 2001 From: Yaya-Cout Date: Mon, 8 Apr 2024 20:29:31 +0200 Subject: [PATCH] [apps/Flash2Ram] Create File2Ram app --- .github/workflows/ci-workflow.yml | 14 +++ apps/Flash2Ram/Makefile | 15 ++++ apps/Flash2Ram/app.elf | Bin 0 -> 176572 bytes apps/Flash2Ram/app.icon | Bin 0 -> 378 bytes apps/Flash2Ram/icon.png | Bin 0 -> 4738 bytes apps/Flash2Ram/icon.svg | 48 ++++++++++ apps/Flash2Ram/inc/peripherals.h | 18 ++++ apps/Flash2Ram/inc/selector.h | 16 ++++ apps/Flash2Ram/main.cpp | 81 +++++++++++++++++ apps/Flash2Ram/peripherals.cpp | 50 +++++++++++ apps/Flash2Ram/selector.cpp | 140 ++++++++++++++++++++++++++++++ apps/Flash2Ram/sources.mak | 5 ++ apps/apps.js | 1 + 13 files changed, 388 insertions(+) create mode 100644 apps/Flash2Ram/Makefile create mode 100644 apps/Flash2Ram/app.elf create mode 100644 apps/Flash2Ram/app.icon create mode 100644 apps/Flash2Ram/icon.png create mode 100644 apps/Flash2Ram/icon.svg create mode 100644 apps/Flash2Ram/inc/peripherals.h create mode 100644 apps/Flash2Ram/inc/selector.h create mode 100644 apps/Flash2Ram/main.cpp create mode 100644 apps/Flash2Ram/peripherals.cpp create mode 100644 apps/Flash2Ram/selector.cpp create mode 100644 apps/Flash2Ram/sources.mak diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index 30c98c6f4..ed1a683b6 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -77,6 +77,20 @@ jobs: with: name: Example-Cpp path: Example-Cpp.tar + Flash2Ram: + runs-on: ubuntu-latest + steps: + - run: sudo apt-get update && sudo apt-get install wget gdb gcc g++ libgmp-dev libmpfr-dev libmpfi-dev libpari-dev libgsl0-dev libxext-dev libpng-dev libjpeg-dev libreadline-dev libncurses5-dev mesa-common-dev libx11-dev libxt-dev libxft-dev libntl-dev libgl1-mesa-dev libgl-dev libao-dev hevea debhelper libfltk1.3-dev build-essential git imagemagick libx11-dev libxext-dev libfreetype6-dev libpng-dev libjpeg-dev pkg-config gcc-arm-none-eabi binutils-arm-none-eabi dfu-util texinfo autoconf-archive -y + + - uses: actions/checkout@v1 + with: + submodules: true + - run: make Flash2Ram_rebuild + - run: ./tool/archive Flash2Ram.tar Flash2Ram + - uses: actions/upload-artifact@master + with: + name: Flash2Ram + path: Flash2Ram.tar HexEdit: runs-on: ubuntu-latest steps: diff --git a/apps/Flash2Ram/Makefile b/apps/Flash2Ram/Makefile new file mode 100644 index 000000000..3744a1475 --- /dev/null +++ b/apps/Flash2Ram/Makefile @@ -0,0 +1,15 @@ +API=../../api +CC=arm-none-eabi-gcc +OBJCOPY=arm-none-eabi-objcopy +AR=arm-none-eabi-ar +CFLAGS=-DNDEBUG -ggdb3 -I$(API) -Os -mcpu=cortex-m7 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -fno-common -fdata-sections -ffunction-sections -fno-exceptions +LDFLAGS=-Wl,-L$(API) -Wl,--gc-sections -Wl,--entry=entrypoint --specs=nosys.specs -nostartfiles -Wl,-Ur -lapi + +%.o: %.cpp + $(CC) $(CFLAGS) -c $< + +app.elf: main.o peripherals.o selector.o + $(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS) + +clean: + rm -f *.elf *.o diff --git a/apps/Flash2Ram/app.elf b/apps/Flash2Ram/app.elf new file mode 100644 index 0000000000000000000000000000000000000000..53a6b586153dec3277308f01164ec02d76f8defc GIT binary patch literal 176572 zcmc${3w)ecc_;kNO_D9!v12E(bA2s4VH8X9%;;+8LPnz*N%2TCo*DU)z`l&6ktL#A zbg^YZN|tad&K|zWzQZnmO~n=RNPaJmB0{ITv5{+4z5QGBoH@+!X9ba@@$XLb1;zBhFFJigzc%a7svjk^3ezJElQ z--Pccbot-n`^~!iB);FG%WuW^+jRNu_#0lvSW%U{Izm+)8r z?=89XB`dP~awM{F@qwf1uOGh>z2^b^{r~m-z|qfqEs@&wvi;b3^#A?Zwp7fm7d`sD zuSHWW7rxef>t}ae3EgAiFZA`+cSN3eU2b{U`fSVHyTAUf<{!JT6C-`+g+F*98u{AI zf9(ZBk7=%{JsdtYnah%6u5$Sl8WV_P=sZee<$YxQtyj z{85ztN3O+c`E1DMd+O)+L*I^|mi5{2M(alC?)YavF!-H|3*U-nAGj2Xe)U`7GfS7P zZG}riE7$+l6S%VHa`Sbszi3@_`%FGa&Mm!eHuFHBvEMkaG-E=8MXa*^j)k9FSs{rq>{e5on=^!MNW;{5MEiC<4% zYL5N#_uu`U_kXhZt?+^4c(=cfzs8-JzrOInPj-Ili1K*GS zedO{>R_O9ep?~^jH2c)ILm1n^Pd)qnw@AIabiKCkNB=I|P;bxW$aVK##QaC&7mHU~ z4jsSJa*ygkMEdpGPZqC4I{%R7`4d?qGdhu^>Zn}8rnLkGPV<=k}Z~3I1 zd+n8-$CigfFGNGE`zOt+-RM0d-#GZSw##oCVn5$^Y4@F+)vXt6pX8o-%cXGi*>6Xd zc3_OrL*IVBaB25}iRXGRzbQL*v1Nm^_PG}bH-$^rPhu`3!_S2;-D+COZqia=o7Yk% z@!SoUZq3Fow!Q<;54JzY&&Z`)GY6l;d`ESEYMZojc#GG{)b{6Yxct&}v5T#s0yXE2QKXuEe(9(-+TQ0~#& z?OZ6uD;GX#9Yhb;S>DsezTCz)SNQt?T4s4)?gr^OukkPX(dEymxA0eNS+y|TcHIb{ z_nzL6r~l^p$On?T7gqcaFFgM|aX<)vd+>KR{(A7&kH6#iYyLQTvuf=xy!h0L_1>1; z68%Ao%x6o+y3q2Otv0X!!}IR7i{7=JA6IkSl4-hNbwvNmR(tEcto`Ei zJ3rI;t;@sK!QcE&`0*XNn{u%`eku2%+_Qs`zut~3pZVtHw?|(Hwam>HUbI%iALcXc zP0P365w`YQ@6G&OclS?O;SYa$u;sJXfv;YPK6U-ae(XxyPf9&JF>xh&NBF}-GT(oW zQNGJ+?&kXrTyBoM`J>x%PvpY?@i)I6*^V~P^BJ^x=j8(}IgT~_k*{8{q@`oIyRo|W za}_37D|BFg?%oFz((2D#u@ceT)HDC#h3J-F%l-1;t$*G0?YD%wb3M6t4Ia4o^es>C zy!Ut6;|)MiVnp>g^ggzt=1bmcev8y!`1va;>otcXlKKA^HD|cESeO}Rs{eXow{DqF) zGW+oC-eDA_{BydTcs82<%$1hn!P)Tp56(TEOMLouQfK+uCS2cE{P`<8Uw3f!tKW*8 zcp7(?c~@x9&SxX}gR_78`lo@tqQ}%Te8 zJ(ss#7x{Mh`sn5Bns#64zT*IRfN1ybp}{NBhu=H+gNsd|3?0vWxKb{Qbo%&+o}aa-VYsvv`I=^?}wjryHqy2UCgV(LkKKjhS$0NCIIqS~QbD3LXxxE?=t@w8@ z#&ZLo!MuO=D<88kDyzNs!eh@wHmpM@FZ}Fa=>lp$w;OF)caL3o=iq}EKG3{3_YW7B zpG{v1-4&h9U24jOo&%jKyzNpnh7qKmej(J|b}1G<0E)Rgvm0aiKNlh!nP+}>FnqD; zxpxglFYLS$dbM@vdl&Zt=9Y(#;axv?CUa}}x$s7)`)kkqEZYCx#qjKh(9VHNVepkt zyt;*y=dl0EKcLM6�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 z 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 JvZGG#{{n)g9z6g6 literal 0 HcmV?d00001 diff --git a/apps/Flash2Ram/app.icon b/apps/Flash2Ram/app.icon new file mode 100644 index 0000000000000000000000000000000000000000..790c67c658c4d6a8d692cf7cbd241fb6499558e3 GIT binary patch literal 378 zcmW-dKS%;$7{(uu^E$#j0}BVyl%N9X5TYzFQ8D_<#X&>2_>YD_&I_j$38Kj%_lC9_ zgxYElyrJP1Avc#mHya!rZ)o^>_1m7`^Lt-D-XL>;F;>qGnQ1?B5Q4)J_L`<0vwF3$ z#=%kUYLAteRl;s_>xB;`#T9UH%16frcCzihn1Ta5N`QdiwSjHLXXQm5&cbU{Oyxxb z^5wUVXu|H0DBSdFe}hOdX+UYH)8gdN^S~Hcw-nAu53~$OI`&~;$wmCBPrSg`&tR<4 zR9Bk;Y6IPwctA7CSZhx;qT!ZG*;Vxa>WFVnYE?emP;(Jjl9TFf%-FHeSqglP}!URqQ=pY8hx0MLY+ literal 0 HcmV?d00001 diff --git a/apps/Flash2Ram/icon.png b/apps/Flash2Ram/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..303bc307dd565ed50a11829fa698aa3bc6b718db GIT binary patch literal 4738 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 Ar~m)} literal 0 HcmV?d00001 diff --git a/apps/Flash2Ram/icon.svg b/apps/Flash2Ram/icon.svg new file mode 100644 index 000000000..aeda7aba9 --- /dev/null +++ b/apps/Flash2Ram/icon.svg @@ -0,0 +1,48 @@ + + + + + + + + + + diff --git a/apps/Flash2Ram/inc/peripherals.h b/apps/Flash2Ram/inc/peripherals.h new file mode 100644 index 000000000..e6535a381 --- /dev/null +++ b/apps/Flash2Ram/inc/peripherals.h @@ -0,0 +1,18 @@ +#ifndef EXAMPLE_CPP_PERIPHERALS_H_ +#define EXAMPLE_CPP_PERIPHERALS_H_ + +#include + +namespace Peripherals { + +extern long long unsigned int keymappings[16]; +extern int keymappings_await[16]; + +void init_display(); +void waitForKeyPressed(); +void waitForKeyReleased(); +void waitForKeyReleasedTimeout(int timeout); + +} // namespace Peripherals + +#endif // EXAMPLE_CPP_PERIPHERALS_H_ diff --git a/apps/Flash2Ram/inc/selector.h b/apps/Flash2Ram/inc/selector.h new file mode 100644 index 000000000..9c847e2ef --- /dev/null +++ b/apps/Flash2Ram/inc/selector.h @@ -0,0 +1,16 @@ +#ifndef EXAMPLE_SELECTOR_H_ +#define EXAMPLE_SELECTOR_H_ + +namespace Selector { + +#define SELECTOR_COLOR_BG 0xFFFF +#define SELECTOR_COLOR_FG 0x3333 +#define SELECTOR_COLOR_FG_SELECT 0x0000 +#define SELECTOR_COLOR_HEAD_BG 0x0000 +#define SELECTOR_COLOR_HEAD_FG 0xFFFF + +const char * select_file(const char * extension_to_match, int max_files); + +} // namespace Selector + +#endif // EXAMPLE_SELECTOR_H_ diff --git a/apps/Flash2Ram/main.cpp b/apps/Flash2Ram/main.cpp new file mode 100644 index 000000000..0caddb3cc --- /dev/null +++ b/apps/Flash2Ram/main.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include + +#include "inc/peripherals.h" +#include "inc/selector.h" + +extern "C" void extapp_main(); + +void extapp_main(void) { + + // TODO: Get top bar color + + // Wait for the key to be released before starting the application + Peripherals::waitForKeyReleased(); + // Draw a white background + Peripherals::init_display(); + + + // Select a file to copy + const char * filename = Selector::select_file("", 100); + // Wait for the key to be released + Peripherals::waitForKeyReleased(); + + // Clear the screen + Peripherals::init_display(); + + // If no file was selected, exit the application + if (filename == NULL) { + Peripherals::init_display(); + extapp_drawTextLarge("No file selected !", 0, 20 * 1, 0x0000, 0xFFFF, false); + extapp_drawTextLarge("Press any key to exit", 0, 20 * 2, 0x0000, 0xFFFF, false); + Peripherals::waitForKeyPressed(); + Peripherals::waitForKeyReleased(); + return; + } + + // Show the selected file name + extapp_drawTextLarge("Copying :", 0, 20 * 1, 0x0000, 0xFFFF, false); + // If file is a Python file, we use a "hack" to add the autoimportation bit + // to Python files + + extapp_drawTextLarge(filename, 0, 20 * 2, 0x0000, 0xFFFF, false); + + + // Initialize the file len variable that will be written by the file read function + size_t file_len = 0; + // Read the file into filecontent variable + const char * filecontent = extapp_fileRead(filename, &file_len, EXTAPP_FLASH_FILE_SYSTEM); + + const char * extension = strrchr(filename, '.'); + bool success = false; + if (strcmp(extension, "py") != 0) { + success = extapp_fileWrite(filename, filecontent - 1, file_len + 1, EXTAPP_RAM_FILE_SYSTEM); + if (success) { + // Here, we edit the first byte to \0 + char * ramfilecontent = (char *)extapp_fileRead(filename, &file_len, EXTAPP_FLASH_FILE_SYSTEM); + ramfilecontent[0] = '\0'; + } + } else { + success = extapp_fileWrite(filename, filecontent, file_len, EXTAPP_RAM_FILE_SYSTEM); + } + + // Write the file + if (!success) { + Peripherals::init_display(); + extapp_drawTextLarge("Error when copying file !", 0, 20 * 1, 0x0000, 0xFFFF, false); + extapp_drawTextLarge("Press any key to exit", 0, 20 * 2, 0x0000, 0xFFFF, false); + Peripherals::waitForKeyPressed(); + Peripherals::waitForKeyReleased(); + return; + } + extapp_drawTextLarge("File copied successfully !", 0, 20 * 5, 0x0000, 0xFFFF, false); + + extapp_drawTextLarge("Press any key to exit", 0, 20 * 6, 0x0000, 0xFFFF, false); + // Wait for a key to be pressed before exiting the application + Peripherals::waitForKeyPressed(); + Peripherals::waitForKeyReleased(); +} diff --git a/apps/Flash2Ram/peripherals.cpp b/apps/Flash2Ram/peripherals.cpp new file mode 100644 index 000000000..84a93e702 --- /dev/null +++ b/apps/Flash2Ram/peripherals.cpp @@ -0,0 +1,50 @@ +#include "inc/peripherals.h" +#include "extapp_api.h" +#include + +namespace Peripherals { + +/** + * init_display: clear the screen + */ +void init_display() { + // Draw a rectangle to fill all the screen + extapp_pushRectUniform(0, 0, 320, 240, 0xFFFF); +} + +/** + * waitForKeyPressed: wait for a key to be pressed + */ +void waitForKeyPressed() { + // Scan the keyboard until we get a pressed key + while (!extapp_scanKeyboard()) { + // Sleep 10 milliseconds + extapp_msleep(10); + } +} + +/** + * waitForKeyReleased: wait for no keys pressed + */ +void waitForKeyReleased() { + // Scan the keyboard until we get no keys pressed + while (extapp_scanKeyboard()) { + extapp_msleep(10); + } +} + +/** + * waitForKeyReleasedTimeout: wait for no keys pressed, but with a timeout + * @param timeout int + */ +void waitForKeyReleasedTimeout(int timeout) { + // Scan the keyboard until we get no keys pressed, but exit if the timeout reached + while (extapp_scanKeyboard() && timeout > 0) { + // Sleep 10 milliseconds + extapp_msleep(10); + // Decrease the timeout of 10 milliseconds + timeout -= 10; + } +} + +} // namespace Peripherals \ No newline at end of file diff --git a/apps/Flash2Ram/selector.cpp b/apps/Flash2Ram/selector.cpp new file mode 100644 index 000000000..df06b2173 --- /dev/null +++ b/apps/Flash2Ram/selector.cpp @@ -0,0 +1,140 @@ +#include "inc/selector.h" +#include "inc/peripherals.h" +#include +#include + +#define FILENAME_LENGTH_MAX 512 + + +namespace Selector { + +/** + * drawfileList: draw the file list + * @param filenames char **, the file list + * @param nb int, the number of files in the list + * @param selected_file int, the selected file to highlight + */ +static void drawfileList(char ** filenames, int nb, int selected_file) { + // Initialize the name buffer + char name_buffer[FILENAME_LENGTH_MAX]; + // Iterate through the file list + for (int i = 0; i < nb; i++) { + // Copy the filename into the buffer + strncpy(name_buffer, filenames[i], FILENAME_LENGTH_MAX); + // Force the string to terminate with \0 because the filename can be longer than the length of the buffer + name_buffer[26] = '\0'; + // Draw the filename, highlighted if selected + extapp_drawTextLarge(name_buffer, 0, (i + 1) * 20, selected_file == i ? SELECTOR_COLOR_FG_SELECT : SELECTOR_COLOR_FG, SELECTOR_COLOR_BG, false); + // TODO: I don't understand it + strncpy(name_buffer, filenames[i], FILENAME_LENGTH_MAX); + } +} + +static char ** remove(char ** first, char ** last) { + char ** result = first; + while (first != last) { + if (!(*first == NULL)) { + *result = *first; + ++result; + } + ++first; + } + return result; +} + +/** + * select_file: display a file list to let the user chose a file + * @param extension_to_match const char *, use an empty string to match any file extension + * @param max_files int, the maximum number of files to display + * @return const char *, the name of the selected file, or NULL if no file is selected + */ +const char * select_file(const char * extension_to_match, int max_files) { + // The file list + char * filenames[max_files]; + // The selected file index in the order of the file list + int selected_file = 0; + + // Wait for the last key to be released + Peripherals::waitForKeyReleased(); + + // Clear the display + extapp_pushRectUniform(0, 0, LCD_WIDTH, LCD_HEIGHT, SELECTOR_COLOR_BG); + // Draw title bar + extapp_drawTextLarge(" Select a file ", 0, 0, SELECTOR_COLOR_HEAD_FG, SELECTOR_COLOR_HEAD_BG, false); + + // Get the list of files from the flash memory + int nb = extapp_fileListWithExtension((const char **)filenames, max_files, "", EXTAPP_FLASH_FILE_SYSTEM); + + // The extension of the file + char * extension; + + // If the extension to match isn't empty, filter the file list + // Checking without strcomp, because it's also a string littery when it is empty + if (extension_to_match[0] != '\0') { + // Iterate through the file list + for (int i = 0; i < nb; i++) { + // Get the file extension by splitting his name by a dot + extension = strrchr(filenames[i], '.'); + + // Get if the file's extension doesn't match the requested extension + if (strcmp(extension, extension_to_match) != 0) { + // If the extension doesn't match, delete the file from the list + filenames[i] = NULL; + } + } + // Update the number of files + nb = remove(filenames, filenames + nb) - filenames; + } + + // If no files match, draw a no file found message + if (nb == 0) { + // Draw the text + extapp_drawTextLarge(" No file found ", 0, 120, SELECTOR_COLOR_FG, SELECTOR_COLOR_BG, false); + // Sleep for 10 milliseconds + extapp_msleep(10); + // Wait for a key to be pressed + Peripherals::waitForKeyPressed(); + // Return nothing + return NULL; + } else { + // Draw the file list + drawfileList(filenames, nb, selected_file); + // Infinite loop + for (;;) { + // Sleep for 10 milliseconds + extapp_msleep(10); + // Scan the keyboard + uint64_t scancode = extapp_scanKeyboard(); + // If the down arrow is pressed, select the next file + if (scancode & SCANCODE_Down) { + // Select the next file, and go to the first file if the file is out of range + selected_file = (selected_file + 1) % nb; + // Redraw the file list + drawfileList(filenames, nb, selected_file); + // Wait for the key to be released, or 200 milliseconds if the key sill pressed + Peripherals::waitForKeyReleasedTimeout(200); + } else if (scancode & SCANCODE_Up) { + // Select the previous file + selected_file = (selected_file - 1) % nb; + // If the file is out of range, select the last file + if (selected_file < 0) { + selected_file = nb + selected_file; + } + // Redraw the file list + drawfileList(filenames, nb, selected_file); + // Wait for the key to be released, or 200 milliseconds if the key sill pressed + Peripherals::waitForKeyReleasedTimeout(200); + } else if (scancode & (SCANCODE_OK | SCANCODE_EXE)) { + // If OK or EXE is pressed, exit the loop + break; + } else if (scancode & SCANCODE_Back) { + // If back key is pressed, exit the menu and return nothing + return NULL; + } + } + // Redraw the selected file + return filenames[selected_file]; + } +} + +} // namespace Selector \ No newline at end of file diff --git a/apps/Flash2Ram/sources.mak b/apps/Flash2Ram/sources.mak new file mode 100644 index 000000000..45d7e6ad2 --- /dev/null +++ b/apps/Flash2Ram/sources.mak @@ -0,0 +1,5 @@ +app_external_src += $(addprefix $(EXTAPP_PATH)/,\ + main.cpp \ + peripherals.cpp \ + selector.cpp \ +) diff --git a/apps/apps.js b/apps/apps.js index ac4751660..c7f714d83 100644 --- a/apps/apps.js +++ b/apps/apps.js @@ -11,5 +11,6 @@ angular.module('nwas').service('apps', function() { { name: "BadApple", description: {en: "Bad Apple demo", fr: "Démo Bad Apple"} }, { name: "UnitCircle", description: {en: "Unit circle", fr: "Cercle trigonométrique"} }, { name: "CHIP-8", description: {en: "CHIP-8 interpreter", fr: "Interpréteur CHIP-8"} }, + { name: "Flash2Ram", description: {en: "Copy files from flash to RAM", fr: "Copiez des fichiers de la flash vers la RAM"} }, ]; });