Example #1
0
        /// <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);
        }
Example #2
0
        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));
        }
Example #3
0
        /// <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);
        }
Example #4
0
 public static Task <byte[]> GetSideLEDAsync(SideLedReadingRequest request)
 {
     return(Task.Run(() => request.IsHorizontal ? GetHorizontalSideAsync(request) : GetVerticalSideAsync(request)));
 }
Example #5
0
 public static byte[] GetSideLED(SideLedReadingRequest request)
 {
     return(request.IsHorizontal ? GetHorizontalSide(request) : GetVerticalSide(request));
 }