public static void Upload(PageCollection pageCollection) { OutputPort onboardLed = new OutputPort(ShieldConfiguration.CurrentConfiguration.OnboardLedPin, true); SPI.Configuration spiConfig = new SPI.Configuration( ShieldConfiguration.CurrentConfiguration.SpiChipSelectPin, false, 100, 100, false, true, 1000, ShieldConfiguration.CurrentConfiguration.SpiModule ); var spi = new SpotSpi(spiConfig); var uploader = new Uploader(spi); if (uploader.IsShieldInBootloaderMode()) { var uploadStatusIndicator = new UploadStatusIndicator( spi ); try { //var securityRegisterData = uploader.SecurityRegisterRead(); //var userData = new byte[Constants.SecurityRegisterUserFieldLength]; //Array.Copy(securityRegisterData, 4, userData, 0, userData.Length); //var userDataString = new string(System.Text.Encoding.UTF8.GetChars(userData)); //Debug.Print("Programming \"" + userDataString + "\""); uploadStatusIndicator.Status = UploadStatusIndicator.UploadStatus.Uploading; uploader.UploadBitstream(pageCollection); uploadStatusIndicator.Status = UploadStatusIndicator.UploadStatus.Succeeded; } catch { // Any exception is a failed upload uploadStatusIndicator.Status = UploadStatusIndicator.UploadStatus.Failed; throw; } finally { onboardLed.Write(false); } } else { // Flash the onboard LED to indicate upload failure due to // not being in bootstrapping mode Thread.Sleep(500); onboardLed.Write(false); Thread.Sleep(500); onboardLed.Write(true); Thread.Sleep(500); onboardLed.Write(false); } }