/// <summary> /// Get average led colour, for Vertical sides of the screen, asynchronous. /// </summary> /// <param name="request"></param> /// <returns></returns> private static byte[] GetVerticalSideAsync(SideLedReadingRequest request) { var blockY = request.Y / request.SideLedCount; GetStartAndEndSecondarySide(request.StartFromZero, request.Depth, request.X, out var startX, out var endX); var ledCount = 0; var readings = ArrayService.CreateTaskAverageColourArray(request.SideLedCount); if (request.IsIncremental) { int startY; int endY; for (var count = 0; count < request.SideLedCount - 1; count++) { startY = count * blockY; endY = startY + blockY; readings[ledCount++] = GetSectionReading(CreateSectionReadingRequest(request.ScreenPointer, request.Stride, request.BPPModifier, startX, endX, startY, endY)); } startY = blockY * (request.SideLedCount - 1); endY = request.Y; readings[ledCount] = GetSectionReading(CreateSectionReadingRequest(request.ScreenPointer, request.Stride, request.BPPModifier, startX, endX, startY, endY)); } else { var startY = blockY * (request.SideLedCount - 1); var endY = request.Y; readings[ledCount++] = GetSectionReading(CreateSectionReadingRequest(request.ScreenPointer, request.Stride, request.BPPModifier, startX, endX, startY, endY)); for (var count = request.SideLedCount - 2; count >= 0; count--) { startY = count * blockY; endY = startY + blockY; readings[ledCount++] = GetSectionReading(CreateSectionReadingRequest(request.ScreenPointer, request.Stride, request.BPPModifier, startX, endX, startY, endY)); } } var averageArray = ArrayService.AwaitTaskAverageColourArray(readings); var samplingArray = new byte[request.SideLedCount * 3]; for (var readingCount = 0; readingCount < averageArray.Length; readingCount++) { samplingArray = ArrayService.AdColourToByteArray(samplingArray, averageArray[readingCount], readingCount); } return(samplingArray); }
private Task <byte[]> SendSideRequestAsync(int screenHeight, int screenWidth, byte depth, byte sideLedCount, int currentLedCount, IntPtr screenPointer, int bppModifier, int stride, bool isIncremental, bool startFromZero, bool isHorizontal) { var requestModel = new SideLedReadingRequest { Y = screenHeight, X = screenWidth, Depth = depth, SideLedCount = sideLedCount, CurrentLedCount = currentLedCount, ScreenPointer = screenPointer, BPPModifier = bppModifier, Stride = stride, ColourArray = ArrayService.CreateByteArray(_screenLedCount), IsIncremental = isIncremental, StartFromZero = startFromZero, IsHorizontal = isHorizontal }; return(ScreenService.GetSideLEDAsync(requestModel)); }
/// <summary> /// Get average led colour, for vertical sides of the screen. /// </summary> /// <param name="request"></param> /// <returns></returns> private static byte[] GetVerticalSide(SideLedReadingRequest request) { var blockY = request.Y / request.SideLedCount; var sectionRequest = CreateSectionReadingRequest(request); GetStartAndEndSecondarySide(request.StartFromZero, request.Depth, request.X, out var start, out var end); sectionRequest.StartX = start; sectionRequest.EndX = end; if (request.IsIncremental) { for (var count = 0; count < request.SideLedCount - 1; count++) { sectionRequest.StartY = count * blockY; sectionRequest.EndY = sectionRequest.StartY + blockY; request.ColourArray = ArrayService.AdColourToByteArray(request.ColourArray, GetSectionLED(sectionRequest), request.CurrentLedCount++); } sectionRequest.StartY = blockY * (request.SideLedCount - 1); sectionRequest.EndY = request.Y; request.ColourArray = ArrayService.AdColourToByteArray(request.ColourArray, GetSectionLED(sectionRequest), request.CurrentLedCount++); } else { sectionRequest.StartY = blockY * (request.SideLedCount - 1); sectionRequest.EndY = request.Y; request.ColourArray = ArrayService.AdColourToByteArray(request.ColourArray, GetSectionLED(sectionRequest), request.CurrentLedCount++); for (var count = request.SideLedCount - 2; count >= 0; count--) { sectionRequest.StartY = count * blockY; sectionRequest.EndY = sectionRequest.StartY + blockY; request.ColourArray = ArrayService.AdColourToByteArray(request.ColourArray, GetSectionLED(sectionRequest), request.CurrentLedCount++); } } return(request.ColourArray); }
public static Task <byte[]> GetSideLEDAsync(SideLedReadingRequest request) { return(Task.Run(() => request.IsHorizontal ? GetHorizontalSideAsync(request) : GetVerticalSideAsync(request))); }
public static byte[] GetSideLED(SideLedReadingRequest request) { return(request.IsHorizontal ? GetHorizontalSide(request) : GetVerticalSide(request)); }