私が作成しているプログラムは有る種のUSBデバイスとSerial通信するもので
どのCOM Portに接続されているかを最初に調べてCOM Port No.を固定します。
調べるCOM Port No.は0から順にUpしていき、目的デバイスが決められたIDを返してくるかを
順に調べて行きます。この途中で、デバイスマネージャー上で
「Bluetoothリンク経由の標準シルアル(COMx)」(Lenovo NotePCでの表示例です)となって
いるのが存在すると、computcコマンドから進まなくなりアプリは「応答なし」になります。
ちなみにこのBluetoothのポートをデバドラから無効化しておくと問題ありません。
このポートチェックするサブルーチン例は以下です。
もしかしたらコマンドの使い方の無知による不具合なのかも知れませんが
*USB_connect_chk USB_port=0 : check_ok=0 ;preset to 0 repeat 256 ;目的のDeviceがどのCOM Portに接続されているかを探す。 com_get_buf="" comclose ;一旦closeをかける comopen cnt,"baud=19200 parity=N data=8 stop=1" if stat=1 : continue ;初期化に失敗した(未接続)ので次のPort No.の検索に進む ;stat=0で初期化OKなので求めるDeviceが接続されているかIDを問い合わせるコマンド送信する。 ;CC,01,01,CE,3Fの5byteコマンドはDeviceのID Nameを返信させるコマンド computc $cc ;<--このcomputcでフリーズして”応答なし”になる。 ;この時のCOM Port No.(=cnt)がデバイスマネージャー上で「Bluetoothリンク経由の標準シリアル(COMx)」 computc $01 computc $01 computc $ce computc $3f wait 10 comget com_get_buf , 10 ;10byteのdevice IDを取り込む wait 10 if com_get_buf=id_name { ;返信データがid_name(ID名をPreset)と同じかチェック USB_port=cnt : check_ok=1 ;目的デバイスのCOM Port No.が判明した break } loop if check_ok=1 : return dialog "USBデバイスが接続されていません!",1 return
最初のcomputcで固まってしまうというのが不思議で理解できません。
他メーカーなどのBluetoothでどうなるのかは不明で、現時点でLenovoのYoga..とかいう
Note PCで初めて経験しました。
残念なのは手元にそのLenovo PCが無くて(ユーザーに返却)再確認は出来ない状態です。
何かアドバイスして頂けるようでしたら宜しくお願い致します。