// Copyright (c) Microsoft. All rights reserved. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Http; using Windows.ApplicationModel.Background; using Windows.Devices.Gpio; using Windows.System.Threading; namespace BlinkyHeadlessCS { public sealed class StartupTask : IBackgroundTask { BackgroundTaskDeferral deferral; private GpioPinValue valueR = GpioPinValue.High; private const int LED_R = 5; private GpioPin pinR; private GpioPinValue valueG = GpioPinValue.High; private const int LED_G = 13; private GpioPin pinG; private GpioPinValue valueB = GpioPinValue.High; private const int LED_B = 6; private GpioPin pinB; private ThreadPoolTimer timer; //For RGB LED Illumination private int State = 0; public void Run(IBackgroundTaskInstance taskInstance) { deferral = taskInstance.GetDeferral(); InitGPIO(); timer = ThreadPoolTimer.CreatePeriodicTimer(Timer_Tick, TimeSpan.FromMilliseconds(1000)); } private void InitGPIO() { pinR = GpioController.GetDefault().OpenPin(LED_R); pinR.Write(GpioPinValue.Low); pinR.SetDriveMode(GpioPinDriveMode.Output); pinG = GpioController.GetDefault().OpenPin(LED_G); pinG.Write(GpioPinValue.Low); pinG.SetDriveMode(GpioPinDriveMode.Output); pinB = GpioController.GetDefault().OpenPin(LED_B); pinB.Write(GpioPinValue.Low); pinB.SetDriveMode(GpioPinDriveMode.Output); } private void Timer_Tick(ThreadPoolTimer timer) { if ((State & 1) == 0) valueR = GpioPinValue.Low; else valueR = GpioPinValue.High; if ((State & 2) == 0) valueG = GpioPinValue.Low; else valueG = GpioPinValue.High; if ((State & 4) == 0) valueB = GpioPinValue.Low; else valueB = GpioPinValue.High; pinR.Write(valueR); pinG.Write(valueG); pinB.Write(valueB); if (State < 7) { State++; } else { State = 0; } } } }