Diff: WriterBase.cpp
- Revision:
- 1:578d6bbe9f09
- Child:
- 2:ce4c7e5ab241
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WriterBase.cpp Fri Dec 16 07:14:05 2011 +0000 @@ -0,0 +1,144 @@ +#include "WriterBase.h" + +#include "assert.h" +#include "VectorFormat.h" + +// for strlen +#include "string.h" + +olc::WriterBase::WriterBase() : + mData(0), + mPlayHead(0), + mCapacity(0), + mPenDown(0), + mLaserPower(0), + mGalvoX(0), + mGalvoY(0) +{ +} + + +bool olc::WriterBase::penUp() +{ + if (spaceLeft() < 1) return false; + put((uint8_t)olc::PEN_UP ); + return true; +} + +bool olc::WriterBase::penDown() +{ + if (spaceLeft() < 1) return false; + put((uint8_t)olc::PEN_DOWN ); + return true; +} + +bool olc::WriterBase::wait(uint16_t aWait) +{ + if (spaceLeft() < 2) return false; + put( (uint8_t)olc::WAIT ); + encodeU16( aWait ); + return true; +} + + +bool olc::WriterBase::moveTo(uint16_t aX, uint16_t aY) { + if (spaceLeft() < 5) return false; + put( (uint8_t)olc::MOVE_TO ); + encodeU16( aX ); + encodeU16( aY ); + return true; +} + +bool olc::WriterBase::lineTo(uint16_t x, uint16_t y) +{ + if (spaceLeft() < 5) return false; + put((uint8_t)olc::LINE_TO ); + encodeU16( x ); + encodeU16( y ); + return true; +} + +bool olc::WriterBase::setLaserPower(uint16_t aPower) +{ + if (spaceLeft() < 2) return false; + put( (uint8_t)olc::LASER_POWER ); + encodeU16( aPower ); + return true; +} + +bool olc::WriterBase::setStepSize(uint16_t aStepSize) +{ + if (spaceLeft() < 2) return false; + put( (uint8_t)olc::STEP_SIZE ); + encodeU16( aStepSize ); + return true; +} + +bool olc::WriterBase::readRgb() +{ + if (spaceLeft() < 2) return false; + put( (uint8_t)olc::READ_RGB ); + return true; +} + +bool olc::WriterBase::reportRgb(uint8_t r, uint8_t g, uint8_t b) +{ + if (spaceLeft() < 4) return false; + put( (uint8_t)olc::REPORT_RGB ); + put( r ); + put( g ); + put( b ); + return true; +} + +bool olc::WriterBase::bitmapU8(uint8_t *aData, uint8_t aSize) { + if (spaceLeft() < 2) return false; + put( (uint8_t)olc::BITMAPU8 ); + put( aSize ); + for(int i=0; i < (int)aSize; i++) { + put( aData[i] ); + } + return true; +} + +bool olc::WriterBase::message(int aLevel, const char *aString) { + // first calculate size + size_t size = strlen(aString); + if (size > 254 ) return false; + if (spaceLeft() < 4+size) return false; + + put( (uint8_t)olc::MESSAGE ); + put( (uint8_t)aLevel ); + put( (uint8_t)size ); + const char* ptr = &(aString[0]); + while (*ptr != '\0') { + put( *ptr ); + ptr++; + } + put ( 0 ); // end message with a zero. + return true; +} + +bool olc::WriterBase::areYouThere() { + if (spaceLeft() < 1) return false; + put( (uint8_t)olc::AYT ); + return true; +} + +bool olc::WriterBase::ready() { + if (spaceLeft() < 1) return false; + put( (uint8_t)olc::READY ); + return true; +} + + +void olc::WriterBase::setData(uint8_t *aData, int aCapacity) { + assert(aCapacity > 0); + assert(aData != 0); + mPlayHead = 0; + mCapacity = aCapacity; + mData = aData; +} + + +