I have worked with the examples provided with ModusToolbox and everything works perfectly. I immediately have seen the use of
cy_retarget_io.h
that is used also for targeting the standard IO "printf" function to the serial port. So, as my "best wishes" for you all with the "At the Core Design Challenge", I have written a handful header file that contains the ANSI Escape sequences to use with the serial port and a serial terminal like Tera Term.
I am sharing this file with you.
/** ****************************************************************************** * At The Core Design Challenge, 2023 * ****************************************************************************** * File Name : ansi_escape.h * Description : This file of definitions * Created on : Feb 28, 2023 * Author : Francesco De Simone, Digimorf ****************************************************************************** */ #ifndef ANSI_ESCAPE_H_ #define ANSI_ESCAPE_H_ #ifdef __cplusplus extern "C" { #endif // ///////////////////////////////////////////////////////////////////////////// // Definitions. // ///////////////////////////////////////////////////////////////////////////// // ASCII CHARACTERS #define ASCII_NULL 0x00 // Null Character #define ASCII_BS 0x08 // Backspace #define ASCII_TAB 0x09 // Tab #define ASCII_LF 0x0A // Line Feed #define ASCII_CR 0x0D // Carriage Return #define ASCII_ESC 0x1B // Escape #define ASCII_SPACE 0x20 // Space #define ASCII_A ('A') #define ASCII_L ('L') #define ASCII_Z ('Z') #define ASCII_a ('a') #define ASCII_z ('z') #define ASCII_0 ('0') #define ASCII_9 ('9') #define ASCII_Q ('Q') #define ASCII_AT ('@') #define ASCII_SLASH ('/') #define ASCII_COLON (':') #define ASCII_DASH ('-') #define ASCII_HASH ('#') #define ASCII_DELETE 0x7F // Tab #define CURSOR_NEWLINE "\r\n" // VT100 ESCAPE SEQUENCES ////////////////////////////////////////////////////// // Device Status // ------------- // The following codes are used for reporting terminal/display settings, and vary depending on the implementation: // Requests a Report Device Code response from the device. #define QUERY_DEVICE_CODE "\x1b[c" // Generated by the device in response to Query Device Code request. #define REPORT_DEVICE_CODE "\x1b[{code}0c" // Requests a Report Device Status response from the device. #define QUERY_DEVICE_STATUS "\x1b[5n" // Generated by the device in response to a Query Device Status request; indicates that device is functioning correctly. #define REPORT_DEVICE_OK "\x1b[0n" // Generated by the device in response to a Query Device Status request; indicates that device is functioning improperly. #define REPORT_DEVICE_FAILURE "\x1b[3n" // Requests a Report Cursor Position response from the device. #define QUERY_CURSOR_POSITION "\x1b[6n" // Generated by the device in response to a Query Cursor Position request; reports current cursor position. #define REPORT_CURSOR_POSITION "\x1b[%d;%dR" // Terminal Setup // -------------- // The h and l codes are used for setting terminal/display mode, and vary depending on the implementation. Line Wrap is one of the few setup codes that tend to be used consistently: // Reset all terminal settings to default. #define RESET_DEVICE "\x1b\x63" // Text wraps to next line if longer than the length of the display area. #define ENABLE_LINE_WRAP "\x1b[7h" // Disables line wrapping. #define DISABLE_LINE_WRAP "\x1b[7l" // Fonts // ----- // Some terminals support multiple fonts: normal/bold, swiss/italic, etc. There are a variety of special codes for certain terminals; the following are fairly standard: // Set default font. #define FONT_SET_G0 "\x1b(" // Set alternate font. #define FONT_SET_G1 "\x1b)" // Gfx mode on. #define FONT_GFX_ON "\x1b(0" // DEC special graphics table as G0 // Gfx mode off. #define FONT_GFX_OFF "\x1b(B" // ASCII table as G0 // Cursor Control // -------------- // Sets the cursor position where subsequent text will begin. // If no row/column parameters are provided (ie. "\x1b[H), the cursor will move // to the home position, at the upper left of the screen. #define CURSOR_HOME "\x1b[\x48" #define CURSOR_SET "\x1b[%d;%d\x48" // Moves the cursor up by COUNT rows; the default count is 1. #define CURSOR_UP "\x1b[%dA" // Moves the cursor down by COUNT rows; the default count is 1. #define CURSOR_DOWN "\x1b[%dB" //Moves the cursor forward by COUNT columns; the default count is 1. #define CURSOR_FORWARD "\x1b[%dC" // Moves the cursor backward by COUNT columns; the default count is 1. #define CURSOR_BACKWARD "\x1b[%luD" // Identical to Cursor Home. #define FORCE_CURSOR_POSITION "\x1b[%d;%d\x66" // Save current cursor position. #define SAVE_CURSOR "\x1b[s" // Restores cursor position after a Save Cursor. #define UNSAVE_CURSOR "\x1b[u" // Save current cursor position. #define SAVE_CURSOR_AND_ATTRS "\x1b\x37" // Restores cursor position after a Save Cursor. #define RESTORE_CURSOR_AND_ATTRS "\x1b\x38" // Hide the cursor. #define CURSOR_OFF "\x1b[?25l" // Show the cursor. #define CURSOR_ON "\x1b[?25h" // Scrolling // --------- // Enable scrolling for entire display. #define SCROLL_SCREEN "\x1b[r" // Enable scrolling from row {start} to row {end}. #define SCROLL_SCREEN_AREA "\x1b[%d;%d\x72" // Scroll display down one line. #define SCROLL_DOWN "\x1bD" // Scroll display up one line. #define SCROLL_UP "\x1bM" // Tab Control // ----------- // Sets a tab at the current position. #define SET_TAB "\x1b\x48" //Clears tab at the current position. #define CLEAR_TAB "\x1b[g" // Clears all tabs. #define CLEAR_ALL_TABS "\x1b[3g" // Erasing Text // ------------ // Erases from the current cursor position to the end of the current line. #define ERASE_END_OF_LINE "\x1b[K" // Erases from the current cursor position to the start of the current line. #define ERASE_START_OF_LINE "\x1b[1K" // Erases the entire current line. #define ERASE_LINE "\x1b[2K" // Erases the screen from the current line down to the bottom of the screen. #define ERASE_DOWN "\x1b[J" // Erases the screen from the current line up to the top of the screen. #define ERASE_UP "\x1b[1J" // Erases the screen with the background colour and moves the cursor to home. #define ERASE_SCREEN "\x1b[2J" // Printing // -------- // Some terminals support local printing: // Print the current screen. #define PRINT_SCREEN "\x1b[i" // Print the current line. #define PRINT_LINE "\x1b[1i" // Disable log. #define STOP_PRINT_LOG "\x1b[4i" // Start log; all received text is echoed to a printer. #define START_PRINT_LOG "\x1b[5i" //Define Key //---------- // Associates a string of text to a keyboard key. {key} indicates the key by its ASCII value in decimal. #define SET_KEY_DEFINITION "\x1b[%d;\"%s\"p" // Set Display Attributes // ---------------------- // Set Attribute Mode "\x1b[{attr1};...;{attrn}m // Sets multiple display attribute settings. The following lists standard attributes: #define ATTR_RESET_ALL_ATTRIBUTES 0 #define ATTR_BRIGHT 1 #define ATTR_DIM 2 #define ATTR_UNDERSCORE 4 #define ATTR_BLINK 5 #define ATTR_HIDDEN 8 #define ATTR_REVERSE 7 // Foreground Colors. #define ATTR_COLOR_FG_Red 31 #define ATTR_COLOR_FG_Green 32 #define ATTR_COLOR_FG_Black 30 #define ATTR_COLOR_FG_Yellow 33 #define ATTR_COLOR_FG_Blue 34 #define ATTR_COLOR_FG_Magenta 35 #define ATTR_COLOR_FG_Cyan 36 #define ATTR_COLOR_FG_White 37 // Background Colors. #define ATTR_COLOR_BG_Black 40 #define ATTR_COLOR_BG_Red 41 #define ATTR_COLOR_BG_Green 42 #define ATTR_COLOR_BG_Yellow #define ATTR_COLOR_BG_Blue 44 #define ATTR_COLOR_BG_Magenta 45 #define ATTR_COLOR_BG_Cyan 46 #define ATTR_COLOR_BG_White 47 // 256 indexed colors. // https://robotmoon.com/256-colors/ #define ATTR_COLOR_256_BG "\x1B[48;5;%d\x6d" #define ATTR_COLOR_256_FG "\x1B[38;5;%d\x6d" #define ANSI_COLOR_256_FGBG "\x1B[38;5;%d\x6d\x1B[48;5;%d\x6d" #define ANSI_PIXEL_256_FGBG ANSI_COLOR_256_FGBG // RGB colors. #define ATTR_COLOR_RGB_BG "\x1B[48;2;%d;%d;%x6d" #define ATTR_COLOR_RGB_FG "\x1B[38;2;%d;%d;%x6d" // ///////////////////////////////////////////////////////////////////////////// // Functions. // ///////////////////////////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////////////////////////// #ifdef __cplusplus } #endif #endif // ANSI_ESCAPE_H_
Its use is very simple and as an example, you can include it in your "Hello world" code like the following:
#include "ansi_escape.h" ... printf(ANSI_COLOR_256_FGBG, 195, 17); printf(ERASE_SCREEN CURSOR_HOME); printf(ANSI_COLOR_256_FGBG, 195, 19); printf(" ************************* " CURSOR_NEWLINE " HAL: Hello World! Example " CURSOR_NEWLINE " ************************* " CURSOR_NEWLINE CURSOR_NEWLINE); printf(ANSI_COLOR_256_FGBG, 15, 17); printf("Hello World!!!" CURSOR_NEWLINE CURSOR_NEWLINE); printf(ANSI_COLOR_256_FGBG, 7, 17); printf("For more projects, " "visit our code examples repositories:" CURSOR_NEWLINE CURSOR_NEWLINE); printf(ANSI_COLOR_256_FGBG, 208, 17); printf("https://github.com/Infineon/" "Code-Examples-for-ModusToolbox-Software" CURSOR_NEWLINE CURSOR_NEWLINE); /* Initialize timer to toggle the LED */ timer_init(); printf(ANSI_COLOR_256_FGBG, 7, 17); printf("Press "); printf(ATTR_COLOR_256_FG, 50); printf("'Enter'"); printf(ATTR_COLOR_256_FG, 7); printf(" key to pause or " "resume blinking the user LED" CURSOR_NEWLINE CURSOR_NEWLINE);
Keep up the good work!
Francesco.
Top Comments