PlutoSDRのRESET プログラム

サンプルプログラムやいくつかのWEBを参照して、PlutoSDRのRESET プログラムを作成した。プログラムの構成はシンプルに、
 ・デバイスをOPEN
 ・PlutoSDRの電源回路の「切」コマンドの送信
 ・PlutoSDRの電源回路の「入」コマンドの送信
 ・デバイスのクローズ
となる。

FT232R はUSBシリアルとしてそれなりに使われているので、他のデバイスを間違って操作しないように Production Description でOPENするように。
イメージ 1

FT Prog ユーティリティを使って Production Description を変更、初期値の「FT232R USB UART」から「FT232R PlutoCont」に変更。

イメージ 4
バイスマネージャーで見たとき COM16、COM23 は、同じFT232RLモジュールを接続しているのだが、複数挿していても明示的にOPENできて、コントロールすることができる。

ソフトは一回の操作だけなので、コンソールモードで作成、こんなふうに動作する。
イメージ 2

エラー処理も実装したので、FT232RL USBシリアルを挿していないときや別のデバイスのときなどには、
イメージ 3
となるようにした。
これで、リモートデスクトップで操作しているときでも、PlutoSDRをリセットできるようになった。

参考までにVB2008 のリストを掲載。
参照設定で FTD2XX_NET.dll が必要となります。
-------------------------
Imports FTD2XX_NET
Module Module1

    Sub Main()

        'ハード関係の宣言
        Dim PlutoFTDI As New FTDI
        Dim ft_status As FTD2XX_NET.FTDI.FT_STATUS
        Dim ftdiDeviceCount As UInt32 = 0

        '書き込みバッファとかその他変数
        Dim write_byte(1) As Byte
        Dim written_byte_num As UInt32 = 0
        Dim PowerON As Byte = &H0        'リレー OFF
        Dim PowerOFF As Byte = &HFF        'リレー ON

        'FTDI FT245初期化
        ft_status = FTDI.FT_STATUS.FT_OK

        'Device名をFT232R PlutoCont  EEPROMを変更しておく
        ft_status = PlutoFTDI.OpenByDescription("FT232R PlutoCont")
        If ft_status <> FTDI.FT_STATUS.FT_OK Then
            Console.WriteLine("デバイスが見つかりません")
            Console.WriteLine("接続を確認してください")
            System.Threading.Thread.Sleep(8000)
            Exit Sub
        End If

        'リセットやパージ処理
        ft_status = PlutoFTDI.ResetDevice()
        If ft_status <> FTD2XX_NET.FTDI.FT_STATUS.FT_OK Then
            Console.WriteLine("デバイスのリセットに失敗しました")
            Console.WriteLine("接続を確認してください")
            System.Threading.Thread.Sleep(8000)
            Exit Sub
        End If

        ft_status = PlutoFTDI.Purge(FTDI.FT_PURGE.FT_PURGE_RX Or FTDI.FT_PURGE.FT_PURGE_TX)
        If ft_status <> FTD2XX_NET.FTDI.FT_STATUS.FT_OK Then
            Console.WriteLine("デバイスの Purge に失敗しました")
            Console.WriteLine("接続を確認してください")
            System.Threading.Thread.Sleep(8000)
            Exit Sub
        End If


        '通信設定
        PlutoFTDI.SetTimeouts(0, 0)
        PlutoFTDI.SetLatency(100)
        PlutoFTDI.SetBaudRate(115200)

        'Bit Bang OutPutモードで起動
        ft_status = PlutoFTDI.SetBitMode(&HFF, 1)
        If ft_status <> FTD2XX_NET.FTDI.FT_STATUS.FT_OK Then
            Console.WriteLine("Bit Bang OutPutモードに失敗しました")
            Console.WriteLine("接続を確認してください")
            System.Threading.Thread.Sleep(8000)
            Exit Sub
        End If

        'Power OFF/ON Command Send

        Console.WriteLine("PlutoSDR をリセットします")

        write_byte(0) = PowerON
        ft_status = PlutoFTDI.Write(write_byte, 1, written_byte_num)
        System.Threading.Thread.Sleep(1000)

        write_byte(0) = PowerOFF
        ft_status = PlutoFTDI.Write(write_byte, 1, written_byte_num)
        System.Threading.Thread.Sleep(3000)     '3秒間電源OFFにする

        write_byte(0) = PowerON
        ft_status = PlutoFTDI.Write(write_byte, 1, written_byte_num)
        System.Threading.Thread.Sleep(1000)

        '接続をクローズしてプログラム終了
        ft_status = PlutoFTDI.ResetDevice()
        ft_status = PlutoFTDI.Close()
        Console.WriteLine("プログラムを終了します")
        System.Threading.Thread.Sleep(8000)

    End Sub

End Module