Seger Real time terminal, use RTT viewer to view messages through the segger debugger instead of art

Fork of SEGGER_RTT by Glimworm Beacons

Committer:
GlimwormBeacons
Date:
Sun Oct 09 09:45:11 2016 +0000
Revision:
0:a7800e894aaf
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GlimwormBeacons 0:a7800e894aaf 1 /*********************************************************************
GlimwormBeacons 0:a7800e894aaf 2 * SEGGER MICROCONTROLLER GmbH & Co. KG *
GlimwormBeacons 0:a7800e894aaf 3 * Solutions for real time microcontroller applications *
GlimwormBeacons 0:a7800e894aaf 4 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 5 * *
GlimwormBeacons 0:a7800e894aaf 6 * (c) 2014 - 2016 SEGGER Microcontroller GmbH & Co. KG *
GlimwormBeacons 0:a7800e894aaf 7 * *
GlimwormBeacons 0:a7800e894aaf 8 * www.segger.com Support: support@segger.com *
GlimwormBeacons 0:a7800e894aaf 9 * *
GlimwormBeacons 0:a7800e894aaf 10 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 11 * *
GlimwormBeacons 0:a7800e894aaf 12 * SEGGER RTT * Real Time Transfer for embedded targets *
GlimwormBeacons 0:a7800e894aaf 13 * *
GlimwormBeacons 0:a7800e894aaf 14 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 15 * *
GlimwormBeacons 0:a7800e894aaf 16 * All rights reserved. *
GlimwormBeacons 0:a7800e894aaf 17 * *
GlimwormBeacons 0:a7800e894aaf 18 * * This software may in its unmodified form be freely redistributed *
GlimwormBeacons 0:a7800e894aaf 19 * in source form. *
GlimwormBeacons 0:a7800e894aaf 20 * * The source code may be modified, provided the source code *
GlimwormBeacons 0:a7800e894aaf 21 * retains the above copyright notice, this list of conditions and *
GlimwormBeacons 0:a7800e894aaf 22 * the following disclaimer. *
GlimwormBeacons 0:a7800e894aaf 23 * * Modified versions of this software in source or linkable form *
GlimwormBeacons 0:a7800e894aaf 24 * may not be distributed without prior consent of SEGGER. *
GlimwormBeacons 0:a7800e894aaf 25 * * This software may only be used for communication with SEGGER *
GlimwormBeacons 0:a7800e894aaf 26 * J-Link debug probes. *
GlimwormBeacons 0:a7800e894aaf 27 * *
GlimwormBeacons 0:a7800e894aaf 28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
GlimwormBeacons 0:a7800e894aaf 29 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
GlimwormBeacons 0:a7800e894aaf 30 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
GlimwormBeacons 0:a7800e894aaf 31 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
GlimwormBeacons 0:a7800e894aaf 32 * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
GlimwormBeacons 0:a7800e894aaf 33 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
GlimwormBeacons 0:a7800e894aaf 34 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
GlimwormBeacons 0:a7800e894aaf 35 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
GlimwormBeacons 0:a7800e894aaf 36 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
GlimwormBeacons 0:a7800e894aaf 37 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
GlimwormBeacons 0:a7800e894aaf 38 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
GlimwormBeacons 0:a7800e894aaf 39 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
GlimwormBeacons 0:a7800e894aaf 40 * DAMAGE. *
GlimwormBeacons 0:a7800e894aaf 41 * *
GlimwormBeacons 0:a7800e894aaf 42 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 43 * *
GlimwormBeacons 0:a7800e894aaf 44 * RTT version: 5.12g *
GlimwormBeacons 0:a7800e894aaf 45 * *
GlimwormBeacons 0:a7800e894aaf 46 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 47 ---------------------------END-OF-HEADER------------------------------
GlimwormBeacons 0:a7800e894aaf 48 File : SEGGER_RTT.h
GlimwormBeacons 0:a7800e894aaf 49 Purpose : Implementation of SEGGER real-time transfer which allows
GlimwormBeacons 0:a7800e894aaf 50 real-time communication on targets which support debugger
GlimwormBeacons 0:a7800e894aaf 51 memory accesses while the CPU is running.
GlimwormBeacons 0:a7800e894aaf 52 ----------------------------------------------------------------------
GlimwormBeacons 0:a7800e894aaf 53 */
GlimwormBeacons 0:a7800e894aaf 54
GlimwormBeacons 0:a7800e894aaf 55 #ifndef SEGGER_RTT_H
GlimwormBeacons 0:a7800e894aaf 56 #define SEGGER_RTT_H
GlimwormBeacons 0:a7800e894aaf 57
GlimwormBeacons 0:a7800e894aaf 58 #include "SEGGER_RTT_Conf.h"
GlimwormBeacons 0:a7800e894aaf 59
GlimwormBeacons 0:a7800e894aaf 60 /*********************************************************************
GlimwormBeacons 0:a7800e894aaf 61 *
GlimwormBeacons 0:a7800e894aaf 62 * Defines, fixed
GlimwormBeacons 0:a7800e894aaf 63 *
GlimwormBeacons 0:a7800e894aaf 64 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 65 */
GlimwormBeacons 0:a7800e894aaf 66
GlimwormBeacons 0:a7800e894aaf 67 /*********************************************************************
GlimwormBeacons 0:a7800e894aaf 68 *
GlimwormBeacons 0:a7800e894aaf 69 * Types
GlimwormBeacons 0:a7800e894aaf 70 *
GlimwormBeacons 0:a7800e894aaf 71 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 72 */
GlimwormBeacons 0:a7800e894aaf 73
GlimwormBeacons 0:a7800e894aaf 74 //
GlimwormBeacons 0:a7800e894aaf 75 // Description for a circular buffer (also called "ring buffer")
GlimwormBeacons 0:a7800e894aaf 76 // which is used as up-buffer (T->H)
GlimwormBeacons 0:a7800e894aaf 77 //
GlimwormBeacons 0:a7800e894aaf 78 typedef struct {
GlimwormBeacons 0:a7800e894aaf 79 const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4"
GlimwormBeacons 0:a7800e894aaf 80 char* pBuffer; // Pointer to start of buffer
GlimwormBeacons 0:a7800e894aaf 81 unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty.
GlimwormBeacons 0:a7800e894aaf 82 unsigned WrOff; // Position of next item to be written by either target.
GlimwormBeacons 0:a7800e894aaf 83 volatile unsigned RdOff; // Position of next item to be read by host. Must be volatile since it may be modified by host.
GlimwormBeacons 0:a7800e894aaf 84 unsigned Flags; // Contains configuration flags
GlimwormBeacons 0:a7800e894aaf 85 } SEGGER_RTT_BUFFER_UP;
GlimwormBeacons 0:a7800e894aaf 86
GlimwormBeacons 0:a7800e894aaf 87 //
GlimwormBeacons 0:a7800e894aaf 88 // Description for a circular buffer (also called "ring buffer")
GlimwormBeacons 0:a7800e894aaf 89 // which is used as down-buffer (H->T)
GlimwormBeacons 0:a7800e894aaf 90 //
GlimwormBeacons 0:a7800e894aaf 91 typedef struct {
GlimwormBeacons 0:a7800e894aaf 92 const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4"
GlimwormBeacons 0:a7800e894aaf 93 char* pBuffer; // Pointer to start of buffer
GlimwormBeacons 0:a7800e894aaf 94 unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty.
GlimwormBeacons 0:a7800e894aaf 95 volatile unsigned WrOff; // Position of next item to be written by host. Must be volatile since it may be modified by host.
GlimwormBeacons 0:a7800e894aaf 96 unsigned RdOff; // Position of next item to be read by target (down-buffer).
GlimwormBeacons 0:a7800e894aaf 97 unsigned Flags; // Contains configuration flags
GlimwormBeacons 0:a7800e894aaf 98 } SEGGER_RTT_BUFFER_DOWN;
GlimwormBeacons 0:a7800e894aaf 99
GlimwormBeacons 0:a7800e894aaf 100 //
GlimwormBeacons 0:a7800e894aaf 101 // RTT control block which describes the number of buffers available
GlimwormBeacons 0:a7800e894aaf 102 // as well as the configuration for each buffer
GlimwormBeacons 0:a7800e894aaf 103 //
GlimwormBeacons 0:a7800e894aaf 104 //
GlimwormBeacons 0:a7800e894aaf 105 typedef struct {
GlimwormBeacons 0:a7800e894aaf 106 char acID[16]; // Initialized to "SEGGER RTT"
GlimwormBeacons 0:a7800e894aaf 107 int MaxNumUpBuffers; // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2)
GlimwormBeacons 0:a7800e894aaf 108 int MaxNumDownBuffers; // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2)
GlimwormBeacons 0:a7800e894aaf 109 SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]; // Up buffers, transferring information up from target via debug probe to host
GlimwormBeacons 0:a7800e894aaf 110 SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]; // Down buffers, transferring information down from host via debug probe to target
GlimwormBeacons 0:a7800e894aaf 111 } SEGGER_RTT_CB;
GlimwormBeacons 0:a7800e894aaf 112
GlimwormBeacons 0:a7800e894aaf 113 /*********************************************************************
GlimwormBeacons 0:a7800e894aaf 114 *
GlimwormBeacons 0:a7800e894aaf 115 * Global data
GlimwormBeacons 0:a7800e894aaf 116 *
GlimwormBeacons 0:a7800e894aaf 117 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 118 */
GlimwormBeacons 0:a7800e894aaf 119 extern SEGGER_RTT_CB _SEGGER_RTT;
GlimwormBeacons 0:a7800e894aaf 120
GlimwormBeacons 0:a7800e894aaf 121 /*********************************************************************
GlimwormBeacons 0:a7800e894aaf 122 *
GlimwormBeacons 0:a7800e894aaf 123 * RTT API functions
GlimwormBeacons 0:a7800e894aaf 124 *
GlimwormBeacons 0:a7800e894aaf 125 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 126 */
GlimwormBeacons 0:a7800e894aaf 127 #ifdef __cplusplus
GlimwormBeacons 0:a7800e894aaf 128 extern "C" {
GlimwormBeacons 0:a7800e894aaf 129 #endif
GlimwormBeacons 0:a7800e894aaf 130 int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
GlimwormBeacons 0:a7800e894aaf 131 int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
GlimwormBeacons 0:a7800e894aaf 132 int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
GlimwormBeacons 0:a7800e894aaf 133 int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
GlimwormBeacons 0:a7800e894aaf 134 int SEGGER_RTT_GetKey (void);
GlimwormBeacons 0:a7800e894aaf 135 unsigned SEGGER_RTT_HasData (unsigned BufferIndex);
GlimwormBeacons 0:a7800e894aaf 136 int SEGGER_RTT_HasKey (void);
GlimwormBeacons 0:a7800e894aaf 137 void SEGGER_RTT_Init (void);
GlimwormBeacons 0:a7800e894aaf 138 unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize);
GlimwormBeacons 0:a7800e894aaf 139 unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize);
GlimwormBeacons 0:a7800e894aaf 140 int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char* sName);
GlimwormBeacons 0:a7800e894aaf 141 int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName);
GlimwormBeacons 0:a7800e894aaf 142 int SEGGER_RTT_WaitKey (void);
GlimwormBeacons 0:a7800e894aaf 143 unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
GlimwormBeacons 0:a7800e894aaf 144 unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
GlimwormBeacons 0:a7800e894aaf 145 unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
GlimwormBeacons 0:a7800e894aaf 146 unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s);
GlimwormBeacons 0:a7800e894aaf 147 void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
GlimwormBeacons 0:a7800e894aaf 148 //
GlimwormBeacons 0:a7800e894aaf 149 // Function macro for performance optimization
GlimwormBeacons 0:a7800e894aaf 150 //
GlimwormBeacons 0:a7800e894aaf 151 #define SEGGER_RTT_HASDATA(n) (_SEGGER_RTT.aDown[n].WrOff - _SEGGER_RTT.aDown[n].RdOff)
GlimwormBeacons 0:a7800e894aaf 152
GlimwormBeacons 0:a7800e894aaf 153 /*********************************************************************
GlimwormBeacons 0:a7800e894aaf 154 *
GlimwormBeacons 0:a7800e894aaf 155 * RTT "Terminal" API functions
GlimwormBeacons 0:a7800e894aaf 156 *
GlimwormBeacons 0:a7800e894aaf 157 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 158 */
GlimwormBeacons 0:a7800e894aaf 159 int SEGGER_RTT_SetTerminal (char TerminalId);
GlimwormBeacons 0:a7800e894aaf 160 int SEGGER_RTT_TerminalOut (char TerminalId, const char* s);
GlimwormBeacons 0:a7800e894aaf 161
GlimwormBeacons 0:a7800e894aaf 162 /*********************************************************************
GlimwormBeacons 0:a7800e894aaf 163 *
GlimwormBeacons 0:a7800e894aaf 164 * RTT printf functions (require SEGGER_RTT_printf.c)
GlimwormBeacons 0:a7800e894aaf 165 *
GlimwormBeacons 0:a7800e894aaf 166 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 167 */
GlimwormBeacons 0:a7800e894aaf 168 int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...);
GlimwormBeacons 0:a7800e894aaf 169 #ifdef __cplusplus
GlimwormBeacons 0:a7800e894aaf 170 }
GlimwormBeacons 0:a7800e894aaf 171 #endif
GlimwormBeacons 0:a7800e894aaf 172
GlimwormBeacons 0:a7800e894aaf 173 /*********************************************************************
GlimwormBeacons 0:a7800e894aaf 174 *
GlimwormBeacons 0:a7800e894aaf 175 * Defines
GlimwormBeacons 0:a7800e894aaf 176 *
GlimwormBeacons 0:a7800e894aaf 177 **********************************************************************
GlimwormBeacons 0:a7800e894aaf 178 */
GlimwormBeacons 0:a7800e894aaf 179
GlimwormBeacons 0:a7800e894aaf 180 //
GlimwormBeacons 0:a7800e894aaf 181 // Operating modes. Define behavior if buffer is full (not enough space for entire message)
GlimwormBeacons 0:a7800e894aaf 182 //
GlimwormBeacons 0:a7800e894aaf 183 #define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0U) // Skip. Do not block, output nothing. (Default)
GlimwormBeacons 0:a7800e894aaf 184 #define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1U) // Trim: Do not block, output as much as fits.
GlimwormBeacons 0:a7800e894aaf 185 #define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2U) // Block: Wait until there is space in the buffer.
GlimwormBeacons 0:a7800e894aaf 186 #define SEGGER_RTT_MODE_MASK (3U)
GlimwormBeacons 0:a7800e894aaf 187
GlimwormBeacons 0:a7800e894aaf 188 //
GlimwormBeacons 0:a7800e894aaf 189 // Control sequences, based on ANSI.
GlimwormBeacons 0:a7800e894aaf 190 // Can be used to control color, and clear the screen
GlimwormBeacons 0:a7800e894aaf 191 //
GlimwormBeacons 0:a7800e894aaf 192 #define RTT_CTRL_RESET "" // Reset to default colors
GlimwormBeacons 0:a7800e894aaf 193 #define RTT_CTRL_CLEAR "" // Clear screen, reposition cursor to top left
GlimwormBeacons 0:a7800e894aaf 194
GlimwormBeacons 0:a7800e894aaf 195 #define RTT_CTRL_TEXT_BLACK ""
GlimwormBeacons 0:a7800e894aaf 196 #define RTT_CTRL_TEXT_RED ""
GlimwormBeacons 0:a7800e894aaf 197 #define RTT_CTRL_TEXT_GREEN ""
GlimwormBeacons 0:a7800e894aaf 198 #define RTT_CTRL_TEXT_YELLOW ""
GlimwormBeacons 0:a7800e894aaf 199 #define RTT_CTRL_TEXT_BLUE ""
GlimwormBeacons 0:a7800e894aaf 200 #define RTT_CTRL_TEXT_MAGENTA ""
GlimwormBeacons 0:a7800e894aaf 201 #define RTT_CTRL_TEXT_CYAN ""
GlimwormBeacons 0:a7800e894aaf 202 #define RTT_CTRL_TEXT_WHITE ""
GlimwormBeacons 0:a7800e894aaf 203
GlimwormBeacons 0:a7800e894aaf 204 #define RTT_CTRL_TEXT_BRIGHT_BLACK ""
GlimwormBeacons 0:a7800e894aaf 205 #define RTT_CTRL_TEXT_BRIGHT_RED ""
GlimwormBeacons 0:a7800e894aaf 206 #define RTT_CTRL_TEXT_BRIGHT_GREEN ""
GlimwormBeacons 0:a7800e894aaf 207 #define RTT_CTRL_TEXT_BRIGHT_YELLOW ""
GlimwormBeacons 0:a7800e894aaf 208 #define RTT_CTRL_TEXT_BRIGHT_BLUE ""
GlimwormBeacons 0:a7800e894aaf 209 #define RTT_CTRL_TEXT_BRIGHT_MAGENTA ""
GlimwormBeacons 0:a7800e894aaf 210 #define RTT_CTRL_TEXT_BRIGHT_CYAN ""
GlimwormBeacons 0:a7800e894aaf 211 #define RTT_CTRL_TEXT_BRIGHT_WHITE ""
GlimwormBeacons 0:a7800e894aaf 212
GlimwormBeacons 0:a7800e894aaf 213 #define RTT_CTRL_BG_BLACK ""
GlimwormBeacons 0:a7800e894aaf 214 #define RTT_CTRL_BG_RED ""
GlimwormBeacons 0:a7800e894aaf 215 #define RTT_CTRL_BG_GREEN ""
GlimwormBeacons 0:a7800e894aaf 216 #define RTT_CTRL_BG_YELLOW ""
GlimwormBeacons 0:a7800e894aaf 217 #define RTT_CTRL_BG_BLUE ""
GlimwormBeacons 0:a7800e894aaf 218 #define RTT_CTRL_BG_MAGENTA ""
GlimwormBeacons 0:a7800e894aaf 219 #define RTT_CTRL_BG_CYAN ""
GlimwormBeacons 0:a7800e894aaf 220 #define RTT_CTRL_BG_WHITE ""
GlimwormBeacons 0:a7800e894aaf 221
GlimwormBeacons 0:a7800e894aaf 222 #define RTT_CTRL_BG_BRIGHT_BLACK ""
GlimwormBeacons 0:a7800e894aaf 223 #define RTT_CTRL_BG_BRIGHT_RED ""
GlimwormBeacons 0:a7800e894aaf 224 #define RTT_CTRL_BG_BRIGHT_GREEN ""
GlimwormBeacons 0:a7800e894aaf 225 #define RTT_CTRL_BG_BRIGHT_YELLOW ""
GlimwormBeacons 0:a7800e894aaf 226 #define RTT_CTRL_BG_BRIGHT_BLUE ""
GlimwormBeacons 0:a7800e894aaf 227 #define RTT_CTRL_BG_BRIGHT_MAGENTA ""
GlimwormBeacons 0:a7800e894aaf 228 #define RTT_CTRL_BG_BRIGHT_CYAN ""
GlimwormBeacons 0:a7800e894aaf 229 #define RTT_CTRL_BG_BRIGHT_WHITE ""
GlimwormBeacons 0:a7800e894aaf 230
GlimwormBeacons 0:a7800e894aaf 231
GlimwormBeacons 0:a7800e894aaf 232 #endif
GlimwormBeacons 0:a7800e894aaf 233
GlimwormBeacons 0:a7800e894aaf 234 /*************************** End of file ****************************/