17dc86dfdSMatthias Ringwald /*********************************************************************
2779af47bSMatthias Ringwald * SEGGER Microcontroller GmbH *
3ce6f85e7SMatthias Ringwald * The Embedded Experts *
47dc86dfdSMatthias Ringwald **********************************************************************
57dc86dfdSMatthias Ringwald * *
6ce6f85e7SMatthias 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 *
24ce6f85e7SMatthias Ringwald * condition is met: *
257dc86dfdSMatthias Ringwald * *
267dc86dfdSMatthias Ringwald * o Redistributions of source code must retain the above copyright *
27ce6f85e7SMatthias 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.
49ce6f85e7SMatthias Ringwald Revision: $Rev: 24316 $
507dc86dfdSMatthias Ringwald ----------------------------------------------------------------------
517dc86dfdSMatthias Ringwald */
52ce6f85e7SMatthias 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 */
79ce6f85e7SMatthias 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 */
_write(int file,const void * ptr,size_t len)99*c4d011a7SDirk Helbig _ssize_t __attribute__((weak)) _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 */
_write_r(struct _reent * r,int file,const void * ptr,size_t len)115*c4d011a7SDirk Helbig _ssize_t __attribute__((weak)) _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