FreeRTOS demo task implementations.
Copyright (c) 2013-2018 Microchip Technology Inc. and its subsidiaries.
Macros | |
Task configuration | |
#define | UART_TASK_PRIORITY (tskIDLE_PRIORITY + 3) |
#define | UART_TASK_DELAY (10 / portTICK_RATE_MS) |
#define | MAIN_TASK_PRIORITY (tskIDLE_PRIORITY + 2) |
#define | MAIN_TASK_DELAY (100 / portTICK_RATE_MS) |
#define | GRAPH_TASK_PRIORITY (tskIDLE_PRIORITY + 1) |
#define | GRAPH_TASK_DELAY (50 / portTICK_RATE_MS) |
#define | TERMINAL_TASK_PRIORITY (tskIDLE_PRIORITY + 1) |
#define | TERMINAL_TASK_DELAY (1000 / portTICK_RATE_MS) |
#define | ABOUT_TASK_PRIORITY (tskIDLE_PRIORITY + 1) |
#define | ABOUT_TASK_DELAY (33 / portTICK_RATE_MS) |
Functions | |
static void | cdc_rx_handler (uint8_t instance) |
Interrupt handler for reception from EDBG Virtual COM Port. More... | |
void | demotasks_init (void) |
Initialize tasks and resources for demo. More... | |
Tasks for demo | |
static void | main_task (void *params) |
Main demo task. More... | |
static void | graph_task (void *params) |
Graph task. More... | |
static void | terminal_task (void *params) |
Terminal task. More... | |
static void | about_task (void *params) |
About task. More... | |
static void | uart_task (void *params) |
UART task. More... | |
Menu and display configuration | |
#define | MENU_HEIGHT 8 |
Height of menu bar. More... | |
#define | MENU_ITEM_WIDTH (((GFX_MONO_LCD_WIDTH - (MENU_NUM_ITEMS - 1))) / MENU_NUM_ITEMS) |
Width per menu item. More... | |
#define | CANVAS_HEIGHT ((GFX_MONO_LCD_HEIGHT / 2) - (MENU_HEIGHT + 1)) |
Height of area in which to draw content. More... | |
#define | CANVAS_WIDTH (GFX_MONO_LCD_WIDTH) |
Width of area in which to draw content. More... | |
#define | CANVAS_GRAPH_Y_OFFSET (GFX_MONO_LCD_HEIGHT / 2) |
Offset of Y-coordinate for display buffer of graph. More... | |
#define | TERMINAL_LINES (1 + ((CANVAS_HEIGHT - SYSFONT_HEIGHT) / (SYSFONT_HEIGHT + 1))) |
Character lines on display. More... | |
#define | TERMINAL_COLUMNS (CANVAS_WIDTH / SYSFONT_WIDTH) |
Character columns on display. More... | |
#define | TERMINAL_BUFFER_LINES (1 + TERMINAL_LINES) |
Character lines in terminal buffer. More... | |
#define | TERMINAL_BUFFER_COLUMNS (1 + TERMINAL_COLUMNS) |
Character columns in terminal buffer. More... | |
enum | menu_items { MENU_ITEM_GRAPH, MENU_ITEM_TERMINAL, MENU_ITEM_ABOUT, MENU_NUM_ITEMS, MENU_ITEM_GRAPH, MENU_ITEM_TERMINAL, MENU_ITEM_ABOUT, MENU_NUM_ITEMS } |
Available selections in menu. More... | |
Global constants and variables | |
static const char | menu_items_text [MENU_NUM_ITEMS][6] |
Labels for menu items. More... | |
static const char | about_text [] |
Text to display on about screen. More... | |
static struct usart_module | cdc_usart |
Instance for Embedded Debugger (EDBG) Virtual COM Port driver. More... | |
static uint8_t | graph_noise = 128 |
Pseudo-random noise for graph task. More... | |
static uint8_t | terminal_buffer [TERMINAL_BUFFER_LINES][TERMINAL_BUFFER_COLUMNS] |
Buffer for terminal text. More... | |
static uint8_t | terminal_line_offset |
Index of latest terminal line (first to be printed) More... | |
static xQueueHandle | terminal_in_queue |
Queue for incoming terminal characters. More... | |
static xSemaphoreHandle | display_mutex |
Semaphore to signal busy display. More... | |
static xSemaphoreHandle | terminal_mutex |
Semaphore to signal busy terminal buffer. More... | |
static xTaskHandle | terminal_task_handle |
Handle for terminal output task. More... | |
static xTaskHandle | about_task_handle |
Handle for about screen task. More... | |
static | OLED1_CREATE_INSTANCE (oled1, OLED1_EXT_HEADER) |
Instance for OLED1 Xplained Pro LED and button driver. More... | |
|
static |
About task.
This task prints a short text about the demo, with a simple zooming animation.
params | Parameters for the task. (Not used.) |
References ABOUT_TASK_DELAY, about_text, CANVAS_HEIGHT, CANVAS_WIDTH, display_mutex, gfx_mono_draw_char(), i, NULL, OLED1_LED2_ID, oled1_set_led_state(), sysfont, TERMINAL_COLUMNS, vTaskDelay(), vTaskSuspend(), xSemaphoreGive, and xSemaphoreTake.
|
static |
Interrupt handler for reception from EDBG Virtual COM Port.
UART interrupt handler for reception on EDBG CDC UART.
This function is based on the interrupt handler of the SERCOM USART callback driver (_usart_interrupt_handler()). It has been modified to only handle the receive interrupt and to push the received data directly into the queue for terminal characters (terminal_in_queue), and echo the character back to the sender.
instance | Instance number of SERCOM that generated interrupt. |
References data, NULL, terminal_in_queue, and xQueueSendFromISR.
|
static |
Graph task.
This task runs in the background to draw a pseudo-random graph to a dedicated display buffer. If the user selects a different screen than the graph, it will continue to update even though it is not visible until the graph screen is selected again.
params | Parameters for the task. (Not used.) |
References CANVAS_GRAPH_Y_OFFSET, CANVAS_HEIGHT, CANVAS_WIDTH, display_mutex, gfx_mono_draw_line, gfx_mono_draw_pixel, gfx_mono_draw_vertical_line, GFX_PIXEL_CLR, GFX_PIXEL_SET, graph_noise, GRAPH_TASK_DELAY, OLED1_LED1_ID, oled1_set_led_state(), vTaskDelay(), xSemaphoreGive, and xSemaphoreTake.
|
static |
Main demo task.
This task keeps track of which screen the user has selected, which tasks to resume/suspend to draw the selected screen, and also draws the menu bar.
The menu bar shows which screens the user can select by clicking the corresponding buttons on the OLED1 Xplained Pro:
params | Parameters for the task. (Not used.) |
References about_task_handle, CANVAS_GRAPH_Y_OFFSET, CANVAS_HEIGHT, display_mutex, gfx_mono_draw_filled_rect, gfx_mono_draw_horizontal_line, gfx_mono_draw_rect, gfx_mono_draw_string(), gfx_mono_draw_vertical_line, GFX_MONO_LCD_HEIGHT, GFX_MONO_LCD_WIDTH, GFX_PIXEL_CLR, GFX_PIXEL_SET, i, MAIN_TASK_DELAY, MENU_HEIGHT, MENU_ITEM_ABOUT, MENU_ITEM_GRAPH, MENU_ITEM_TERMINAL, MENU_ITEM_WIDTH, menu_items_text, MENU_NUM_ITEMS, NULL, OLED1_BUTTON1_ID, OLED1_BUTTON2_ID, OLED1_BUTTON3_ID, oled1_get_button_state(), OLED1_LED3_ID, oled1_set_led_state(), ssd1306_set_display_start_line_address(), sysfont, terminal_task_handle, vTaskDelay(), vTaskResume(), vTaskSuspend(), xSemaphoreGive, and xSemaphoreTake.
|
static |
Terminal task.
This task prints the terminal text buffer to the display.
params | Parameters for the task. (Not used.) |
References CANVAS_WIDTH, display_mutex, gfx_mono_draw_char(), gfx_mono_draw_filled_rect, GFX_PIXEL_CLR, OLED1_LED2_ID, oled1_set_led_state(), sysfont, terminal_buffer, TERMINAL_BUFFER_LINES, TERMINAL_COLUMNS, terminal_line_offset, TERMINAL_LINES, terminal_mutex, TERMINAL_TASK_DELAY, vTaskDelay(), xSemaphoreGive, and xSemaphoreTake.
|
static |
UART task.
This task runs in the background to handle the queued, incoming terminal characters and write them to the terminal text buffer. It does not print anything to the display – that is done by terminal_task().
params | Parameters for the task. (Not used.) |
References OLED1_LED1_ID, oled1_set_led_state(), terminal_buffer, TERMINAL_BUFFER_LINES, TERMINAL_COLUMNS, terminal_in_queue, terminal_line_offset, terminal_mutex, UART_TASK_DELAY, vTaskDelay(), xQueueReceive, xSemaphoreGive, and xSemaphoreTake.