src/FutabaVfd.cpp
author sl
Thu, 22 May 2014 11:29:23 +0200
changeset 19 0d9d062609eb
parent 18 14662967f913
child 20 23cacc1d17a3
permissions -rw-r--r--
Adding Futaba GP1212A01A read requests.
     1 
     2 #include "FutabaVfd.h"
     3 //#include <stdlib.h>
     4 #include <string.h>
     5 
     6 
     7 //
     8 //
     9 //
    10 
    11 
    12 
    13 
    14 
    15 //
    16 //
    17 //
    18 
    19 FutabaVfdCommand::FutabaVfdCommand():/*iBuffer(NULL),*/iSize(0),iMaxSize(0)
    20     {
    21     }
    22 
    23 FutabaVfdCommand::~FutabaVfdCommand()
    24     {
    25     //Delete();
    26     }
    27 
    28 
    29 /**
    30 
    31 */
    32 void FutabaVfdCommand::Reset()
    33     {
    34     memset(iReports,0,sizeof(iReports));
    35     }
    36 
    37 
    38 
    39 /**
    40 
    41 */
    42 /*
    43 void FutabaVfdCommand::Create(int aMaxSize)
    44     {
    45     iBuffer=new unsigned char[aMaxSize];
    46     if (iBuffer)
    47         {
    48         iMaxSize = aMaxSize;
    49         iSize = 0;
    50         }
    51     }
    52 */
    53 
    54 /**
    55 
    56 */
    57 /*
    58 void FutabaVfdCommand::Delete()
    59 {
    60     delete[] iBuffer;
    61     iBuffer = NULL;
    62     iMaxSize = 0;
    63     iSize = 0;
    64 }
    65 */
    66 
    67 
    68 
    69 
    70 //
    71 // class GP1212A01A
    72 //
    73 
    74 int GP1212A01A::Open()
    75 	{
    76 	int success = HidDevice::Open(KFutabaVendorId,KFutabaProductIdGP1212A01A,NULL);
    77 	if (success)
    78 		{
    79 		SetNonBlocking(1);
    80 		}
    81 	return success;
    82 	}
    83 
    84 /**
    85 */
    86 void GP1212A01A::SetPixel(int aX, int aY, bool aOn)
    87 	{
    88 	//Just specify a one pixel block
    89 	SetPixelBlock(aX,aY,0x00,0x01,aOn);
    90 	}
    91 
    92 /**
    93 */
    94 void GP1212A01A::SetAllPixels(bool aOn)
    95 	{
    96 	//One pixel at a time
    97 	/*
    98 	for (int i=0;i<256;i++)
    99 		{
   100 		for (int j=0;j<64;j++)
   101 			{
   102 			SetPixel(i,j,0x01);
   103 			}
   104 		}
   105 	*/
   106 
   107 	//16x16=256 pixels at a time goes much faster
   108 	//TODO: use even larger blocks
   109 	for (int i=0;i<256;i+=16)
   110 		{
   111 		for (int j=0;j<64;j+=16)
   112 			{
   113 			SetPixelBlock(i,j,15,32,(aOn?0xFF:0x00));
   114 			//FXThread::sleep(1000000000);
   115 			}
   116 		}
   117 
   118 	}
   119 
   120 /**
   121 */
   122 void GP1212A01A::SetBrightness(int aBrightness)
   123     {
   124 	if (aBrightness<MinBrightness()||aBrightness>MaxBrightness())
   125         {
   126         //Brightness out of range.
   127         //Just ignore that request.
   128         return;
   129         }
   130 
   131     FutabaVfdReport report;
   132     report[0]=0x00; //Report ID
   133     report[1]=0x06; //Report size
   134     report[2]=0x1B; //Command ID
   135     report[3]=0x5C; //Command ID
   136     report[4]=0x3F; //Command ID
   137     report[5]=0x4C; //Command ID
   138     report[6]=0x44; //Command ID
   139     report[7]=0x30+aBrightness; //Brightness level
   140     Write(report);
   141 
   142 	}
   143 
   144 /**
   145 Set the defined pixel block to the given value.
   146 @param X coordinate of our pixel block starting point.
   147 @param Y coordinate of our pixel block starting point.
   148 @param The height of our pixel block.
   149 @param The size of our pixel data. Number of pixels divided by 8.
   150 @param The value set to 8 pixels.
   151 */
   152 void GP1212A01A::SetPixelBlock(int aX, int aY, int aHeight, int aSize, unsigned char aValue)
   153 	{
   154 	//Size must be 63 or below
   155 	FutabaVfdReport report;
   156 	report[0]=0x00; //Report ID
   157 	report[1]=0x08+aSize; //Report length
   158 	report[2]=0x1B; //
   159 	report[3]=0x5B; //
   160 	report[4]=0xF0; //
   161 	report[5]=aX; //X
   162 	report[6]=aY; //Y
   163 	report[7]=aHeight; //Y length before return. Though outside the specs, setting this to zero apparently allows us to modify a single pixel without touching any other.
   164 	report[8]=0x00; //Size of pixel data in bytes (MSB)
   165 	report[9]=aSize; //Size of pixel data in bytes (LSB)
   166 	memset(report.Buffer()+10, aValue, aSize);
   167 	//iOutputReportBuffer[10]=aValue; //Pixel data
   168 	Write(report);
   169 	}
   170 
   171 
   172 /**
   173 Clear our display's screen.
   174 */
   175 void GP1212A01A::Clear()
   176 	{
   177     //Send Clear display command
   178 	FutabaVfdReport report;
   179 	report[0]=0x00; //Report ID
   180 	report[1]=0x04; //Report length
   181 	report[2]=0x1B; //Command ID
   182 	report[3]=0x5B; //Command ID
   183 	report[4]=0x32; //Command ID
   184 	report[5]=0x4A; //Command ID
   185 	Write(report);
   186 	}
   187 
   188 /**
   189 */
   190 void GP1212A01A::RequestId()
   191     {
   192     //1BH,5BH,63H,49H,44H
   193     //Send Read ID command
   194     FutabaVfdReport report;
   195     report[0]=0x00; //Report ID
   196     report[1]=0x05; //Report length
   197     report[2]=0x1B; //Command ID
   198     report[3]=0x5B; //Command ID
   199     report[4]=0x63; //Command ID
   200     report[5]=0x49; //Command ID
   201     report[6]=0x44; //Command ID
   202     Write(report);
   203     }
   204 
   205 /**
   206 */
   207 void GP1212A01A::RequestFirmwareRevision()
   208     {
   209     //1BH,5BH,63H,46H,52H
   210     //Send Software Revision Read Command
   211     FutabaVfdReport report;
   212     report[0]=0x00; //Report ID
   213     report[1]=0x05; //Report length
   214     report[2]=0x1B; //Command ID
   215     report[3]=0x5B; //Command ID
   216     report[4]=0x63; //Command ID
   217     report[5]=0x46; //Command ID
   218     report[6]=0x52; //Command ID
   219     Write(report);
   220     }
   221 
   222 /**
   223 */
   224 void GP1212A01A::RequestPowerSupplyStatus()
   225     {
   226     //1BH,5BH,63H,50H,4DH
   227     //Send Power Suppply Monitor Command
   228     FutabaVfdReport report;
   229     report[0]=0x00; //Report ID
   230     report[1]=0x05; //Report length
   231     report[2]=0x1B; //Command ID
   232     report[3]=0x5B; //Command ID
   233     report[4]=0x63; //Command ID
   234     report[5]=0x50; //Command ID
   235     report[6]=0x4D; //Command ID
   236     Write(report);
   237     }