inc/FutabaVfd.h
author sl
Thu, 22 May 2014 21:32:45 +0200
changeset 23 d4e164906a1b
parent 22 efa6ff02287c
child 25 233a997193b8
permissions -rw-r--r--
Fixing our multiple report pixel transfer.
Implementing support for off screen mode which is now the default.
On screen mode is there for debug pruposes.
sl@20
     1
//
sl@20
     2
//
sl@20
     3
//
sl@9
     4
sl@9
     5
#ifndef FUTABA_VFD_H
sl@9
     6
#define FUTABA_VFD_H
sl@9
     7
sl@9
     8
#include "hidapi.h"
sl@14
     9
#include "HidDevice.h"
sl@9
    10
sl@20
    11
#ifndef MIN
sl@20
    12
#define MIN(a,b) (((a)<(b))?(a):(b))
sl@20
    13
#endif
sl@20
    14
sl@20
    15
#ifndef MAX
sl@20
    16
#define MAX(a,b) (((a)>(b))?(a):(b))
sl@20
    17
#endif
sl@20
    18
sl@20
    19
sl@9
    20
//This was computed from our number of pixels as follow 256x64/8/64 = 32 + 1 = 33
sl@9
    21
//+1 was added for our header
sl@9
    22
const int KFutabaMaxCommandOutputReport = 33;
sl@9
    23
//TODO: Get ride of that constant once we figure out a way to get it from hidapi
sl@10
    24
const int KFutabaMaxHidReportSize = 65;
sl@10
    25
sl@10
    26
const int KHidReportIdIndex=0;
sl@10
    27
const int KFutabaHidReportSizeIndex=1;
sl@10
    28
//Define Futaba vendor ID to filter our list of device
sl@10
    29
const unsigned short KFutabaVendorId = 0x1008;
sl@10
    30
const unsigned short KFutabaProductIdGP1212A01A = 0x100C;
sl@10
    31
const unsigned short KFutabaProductIdGP1212A02A = 0x1013; //Or is it 0x1015
sl@10
    32
sl@10
    33
//typedef struct hid_device_info HidDeviceInfo;
sl@10
    34
sl@10
    35
/**
sl@20
    36
Define a Futaba HID report.
sl@10
    37
*/
sl@10
    38
class FutabaVfdReport: public HidReport<KFutabaMaxHidReportSize>
sl@10
    39
	{
sl@13
    40
sl@10
    41
private:
sl@13
    42
sl@10
    43
	};
sl@10
    44
sl@9
    45
sl@9
    46
/**
sl@9
    47
Define a generic Futaba VFD command.
sl@9
    48
*/
sl@9
    49
class FutabaVfdCommand
sl@9
    50
    {
sl@9
    51
public:
sl@9
    52
    FutabaVfdCommand();
sl@9
    53
    ~FutabaVfdCommand();
sl@9
    54
    //
sl@9
    55
    //void Create(int aMaxSize);
sl@9
    56
    //void Delete();
sl@9
    57
sl@9
    58
    //inline unsigned char& operator[](int aIndex){return iBuffer[aIndex];}
sl@9
    59
sl@9
    60
    void Reset();
sl@9
    61
sl@9
    62
private:
sl@9
    63
    //unsigned char* iBuffer;
sl@10
    64
    FutabaVfdReport iReports[KFutabaMaxCommandOutputReport];
sl@9
    65
    int iSize;
sl@9
    66
    int iMaxSize;
sl@9
    67
    };
sl@9
    68
sl@10
    69
/**
sl@10
    70
*/
sl@11
    71
class FutabaVfd : public HidDevice
sl@10
    72
	{
sl@10
    73
public:
sl@23
    74
	virtual int MinBrightness() const=0;
sl@23
    75
	virtual int MaxBrightness() const=0;
sl@10
    76
	virtual void SetBrightness(int aBrightness)=0;
sl@10
    77
	virtual void Clear()=0;
sl@10
    78
	};
sl@10
    79
sl@10
    80
sl@10
    81
/**
sl@10
    82
*/
sl@10
    83
