差分

移動先: 案内検索

Asterisk+Radio

1,322 バイト除去, 昨日 16:03
PTT制御
==PTT制御==
注意:初期公開版から変更し、PTT制御をsocket対応としました。必要な処理が減ります。ですが、pttctl自体がかなりザルなので注意して使用してください。<br>
<br>
音声の入出力ができるようになったので、後はPTTを制御するだけです。前述のようにDigiRigはUSBシリアルも内蔵しており、RTSでPTTが制御できるようになっています。RTSを制御すればいいので簡単ですねと言いたいところですが、デバイスに対するIOCTLを発行しないとなのでちょいと面倒です。なので、この部分は書いておきました。<br>
Asteriskサンプル設定ファイルと同じところにpttctrlというプログラムを置いておきます。<br>
これをコンパイルするには
gcc pttctl pttctl.c -lrt
で行います。TTYデバイスが 使い方は pttctl /dev/ttyUSB0 ではない場合には書き換えてからコンパイルしてください。5091のように引数に対象のデバイスと、使うポート番号を指定して起動します。<br>
このプログラム自体はデーモン(常駐)化して使用します。やり方は後で説明しますが、とりあえずフォアグラウンドで試してみてください。<br>
PTTを制御するにはパイプPTTを制御するにはTCPで指定のポートに対して書き込みを行います。ただし前置詞として"NETPTT:"を付けます。書き込みはnetcat(FIFOnc)に対して書き込みを行います。/tmp/PTTCTL という名前でパイプをつくりますので、これに対して書き込んでください。使えるコマンドはON,OFF,ALTでPTTをオンにする(押した状態)ならが簡単です。ローカルで試すならnetcat-traditionalパッケージをインストールしてください。<br>PTTをオン、つまり送信するなら echo "NETPTT:ON" > /tmp/PTTCTL| nc localhost 5091
オフにする(離す)なら
echo "NETPTT:OFF" > /tmp/PTTCTL| nc localhost 5091
を実行します。ですがこれだけだと押したかどうかを判断するのが面倒なので、状態反転も持たせてあります。
echo "NETPTT:ALT" > /tmp/PTTCTL| nc localhost 5091
で現在の状態を反転します。オフならオンに、オンならオフになります。<br>
なお、特小の場合には連続送信は3分未満となっている(無線機が勝手に切る)ので、このプログラムでは送信状態になってから170秒でオフにするようにしています。
===PTT制御をネットワーク化する===
今回、別な筐体にpjsuaを入れたので制御が少し面倒になります。AsteriskからPTTを制御するにはpjsuaが動作しているマシン(Raspberry Pi)に対してPTTの制御を投げる必要があります。<br>
処理を簡単にするため、汎用のTCP通信ツールを使ってしまいましょう。くれぐれもこのままインターネット上に公開しないように。セキュリティが必要な場合にはファイアウォールするか別な手段を使ってください。<br>
ここではnetrwを使います。netcatでもかまいませんが。<br>
https://mamuti.net/netrw/index.en.html<br>
Debian系にはパッケージが用意されているのでインストールします。
apt-get install netrw
Raspberry Pi側はネットからコマンドを受信して処理するので netread を使います。こんな感じ
netread -o /tmp/PTTCRL 5091
[[画像:Netreadptt.png | 420px]]<br>
ネットから受信した内容をパイプに書き込むので、送信すべきデータはパイプに書き込むものと同じになるのでとても単純です。ただし、netreadは1行読み込むと終了するので、以下のようなシェルを作ります。
#!/bin/sh
while :
do
netread -o /tmp/PTTCTL 5091
done
簡単ですね。
 
<br>
PTTのテストをする場合には
echo "ALT" | netwrite localhost(あるいはIPアドレス) 5091
とやるとテストできます。<br>
そもそもの話、PTT制御をsocketで書けば簡単じゃないかという話もありますが暇があったら書きます。
==まとめる==

案内メニュー

VoIp-Info.jp

HP Directplus -HP公式オンラインストア-