PlayerBase.h

Committer:
daan
Date:
2011-12-22
Revision:
2:ce4c7e5ab241
Parent:
1:578d6bbe9f09

File content as of revision 2:ce4c7e5ab241:

#ifndef PLAYER_BASE_H
#define PLAYER_BASE_H

#include "stdint.h"

namespace olc {
  
  class PlayerBase
  {
  public:
    PlayerBase();
    virtual void setGalvo(uint16_t x, uint16_t y);
    virtual void setLaserPower(uint16_t power);  
    virtual void wait(uint16_t ms);
    virtual void reportBufferInSize() {};

    // this is for scanning to calibrate camera.
    virtual void calibrationScan() {};
    virtual void point(uint16_t x, uint16_t y) {};

    // this is for color scanning
    virtual void readColor() {};
    virtual void setLaserPowerRgb(uint8_t red, uint8_t green, uint8_t blue) {};

    virtual void ready() {};
    virtual void areYouThere() {};
    virtual void message(int aLevel, int aLength, char *aString) {};

    
    inline void penDown() {
      mPenDown = true;
      setLaserPower(mLaserPower);
    }
    inline void penUp() {
      mPenDown = false;
      setLaserPower(0);
    }
    
    void setData(uint8_t *data, int size);
    void setStepSize(uint16_t s) { mStepSize = s; };
    uint16_t getStepSize() { return mStepSize; };
    void setDelay(uint16_t ms) { mDelay = ms; };
    void reset();
    bool hasNext();
    bool playOne();
    
    uint16_t getX() { return mGalvoX; };
    uint16_t getY() { return mGalvoY; };
    
  protected:  
    void rasterLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, int step=1);
    
    
    inline virtual int bytesLeft() {
      return mSize - mPlayHead;
    }
    inline virtual uint8_t get() {
      mPlayHead++;    
      return mData[mPlayHead-1];
    }
    
    // TODO(dps): take care of endian
    inline uint16_t decodeU16() {
      uint16_t i;
      i =  (uint16_t)get() << 8;
      i |= (uint16_t)get();
      return i;    
    }
    
    
    uint8_t *mData;
    int mSize;
    int mPlayHead;
    
    bool mPenDown;
    uint16_t mLaserPower;
    uint16_t mGalvoX;
    uint16_t mGalvoY;
    uint16_t mDelay;
    uint16_t mStepSize;
  };
  
  
}; // end namespace ol

#endif // PLAYER_BASE_H