Eli Hughes
/
COMPACT_FLASH
Compact Flash I/O test
DataTypes.c@1:dc171f34db9b, 2011-12-30 (annotated)
- Committer:
- emh203
- Date:
- Fri Dec 30 21:02:16 2011 +0000
- Revision:
- 1:dc171f34db9b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emh203 | 1:dc171f34db9b | 1 | #include "mbed.h" |
emh203 | 1:dc171f34db9b | 2 | #include "DataTypes.h" |
emh203 | 1:dc171f34db9b | 3 | |
emh203 | 1:dc171f34db9b | 4 | CHAR StringBuffer[256]; |
emh203 | 1:dc171f34db9b | 5 | |
emh203 | 1:dc171f34db9b | 6 | SIGNED_WORD ByteStackPush(ByteStack * Stack,BYTE Val) { |
emh203 | 1:dc171f34db9b | 7 | if (Stack->Ptr == Stack->Size-1) { |
emh203 | 1:dc171f34db9b | 8 | return STACK_FULL; |
emh203 | 1:dc171f34db9b | 9 | } else { |
emh203 | 1:dc171f34db9b | 10 | Stack->Ptr++; |
emh203 | 1:dc171f34db9b | 11 | Stack->StackSpace[Stack->Ptr] = Val; |
emh203 | 1:dc171f34db9b | 12 | return STACK_PUSH_OK; |
emh203 | 1:dc171f34db9b | 13 | } |
emh203 | 1:dc171f34db9b | 14 | } |
emh203 | 1:dc171f34db9b | 15 | |
emh203 | 1:dc171f34db9b | 16 | SIGNED_WORD ByteStackPOP(ByteStack * Stack) { |
emh203 | 1:dc171f34db9b | 17 | if (Stack->Ptr == 0) { |
emh203 | 1:dc171f34db9b | 18 | return STACK_EMPTY; |
emh203 | 1:dc171f34db9b | 19 | } else { |
emh203 | 1:dc171f34db9b | 20 | Stack->Ptr--; |
emh203 | 1:dc171f34db9b | 21 | return Stack->StackSpace[Stack->Ptr]; |
emh203 | 1:dc171f34db9b | 22 | } |
emh203 | 1:dc171f34db9b | 23 | } |
emh203 | 1:dc171f34db9b | 24 | |
emh203 | 1:dc171f34db9b | 25 | SIGNED_BYTE BitStackPush(BitStack * Stack,BOOL Val) { |
emh203 | 1:dc171f34db9b | 26 | WORD Offset; |
emh203 | 1:dc171f34db9b | 27 | BYTE Mask; |
emh203 | 1:dc171f34db9b | 28 | |
emh203 | 1:dc171f34db9b | 29 | if (Stack->Ptr == Stack->Size-1) { |
emh203 | 1:dc171f34db9b | 30 | return STACK_FULL; |
emh203 | 1:dc171f34db9b | 31 | } else { |
emh203 | 1:dc171f34db9b | 32 | |
emh203 | 1:dc171f34db9b | 33 | Stack->Ptr++; |
emh203 | 1:dc171f34db9b | 34 | Offset = (Stack->Ptr)>>3; |
emh203 | 1:dc171f34db9b | 35 | Mask = 0x01<<(Stack->Ptr&0x07); |
emh203 | 1:dc171f34db9b | 36 | |
emh203 | 1:dc171f34db9b | 37 | if (Val) { |
emh203 | 1:dc171f34db9b | 38 | Stack->StackSpace[Offset] |= Mask; |
emh203 | 1:dc171f34db9b | 39 | } else { |
emh203 | 1:dc171f34db9b | 40 | Stack->StackSpace[Offset] &= ~Mask; |
emh203 | 1:dc171f34db9b | 41 | } |
emh203 | 1:dc171f34db9b | 42 | |
emh203 | 1:dc171f34db9b | 43 | return STACK_PUSH_OK; |
emh203 | 1:dc171f34db9b | 44 | } |
emh203 | 1:dc171f34db9b | 45 | } |
emh203 | 1:dc171f34db9b | 46 | |
emh203 | 1:dc171f34db9b | 47 | SIGNED_BYTE BitStackPop(BitStack * Stack) { |
emh203 | 1:dc171f34db9b | 48 | WORD Offset; |
emh203 | 1:dc171f34db9b | 49 | BYTE Mask; |
emh203 | 1:dc171f34db9b | 50 | |
emh203 | 1:dc171f34db9b | 51 | if (Stack->Ptr == 0) { |
emh203 | 1:dc171f34db9b | 52 | return STACK_EMPTY; |
emh203 | 1:dc171f34db9b | 53 | } else { |
emh203 | 1:dc171f34db9b | 54 | |
emh203 | 1:dc171f34db9b | 55 | Stack->Ptr++; |
emh203 | 1:dc171f34db9b | 56 | Offset = (Stack->Ptr)>>3; |
emh203 | 1:dc171f34db9b | 57 | Mask = 0x01<<(Stack->Ptr&0x07); |
emh203 | 1:dc171f34db9b | 58 | |
emh203 | 1:dc171f34db9b | 59 | if (Stack->StackSpace[Offset] | Mask) { |
emh203 | 1:dc171f34db9b | 60 | return TRUE; |
emh203 | 1:dc171f34db9b | 61 | } else { |
emh203 | 1:dc171f34db9b | 62 | return FALSE; |
emh203 | 1:dc171f34db9b | 63 | } |
emh203 | 1:dc171f34db9b | 64 | } |
emh203 | 1:dc171f34db9b | 65 | } |
emh203 | 1:dc171f34db9b | 66 | |
emh203 | 1:dc171f34db9b | 67 | #ifndef INLINE_BITPLANE_PUT |
emh203 | 1:dc171f34db9b | 68 | void BitPlane_Put(BitPlane * BP, WORD X,WORD Y, BOOL Value) |
emh203 | 1:dc171f34db9b | 69 | { |
emh203 | 1:dc171f34db9b | 70 | WORD Offset; |
emh203 | 1:dc171f34db9b | 71 | BYTE Mask; |
emh203 | 1:dc171f34db9b | 72 | |
emh203 | 1:dc171f34db9b | 73 | Offset = (Y * ((BP->SizeX)>>3)) + (X>>3); |
emh203 | 1:dc171f34db9b | 74 | Mask = 0x01 << (X & 0x07); |
emh203 | 1:dc171f34db9b | 75 | |
emh203 | 1:dc171f34db9b | 76 | if(Value) |
emh203 | 1:dc171f34db9b | 77 | { |
emh203 | 1:dc171f34db9b | 78 | BP->BitPlaneSpace[Offset] |= Mask; |
emh203 | 1:dc171f34db9b | 79 | } |
emh203 | 1:dc171f34db9b | 80 | else |
emh203 | 1:dc171f34db9b | 81 | { |
emh203 | 1:dc171f34db9b | 82 | BP->BitPlaneSpace[Offset] &= ~Mask; |
emh203 | 1:dc171f34db9b | 83 | } |
emh203 | 1:dc171f34db9b | 84 | } |
emh203 | 1:dc171f34db9b | 85 | #endif |
emh203 | 1:dc171f34db9b | 86 | |
emh203 | 1:dc171f34db9b | 87 | #ifndef INLINE_BITPLANE_GET |
emh203 | 1:dc171f34db9b | 88 | BOOL BitPlane_Get(BitPlane * BP, WORD X,WORD Y) |
emh203 | 1:dc171f34db9b | 89 | { |
emh203 | 1:dc171f34db9b | 90 | WORD Offset; |
emh203 | 1:dc171f34db9b | 91 | BYTE Mask; |
emh203 | 1:dc171f34db9b | 92 | |
emh203 | 1:dc171f34db9b | 93 | Offset = (Y * ((BP->SizeX)>>3)) + (X>>3); |
emh203 | 1:dc171f34db9b | 94 | Mask = 0x01 << (X & 0x07); |
emh203 | 1:dc171f34db9b | 95 | |
emh203 | 1:dc171f34db9b | 96 | if((BP->BitPlaneSpace[Offset])&Mask) |
emh203 | 1:dc171f34db9b | 97 | { |
emh203 | 1:dc171f34db9b | 98 | return TRUE; |
emh203 | 1:dc171f34db9b | 99 | } |
emh203 | 1:dc171f34db9b | 100 | else |
emh203 | 1:dc171f34db9b | 101 | { |
emh203 | 1:dc171f34db9b | 102 | return FALSE; |
emh203 | 1:dc171f34db9b | 103 | } |
emh203 | 1:dc171f34db9b | 104 | } |
emh203 | 1:dc171f34db9b | 105 | #endif |
emh203 | 1:dc171f34db9b | 106 | void BitPlane_Clear(BitPlane * BP) { |
emh203 | 1:dc171f34db9b | 107 | WORD PlaneSpaceSize; |
emh203 | 1:dc171f34db9b | 108 | WORD i; |
emh203 | 1:dc171f34db9b | 109 | |
emh203 | 1:dc171f34db9b | 110 | PlaneSpaceSize = ((BP->SizeX)>>3) * BP->SizeY; |
emh203 | 1:dc171f34db9b | 111 | |
emh203 | 1:dc171f34db9b | 112 | for (i=0;i<PlaneSpaceSize;i++) { |
emh203 | 1:dc171f34db9b | 113 | BP->BitPlaneSpace[i] = 0; |
emh203 | 1:dc171f34db9b | 114 | } |
emh203 | 1:dc171f34db9b | 115 | } |
emh203 | 1:dc171f34db9b | 116 | |
emh203 | 1:dc171f34db9b | 117 | |
emh203 | 1:dc171f34db9b | 118 | |
emh203 | 1:dc171f34db9b | 119 | void InitByteQueue(ByteQueue *BQ,WORD Size,BYTE * Storage) { |
emh203 | 1:dc171f34db9b | 120 | WORD i; |
emh203 | 1:dc171f34db9b | 121 | |
emh203 | 1:dc171f34db9b | 122 | BQ->QueueSize = Size; |
emh203 | 1:dc171f34db9b | 123 | BQ->ReadPtr=0; |
emh203 | 1:dc171f34db9b | 124 | BQ->WritePtr=0; |
emh203 | 1:dc171f34db9b | 125 | BQ->QueueStorage = Storage; |
emh203 | 1:dc171f34db9b | 126 | |
emh203 | 1:dc171f34db9b | 127 | for (i=0;i<BQ->QueueSize;i++) { |
emh203 | 1:dc171f34db9b | 128 | BQ->QueueStorage[i] = 0; |
emh203 | 1:dc171f34db9b | 129 | } |
emh203 | 1:dc171f34db9b | 130 | } |
emh203 | 1:dc171f34db9b | 131 | |
emh203 | 1:dc171f34db9b | 132 | WORD BytesInQueue(ByteQueue *BQ) { |
emh203 | 1:dc171f34db9b | 133 | if (BQ->ReadPtr > BQ->WritePtr) { |
emh203 | 1:dc171f34db9b | 134 | return (BQ->QueueSize - BQ->ReadPtr + BQ->WritePtr); |
emh203 | 1:dc171f34db9b | 135 | } else if (BQ->WritePtr > BQ->ReadPtr) { |
emh203 | 1:dc171f34db9b | 136 | return (BQ->WritePtr - BQ->ReadPtr); |
emh203 | 1:dc171f34db9b | 137 | } else { |
emh203 | 1:dc171f34db9b | 138 | return 0; |
emh203 | 1:dc171f34db9b | 139 | } |
emh203 | 1:dc171f34db9b | 140 | } |
emh203 | 1:dc171f34db9b | 141 | |
emh203 | 1:dc171f34db9b | 142 | SIGNED_WORD ByteEnqueue(ByteQueue *BQ,BYTE Val) { |
emh203 | 1:dc171f34db9b | 143 | if (BytesInQueue(BQ) == BQ->QueueSize) { |
emh203 | 1:dc171f34db9b | 144 | return QUEUE_FULL; |
emh203 | 1:dc171f34db9b | 145 | } else { |
emh203 | 1:dc171f34db9b | 146 | BQ->QueueStorage[BQ->WritePtr] = Val; |
emh203 | 1:dc171f34db9b | 147 | BQ->WritePtr++; |
emh203 | 1:dc171f34db9b | 148 | |
emh203 | 1:dc171f34db9b | 149 | if (BQ->WritePtr >= BQ->QueueSize) { |
emh203 | 1:dc171f34db9b | 150 | BQ->WritePtr = 0; |
emh203 | 1:dc171f34db9b | 151 | } |
emh203 | 1:dc171f34db9b | 152 | return QUEUE_OK; |
emh203 | 1:dc171f34db9b | 153 | } |
emh203 | 1:dc171f34db9b | 154 | } |
emh203 | 1:dc171f34db9b | 155 | |
emh203 | 1:dc171f34db9b | 156 | SIGNED_WORD ByteArrayEnqueue(ByteQueue *BQ,BYTE *Buf,WORD Len) { |
emh203 | 1:dc171f34db9b | 157 | WORD i; |
emh203 | 1:dc171f34db9b | 158 | for (i=0;i<Len;i++) { |
emh203 | 1:dc171f34db9b | 159 | ByteEnqueue(BQ,Buf[i]); |
emh203 | 1:dc171f34db9b | 160 | } |
emh203 | 1:dc171f34db9b | 161 | return QUEUE_OK; |
emh203 | 1:dc171f34db9b | 162 | } |
emh203 | 1:dc171f34db9b | 163 | |
emh203 | 1:dc171f34db9b | 164 | SIGNED_WORD PrintfEnqueue(ByteQueue *BQ, const char *FormatString,...) |
emh203 | 1:dc171f34db9b | 165 | { |
emh203 | 1:dc171f34db9b | 166 | |
emh203 | 1:dc171f34db9b | 167 | va_list argptr; |
emh203 | 1:dc171f34db9b | 168 | va_start(argptr,FormatString); |
emh203 | 1:dc171f34db9b | 169 | vsprintf((CHAR *)StringBuffer,FormatString,argptr); |
emh203 | 1:dc171f34db9b | 170 | va_end(argptr); |
emh203 | 1:dc171f34db9b | 171 | |
emh203 | 1:dc171f34db9b | 172 | ByteArrayEnqueue(BQ,(BYTE *)StringBuffer,strlen(StringBuffer)); |
emh203 | 1:dc171f34db9b | 173 | |
emh203 | 1:dc171f34db9b | 174 | return QUEUE_OK; |
emh203 | 1:dc171f34db9b | 175 | } |
emh203 | 1:dc171f34db9b | 176 | |
emh203 | 1:dc171f34db9b | 177 | |
emh203 | 1:dc171f34db9b | 178 | |
emh203 | 1:dc171f34db9b | 179 | |
emh203 | 1:dc171f34db9b | 180 | SIGNED_WORD ByteDequeue(ByteQueue *BQ,BYTE *Val) { |
emh203 | 1:dc171f34db9b | 181 | |
emh203 | 1:dc171f34db9b | 182 | if (BytesInQueue(BQ) == 0) { |
emh203 | 1:dc171f34db9b | 183 | return QUEUE_EMPTY; |
emh203 | 1:dc171f34db9b | 184 | } else { |
emh203 | 1:dc171f34db9b | 185 | *Val = BQ->QueueStorage[BQ->ReadPtr]; |
emh203 | 1:dc171f34db9b | 186 | |
emh203 | 1:dc171f34db9b | 187 | BQ->ReadPtr++; |
emh203 | 1:dc171f34db9b | 188 | |
emh203 | 1:dc171f34db9b | 189 | if (BQ->ReadPtr >= BQ->QueueSize) { |
emh203 | 1:dc171f34db9b | 190 | BQ->ReadPtr = 0; |
emh203 | 1:dc171f34db9b | 191 | } |
emh203 | 1:dc171f34db9b | 192 | return QUEUE_OK; |
emh203 | 1:dc171f34db9b | 193 | } |
emh203 | 1:dc171f34db9b | 194 | } |