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();
            }
        }