17dc86dfdSMatthias Ringwald /********************************************************************* 2779af47bSMatthias Ringwald * SEGGER Microcontroller GmbH * 3*ce6f85e7SMatthias Ringwald * The Embedded Experts * 47dc86dfdSMatthias Ringwald ********************************************************************** 57dc86dfdSMatthias Ringwald * * 6*ce6f85e7SMatthias Ringwald * (c) 1995 - 2019 SEGGER Microcontroller GmbH * 77dc86dfdSMatthias Ringwald * * 87dc86dfdSMatthias Ringwald * www.segger.com Support: [email protected] * 97dc86dfdSMatthias Ringwald * * 107dc86dfdSMatthias Ringwald ********************************************************************** 117dc86dfdSMatthias Ringwald * * 127dc86dfdSMatthias Ringwald * SEGGER RTT * Real Time Transfer for embedded targets * 137dc86dfdSMatthias Ringwald * * 147dc86dfdSMatthias Ringwald ********************************************************************** 157dc86dfdSMatthias Ringwald * * 167dc86dfdSMatthias Ringwald * All rights reserved. * 177dc86dfdSMatthias Ringwald * * 187dc86dfdSMatthias Ringwald * SEGGER strongly recommends to not make any changes * 197dc86dfdSMatthias Ringwald * to or modify the source code of this software in order to stay * 207dc86dfdSMatthias Ringwald * compatible with the RTT protocol and J-Link. * 217dc86dfdSMatthias Ringwald * * 227dc86dfdSMatthias Ringwald * Redistribution and use in source and binary forms, with or * 237dc86dfdSMatthias Ringwald * without modification, are permitted provided that the following * 24*ce6f85e7SMatthias Ringwald * condition is met: * 257dc86dfdSMatthias Ringwald * * 267dc86dfdSMatthias Ringwald * o Redistributions of source code must retain the above copyright * 27*ce6f85e7SMatthias Ringwald * notice, this condition and the following disclaimer. * 287dc86dfdSMatthias Ringwald * * 297dc86dfdSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * 307dc86dfdSMatthias Ringwald * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * 317dc86dfdSMatthias Ringwald * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * 327dc86dfdSMatthias Ringwald * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * 337dc86dfdSMatthias Ringwald * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * 347dc86dfdSMatthias Ringwald * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * 357dc86dfdSMatthias Ringwald * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * 367dc86dfdSMatthias Ringwald * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * 377dc86dfdSMatthias Ringwald * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * 387dc86dfdSMatthias Ringwald * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * 397dc86dfdSMatthias Ringwald * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * 407dc86dfdSMatthias Ringwald * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * 417dc86dfdSMatthias Ringwald * DAMAGE. * 427dc86dfdSMatthias Ringwald * * 437dc86dfdSMatthias Ringwald ********************************************************************** 447dc86dfdSMatthias Ringwald ---------------------------END-OF-HEADER------------------------------ 457dc86dfdSMatthias Ringwald File : SEGGER_RTT_Syscalls_GCC.c 467dc86dfdSMatthias Ringwald Purpose : Low-level functions for using printf() via RTT in GCC. 477dc86dfdSMatthias Ringwald To use RTT for printf output, include this file in your 487dc86dfdSMatthias Ringwald application. 49*ce6f85e7SMatthias Ringwald Revision: $Rev: 24316 $ 507dc86dfdSMatthias Ringwald ---------------------------------------------------------------------- 517dc86dfdSMatthias Ringwald */ 52*ce6f85e7SMatthias Ringwald #if (defined __GNUC__) && !(defined __SES_ARM) && !(defined __CROSSWORKS_ARM) && !(defined __ARMCC_VERSION) && !(defined __CC_ARM) 53dd13ed29SMatthias Ringwald 54dd13ed29SMatthias Ringwald #include "btstack_config.h" 55dd13ed29SMatthias Ringwald #ifdef ENABLE_SEGGER_RTT 56dd13ed29SMatthias Ringwald 577dc86dfdSMatthias Ringwald #include <reent.h> // required for _write_r 587dc86dfdSMatthias Ringwald #include "SEGGER_RTT.h" 597dc86dfdSMatthias Ringwald 60779af47bSMatthias Ringwald 617dc86dfdSMatthias Ringwald /********************************************************************* 627dc86dfdSMatthias Ringwald * 637dc86dfdSMatthias Ringwald * Types 647dc86dfdSMatthias Ringwald * 657dc86dfdSMatthias Ringwald ********************************************************************** 667dc86dfdSMatthias Ringwald */ 677dc86dfdSMatthias Ringwald // 687dc86dfdSMatthias Ringwald // If necessary define the _reent struct 697dc86dfdSMatthias Ringwald // to match the one passed by the used standard library. 707dc86dfdSMatthias Ringwald // 717dc86dfdSMatthias Ringwald struct _reent; 727dc86dfdSMatthias Ringwald 737dc86dfdSMatthias Ringwald /********************************************************************* 747dc86dfdSMatthias Ringwald * 757dc86dfdSMatthias Ringwald * Function prototypes 767dc86dfdSMatthias Ringwald * 777dc86dfdSMatthias Ringwald ********************************************************************** 787dc86dfdSMatthias Ringwald */ 79*ce6f85e7SMatthias Ringwald _ssize_t _write (int file, const void *ptr, size_t len); 80dd13ed29SMatthias Ringwald _ssize_t _write_r(struct _reent *r, int file, const void *ptr, size_t len); 817dc86dfdSMatthias Ringwald 827dc86dfdSMatthias Ringwald /********************************************************************* 837dc86dfdSMatthias Ringwald * 847dc86dfdSMatthias Ringwald * Global functions 857dc86dfdSMatthias Ringwald * 867dc86dfdSMatthias Ringwald ********************************************************************** 877dc86dfdSMatthias Ringwald */ 887dc86dfdSMatthias Ringwald 897dc86dfdSMatthias Ringwald /********************************************************************* 907dc86dfdSMatthias Ringwald * 917dc86dfdSMatthias Ringwald * _write() 927dc86dfdSMatthias Ringwald * 937dc86dfdSMatthias Ringwald * Function description 947dc86dfdSMatthias Ringwald * Low-level write function. 957dc86dfdSMatthias Ringwald * libc subroutines will use this system routine for output to all files, 967dc86dfdSMatthias Ringwald * including stdout. 977dc86dfdSMatthias Ringwald * Write data via RTT. 987dc86dfdSMatthias Ringwald */ 99*ce6f85e7SMatthias Ringwald _ssize_t _write(int file, const void *ptr, size_t len) { 1007dc86dfdSMatthias Ringwald (void) file; /* Not used, avoid warning */ 1017dc86dfdSMatthias Ringwald SEGGER_RTT_Write(0, ptr, len); 1027dc86dfdSMatthias Ringwald return len; 1037dc86dfdSMatthias Ringwald } 1047dc86dfdSMatthias Ringwald 1057dc86dfdSMatthias Ringwald /********************************************************************* 1067dc86dfdSMatthias Ringwald * 1077dc86dfdSMatthias Ringwald * _write_r() 1087dc86dfdSMatthias Ringwald * 1097dc86dfdSMatthias Ringwald * Function description 1107dc86dfdSMatthias Ringwald * Low-level reentrant write function. 1117dc86dfdSMatthias Ringwald * libc subroutines will use this system routine for output to all files, 1127dc86dfdSMatthias Ringwald * including stdout. 1137dc86dfdSMatthias Ringwald * Write data via RTT. 1147dc86dfdSMatthias Ringwald */ 115dd13ed29SMatthias Ringwald _ssize_t _write_r(struct _reent *r, int file, const void *ptr, size_t len) { 1167dc86dfdSMatthias Ringwald (void) file; /* Not used, avoid warning */ 1177dc86dfdSMatthias Ringwald (void) r; /* Not used, avoid warning */ 1187dc86dfdSMatthias Ringwald SEGGER_RTT_Write(0, ptr, len); 1197dc86dfdSMatthias Ringwald return len; 1207dc86dfdSMatthias Ringwald } 1217dc86dfdSMatthias Ringwald 1227dc86dfdSMatthias Ringwald #endif 123dd13ed29SMatthias Ringwald #endif 1247dc86dfdSMatthias Ringwald /****** End Of File *************************************************/ 125