1 /********************************************************************* 2 * SEGGER Microcontroller GmbH * 3 * Solutions for real time microcontroller applications * 4 ********************************************************************** 5 * * 6 * (c) 1995 - 2018 SEGGER Microcontroller GmbH * 7 * * 8 * www.segger.com Support: [email protected] * 9 * * 10 ********************************************************************** 11 * * 12 * SEGGER RTT * Real Time Transfer for embedded targets * 13 * * 14 ********************************************************************** 15 * * 16 * All rights reserved. * 17 * * 18 * SEGGER strongly recommends to not make any changes * 19 * to or modify the source code of this software in order to stay * 20 * compatible with the RTT protocol and J-Link. * 21 * * 22 * Redistribution and use in source and binary forms, with or * 23 * without modification, are permitted provided that the following * 24 * conditions are met: * 25 * * 26 * o Redistributions of source code must retain the above copyright * 27 * notice, this list of conditions and the following disclaimer. * 28 * * 29 * o Redistributions in binary form must reproduce the above * 30 * copyright notice, this list of conditions and the following * 31 * disclaimer in the documentation and/or other materials provided * 32 * with the distribution. * 33 * * 34 * o Neither the name of SEGGER Microcontroller GmbH * 35 * nor the names of its contributors may be used to endorse or * 36 * promote products derived from this software without specific * 37 * prior written permission. * 38 * * 39 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * 40 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * 41 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * 42 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * 43 * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * 44 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * 45 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * 46 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * 47 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * 48 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * 49 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * 50 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * 51 * DAMAGE. * 52 * * 53 ********************************************************************** 54 ---------------------------END-OF-HEADER------------------------------ 55 File : SEGGER_RTT_Syscalls_GCC.c 56 Purpose : Low-level functions for using printf() via RTT in GCC. 57 To use RTT for printf output, include this file in your 58 application. 59 Revision: $Rev: 16265 $ 60 ---------------------------------------------------------------------- 61 */ 62 #if (defined __GNUC__) && !(defined __SES_ARM) && !(defined __CROSSWORKS_ARM) 63 64 #include "btstack_config.h" 65 #ifdef ENABLE_SEGGER_RTT 66 67 #include <reent.h> // required for _write_r 68 #include "SEGGER_RTT.h" 69 70 71 /********************************************************************* 72 * 73 * Types 74 * 75 ********************************************************************** 76 */ 77 // 78 // If necessary define the _reent struct 79 // to match the one passed by the used standard library. 80 // 81 struct _reent; 82 83 /********************************************************************* 84 * 85 * Function prototypes 86 * 87 ********************************************************************** 88 */ 89 int _write(int file, char *ptr, int len); 90 _ssize_t _write_r(struct _reent *r, int file, const void *ptr, size_t len); 91 92 /********************************************************************* 93 * 94 * Global functions 95 * 96 ********************************************************************** 97 */ 98 99 /********************************************************************* 100 * 101 * _write() 102 * 103 * Function description 104 * Low-level write function. 105 * libc subroutines will use this system routine for output to all files, 106 * including stdout. 107 * Write data via RTT. 108 */ 109 int _write(int file, char *ptr, int len) { 110 (void) file; /* Not used, avoid warning */ 111 SEGGER_RTT_Write(0, ptr, len); 112 return len; 113 } 114 115 /********************************************************************* 116 * 117 * _write_r() 118 * 119 * Function description 120 * Low-level reentrant write function. 121 * libc subroutines will use this system routine for output to all files, 122 * including stdout. 123 * Write data via RTT. 124 */ 125 _ssize_t _write_r(struct _reent *r, int file, const void *ptr, size_t len) { 126 (void) file; /* Not used, avoid warning */ 127 (void) r; /* Not used, avoid warning */ 128 SEGGER_RTT_Write(0, ptr, len); 129 return len; 130 } 131 132 #endif 133 #endif 134 /****** End Of File *************************************************/ 135