Complete this task as part of your GSoC 2020 application if you are applying for any AXIOM Remote related task.
This challenge is mandatory if you apply for T1126
Please follow the tasks closely and make sure to adhere to the C++ coding style (see links section for reference).
Goal
Current implementation of DrawImage() copies given image array to the framebuffer, but the full-blown size of image data with 3 channels and 8 bit depth is rather large, compared to the space on the microcontroller. Most of the time we don't require full colour for icons so the data can be kept as black and white (0 for black and 1 for white pixels).
Step 1: Preparations
- Check out the source code of AXIOM Remote, switch to dev branch for recent version
- Important: Don't forget to initialize git sub-modules in the repo, otherwise ImGui errors will occur
- Look through general source code and especially Firmware project and learn the structure
- Build the visualizer (AXIOM_Remote_Firmware_Visualizer) and play a bit with a firmware to understand it more
- Ask questions either here or on our IRC channel //(please use a dedicated client instead of web interface, to prevent often disconnects)
Visualizer output:
Step 2: Add DrawIcon() in Painter
Description: Recreate apertus° logo from the starting page of the firmware with 2 images and minimal data size, afterwards implement DrawIcon()
- Dissect the given apertus° logo (see Media, size 320 x 240 like the AXIOM Remote screen, background transparent) file into 2, one should contain apertus and the other °, try to keep them as small as possible
- Convert the images to 1 bit depth C image arrays, you can use online converters (see Useful Links)
- Add the data to the firmware in the proper folder
- Add draw method for icons to the painter
- Recreate the logo on the starting page with the new method, place ° properly
Step 3: Bonus
- Add unit tests for DrawIcon() method to verify that predefined input also deliver correct output, see examples in FirmwareTest folder, it already contains a few painter tests
- Add parameter to the DrawIcon() method to define front color
- Add parameter to the DrawIcon() method to define background color, transparent is 0
- Adjust the logo on the starting page to correspond to the apertus° colors, see https://www.apertus.org/logo for corresponding colour for "Letter Grey Dark" and "Accent Orange", hint: don't forget to convert them to RGB565 value
Media
Useful Links:
- apertus° logo description: https://www.apertus.org/logo
- Image converter: https://littlevgl.com/image-to-c-array
- C++ coding guidelines (isocpp): https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
To get in touch with any mentor check the Mentor Contact List.