SFBPrint.h

Go to the documentation of this file.
00001 /*                                              -*- mode:C++; fill-column:100 -*-
00002   SFBPrint.h - Generalized print formatting routines
00003   Copyright (C) 2009 The Regents of the University of New Mexico.  All rights reserved.
00004 
00005   This library is free software; you can redistribute it and/or
00006   modify it under the terms of the GNU Lesser General Public
00007   License as published by the Free Software Foundation; either
00008   version 2.1 of the License, or (at your option) any later version.
00009 
00010   This library is distributed in the hope that it will be useful,
00011   but WITHOUT ANY WARRANTY; without even the implied warranty of
00012   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013   Lesser General Public License for more details.
00014 
00015   You should have received a copy of the GNU General Public License
00016   along with this library; if not, write to the Free Software
00017   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
00018   USA
00019 
00020   $Id$
00021 */
00022 
00029 #ifndef SFBPRINT_H
00030 #define SFBPRINT_H
00031 
00032 #include "SFBConstants.h"       /* For FACE_COUNT */
00033 #include "SFBAlarm.h"           /* For SFBAlarmIndexType */ 
00034 #include "SFBReactor.h"         /* For PacketHandler, Body */ 
00035 #include "SFBFrame.h"
00036 
00037 /* The 'plain function' print methods dish to all reflex-controlled faces! */
00038 
00039 extern void print(const char * str);            
00040 
00041 extern void print(const u8 * str, u32 len);     
00042 
00043 extern void print(int decimal);                 
00044 
00045 extern void print(unsigned int decimal);        
00046 
00047 extern void print(long decimal);                
00048 
00049 extern void print(unsigned long decimal);       
00050 
00051 extern void print(long decimal, int code);      
00052 
00053 extern void print(double val);                  
00054 
00055 extern void printFace();                        
00056 
00057 
00058 extern void printPacket(u8 * packet);           
00059 
00060 
00061 extern void println();                          
00062 
00063 extern void println(const char * str);          
00064 
00065 extern void println(const u8 * str, u32 len);   
00066 
00067 extern void println(int decimal);               
00068 
00069 extern void println(unsigned int decimal);      
00070 
00071 extern void println(long decimal);              
00072 
00073 extern void println(unsigned long decimal);     
00074 
00075 extern void println(long decimal, int code);    
00076 
00077 extern void println(double val);                
00078 
00079 extern void printlnCheckByte();                 
00080 
00081 
00082 extern void facePrint(u8 face, const char * str);
00083 extern void facePrint(u8 face, const u8 * str, u32 len);
00084 extern void facePrint(u8 face, int decimal); 
00085 extern void facePrint(u8 face, unsigned int decimal);
00086 extern void facePrint(u8 face, long decimal);
00087 extern void facePrint(u8 face, unsigned long decimal);
00088 //extern void facePrint(u8 face, long decimal, int code);
00089 extern void facePrint(u8 face, unsigned long decimal, int code);
00090 extern void facePrint(u8 face, unsigned long decimal, int code, bool printneg, int width, bool zerofill);
00091 extern void facePrint(u8 face, double val);
00092 extern void facePrint(u8 face, double val);
00093 extern void facePrintFace(u8 face);
00094 extern void facePrintPacket(u8 face, const u8 * packet);
00095 
00096 extern void facePrintln(u8 face); 
00097 extern void facePrintln(u8 face, const char * str);        
00098 
00099 extern void facePrintln(u8 face, const u8 * str, u32 len); 
00100 
00101 extern void facePrintln(u8 face, int decimal);             
00102 
00103 extern void facePrintln(u8 face, unsigned int decimal);    
00104 
00105 extern void facePrintln(u8 face, long decimal);            
00106 
00107 extern void facePrintln(u8 face, unsigned long decimal);   
00108 
00109 extern void facePrintln(u8 face, unsigned long decimal, int code);
00112 extern void facePrintln(u8 face, double val);              
00113 
00114 extern void facePrintlnCheckByte(u8 face);
00115 
00128 struct FacePrinter {
00129   void (*print)(u8 face, u8 byte);  
00130   void (*println)(u8 face);         
00131   void (*printFaceCode)(u8 face);   
00132 
00133   const char * (*getFaceName)(u8 face); 
00134 
00135 };
00136 
00137 extern bool faceHasPrinter(u8 face);     
00138 
00139 
00146 extern const FacePrinter * faceGetPrinter(u8 face);
00147 
00158 extern bool faceFindFreeFace(u8 & foundFace);
00159 
00174 extern void faceSetPrinter(u8 face, const FacePrinter * handler) ;
00175 
00184 extern void faceUnsetPrinter(u8 face) ;
00185 
00190 struct PacketPrinterHeader {
00191   FacePrinter fp;               // A FacePrinter instance must be first (to allow bogus casting)
00192   u8 maxLen;
00193   u8 usedLen;
00194   u8 sourceFace;                // WARNING! sourceFace must be the last field of the struct!
00195   // u8 packetBuffer[0]; /* Illegal ISO C++, but just so you know: Packet buffer starts here. */
00196 };
00197 
00207 extern void packetPrinterStoreDataByte(PacketPrinterHeader *pph, u8 byte) ;
00208 
00218 extern void packetPrinterTerminatePacket(PacketPrinterHeader *pph) ;
00219 
00226 extern u8 * packetPrinterPrintedPacket(PacketPrinterHeader *pph) ;
00227 
00235 #define PACKET_PRINTER_BUFFER_OVERHEAD_BYTES \
00236   (sizeof(PacketPrinterHeader)+sizeof(PacketHeader)+3+1) // (up to) 3 for alignment + 1 null terminator
00237 
00241 #define PACKET_PRINTER_PACKET_BUFFER_SIZE \
00242   (PACKET_PRINTER_BUFFER_OVERHEAD_BYTES+MAX_PACKET_LENGTH) // room for a full packet
00243 
00288 extern u8 * makePacketPrinter(u8 & assignedFace, u8 * buffer, u32 bufferLength, u8 sourceFace) ;
00289 
00290 extern PacketPrinterHeader * initializePacketPrinterBuffer(const FacePrinter * fp, u8 onFace, u8 * buffer, u32 bufferLength, u8 sourceFace) ;
00291 
00292 /* The one-time serial startup code */
00293 extern void print_startup_initialization() ;
00294 
00295 #endif  /* SFBPRINT_H */
00296 

Generated on Sun Jul 25 07:49:39 2010 for SFB by doxygen 1.5.9