SerialSession.psm1

<#
 _____ _ _ _____ _
/ ___/ ___ _ __|_| __ _| / ___/ ___ ___ ___ |_| ___ _ ___™
\___ \/ _ \| '__| |/ _' | \___ \/ _ \/ __/ __/| |/ _ \| '_ \
 ___| | __/| | | | |_| | |___| | __/\__ \__ \| | |_| | | | |
/____/\___||_| |_|\__._|_/____/\___|/___/___/|_|\___/|_| |_|
INTERACTIVE AND AUTOMATED SERIAL PORT SESSIONS FOR POWERSHELL
 
https://nextgdata.com
 
© Alex Hoosyny
#>


function Enter-SerialSession {
<#
.SYNOPSIS
etss -> Enter-SerialSession
.DESCRIPTION
Starts an interactive serial port session.
 
 
.LINK
https://nextgdata.com
#>


    [Alias('etss')]
    [CmdletBinding()]
    
    param (
        [String]$PortName,
        [Int]$BaudRate = 9600,
        [String]$Parity = 'None',
        [Int]$DataBits = 8,
        [String]$StopBits = 'One',
        [String]$Handshake = 'RequestToSend',
        [Int]$ReadBufferSize = 4096,
        [Int]$WriteBufferSize = 2048,
        [String]$Encoding = 'UTF-8',
        [Alias('tout')][Int64]$Timeout = -1,
        [Alias('iout')][Int64]$IdleTimeout = -1,
        [Alias('eout')][Int64]$ExpectTimeout = 0,
        [Alias('es')][Object[]]$ExpectScript,
        [Alias('ms')][hashtable]$KeyScript,
        [Alias('byte')][Switch]$ByteOutput,
        [Alias('pipe')][Switch]$PipeOutput,
        [Alias('line')][Switch]$ReadLine,
        [Alias('edit')][Switch]$LocalEdit,
        [Alias('echo')][Switch]$LocalEcho,
        [Alias('time')][Switch]$Timestamp,
        [Alias('combo')][Switch]$ComboView,
        [Alias('noni')][Switch]$NonInteractive,
        [Alias('ts')][scriptblock]$TitleScript = {& $Session.Title.Full},
        [String]$TimeFormat,
        [String]$NewLine = "`n",
        [String]$EditEnding = "`r",
        [String]$Prompt = 'SerialSession> ',
        [Alias('ps')][scriptblock]$PromptScript = {gsdi | ft},
        [String]$PromptColor = 'Green',
        [String]$AuxColor = 'DarkGray',
        [String]$TxColor = [Console]::ForegroundColor,
        [String]$RxColor = [Console]::ForegroundColor
    )

    $private:param = @{}
    $param.Add('PortName', $PortName)
    $param.Add('BaudRate', $BaudRate)
    $param.Add('Parity', $Parity)
    $param.Add('DataBits', $DataBits)
    $param.Add('StopBits', $StopBits)
    $param.Add('Handshake', $Handshake)
    $param.Add('Encoding', $Encoding)
    $param.Add('Timeout', $Timeout)
    $param.Add('IdleTimeout', $IdleTimeout)
    $param.Add('ExpectTimeout', $ExpectTimeout)
    $param.Add('ReadBufferSize', $ReadBufferSize)
    $param.Add('ExpectScript', $ExpectScript)
    $param.Add('KeyScript', $KeyScript)
    $param.Add('ByteOutput', $ByteOutput)
    $param.Add('PipeOutput', $PipeOutput)
    $param.Add('ReadLine', $ReadLine)
    $param.Add('LocalEcho', $LocalEcho)
    $param.Add('LocalEdit', $LocalEdit)
    $param.Add('Timestamp', $Timestamp)
    $param.Add('ComboView', $ComboView)
    $param.Add('NonInteractive', $NonInteractive)
    $param.Add('TitleScript', $TitleScript)
    $param.Add('NewLine', $NewLine)
    $param.Add('EditEnding', $EditEnding)
    $param.Add('Prompt', $Prompt)
    $param.Add('PromptScript', $PromptScript)
    $param.Add('PromptColor', $PromptColor)
    $param.Add('AuxColor', $AuxColor)
    $param.Add('TxColor', $TxColor)
    $param.Add('RxColor', $RxColor)
    
    & $PSScriptRoot/Enter-SerialSession.ps1 @param
}


function Get-SerialDeviceInformation {
<#
.SYNOPSIS
gsdi -> Get-SerialDeviceInformation
.DESCRIPTION
Serial device information.
.INPUTS
.OUTPUTS
PSCustomObject
.LINK
https://nextgdata.com/SerialSession
#>


    [Alias('gsdi')]
    [CmdletBinding()]
    
    Param()

    $SerialPort = [System.IO.Ports.SerialPort]::New()

    if ($IsWindows -or $PSEdition -eq 'Desktop') {
        [System.IO.Ports.SerialPort]::GetPortNames()
    }
    elseif ($IsMacOS) {
        [System.IO.Ports.SerialPort]::GetPortNames()
    }
}