Eli Hughes
/
COMPACT_FLASH_2
DataTypes.c
- Committer:
- emh203
- Date:
- 2012-02-16
- Revision:
- 0:76427232f435
File content as of revision 0:76427232f435:
#include "mbed.h" #include "DataTypes.h" CHAR StringBuffer[256]; SIGNED_WORD ByteStackPush(ByteStack * Stack,BYTE Val) { if (Stack->Ptr == Stack->Size-1) { return STACK_FULL; } else { Stack->Ptr++; Stack->StackSpace[Stack->Ptr] = Val; return STACK_PUSH_OK; } } SIGNED_WORD ByteStackPOP(ByteStack * Stack) { if (Stack->Ptr == 0) { return STACK_EMPTY; } else { Stack->Ptr--; return Stack->StackSpace[Stack->Ptr]; } } SIGNED_BYTE BitStackPush(BitStack * Stack,BOOL Val) { WORD Offset; BYTE Mask; if (Stack->Ptr == Stack->Size-1) { return STACK_FULL; } else { Stack->Ptr++; Offset = (Stack->Ptr)>>3; Mask = 0x01<<(Stack->Ptr&0x07); if (Val) { Stack->StackSpace[Offset] |= Mask; } else { Stack->StackSpace[Offset] &= ~Mask; } return STACK_PUSH_OK; } } SIGNED_BYTE BitStackPop(BitStack * Stack) { WORD Offset; BYTE Mask; if (Stack->Ptr == 0) { return STACK_EMPTY; } else { Stack->Ptr++; Offset = (Stack->Ptr)>>3; Mask = 0x01<<(Stack->Ptr&0x07); if (Stack->StackSpace[Offset] | Mask) { return TRUE; } else { return FALSE; } } } #ifndef INLINE_BITPLANE_PUT void BitPlane_Put(BitPlane * BP, WORD X,WORD Y, BOOL Value) { WORD Offset; BYTE Mask; Offset = (Y * ((BP->SizeX)>>3)) + (X>>3); Mask = 0x01 << (X & 0x07); if(Value) { BP->BitPlaneSpace[Offset] |= Mask; } else { BP->BitPlaneSpace[Offset] &= ~Mask; } } #endif #ifndef INLINE_BITPLANE_GET BOOL BitPlane_Get(BitPlane * BP, WORD X,WORD Y) { WORD Offset; BYTE Mask; Offset = (Y * ((BP->SizeX)>>3)) + (X>>3); Mask = 0x01 << (X & 0x07); if((BP->BitPlaneSpace[Offset])&Mask) { return TRUE; } else { return FALSE; } } #endif void BitPlane_Clear(BitPlane * BP) { WORD PlaneSpaceSize; WORD i; PlaneSpaceSize = ((BP->SizeX)>>3) * BP->SizeY; for (i=0;i<PlaneSpaceSize;i++) { BP->BitPlaneSpace[i] = 0; } } void InitByteQueue(ByteQueue *BQ,WORD Size,BYTE * Storage) { WORD i; BQ->QueueSize = Size; BQ->ReadPtr=0; BQ->WritePtr=0; BQ->QueueStorage = Storage; for (i=0;i<BQ->QueueSize;i++) { BQ->QueueStorage[i] = 0; } } WORD BytesInQueue(ByteQueue *BQ) { if (BQ->ReadPtr > BQ->WritePtr) { return (BQ->QueueSize - BQ->ReadPtr + BQ->WritePtr); } else if (BQ->WritePtr > BQ->ReadPtr) { return (BQ->WritePtr - BQ->ReadPtr); } else { return 0; } } SIGNED_WORD ByteEnqueue(ByteQueue *BQ,BYTE Val) { if (BytesInQueue(BQ) == BQ->QueueSize) { return QUEUE_FULL; } else { BQ->QueueStorage[BQ->WritePtr] = Val; BQ->WritePtr++; if (BQ->WritePtr >= BQ->QueueSize) { BQ->WritePtr = 0; } return QUEUE_OK; } } SIGNED_WORD ByteArrayEnqueue(ByteQueue *BQ,BYTE *Buf,WORD Len) { WORD i; for (i=0;i<Len;i++) { ByteEnqueue(BQ,Buf[i]); } return QUEUE_OK; } SIGNED_WORD PrintfEnqueue(ByteQueue *BQ, const char *FormatString,...) { va_list argptr; va_start(argptr,FormatString); vsprintf((CHAR *)StringBuffer,FormatString,argptr); va_end(argptr); ByteArrayEnqueue(BQ,(BYTE *)StringBuffer,strlen(StringBuffer)); return QUEUE_OK; } SIGNED_WORD ByteDequeue(ByteQueue *BQ,BYTE *Val) { if (BytesInQueue(BQ) == 0) { return QUEUE_EMPTY; } else { *Val = BQ->QueueStorage[BQ->ReadPtr]; BQ->ReadPtr++; if (BQ->ReadPtr >= BQ->QueueSize) { BQ->ReadPtr = 0; } return QUEUE_OK; } }