class FutabaGraphicVfd : public FutabaVfd
sl@10
    84
	{
sl@10
    85
public:
sl@23
    86
	virtual int WidthInPixels() const=0;
sl@23
    87
	virtual int HeightInPixels() const=0;
sl@23
    88
	virtual void SetPixel(unsigned char aX, unsigned char aY, bool aOn)=0;
sl@23
    89
	virtual void SetAllPixels(unsigned char aOn)=0;
sl@23
    90
	virtual int FrameBufferSizeInBytes() const=0;
sl@10
    91
	};
sl@10
    92
sl@10
    93
/**
sl@10
    94
Common functionality between GP1212A01A and GP1212A02A
sl@10
    95
*/
sl@10
    96
class GP1212XXXX : public FutabaGraphicVfd
sl@10
    97
	{
sl@10
    98
public:
sl@10
    99
	//From FutabaVfd
sl@23
   100
	virtual int MinBrightness() const {return 0;};
sl@23
   101
	virtual int MaxBrightness() const {return 5;};
sl@10
   102
	};
sl@10
   103
sl@10
   104
/**
sl@10
   105
GP1212A01A is a graphic display module using a FUTABA 256x64dots VFD.
sl@10
   106
The module do not include character ROM, the customer will compile the character
sl@10
   107
by themselves (from main system).
sl@10
   108
*/
sl@10
   109
class GP1212A01A : public GP1212XXXX
sl@10
   110
	{
sl@10
   111
public:
sl@23
   112
	GP1212A01A();
sl@23
   113
	//
sl@10
   114
	int Open();
sl@10
   115
	//From FutabaGraphicVfd
sl@23
   116
	virtual int WidthInPixels() const {return 256;};
sl@23
   117
	virtual int HeightInPixels() const {return 64;};
sl@23
   118
	virtual void SetPixel(unsigned char aX, unsigned char aY, bool aOn);
sl@23
   119
	virtual void SetAllPixels(unsigned char aPattern);
sl@23
   120
	virtual int FrameBufferSizeInBytes() const {return 2048;}; //256*64/8
sl@10
   121
	//From FutabaVfd
sl@10
   122
	virtual void SetBrightness(int aBrightness);
sl@10
   123
	virtual void Clear();
sl@19
   124
sl@19
   125
	//Specific to GP1212A01A
sl@23
   126
	void SetPixelBlock(unsigned char aX, unsigned char aY, int aHeight, int aSize, unsigned char aValue);
sl@23
   127
    void SetPixelBlock(unsigned char aX, unsigned char aY, int aHeight, int aSize, unsigned char* aPixels);
sl@19
   128
    //
sl@23
   129
	void SetDisplayPosition(unsigned char aX, unsigned char aY);
sl@23
   130
	void SwapBuffers();
sl@21
   131
    //
sl@19
   132
    void RequestId();
sl@19
   133
    void RequestFirmwareRevision();
sl@19
   134
    void RequestPowerSupplyStatus();
sl@23
   135
	//
sl@23
   136
	void ToggleOffScreenMode();
sl@23
   137
	bool OffScreenMode() const {return iOffScreenMode;};
sl@23
   138
	
sl@22
   139
private:
sl@22
   140
	enum DW
sl@22
   141
		{
sl@22
   142
        DW1=0xC0,
sl@22
   143
        DW2=0xD0
sl@22
   144
		};
sl@22
   145
sl@23
   146
	void SetDisplayPosition(DW aDw,unsigned char aX, unsigned char aY);
sl@23
   147
	unsigned char OffScreenY() const;
sl@23
   148
	void SendClearCommand();
sl@23
   149
	void OffScreenTranslation(unsigned char& aX, unsigned char& aY);
sl@22
   150
sl@10
   151
private:
sl@23
   152
	unsigned char iDisplayPositionX;
sl@23
   153
	unsigned char iDisplayPositionY;
sl@23
   154
	///Off screen mode is the recommended default settings to avoid tearing.
sl@23
   155
	///Though turning it off can be useful for debugging
sl@23
   156
	bool iOffScreenMode;
sl@10
   157
	///
sl@10
   158
	//FutabaVfdReport iReport;
sl@10
   159
	///
sl@23
   160
	//unsigned char iPixelBuffer[256][128];
sl@10
   161
	};
sl@10
   162
sl@9
   163
sl@9
   164
#endif