inc/FutabaVfd.h
author sl
Thu, 22 May 2014 14:57:11 +0200
changeset 21 7d89d719583e
parent 20 23cacc1d17a3
child 22 efa6ff02287c
permissions -rw-r--r--
Adding support for setting GP1212A01A display position.
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
sl@10
    34
//typedef struct hid_device_info HidDeviceInfo;
sl@10
    35
sl@10
    36
/**
sl@20
    37
Define a Futaba HID report.
sl@10
    38
*/
sl@10
    39
class FutabaVfdReport: public HidReport<KFutabaMaxHidReportSize>
sl@10
    40
	{
sl@13
    41
sl@10
    42
private:
sl@13
    43
sl@10
    44
	};
sl@10
    45
sl@9
    46
sl@9
    47
sl@9
    48
/**
sl@9
    49
Define a generic Futaba VFD command.
sl@9
    50
*/
sl@9
    51
class FutabaVfdCommand
sl@9
    52
    {
sl@9
    53
public:
sl@9
    54
    FutabaVfdCommand();
sl@9
    55
    ~FutabaVfdCommand();
sl@9
    56
    //
sl@9
    57
    //void Create(int aMaxSize);
sl@9
    58
    //void Delete();
sl@9
    59
sl@9
    60
    //inline unsigned char& operator[](int aIndex){return iBuffer[aIndex];}
sl@9
    61
sl@9
    62
    void Reset();
sl@9
    63
sl@9
    64
private:
sl@9
    65
    //unsigned char* iBuffer;
sl@10
    66
    FutabaVfdReport iReports[KFutabaMaxCommandOutputReport];
sl@9
    67
    int iSize;
sl@9
    68
    int iMaxSize;
sl@9
    69
    };
sl@9
    70
sl@10
    71
/**
sl@10
    72
*/
sl@11
    73
class FutabaVfd : public HidDevice
sl@10
    74
	{
sl@10
    75
public:
sl@10
    76
	virtual int MinBrightness()=0;
sl@10
    77
	virtual int MaxBrightness()=0;
sl@10
    78
	virtual void SetBrightness(int aBrightness)=0;
sl@10
    79
	virtual void Clear()=0;
sl@10
    80
	};
sl@10
    81
sl@10
    82
sl@10
    83
/**
sl@10
    84
*/
sl@10
    85
class FutabaGraphicVfd : public FutabaVfd
sl@10
    86
	{
sl@10
    87
public:
sl@10
    88
	virtual int WidthInPixels()=0;
sl@10
    89
	virtual int HeightInPixels()=0;
sl@10
    90
	virtual void SetPixel(int aX, int aY, bool aOn)=0;
sl@10
    91
	virtual void SetAllPixels(bool aOn)=0;
sl@10
    92
	};
sl@10
    93
sl@10
    94
/**
sl@10
    95
Common functionality between GP1212A01A and GP1212A02A
sl@10
    96
*/
sl@10
    97
class GP1212XXXX : public FutabaGraphicVfd
sl@10
    98
	{
sl@10
    99
public:
sl@10
   100
	//From FutabaVfd
sl@10
   101
	virtual int MinBrightness(){return 0;};
sl@10
   102
	virtual int MaxBrightness(){return 5;};
sl@10
   103
	};
sl@10
   104
sl@10
   105
/**
sl@10
   106
GP1212A01A is a graphic display module using a FUTABA 256x64dots VFD.
sl@10
   107
The module do not include character ROM, the customer will compile the character
sl@10
   108
by themselves (from main system).
sl@10
   109
*/
sl@10
   110
class GP1212A01A : public GP1212XXXX
sl@10
   111
	{
sl@10
   112
public:
sl@21
   113
    enum DW
sl@21
   114
    {
sl@21
   115
        DW1=12,
sl@21
   116
        DW2=13
sl@21
   117
    };
sl@21
   118
sl@10
   119
	int Open();
sl@10
   120
	//From FutabaGraphicVfd
sl@10
   121
	virtual int WidthInPixels(){return 256;};
sl@10
   122
	virtual int HeightInPixels(){return 64;};
sl@10
   123
	virtual void SetPixel(int aX, int aY, bool aOn);
sl@10
   124
	virtual void SetAllPixels(bool aOn);
sl@10
   125
	//From FutabaVfd
sl@10
   126
	virtual void SetBrightness(int aBrightness);
sl@10
   127
	virtual void Clear();
sl@19
   128
sl@19
   129
	//Specific to GP1212A01A
sl@10
   130
	void SetPixelBlock(int aX, int aY, int aHeight, int aSize, unsigned char aValue);
sl@20
   131
    void SetPixelBlock(int aX, int aY, int aHeight, int aSize, unsigned char* aPixels);
sl@19
   132
    //
sl@21
   133
    void SetDisplayPosition(DW aDw,int aX, int aY);
sl@21
   134
    //
sl@19
   135
    void RequestId();
sl@19
   136
    void RequestFirmwareRevision();
sl@19
   137
    void RequestPowerSupplyStatus();
sl@10
   138
private:
sl@10
   139
	///
sl@10
   140
	//FutabaVfdReport iReport;
sl@10
   141
	///
sl@10
   142
	unsigned char iPixelBuffer[256][128];
sl@10
   143
	};
sl@10
   144
sl@9
   145
sl@9
   146
#endif