SFBMemory.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00029 #ifndef SFBMEMORY_H
00030 #define SFBMEMORY_H
00031
00032 #include <stdarg.h>
00033 #include "SFBFrame.h"
00034 #include "SFBHeap.h"
00035 #include "SFBReactor.h"
00036 #include "SFBPrint.h"
00037
00038
00039 #define MAX_PACKETS_IN_MEMORY 32
00040
00044 class SFBMemory {
00045
00046 public:
00047
00048 SFBMemory() ;
00049
00053 void reflex(const char type, PacketHandler ph) {
00054 ::reflex(type, ph, SFBReactor::TRIGGER_MEMORY);
00055 }
00056
00062 bool dispatch(int maxPackets, u32 deadline) ;
00063
00077 int remember(const u8 * packet) ;
00078
00079 int rememberUnread(const u8 * packet,u8 sourceOverride = MAX_FACE_INDEX) ;
00080
00081 u8 * makeNewMemory(u32 packetLength) ;
00082
00089 bool remembering() {
00090 return inTrigger;
00091 }
00092
00101 void forget() {
00102 if (inTrigger)
00103 killIt = true;
00104 }
00105
00115 void remember() {
00116 if (inTrigger)
00117 killIt = false;
00118 }
00119
00120
00140 bool forget(u32 index) ;
00141
00150 u8 * get(const u32 index) {
00151 API_ASSERT_MAX(index,MAX_PACKETS_IN_MEMORY);
00152 return packets[index];
00153 }
00154
00162 bool fire(const u32 index) ;
00163
00164 int find(const u8 type) {
00165 return find((const char *) &type, 1);
00166 }
00167 int find(const char * prefix, const int len = -1) ;
00168
00178 int printf(const char * format, ...) ;
00179
00183 u8 getFace() { return WMEM; }
00184
00185 private:
00186 SFBHeap heap;
00187 u8 * packets[MAX_PACKETS_IN_MEMORY];
00188 s8 lastIndexPrinted;
00189 u8 spinner;
00190 u8 inUse;
00191 bool inTrigger;
00192 bool killIt;
00193
00194 static const FacePrinter memoryFacePrinter ;
00195 static void MemoryFacePrint(u8 face, u8 ch) ;
00196 static void MemoryFacePrintln(u8 face) ;
00197
00198 void facePrint(u8 face, u8 ch) ;
00199 void facePrintln(u8 face) ;
00200
00201 u8 memoryPacketBuffer[PACKET_PRINTER_PACKET_BUFFER_SIZE];
00202 };
00203
00207 extern SFBMemory Memory;
00208
00209 #endif
00210