src/FutabaVfd.cpp
author sl
Thu, 22 May 2014 07:50:02 +0200
changeset 14 4a5538e0ccbf
parent 13 69f1fcfdf6a5
child 18 14662967f913
permissions -rw-r--r--
Moving base HID classes into separate files.
     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 	}
   125 
   126 /**
   127 Set the defined pixel block to the given value.
   128 @param X coordinate of our pixel block starting point.
   129 @param Y coordinate of our pixel block starting point.
   130 @param The height of our pixel block.
   131 @param The size of our pixel data. Number of pixels divided by 8.
   132 @param The value set to 8 pixels.
   133 */
   134 void GP1212A01A::SetPixelBlock(int aX, int aY, int aHeight, int aSize, unsigned char aValue)
   135 	{
   136 	//Size must be 63 or below
   137 	FutabaVfdReport report;
   138 	report[0]=0x00; //Report ID
   139 	report[1]=0x08+aSize; //Report length
   140 	report[2]=0x1B; //
   141 	report[3]=0x5B; //
   142 	report[4]=0xF0; //
   143 	report[5]=aX; //X
   144 	report[6]=aY; //Y
   145 	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.
   146 	report[8]=0x00; //Size of pixel data in bytes (MSB)
   147 	report[9]=aSize; //Size of pixel data in bytes (LSB)
   148 	memset(report.Buffer()+10, aValue, aSize);
   149 	//iOutputReportBuffer[10]=aValue; //Pixel data
   150 	Write(report);
   151 	}
   152 
   153 
   154 /**
   155 */
   156 void GP1212A01A::Clear()
   157 	{
   158 	FutabaVfdReport report;
   159 	report[0]=0x00; //Report ID
   160 	report[1]=0x04; //Report length
   161 	report[2]=0x1B; //
   162 	report[3]=0x5B; //
   163 	report[4]=0x32; //
   164 	report[5]=0x4A; //
   165 	Write(report);
   166 	}