FutabaVfd.h
author sl
Wed, 21 May 2014 22:55:14 +0200
changeset 11 11a0e8a2346e
parent 10 4c3d32f38c09
permissions -rw-r--r--
Adding very basic code for testing our brand new Futaba VFD class without
breaking generic code.
     1 
     2 
     3 #ifndef FUTABA_VFD_H
     4 #define FUTABA_VFD_H
     5 
     6 #include "hidapi.h"
     7 
     8 //This was computed from our number of pixels as follow 256x64/8/64 = 32 + 1 = 33
     9 //+1 was added for our header
    10 const int KFutabaMaxCommandOutputReport = 33;
    11 //TODO: Get ride of that constant once we figure out a way to get it from hidapi
    12 const int KFutabaMaxHidReportSize = 65;
    13 
    14 const int KHidReportIdIndex=0;
    15 const int KFutabaHidReportSizeIndex=1;
    16 //Define Futaba vendor ID to filter our list of device
    17 const unsigned short KFutabaVendorId = 0x1008;
    18 const unsigned short KFutabaProductIdGP1212A01A = 0x100C;
    19 const unsigned short KFutabaProductIdGP1212A02A = 0x1013; //Or is it 0x1015
    20 
    21 
    22 //typedef struct hid_device_info HidDeviceInfo;
    23 
    24 /**
    25 TODO: move to another header
    26 */
    27 template <int S>
    28 class HidReport
    29 	{
    30 public:
    31 	HidReport(){Reset();};
    32 	void Reset();
    33 	inline unsigned char& operator[](int aIndex){return iBuffer[aIndex];}
    34 	const unsigned char* Buffer() const {return iBuffer;};
    35 	unsigned char* Buffer() {return iBuffer;};
    36 protected:
    37 	unsigned char iBuffer[S];
    38 	};
    39 
    40 template <int S>
    41 void HidReport<S>::Reset()
    42     {
    43     memset(iBuffer,0,sizeof(iBuffer));
    44     }
    45 
    46 /**
    47 TODO: move to another header
    48 */
    49 class HidDevice
    50 	{
    51 public:
    52 	int Open(const char* aPath);
    53 	int Open(unsigned short aVendorId, unsigned short aProductId, const wchar_t* aSerialNumber);
    54 	void Close();
    55 	//
    56 	int SetNonBlocking(int aNonBlocking);
    57 	//
    58 	template<int S>
    59 	int Write(const HidReport<S>& aOutputReport);
    60 	//
    61 	const wchar_t* Error();
    62 
    63 	
    64 
    65 private:
    66 	///Our USB HID device
    67 	hid_device* iHidDevice;
    68 	};
    69 
    70 
    71 /**
    72 */
    73 template<int S>
    74 int HidDevice::Write(const HidReport<S>& aOutputReport)
    75 	{
    76 	return hid_write(iHidDevice,aOutputReport.Buffer(),S);
    77 	}
    78 
    79 
    80 /**
    81 */
    82 class FutabaVfdReport: public HidReport<KFutabaMaxHidReportSize>
    83 	{
    84 	
    85 private:
    86 	
    87 	};
    88 
    89 
    90 
    91 /**
    92 Define a generic Futaba VFD command.
    93 */
    94 class FutabaVfdCommand
    95     {
    96 public:
    97     FutabaVfdCommand();
    98     ~FutabaVfdCommand();
    99     //
   100     //void Create(int aMaxSize);
   101     //void Delete();
   102 
   103     //inline unsigned char& operator[](int aIndex){return iBuffer[aIndex];}
   104 
   105     void Reset();
   106 
   107 private:
   108     //unsigned char* iBuffer;
   109     FutabaVfdReport iReports[KFutabaMaxCommandOutputReport];
   110     int iSize;
   111     int iMaxSize;
   112     };
   113 
   114 /**
   115 */
   116 class FutabaVfd : public HidDevice
   117 	{
   118 public:
   119 	virtual int MinBrightness()=0;
   120 	virtual int MaxBrightness()=0;
   121 	virtual void SetBrightness(int aBrightness)=0;
   122 	virtual void Clear()=0;
   123 	};
   124 
   125 
   126 /**
   127 */
   128 class FutabaGraphicVfd : public FutabaVfd
   129 	{
   130 public:
   131 	virtual int WidthInPixels()=0;
   132 	virtual int HeightInPixels()=0;
   133 	virtual void SetPixel(int aX, int aY, bool aOn)=0;
   134 	virtual void SetAllPixels(bool aOn)=0;
   135 
   136 	};
   137 
   138 /**
   139 Common functionality between GP1212A01A and GP1212A02A
   140 */
   141 class GP1212XXXX : public FutabaGraphicVfd
   142 	{
   143 public:
   144 	//From FutabaVfd
   145 	virtual int MinBrightness(){return 0;};
   146 	virtual int MaxBrightness(){return 5;};
   147 	};
   148 
   149 /**
   150 GP1212A01A is a graphic display module using a FUTABA 256x64dots VFD.
   151 The module do not include character ROM, the customer will compile the character
   152 by themselves (from main system).
   153 */
   154 class GP1212A01A : public GP1212XXXX
   155 	{
   156 public:
   157 	int Open();
   158 	//From FutabaGraphicVfd
   159 	virtual int WidthInPixels(){return 256;};
   160 	virtual int HeightInPixels(){return 64;};
   161 	virtual void SetPixel(int aX, int aY, bool aOn);
   162 	virtual void SetAllPixels(bool aOn);
   163 	//From FutabaVfd
   164 	virtual void SetBrightness(int aBrightness);
   165 	virtual void Clear();
   166 	//
   167 	void SetPixelBlock(int aX, int aY, int aHeight, int aSize, unsigned char aValue);
   168 
   169 private:
   170 	///
   171 	//FutabaVfdReport iReport;
   172 	///
   173 	unsigned char iPixelBuffer[256][128];
   174 	};
   175 
   176 
   177 #endif