Homologation Cachan
Fork of TPixy-Interface by
Diff: TPixyInterface.h
- Revision:
- 0:ef0e3c67dc5b
- Child:
- 3:66df7d295245
diff -r 000000000000 -r ef0e3c67dc5b TPixyInterface.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TPixyInterface.h Mon Mar 14 00:35:23 2016 +0000 @@ -0,0 +1,100 @@ +// +// begin license header +// +// This file is part of Pixy CMUcam5 or "Pixy" for short +// +// All Pixy source code is provided under the terms of the +// GNU General Public License v2 (http://www.gnu.org/licenses/gpl-2.0.html). +// Those wishing to use Pixy source code, software and/or +// technologies under different licensing terms should contact us at +// cmucam@cs.cmu.edu. Such licensing terms are available for +// all portions of the Pixy codebase presented here. +// +// end license header +// +// This file is for defining the SPI-related classes. It's called Pixy.h instead +// of Pixy_SPI.h because it's the default/recommended communication method +// with Arduino. This class assumes you are using the ICSP connector to talk to +// Pixy from your Arduino. For more information go to: +// +//http://cmucam.org/projects/cmucam5/wiki/Hooking_up_Pixy_to_a_Microcontroller_(like_an_Arduino) +// + +#ifndef _TPIXY_INTERFACE_H +#define _TPIXY_INTERFACE_H + +#include "TPixy.h" + +#define PIXY_SYNC_BYTE 0x5a +#define PIXY_SYNC_BYTE_DATA 0x5b +#define PIXY_BUF_SIZE 16 + +class TPixyInterface +{ +public: + TPixyInterface() {} + virtual void init() = 0; + virtual int8_t send(uint8_t *data, uint8_t len) = 0; + virtual void setArg(uint16_t arg) = 0; + virtual uint16_t getWord() = 0; + virtual uint8_t getByte() = 0; +}; + + +template <class BufType> class CircularQ +{ +public: + BufType buf[PIXY_BUF_SIZE]; + uint8_t len; + uint8_t writeIndex; + uint8_t readIndex; + + CircularQ(); + bool read(BufType *c); + uint8_t freeLen(); + bool write(BufType c); +}; + +class PixyInterfaceSPI : TPixyInterface +{ +public: + SPI* spi; + PixyInterfaceSPI(SPI* interface); + virtual void init(); + virtual uint16_t getWord(); + virtual uint8_t getByte(); + virtual int8_t send(uint8_t *data, uint8_t len); + virtual void setArg(uint16_t arg); + +private: + // we need a little circular queues for both directions + CircularQ<uint8_t> outQ; + CircularQ<uint16_t> inQ; + + uint16_t getWordHw(); + void flushSend(); +}; + + +/* +class PixyInterfaceI2C : TPixyInterface +{ +public: + SPI* spi; + PixyInterfaceI2C(I2C* interface); + virtual void init(); + virtual uint16_t getWord(); + virtual uint8_t getByte(); + virtual int8_t send(uint8_t *data, uint8_t len); + virtual void setArg(uint16_t arg); + +private: + // we need a little circular queues for both directions + CircularQ<uint8_t> outQ; + CircularQ<uint16_t> inQ; + + uint16_t getWordHw(); + void flushSend(); +};*/ + +#endif