public static void Main() { var spi1Controller = SpiController.FromName(FEZ.SpiBus.Spi1); var ledCount = 10; var apa102c = new APA102CController(spi1Controller.GetDevice(APA102CController.GetConnectionSettings()), ledCount); while (true) { for (var i = 0; i < ledCount; i++) { apa102c.Set(i, Color.Blue); apa102c.Flush(); Thread.Sleep(125); apa102c.Set(i, Color.Black); apa102c.Flush(); Thread.Sleep(125); } Thread.Sleep(2500); } }
static void DoDraw() { try { var sd = StorageController.FromName(SC20260.StorageController.SdCard); var drive = FileSystem.Mount(sd.Hdc); var spiController = SpiController.FromName(SC20260.SpiBus.Spi5); var ledController = new APA102CController(spiController, (PanelsWide * PanelsHigh) << 8); var stream = new FileStream(@"A:\output.avi", FileMode.Open); var aviDecoder = new AviDecoder(stream); var fpsCounter = 0; var oneSecondStart = DateTime.Now; var textColor = new SolidBrush(Color.White); aviDecoder.Run(); var frameCounter = 0; var pauseCounter = 0; while (true) { var t1 = DateTime.Now; if (pauseApp == true && pauseCounter > 0) { goto display_text; } pauseCounter = pauseApp ? (pauseCounter + 1) : 0; try { Bitmap bitmap; bitmap = aviDecoder.GetBimap(); screen.Clear(); if (bitmap != null) { var data = NativeCookData(bitmap, (byte)(0b1110_0000 | intensity)); ledController.SetBuffer(data, 0, data.Length); for (var i = 0; i < 2; i++) // flush twice to fix pannel 5 mesy sometime { ledController.Flush(); } screen.DrawImage(bitmap, (LcdWidth - bitmap.Width) >> 1, (LcdHeight - bitmap.Height) >> 1); } } catch { } display_text: screen.DrawString("Status: " + (frameCounter < 1 ? "Loading... " : (pauseApp ? "Paused" : "Playing")), font, textColor, 10, 10); screen.DrawString("Intensity: " + intensity, font, textColor, 10, 30); screen.Flush(); frameCounter++; if (frameCounter % 10 == 0) { GC.Collect(); GC.WaitForPendingFinalizers(); } Thread.Sleep(1); if (aviDecoder != null && aviDecoder.headerInfo != null && aviDecoder.headerInfo.TimeBetweenFrames != 0) { var t2 = DateTime.Now - t1; if (t2.TotalMilliseconds < aviDecoder.headerInfo.TimeBetweenFrames) { Thread.Sleep(aviDecoder.headerInfo.TimeBetweenFrames - (int)t2.TotalMilliseconds); } fpsCounter++; var oneSecondEnd = DateTime.Now - oneSecondStart; if (oneSecondEnd.TotalMilliseconds >= 1000) { Debug.WriteLine("Fps = " + fpsCounter); fpsCounter = 0; oneSecondStart = DateTime.Now; } } } } catch { screen.Clear(); screen.DrawString("Loading file from sd card failed.", font, new SolidBrush(Color.Red), 10, 10); screen.DrawString("Check the card and Reset application.", font, new SolidBrush(Color.Red), 10, 30); screen.Flush(); } }