xref: /btstack/3rd-party/segger-rtt/SEGGER_RTT_Syscalls_GCC.c (revision c4d011a77201e2a3e333b5c7c8682dc9267d621a)
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