Here is a portion of the C# code I am using to upload a simple animation:
Code: Select all
public bool UploadEightPointOneAnimation(UInt16 id, UInt32 size, LinkedList<byte> data)
{
float completion = 1;
int percentage = 0;
float dataLength = data.Count();
Write(254, 92, 4); //Animation upload command
Write(id); //Animation ID, 2 bytes
Write(size); //Animation size, 4 bytes, LSB first
if ((byte)Read() != 1) //Check that file will fit
return false;
foreach (byte element in data) //Begin upload protocol (non-Xmodem)
{
percentage = (int)((completion / dataLength) * 100);
Console.Write("\r{0}% ", percentage);
completion = completion + 1;
Write(element);
if ((byte)Read() == element)
Write(1); //Confirm echo matches transmitted data
else
{
Write(8); //Abort upload for display and host if echo does not match
return false;
}
}
return true;
}
And this is the code which contains the Animation data:
Code: Select all
public static void HardCodedAnimation(Display display)
{
UInt16 FileID = 25;
UInt32 size = 67; //Total bytes of animationFile
float dataLength = 0;
LinkedList<byte> AnimationData = new LinkedList<byte>(new byte[0]);
//ANIMATION DATA BYTES
Console.WriteLine("Populating AnimationData List");
AnimationData.AddLast(9);//Total Frames
AnimationData.AddLast(0);//Total Frames
AnimationData.AddLast(41);//Offsets1 (Frame 1 header is the 41st byte in the list)
AnimationData.AddLast(0);//Offsets1
AnimationData.AddLast(0);//Offsets1
AnimationData.AddLast(0);//Offsets1
AnimationData.AddLast(44);//Offsets2 (Frame 2 header is the 44th byte in the list)
AnimationData.AddLast(0);//Offsets2
AnimationData.AddLast(0);//Offsets2
AnimationData.AddLast(0);//Offsets2
AnimationData.AddLast(47);//Offsets3
AnimationData.AddLast(0);//Offsets3
AnimationData.AddLast(0);//Offsets3
AnimationData.AddLast(0);//Offsets3
AnimationData.AddLast(50);//Offsets4
AnimationData.AddLast(0);//Offsets4
AnimationData.AddLast(0);//Offsets4
AnimationData.AddLast(0);//Offsets4
AnimationData.AddLast(53);//Offsets5
AnimationData.AddLast(0);//Offsets5
AnimationData.AddLast(0);//Offsets5
AnimationData.AddLast(0);//Offsets5
AnimationData.AddLast(56);//Offsets6
AnimationData.AddLast(0);//Offsets6
AnimationData.AddLast(0);//Offsets6
AnimationData.AddLast(0);//Offsets6
AnimationData.AddLast(59);//Offsets7
AnimationData.AddLast(0);//Offsets7
AnimationData.AddLast(0);//Offsets7
AnimationData.AddLast(0);//Offsets7
AnimationData.AddLast(62);//Offsets8
AnimationData.AddLast(0);//Offsets8
AnimationData.AddLast(0);//Offsets8
AnimationData.AddLast(0);//Offsets8
AnimationData.AddLast(65);//Offsets9
AnimationData.AddLast(0);//Offsets9
AnimationData.AddLast(0);//Offsets9
AnimationData.AddLast(0);//Offsets9
AnimationData.AddLast(5);//Times1
AnimationData.AddLast(0);//Times1
AnimationData.AddLast(8);//Header1 X
AnimationData.AddLast(1);//Header1 Y
AnimationData.AddLast(255);//Bitmap1
AnimationData.AddLast(8);//Header2 X
AnimationData.AddLast(1);//Header2 Y
AnimationData.AddLast(254);//Bitmap2
AnimationData.AddLast(8);//Header3 X
AnimationData.AddLast(1);//Header3 Y
AnimationData.AddLast(252);//Bitmap3
AnimationData.AddLast(8);//Header4 X
AnimationData.AddLast(1);//Header4 Y
AnimationData.AddLast(248);//Bitmap4
AnimationData.AddLast(8);//Header5 X
AnimationData.AddLast(1);//Header5 Y
AnimationData.AddLast(240);//Bitmap5
AnimationData.AddLast(8);//Header6 X
AnimationData.AddLast(1);//Header6 Y
AnimationData.AddLast(224);//Bitmap6
AnimationData.AddLast(8);//Header7 X
AnimationData.AddLast(1);//Header7 Y
AnimationData.AddLast(192);//Bitmap7
AnimationData.AddLast(8);//Header8 X
AnimationData.AddLast(1);//Header8 Y
AnimationData.AddLast(128);//Bitmap8
AnimationData.AddLast(8);//Header9 X
AnimationData.AddLast(1);//Header9 Y
AnimationData.AddLast(0);//Bitmap9
dataLength = AnimationData.Count();
Console.WriteLine("AnimationData filled with {0} nodes", dataLength);
if( display.UploadEightPointOneAnimation(FileID, size, AnimationData))
Console.WriteLine("Success!");
else
Console.WriteLine("Upload Failed");
//DISPLAY ANIMATION
display.Write(254, 193, (byte)FileID, 200, 100);
display.Write(254, 194, (byte)FileID, 1);
Console.WriteLine("Play animation command sent!!");
}
I formatted the animation file this way based on what the manual said, and the code is excecuting, but the animation is not playing.
GLX240128-25 (Rev2.1) Manual
Page 36
Animation File Format:
Total Frames = Two bytes representing the total number of frames in the animation
Offsets = One entry for each frame, 4 bytes indicating the start of the bitmap file.
Times = Two bytes for each frame representing the length of time (100ms) for which it is displayed.
Header 1 = Two bytes, one representing the width and one the height of the first bitmap.
Bitmap 1 Data = The first bitmap data, as per the Bitmap File Creation example.
…
Header 9 = Two bytes, one representing the width and one the height of the last bitmap.
Bitmap 9 Data = The last bitmap data, as per the Bitmap File Creation example.