PSGadget.psd1

@{
    # Module metadata
    RootModule           = 'PSGadget.psm1'
    ModuleVersion        = '0.4.2'
    CompatiblePSEditions = @('Desktop', 'Core')
    GUID                 = '72440f23-d3c6-4249-83eb-9affa6df882b'

    # PowerShell version requirements
    PowerShellVersion = '5.1'

    # Author information
    Author      = 'Mark Go'
    CompanyName = 'Mark Go'
    Copyright   = '(c) 2026 Mark Go. All rights reserved.'
    
    # Description
    Description = 'Experimental PowerShell module for direct hardware control via FTDI chips FT232R and FT232H — drive GPIO pin states, write I2C, actuate physical devices, and more.'
    
    # Exported functions - explicitly declared, no wildcards
    FunctionsToExport = @(
        'New-PsGadgetFtdi',
        'Test-PsGadgetEnvironment',
        'Get-FtdiDevice',
        'Connect-PsGadgetFtdi',
        'Get-PsGadgetMpy',
        'Connect-PsGadgetMpy',
        'Set-PsGadgetGpio',
        'Get-PsGadgetGpio',
        'Get-FtdiEeprom',
        'Get-PsGadgetFtdiEeprom',
        'Set-PsGadgetFt232rCbusMode',
        'Set-PsGadgetFtdiEeprom',
        'Set-PsGadgetFtdiMode',
        'Get-PsGadgetConfig',
        'Get-PsGadgetLog',
        'Set-PsGadgetConfig',
        'Install-PsGadgetMpyScript',
        'Install-MacOSD2XXDrivers',
        'Get-PsGadgetEspNowDevices',
        'Invoke-PsGadgetI2CScan',
        'Invoke-PsGadgetI2C',
        'Invoke-PsGadgetStepper',
        'Invoke-PsGadgetSpi',
        'Invoke-PsGadgetUart',
        'Start-PsGadgetTrace'
    )
    
    # No cmdlets, variables exported
    CmdletsToExport = @()
    VariablesToExport = @()
    AliasesToExport = @('Test-PsGadgetSetup', 'Get-PsGadgetOption', 'Set-PsGadgetOption')
    
    # Files included in this module
    FileList = @(
        'PSGadget.psm1',
        'Classes/PsGadgetLogger.ps1',
        'Classes/PsGadgetI2CDevice.ps1',
        'Classes/PsGadgetSsd1306.ps1',
        'Classes/PsGadgetSpi.ps1',
        'Classes/PsGadgetUart.ps1',
        'Classes/PsGadgetFtdi.ps1',
        'Classes/PsGadgetMpy.ps1',
        'Classes/PsGadgetPca9685.ps1',
        'Private/Get-PsGadgetModuleLogger.ps1',
        'Private/Ftdi.PInvoke.ps1',
        'Private/Stepper.Backend.ps1',
        'Private/Ftdi.Backend.ps1',
        'Private/Ftdi.Cbus.ps1',
        'Private/Ftdi.IoT.ps1',
        'Private/Ftdi.Mpsse.ps1',
        'Private/Ftdi.Spi.ps1',
        'Private/Ftdi.Uart.ps1',
        'Private/Ftdi.Unix.ps1',
        'Private/Ftdi.Windows.ps1',
        'Private/Initialize-FtdiAssembly.ps1',
        'Private/Initialize-PsGadgetConfig.ps1',
        'Private/Initialize-PsGadgetEnvironment.ps1',
        'Private/Invoke-NativeProcess.ps1',
        'Private/Mpy.Backend.ps1',
        'Private/Send-PsGadgetI2CWrite.ps1',
        'Private/Ssd1306.Backend.ps1',
        'Public/Connect-PsGadgetFtdi.ps1',
        'Public/Connect-PsGadgetMpy.ps1',
        'Public/Get-PsGadgetConfig.ps1',
        'Public/Get-PsGadgetLog.ps1',
        'Public/Get-PsGadgetEspNowDevices.ps1',
        'Public/Get-FtdiEeprom.ps1',
        'Public/Get-PsGadgetFtdiEeprom.ps1',
        'Public/Install-PsGadgetMpyScript.ps1',
        'Public/Install-MacOSD2XXDrivers.ps1',
        'Public/Invoke-PsGadgetStepper.ps1',
        'Public/Invoke-PsGadgetSpi.ps1',
        'Public/Invoke-PsGadgetUart.ps1',
        'Public/Invoke-PsGadgetI2CScan.ps1',
        'Public/Invoke-PsGadgetI2C.ps1',
        'Public/Get-FtdiDevice.ps1',
        'Public/Get-PsGadgetMpy.ps1',
        'Public/New-PsGadgetFtdi.ps1',
        'Public/Test-PsGadgetEnvironment.ps1',
        'Public/Set-PsGadgetConfig.ps1',
        'Public/Set-PsGadgetFt232rCbusMode.ps1',
        'Public/Set-PsGadgetFtdiEeprom.ps1',
        'Public/Set-PsGadgetFtdiMode.ps1',
        'Public/Set-PsGadgetGpio.ps1',
        'Public/Get-PsGadgetGpio.ps1',
        'Public/Start-PsGadgetTrace.ps1',
        'lib/net48/FTD2XX_NET.dll',
        'lib/net48/FTD2XX_NET.xml',
        'lib/netstandard20/FTD2XX_NET.dll',
        'lib/netstandard20/FTD2XX_NET.xml',
        'lib/netstandard20/FTD2XX_NET.deps.json',
        'lib/native/FTD2XX.dll',
        'lib/README.md'
    )
    
    # Private data
    PrivateData = @{
        PSData = @{
            Tags = @('FTDI', 'Hardware', 'GPIO', 'UART', 'I2C', 'SPI', 'PsGadget',
                     'MicroPython', 'ESP32', 'ESP-NOW', 'IoT', 'FT232H', 'FT232R',
                     'SSD1306', 'OLED', 'Telemetry')
            LicenseUri   = 'https://opensource.org/licenses/MIT'
            ProjectUri   = 'https://github.com/MarkGzero/PsGadget'
            IconUri      = ''
            ReleaseNotes = 'v0.4.2: UART support via D2XX. PsGadgetUart class with Write/Read/ReadLine/Flush/BytesAvailable. Invoke-PsGadgetUart cmdlet. GetUart() on PsGadgetFtdi. UART [PROTO] trace entries (DarkYellow in viewer). All standard baud rates, 8N1/7E2/etc, RTS/CTS and Xon/Xoff flow control. v0.4.1: SPI support via MPSSE. PsGadgetSpi class with Write/Read/Transfer. Invoke-PsGadgetSpi cmdlet. GetSpi() on PsGadgetFtdi. SPI [PROTO] trace entries (Blue in viewer). All 4 SPI modes supported. v0.4.0: Removed 9 deprecated SSD1306/PCA9685 wrapper functions; Send-PsGadgetI2CWrite demoted to internal private helper. Invoke-PsGadgetI2C is now the sole I2C entry point. PsGadgetFtdi.GetDisplay/Display/ClearDisplay use class methods directly. v0.3.6: Invoke-PsGadgetStepper - unified stepper motor cmdlet for FT232R/FT232H via async bit-bang. Bulk USB write for jitter-free step timing. Calibrated StepsPerRevolution (28BYJ-48: ~4075.77 half-steps, NOT 4096). Angle-based moves via -Degrees. PsGadgetFtdi.Step() and .StepDegrees() shorthand methods. v0.3.5: SSD1306 OLED integrated into Invoke-PsGadgetI2C. v0.3.4: ESP-NOW wireless telemetry.'
        }
    }
}