From ad0cd4e7ff730c6b2f70d5c7e161b304bb4add23 Mon Sep 17 00:00:00 2001 From: Ruud Schellekens Date: Sun, 21 Feb 2021 21:55:20 +0100 Subject: [PATCH 1/2] Added a tutorial page for building programs using the SDK. --- docs/assets/images/Hello_program_running.png | Bin 0 -> 596 bytes .../Hello_program_shown_in_launcher.png | Bin 0 -> 49663 bytes .../build_system/build_program_using_sdk.md | 109 ++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 docs/assets/images/Hello_program_running.png create mode 100644 docs/assets/images/Hello_program_shown_in_launcher.png diff --git a/docs/assets/images/Hello_program_running.png b/docs/assets/images/Hello_program_running.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c8ded9fbd82a7e381062480d6a3eb26845cf6f GIT binary patch literal 596 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 %vXvljLf8b{;x(LwWDc$jeb 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 vkKwibeuuKfq;t9$VLwGre1`39mgN5ja8 + +int main(int argc, char *argv[]) +{ + // Init SDL Video + SDL_Init(SDL_INIT_VIDEO); + + // Open HW screen and set video mode 240x240, with double buffering + SDL_Surface* hw_surface = + SDL_SetVideoMode(240, 240, 32, + SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN); + + // Hide the cursor, FunKey doesn't come with a mouse + SDL_ShowCursor(0); + + // Draw a green square in the middle of the screen + SDL_Rect draw_rect = {.x=70, .y=70, .w=100, .h=100}; + Uint32 color = SDL_MapRGB(hw_surface->format, 0, 255, 0); + SDL_FillRect(hw_surface, &draw_rect, color); + + // Switch buffers to show the square we just drew + SDL_Flip(hw_surface); + + // Sleep for 5 seconds + SDL_Delay(5000); + + /// Deinit SDL + SDL_Quit(); + + return 0; +} +``` + +Save this file as **hello.c** somewhere outside of the SDK directory. If you've sourced the **environment-setup** you can use the variable *CC* to refer to the C compiler in the SDK. Let's build our program as **hello**: + +```bash +$CC hello.c -o hello -lSDL +``` + +## Packing + +The **hello** program you've just created is a valid executable for FunKey, but in order for the launcher to find it we must first bundle the program in an *OPK* package. Create a new folder for the contents of the package and put into it: + +- The **hello** program. +- An icon for your program in PNG format, 32 x 32 pixels in size, called **hello.png**. +- A *desktop* file called **hello.funkey-s.desktop**, containing the following text: + +```ini +[Desktop Entry] +Type=Application +Name=Hello +Comment=A simple test app +Exec=hello +Icon=hello +Terminal=false +Categories=applications; +``` + +[This file describes your program to the launcher][4]: + +- **Type**: Always set to "Application" +- **Name**: This is the name of the application shown in the launcher +- **Comment**: A description of the application +- **Exec**: This the command to execute your program +- **Icon**: The name of the icon file, without the .png extension +- **Terminal**: Always set to false, FunKey doesn't support terminal applications +- **Categories**: The categories under which the launcher will show the application, in a semicolon-separated list + +Once you've got everything ready you can turn the folder into a package using the [OpenPackage Creator][5]. Select your folder with the **Open** button, or drag it over the window. The OpenPackage Creator will note that you've already created *.desktop* file. Choose the "Use existing as is" option. Finally, click the **Pack** button to create **hello.opk**, ready to be transferred to the FunKey. + +## Installing + +[Connect the FunKey to your computer via USB.][6] Open the menu on the FunKey, select Mount USB and press A twice to confirm. Your FunKey will now be visible as a USB drive on your computer. You can place your application in any 1st-level folder, and you can create as many as you want to organise your applications. Let's create a new folder called Applications and place hello.opk in there. Safely remove the USB drive from your computer, and in the FunKey menu select Eject USB and press A twice to confirm. + +![Hello program is now visible in the Launcher](/assets/images/Hello_program_shown_in_launcher.png) + +Your application is now installed on FunKey. Note that **only the GMENU2X launcher can open custom applications**. So switch to that launcher via the FunKey menu if you haven't already. You should find an application called **Hello** under the **applications** category in the launcher. + +![The Hello program running on FunKey](/assets/images/Hello_program_running.png) + +[1]: ../compilation_environments +[2]: https://github.com/FunKey-Project/FunKey-OS/releases/ +[3]: ../compile_sdk +[4]: https://github.com/gcwnow/buildroot/wiki/Package-file-format +[5]: https://github.com/Harteex/OpenPackageCreator/releases +[6]: /user_manual/tutorials/software/add_opk --8<-- includes/glossary.md From 36c235fe8344a62c018781c01c7e51ee8e370cbc Mon Sep 17 00:00:00 2001 From: Ruud Schellekens Date: Mon, 22 Feb 2021 08:31:34 +0100 Subject: [PATCH 2/2] Dropped headers by 1 level --- .../tutorials/build_system/build_program_using_sdk.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/developer_guide/tutorials/build_system/build_program_using_sdk.md b/docs/developer_guide/tutorials/build_system/build_program_using_sdk.md index a154acc..d236808 100644 --- a/docs/developer_guide/tutorials/build_system/build_program_using_sdk.md +++ b/docs/developer_guide/tutorials/build_system/build_program_using_sdk.md @@ -6,7 +6,7 @@ The FunKey-SDK contains a cross-compilation environment based on GCC, including Before we can begin, setup a Linux-based compilation environment as shown on [this page][1]. -# Installing the FunKey-SDK +## Installing the FunKey-SDK The FunKey-SDK is included in releases of the FunKey-OS, starting from version 2.0.0, and can be found on [GitHub][2]. Alternatively, you can [compile the SDK yourself][3]. @@ -14,9 +14,9 @@ Unpack the SDK's .tar.gz file somewhere on your build system. Before you can use The SDK is now ready to use. For additional convenience it is highly recommended to `source` the **environment-setup** of the SDK. This will add the SDK utilities to the *PATH*, setup standard variables such as *CC* and *LD* to refer to the SDK versions of the toolchain, setup standard options for *CFLAGS*, and create aliases for **configure** and **cmake** to work with the SDK. -# Your first application +## Your first application -## Building +### Building Let's build a simple application to test that everything is working. Below is a small C program that will use SDL to display a green square for 5 seconds, and then exits. @@ -60,7 +60,7 @@ Save this file as **hello.c** somewhere outside of the SDK directory. If you've $CC hello.c -o hello -lSDL ``` -## Packing +### Packing The **hello** program you've just created is a valid executable for FunKey, but in order for the launcher to find it we must first bundle the program in an *OPK* package. Create a new folder for the contents of the package and put into it: @@ -91,7 +91,7 @@ Categories=applications; Once you've got everything ready you can turn the folder into a package using the [OpenPackage Creator][5]. Select your folder with the **Open** button, or drag it over the window. The OpenPackage Creator will note that you've already created *.desktop* file. Choose the "Use existing as is" option. Finally, click the **Pack** button to create **hello.opk**, ready to be transferred to the FunKey. -## Installing +### Installing [Connect the FunKey to your computer via USB.][6] Open the menu on the FunKey, select Mount USB and press A twice to confirm. Your FunKey will now be visible as a USB drive on your computer. You can place your application in any 1st-level folder, and you can create as many as you want to organise your applications. Let's create a new folder called Applications and place hello.opk in there. Safely remove the USB drive from your computer, and in the FunKey menu select Eject USB and press A twice to confirm.