4 inch 液晶用ラジオ時計
[はじめに]
　このページの内容及び、ダウンロードしたものは無保証です。一切の責任を作>成者は負いません。自己責任で利用してください。また、サポートも一切行いません。as is でお願いします。

[ClockRadio]

　4inch の液晶をつけている Raspberry Pi があるのですが、今ひとつ利用シーンがありません。机の隅におけるサイズですが、ちょうどよいアプリケーションが見つけられません。動画を再生させてもいいのですが、小さいのであまり使いません。また、自作の SDL_gui(https://sirius10.net/RaspberryPi/SDL_gui/index.html) を使ってなにか作ってみるという意味もあります。

　小さいけれど、電源が必要なので、外に持ち出すことも出来ません。

　そこで、RTL を使って、ラジオ時計にしてしまおうと考えました。SDL2 で、自作の gui ツールを使い作成しました。

　4 inch 液晶が対象なので、解像度は 800 x 480 にしています。全画面表示で拡大できます。他の解像度にするには部品の配置位置をすべて変更する必要があります。

[機能]

・RTL-SDR を使ったラジオの再生
・アラーム、スリープなどのタイマー動作
・登録したコマンドの実行
・システム情報の表示
・音楽ファイルの再生
・リモートからのコントロール(ハンドシェイクもして無いのでローカルで使ってください)

[ファイル一覧]
・Makefile
　Make ファイル
・ClockRadio.c
　本体ソース
・SDL_gui.c
　GUI 部品ソース
・SDL_gui.h
　GUI 部品ヘッダファイル
・ClockRadio.h
　本体ヘッダファイル
・clock.c
　全画面時計ソース
・radio_panel.c
　ラジオパネルソース
・app_panel.c
　アプリパネルソース
・timer_panel.c
　タイマーパネルソース
・system_panel.c
　システムパネルソース
・mp3_panel.c
　mp3 パネルソース
・settings.c
　設定確認画面ソース
・clock_face.h
　文字盤等の内部画像データ
・readme.txt
　このファイル
・Warning-Alarm02-1L.mp3
　アラーム音の mp3
・ClockRadio.cfg
　設定ファイルのサンプル
・clock_trans.bmp
　盤面を透明にした文字盤画像
・sky.bmp
　背景画像のサンプル
・server.c
　サーバ機能のソース
・ctl_cradio.c
　ClockRadio と送受信するコマンドのソース
・web ディレクトリ
  index.php
  config.php
  execute.php
　ClockRadio の web インターフェース

[コンパイル]
コンパイルするには、SDL2 の環境が必要です。開発用のライブラリのインストールは以下のようになります。

$ sudo apt-get install libsdl2-dev libsdl2-mixer-dev libsdl2-ttf-dev

以下のようにして、コンパイル、インストールできます。

$ mkdir ClockRadio
$ cd ClockRadio
$ wget -O ClockRadio-211211.tar.gz "https://sirius10.net/Download/download.php?download=ClockRadio-211211.tar.gz"
$ tar xvfz Clockradio-211211.tar.gz
$ make
$ make install

コマンドのインストール先は、~/bin です。アラーム音も ~/bin にコピーされます。設定ファイルは ~/.config/sirius10 にコピーされます。

[設定ファイル]

　設定ファイルは、 ~/.config/sirius10/ClockRadio.cfg です。サンプルをコピーして必要であれば、エディタで書き換えてください。詳細はサンプル設定ファイルのコメントをご覧ください。

[起動オプション]
 -fs
  フルスクリーンで起動します。
 -ns
  リモートでコントロールできるようにソケットを開きます。

[各画面の操作方法]
　起動直後は時計画面になっています。時計画面でもラジオの再生が出来ますが、時計をクリックすれば、パネル画面になり、その他の機能が使えます。

[ラジオ画面]
・ラジオの ON/OFF トグルボタン
　時計の右下のボタンはラジオの電源の ON/OFF の切り替えます。
・Shutdown ボタン
　マシンをシャットダウンします。
・Reboot ボタン
　マシンを再起動します。
・フルスクーンチェックボックス
　フルスクリーンとウィンドウ表示を切り替えます。
・Exit ボタン
　プログラムを終了します。
・ラジオタブ
　ラジオパネルに切り替えます。
・選局ラジオボタン
　受信周波数を選択したラジオ局に変更します。
・ボリュームアップボタン
　音量を上げま音量を上げます。ミュート時はミュートを解除します。
・ボリュームダウンボタン
　音量を下げます。ミュート時はミュートを解除します。
・ミュートトグルボタン
　ミュート状態を切り替えます。
・ボリュームラベル
　現在の音量を表示します。
・アラームラベル
　現在のアラームの状態を表示します。アラーム音がなっているときにクリックするとアラーム音が停止します。
・スリープラベル
　現在のスリープの状態を表示します。アラーム音がなっているときにクリックするとアラーム音が停止します。
・周波数ラベル
　戦局しているラジオ局の周波数を表示します。
・ボリュームラベル
　現在の音量を表示します。
・時刻表示ラベル
　アナログ時計を表示します。下部の日付は、タイマー動作時に残り時間を表示します。クリックすると時計画面に変わります。
・設定確認ボタン
　設定確認画面に切り替えます。

[アプリ画面]
￼
アプリタブ
　アプリタブに切り替えます。
アプリ起動ボタン
　登録されたアプリケーションを起動するボタンです。
￼
[タイマー画面]
・タイマータブ
　タイマータブに切り替えます。
・アラームチェックボックス
　アラームの有効/無効を設定します。
・アラーム時設定ドロップダウンリスト
　アラームを何時に設定するかを選択します。アラーム有効時は変更できません。
・アラーム分設定ドロップダウンリスト
　アラームを何分に設定するかを選択します。15 分単位で設定できます。アラーム有効時は変更できません。
・ラジオチェックボックス
　アラーム設定時にラジオを ON にする場合は、チェックしてください。アラーム有効時は変更できません。
・スリープ ON/OFF トグルボタン
　ON にするとスリープタイマーが開始します。
・Shutdown チェックボックス
　スリープ時間経過後に、マシンをシャットダウンする場合はチェックしてください。
・時間選択ラジオボタン
　スリープ時間を選択します。スリープタイマー開始後は変更できません。
・タイマー開始/停止ボタン
　設定した時間経過後、アラーム音を鳴らします。
・タイマー時間表示ラベル
　タイマー時間を表示します。
・タイマー時間調節ボタン＋
　タイマー時間を 1 分増やします。タイマー動作中は変更できません。
・タイマー時間調節ボタンー
　タイマー時間を 1 分減らします。タイマー動作中は変更できません。
・タイマー時間選択ラジオボタン
　タイマー時間を選択します。タイマー動作中は変更できません。
￼
[システム画面]
・システムタブ
　システムタブに切り替えます。
・システムコマンド実行ボタン
　登録されたシステムコマンドを実行するボタンです。実行結果は下部の結果表示ラベルに表示されます。
・ロードアベレージグラフ表示トグルボタン
　ロードアベレージを結果表示ラベルにグラフ表示します。表示中は他のコマンドは使えません。
・結果表示ラベル
　コマンドの実行結果や、ロードアベレージのグラフを表示します。
￼
[mp3 画面]
・mp3 タブ
　mp3 タブに切り替えます。
・前の曲ボタン
　再生中にクリックすると、前の曲を再生します。
・停止ボタン
　再生を停止します。
・再生/一時停止ボタン
　再生/一時停止をします。
・次の曲ボタン
　再生中にクリックすると次の曲を再生します。
・連続再生チェックボックス
　チェックされていると、曲の再生が終わったときに自動的に次の曲を再生します。
・ループ再生チェックボックス
　チェックされていると、連続再生時に最後の曲が終わると最初に戻って再生します。れんぞくサイセでない時は、その曲をリピート再生します。
・ディレクトリ/曲名表示ラベル
　ディレクトリあるいは再生中のファイル名を表示します。
・親ディレクトリ移動ボタン
　親ディレクトリへ移動します。曲を再生中の場合、再生は停止します。
・前ページ移動ボタン
　一覧リストで 1 ページ分戻ります。
・次ページ移動ボタン
　一覧リストで 1 ページ分進みます。
・一覧リストラベル
　ディレクトリ内のファイルやディレクトリを一覧表示します。マウスのホイールでスクロールできます。ディレクトリをクリックするとそのディレクトリに移動します。音楽ファイルをクリックするとそのファイルの最初から再生します。右横に全体の中でどの位置にいるかを表示しますが、スクロールバーではないのでマウスで操作は出来ません。
・ステータス表示ラベル
　ディレクトリ内のファイル数を表示します。ファイル再生中は、再生時間をグラフ表示します。
￼
[時計画面]
・ラジオ ON/OFF トグルボタン
　ラジオの ON/OFF を切り替えます。
・ボリューム＋ボタン
　音量を上げます。
・ボリュームーボタン
　音量を下げます。
・選局ボタン
　ラジオ局を選局します。
・周波数表示ラベル
　選局した局の周波数を表示します。
・音量表示ラベル
　現在の音量を表示します。
・終了ボタン
　プログラムを終了します。
・Shutdown ボタン
　マシンをシャットダウンします。
・Reboot ボタン
　マシンを再起動します。
・アラームラベル
　現在のアラームの状態を表示します。アラーム音がなっているときにクリックするとアラーム音が停止します。
・スリープラベル
　現在のスリープの状態を表示します。アラーム音がなっているときにクリックするとアラーム音が停止します。
・アナログ時計
　現在時刻を表示します。クリックすると、パネル画面に変わります。
・日付
　日付を表示します。タイマー動作時は残り時間を表示します。音楽ファイル再生中は再生中のファイル名と再生時間を表示します。
￼
[設定確認画面]
・設定表示ラベル
　現在の設定を表示します。クリックでセクションを変えます。
・戻るボタン
　前の画面に戻ります。

[リモートコントロールコマンド]
　ctl_cradio がリモートコントロールするコマンドです。-ns オプションをつけて起動した ClockRadio に対してコマンドの送受信を行います。

　送信するコマンド名を引数で指定します。コマンドにパラメータが必要な場合は、コマンド名の次に指定します。

　送信先は、デフォルトでは、ローカルホストの 62453 番ポートです。他のホストやポート番号に送信するにはオプションで指定します。

  -h ホストの IP アドレスまたは、ホスト名
  -t ポート番号

　送受信できるコマンドは次の通りです。データ受信した結果は標準出力に表示されます。

・radio
　ラジオの電源状態を変更します。ON であれば OFF になります。
・vup
　音量を 1 上げます。
・vdown
　音量を 1 下げます。
・shutdown
　相手ホストを確認無しでシャットダウンします。
・reboot
　相手ホストを確認無しで再起動します。
・radio1
　ラジオの電源を ON にし、1 番目のプリセット局を選択します。
・radio2
　ラジオの電源を ON にし、2 番目のプリセット局を選択します。
・radio3
　ラジオの電源を ON にし、3 番目のプリセット局を選択します。
・radio4
　ラジオの電源を ON にし、4 番目のプリセット局を選択します。
・radio5
　ラジオの電源を ON にし、5 番目のプリセット局を選択します。
・radio6
　ラジオの電源を ON にし、6 番目のプリセット局を選択します。
・getdir
　現在の音楽ファイルのディレクトリを表示します。
・setdir
　音楽ファイルを再生するディレクトリを設定します。
　コマンドの次にディレクトリを指定してください。ディレクトリは対象ホストのフルパスで指定します。
・getlist
　音楽ファイルのディレクトリ内の一覧を表示します。
・play
　音楽ファイルを再生します。再生する前に、音楽ファイルのあるディレクトリを設定している必要があります。
・stop
　再生中の音楽を停止します。
・getvol
　現在の音量を表示します。
・getstation
　現在の放送局の一覧を表示します。
　はじめに局の数-1 を表示し、次に現在の局番号(最初が 0)、次から、局名を表示します。
・getloop
　現在のループ再生の状態を表示します。1 が有効で、0 が無効です。
・checkloop
　ループ再生の状態を変更します。
・getnextplay
　現在の連続再生の状態を表示します。1 が有効で、0 が無効です。
・checknextplay
　連続再生の状態を変更します。
・playprev
　前の曲を再生します。
・playnext
　次の曲を再生します。
・select
　音楽ディレクトリ内の指定した番号のファイルを再生します。
・currentmusic
　現在再生している音楽ファイルの番号を表示します。


[web インターフェース]
　web ディレクトリ内は、ClockRadio をブラウザから操作する web インターフェースです。PHP、JavaScript が必要です。web サーバに置いてブラウザから開いてください。
　config.php 内で、target_host、target_port、command 変数を環境に合わせて書き換えてください。ClockRadio と同じホストで動かす場合は、target_host と target_port は、からの文字列("")で構いません。command には、ctl＿cradio コマンドを書いてください。

　web インターフェースでは、ラジオの ON/OFF、局の選択、音量の変更が出来ます。
　また、音楽ファイルのディレクトリの変更と、音楽ファイルの再生、音楽ファイルの一覧表示、一連表示からの再生が出来ます。連続再生、ループ再生の状態の変更も出来ます。

[免責]
　このプログラムを使ったことによる一切の責任を sirius は負いません。使用は自己責任でお願いします。

[著作権]
　添付のアラーム音は、OtoLogic(https://otologic.jp/) の素材を利用しています。OtoLogicの利用規約(https://otologic.jp/free/license.html) に従って利用してください。
　本プログラムの著作権は sirius(https://sirius10.net) にありますが、本プログラムの著作権は主張いたしません。

[保証]
　無保証です。

[更新履歴]
　2021.11.29 公開
　2021.12.11 リモート操作に対応、web インターフェース作成
