Public/Set-Blink1Color.ps1

function Set-Blink1Color {
    Param(
        [Parameter(Mandatory)]
        [Int]$DeviceNumber,
        [Parameter(Mandatory)]
        [System.Drawing.Color]$Color,
        [Parameter()]
        [ValidateRange(0, 65535)]
        [UInt16]$FadeTime = 0,
        [Parameter()]
        [ValidateRange(0, 2)]
        [int16]$Address = 0
    )

    if (-not $Global:HidDevices) {
        Initialize-Blink1Devices
    }

    $Global:HidDevices | ? {$_.Id -eq $DeviceNumber} | % {
        if ((-not $_.HIDInterface.IsOpen) -and $_.HIDInterface.IsConnected) {
            $_.HIDInterface.OpenDevice()
        }

        $BufferMax = $_.HIDInterface.Capabilities.FeatureReportByteLength
        #[byte[]]$InputBuffer = [byte[]]::CreateInstance([byte], $BufferMax)

        #Convert FadeTime to Bytes
        [byte[]]$FadeTimeBytes = [System.BitConverter]::GetBytes($FadeTime)
        #Convert Bytes to Big Endian
        [Array]::Reverse($FadeTimeBytes)

        [byte[]]$InputBuffer = [byte[]]@(
            1,
            ([char]'c'),
            $Color.R,
            $Color.G,
            $Color.B,
            $FadeTimeBytes[0],
            $FadeTimeBytes[1],
            $Address
        )

        [void]$_.HIDInterface.WriteFeatureData($InputBuffer)
    }
}