X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Flib%2Fprintf%2FPrintfP.nc;h=0382f9b84f5b7bc580a6f11ba233c70c61bc6d32;hb=f1ffeb24ad1dd1ac419607bae23997e6660b0a4d;hp=608c4ea726477681efe87623e00117d138238e6f;hpb=828e20c37cfa7824587974ee4293dfebc97f9c5e;p=tinyos-2.x.git diff --git a/tos/lib/printf/PrintfP.nc b/tos/lib/printf/PrintfP.nc index 608c4ea7..0382f9b8 100644 --- a/tos/lib/printf/PrintfP.nc +++ b/tos/lib/printf/PrintfP.nc @@ -7,24 +7,41 @@ * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. * - * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY - * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING - * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS - * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR * MODIFICATIONS." */ /** + * This is the PrintfP component. It provides the printf service for printing + * data over the serial interface using the standard c-style printf command. + * It must be started via the SplitControl interface it provides. Data + * printed using printf are buffered and only sent over the serial line after + * making a call to PrintfFlush.flush(). This buffer has a maximum size of + * 250 bytes at present. After calling start on this component, printf + * statements can be made anywhere throughout your code, so long as you include + * the "printf.h" header file in every file you wish to use it. Standard + * practice is to start the printf service in the main application, and set up + * a timer to periodically flush the printf buffer (500ms should do). In future + * versions, user defined buffer sizes as well as well as automatic flushing at + * user defined intervals will be supported. + * + * The printf service is currently only available for msp430 based motes + * (i.e. telos, eyes) and atmega128 based motes (i.e. mica2, micaz). On the + * atmega platforms, avr-libc version 1.4 or above mus tbe used. + * * * @author Kevin Klues (klueska@cs.wustl.edu) * @version $Revision$ - * @date $Date$ + * @date $Date$ */ #include "printf.h" @@ -62,16 +79,16 @@ implementation { uint8_t length_to_send; task void retrySend() { - if(call AMSend.send(AM_BROADCAST_ADDR, &printfMsg, sizeof(PrintfMsg)) != SUCCESS) + if(call AMSend.send(AM_BROADCAST_ADDR, &printfMsg, sizeof(printf_msg)) != SUCCESS) post retrySend(); } void sendNext() { - PrintfMsg* m = (PrintfMsg*)call Packet.getPayload(&printfMsg, NULL); - length_to_send = (bytes_left_to_flush < sizeof(PrintfMsg)) ? bytes_left_to_flush : sizeof(PrintfMsg); + printf_msg* m = (printf_msg*)call Packet.getPayload(&printfMsg, NULL); + length_to_send = (bytes_left_to_flush < sizeof(printf_msg)) ? bytes_left_to_flush : sizeof(printf_msg); memset(m->buffer, 0, sizeof(printfMsg)); memcpy(m->buffer, (uint8_t*)next_byte, length_to_send); - if(call AMSend.send(AM_BROADCAST_ADDR, &printfMsg, sizeof(PrintfMsg)) != SUCCESS) + if(call AMSend.send(AM_BROADCAST_ADDR, &printfMsg, sizeof(printf_msg)) != SUCCESS) post retrySend(); else { bytes_left_to_flush -= length_to_send;