Xmega Application Note


write.c

Go to the documentation of this file.
00001 /*This file is prepared for Doxygen automatic documentation generation.*/
00016 /* Copyright (c) 2009 Atmel Corporation. All rights reserved.
00017  *
00018  * Redistribution and use in source and binary forms, with or without
00019  * modification, are permitted provided that the following conditions are met:
00020  *
00021  * 1. Redistributions of source code must retain the above copyright notice, this
00022  * list of conditions and the following disclaimer.
00023  *
00024  * 2. Redistributions in binary form must reproduce the above copyright notice,
00025  * this list of conditions and the following disclaimer in the documentation
00026  * and/or other materials provided with the distribution.
00027  *
00028  * 3. The name of Atmel may not be used to endorse or promote products derived
00029  * from this software without specific prior written permission.
00030  *
00031  * 4. This software may only be redistributed and used in connection with an Atmel
00032  * AVR product.
00033  *
00034  * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
00035  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
00036  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
00037  * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
00038  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00039  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00040  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00041  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00042  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00043  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00044  *
00045  */
00046 
00047 #include "compiler.h"
00048 
00049 
00050 #if ( defined(__ICCAVR32__) || defined(__ICCAVR__))
00051 
00052 #include <yfuns.h>
00053 
00054 _STD_BEGIN
00055 
00056 #pragma module_name = "?__write"
00057 
00059 #if defined(__ICCAVR32__)
00060 __no_init
00061 #endif
00062 volatile void *volatile stdio_base;
00063 
00064 int (*ptr_put)(void volatile*,int);
00065 
00079 size_t __write(int handle, const unsigned char *buffer, size_t size)
00080 {
00081         size_t nChars = 0;
00082 
00083         if (buffer == 0){
00084                 // This means that we should flush internal buffers.
00085                 return 0;
00086         }
00087 
00088         // This implementation only writes to stdout and stderr.
00089         // For all other file handles, it returns failure.
00090         if (handle != _LLIO_STDOUT && handle != _LLIO_STDERR) {
00091                 return _LLIO_ERROR;
00092         }
00093 
00094         for (; size != 0; --size) {
00095                 if (ptr_put(stdio_base, *buffer++) < 0) {
00096                         return _LLIO_ERROR;
00097                 }
00098                 ++nChars;
00099         }
00100 
00101   return nChars;
00102 }
00103 _STD_END
00104 
00105 
00106 #elif (defined(__GNUC__) && !defined(XMEGA))
00107 
00108         extern volatile void *volatile stdio_base;
00109         extern int (*ptr_put)(void volatile*,int);
00110         
00111         int __attribute__((weak))
00112         _write (int file, char * ptr, int len)
00113         {
00114                 int nChars = 0;
00115         
00116                 if ( (file != 1)
00117                         && (file != 2) && (file!=3))
00118                 return -1;
00119         
00120                 for (; len != 0; --len) {
00121                         if (ptr_put(stdio_base, *ptr++) < 0) {
00122                                 return -1;
00123                         }
00124                         ++nChars;
00125                 }
00126                 return nChars;
00127         }
00128 
00129 #elif (defined(__GNUC__) && defined(XMEGA))
00130 
00131         extern volatile void *volatile stdio_base;
00132         extern int (*ptr_put)(void volatile*,int);
00133         
00134         int _write (char c, int *f)
00135         {
00136                 if (ptr_put(stdio_base,c) < 0)
00137                 {
00138                         return -1;
00139                 }
00140                 return 1;
00141         }
00142 
00143 #endif
@DOC_TITLE@
Generated on Fri Oct 22 12:15:25 2010 for AVR1300 Using the Xmega ADC by doxygen 1.6.3