サンプルプログラムやいくつかのWEBを参照して、PlutoSDRのRESET プログラムを作成した。プログラムの構成はシンプルに、
・デバイスをOPEN
・PlutoSDRの電源回路の「切」コマンドの送信
・PlutoSDRの電源回路の「入」コマンドの送信
・デバイスのクローズ
となる。
FT232R はUSBシリアルとしてそれなりに使われているので、他のデバイスを間違って操作しないように Production Description でOPENするように。
FT Prog ユーティリティを使って Production Description を変更、初期値の「FT232R USB UART」から「FT232R PlutoCont」に変更。
ソフトは一回の操作だけなので、コンソールモードで作成、こんなふうに動作する。
エラー処理も実装したので、FT232RL USBシリアルを挿していないときや別のデバイスのときなどには、
となるようにした。
これで、リモートデスクトップで操作しているときでも、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
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