Example Project - Megatokio/kilipili GitHub Wiki
Files
- note: i want to include a
example.zip
in the project. - kiboard.h
I assume that you use cmake for building, as the pico-sdk makes that a requirement. I don't like cmake.
kilipili includes cmake files which will build it as a static library. Add kilipili as a subdirectory to your project's CMakeLists.txt as in this example:
cmake_minimum_required(VERSION 3.13)
set(PROJECT YOUR_PROJECT_NAME)
set(PICO_CXX_ENABLE_EXCEPTIONS 1)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DRELEASE -DNDEBUG")
set(MAKE_TOOLS OFF)
set(PICO_SDK_PATH "../../pico-sdk")
set(PICO_BOARD_HEADER_DIRS "kilipili/boards")
include(pico_sdk_import.cmake)
project(${PROJECT} CXX C ASM)
pico_sdk_init()
add_subdirectory(kilipili)
add_compile_definitions(
ON=1 OFF=0
PICO_STDIO_USB=${PICO_STDIO_USB}
PICO_STDIO_UART=${PICO_STDIO_UART}
)
add_executable(${PROJECT}
kilipili/common/malloc.cpp
main.cpp
)
pico_enable_stdio_usb(${PROJECT} ${PICO_STDIO_USB})
pico_enable_stdio_uart(${PROJECT} ${PICO_STDIO_UART})
target_link_libraries(${PROJECT} PRIVATE
kilipili
)
pico_add_extra_outputs(${PROJECT})
Board descriptions are taken from folder kilipili/boards
so you don't need to add custom files to the default place in the pico-sdk to keep it clean. If you have a board with a description in the SDK then it is not neccessary to copy it over to this folder, but it may be needed if you want to make additions to it.
Otherwise create your own board description in kilipili/boards
. You can start off by copying kiboard.h
or any other. But see kiboard.h for the required settings.
For the options which can be set in the cmake files see kilipili options.
// VGA Video 800 x 600 pixel
// with 8x12 pixel true color attributes (character size used in TextVDU)
#include <kilipili.h>
#include <pico/stdio.h>
int main()
{
using namespace kilipili;
using namespace kilipili::Video;
using namespace kilipili::Graphics;
using namespace kilipili::USB;
stdio_init_all();
initUSBHost();
auto* pixmap = new Pixmap<colormode_a1w8>(800, 600, attrheight_12px);
auto* framebuffer = new FrameBuffer<colormode_a1w8>(pixmap, nullptr);
addVideoPlane(framebuffer);
startVideo(vga_mode_800x600_60);
TextVDU* picoterm = new TextVDU(pixmap);
picoterm->cls();
picoterm->identify();
constexpr char msg[] =
"Z0123456789abcdefghijklmnopqrstuvwxyz!@$%&/()=?`'+#-.,;:_'*<>|{["
"]}ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
while (picoterm->row < picoterm->rows - 1)
{
picoterm->fgcolor++;
picoterm->bgcolor--;
picoterm->printf("%s\n", strchr(msg, 0) - picoterm->cols);
}
picoterm->fgcolor = black;
picoterm->bgcolor = white;
// run state machine loop:
Dispatcher::addHandler(&blinkOnboardLed);
Dispatcher::addHandler(&pollUSB);
for (;;)
{
int c = USB::getChar(); // from attached USB keyboard
if (c > 0) picoterm->printf("%c", c);
else Dispatcher::run(100);
}
}