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