4 * \brief 復調器関連インクルードファイル
13 * \defgroup radioAPI ラジオAPI
14 * \brief 復調器がTRX-305の制御部と情報の授受を行うためのAPI群
16 * このモジュールに含まれるAPIは、復調器の中でユーザー復調アルゴリズムが使うために
17 * 公開されている。制御情報取得用APIはTRX-305からの制御情報を受け取るためのものである。
19 * 制御情報は周期的に送られてくるため、必ずしも即座に反応する必要はない。具体的には
20 * TRX-305からは16種類の情報が16周期で送られてくる。これらは情報の中身に変更がない場合も
26 * \defgroup getInfo 制御情報取得API
27 * \brief 復調器がTRX-305から受け取る制御情報取得用のAPI
29 * ここに列挙されるAPIは、いずれも復調器内のユーザーアルゴリズムから自由に使ってよい。
31 * TRX-305から送られてくる制御情報は、ほとんどの場合TRX-305A基板にシリアルポートから
32 * 送られてくるコマンドに対応している。コマンドの一覧に関しては、トランジスタ技術誌
33 * 2014年11月号208ページの表を参照。なお、同記事のコマンドはTRX-305AのSHマイコンで
34 * 解釈後にDSPに送られるため、ここで使える命令とは必ずしも一対一対応していない。
36 * TRX-305Aが受け取るシリアル命令は、SHマイコンにより解釈されたあとにFPGA内部に
37 * 貯めこまれ、繰り返し送り出される。DSPはこの命令を受信し、制御情報として内部に
40 * なお、これらのAPIが返すのは、あくまで解釈のない「マイコンから送られてきた値」である。
41 * その値の物理的な解釈については、本プロジェクトは最小限に留める。言い換えると、
44 * 命令に関してはすべて実際に解析したものであり、参考とした文献は存在しない。
45 * 命令の解析は framework.h の DEBUG_COMMAND のコメントアウトを外すことによって、
46 * DSPからのシリアル出力を監視しながらSHにシリアルコマンドを投入して行う。
52 // Following mode macro can be used only the demodulator
54 /** \brief 受信機はワイドFMモードである */
55 #define radio_mode_WFM 2
56 /** \brief 受信機はナローFMモードである */
57 #define radio_mode_NFM 4
58 /** \brief 受信機は振幅変調モードである */
59 #define radio_mode_AM 5
60 /** \brief 受信機は振幅変調モードの同期復調モードである */
61 #define radio_mode_SAM 6
62 /** \brief 受信機はLSB復調モードである */
63 #define radio_mode_LSB 7
64 /** \brief 受信機はUSB復調モードである */
65 #define radio_mode_USB 8
66 /** \brief 受信機はCW復調モードである */
67 #define radio_mode_CW 9
69 // These APIs are published for the demodulator programmer
73 * このAPIは現在の受信モード(復調モード)を返す。シリアルコマンドARMに対応する。
75 * ユーザーに公開されているAPIであるが、2つの理由から使用を推奨しない。
77 * まず、復調器hののモード管理は radio_demodulate_wide_FM() および
78 * radio_demodulate_wide_FM() がフレームワークと強調する管理で行っており、
79 * プログラマは復調器がどのモードにあるかひと目でわかるようになっている。
80 * そのため、モード管理にこの関数を呼ぶ必要はない。
82 * また、USBとLSBの復調を概ね共用する場合も、radio_api_is_USB() を呼べば
83 * 事が足りる。したがって、この関数を呼ぶ必要はない。
85 * どうしてもこのAPIを呼び出すときには、 radio_mode_WFM() をはじめとする専用
86 * 定数と比較してモードを調べること。SHマイコンは外部のシリアルから与えられた
87 * パラメータと違う値を送ってくるため、この注意が必要となる。
89 #define radio_api_getARM_mode() (radio.comdata[1])
94 * シリアルコマンドのAIS命令に対応する。
95 * 16bitの符号付き整数でシフト量を返す。
97 #define radio_api_getAIS_if_shift() (signed short)(radio.comdata[2])
102 * シリアルコマンドのAAT命令に対応する。
103 * 16bitの符号無し整数でアタック値を返す。
105 #define radio_api_getAAT_attack() (radio.comdata[3])
110 * シリアルコマンドのAAT命令に対応する。
111 * 16bitの符号無し整数でフェード値を返す。
113 #define radio_api_getAFA_fade() (radio.comdata[4])
118 * シリアルコマンドのAAT命令に対応する。
119 * 16bitの符号無し整数でフェード値を返す。
121 #define radio_api_getAST_noise_squelch_level() (radio.comdata[5])
126 * シリアルコマンドのACP命令に対応する。
128 * SHマイコンはシリアルコマンド ACP hhhh (hは16進数)に対して、
129 * hhhhを十進数xに変換し x*16916/4096 の値をDSPに送り込む。
130 * このAPIが返すのは送り込まれてきた変換後の値である。
132 * 16bitの符号付き整数でピッチ値を返す。
134 #define radio_api_getACP_cw_pitch() (signed short)(radio.comdata[6])
139 * シリアルコマンドADN命令に対応する。
140 * 16bitの符号無し整数でデノイザー値を返す。
142 #define radio_api_getADN_denoiser() (radio.comdata[7])
147 * シリアルコマンドAAN命令に対応する。
148 * 16bitの符号無し整数でオートノッチ値を返す。
150 #define radio_api_getAAN_auto_notch() (radio.comdata[8])
155 * シリアルコマンドAGL命令に対応する。
156 * 16bitの符号無し整数でゲインレベル値を返す。
158 #define radio_api_getAGL_gain_level() (radio.comdata[11])
163 * シリアルコマンドAIF命令に対応する。
164 * 16bitの符号無し整数でフィルタ情報を返す。値の範囲は0から6である。
166 * (この情報がDSPへの命令なのか通知情報なのかは、現時点では不明である)
168 #define radio_api_getAIF_filter() ((radio.comdata[0]>>1)&0x7)
171 * \brief ノイズブランカ制御命令の取得
173 * シリアルコマンドABN命令に対応する。
174 * 16bitの符号無し整数でノイズブランカ制御値値を返す。
179 #define radio_api_getABN_noise_blanker_on() ((~radio.comdata[0]>>11)&0x1)
185 * シリアルコマンドARG命令に対応する。
186 * 16bitの符号無し整数でAGC制御情報値を返す。
192 #define radio_api_getARG_agc_on() (~(radio.comdata[0]>>13)&0x1)
197 * SSB復調時に必要に応じて参照する。。
198 * 16bitの符号無し整数でSSBのモードを返す。
204 #define radio_api_is_USB() ((radio.comdata[0]>>6)&0x1) // 1 if USB
208 * \brief ノイズスケルチ制御情報の取得
211 * 16bitの符号無し整数でスケルチ制御情報値を返す。
217 * なお、以上の設定はトランジスタ技術誌の2014年11月号の表に基づくが、
218 * この表には混乱があり、反転している可能性もある。
220 #define radio_api_getANE_noise_squelch_on() ((radio.comdata[10]>>1)&0x1)
224 * \brief オーディオHPF情報の取得
226 * シリアルコマンドAAF nm命令のnに対応する。
227 * 16bitの符号無し整数でオーディオHPF制御情報値を返す。
231 #define radio_api_getAAF_hpf() ((radio.comdata[10]>>4)&0x3)
234 * \brief オーディオLPF情報の取得
236 * シリアルコマンドAAF nm命令のmに対応する。
237 * 16bitの符号無し整数でオーディオLPF制御情報値を返す。
241 #define radio_api_getAAF_lpf() ((radio.comdata[10]>>2)&0x3)
247 * シリアルコマンドAVP命令に対応する。
248 * 16bitの符号無し整数でボイススケルチ値を返す。
251 * シリアルコマンドAVPの引数は0000-FFFF (65556)までの値をとるが、
252 * DSPに渡される値はbit7がAVSによって破壊される。したがって、
253 * AVPコマンドに渡す値は 0000から 007Fに制限すべきである。
255 #define radio_api_getAVP_voice_squelch_level() ((radio.comdata[12])&0x3F)
258 * \brief ボイススケルチ情報の取得
260 * シリアルコマンドAVS命令に対応する。
261 * 16bitの符号無し整数でボイススケルチ制御情報値を返す。
268 #define radio_api_getAVS_voice_squelch_on() ((~radio.comdata[12]>>7)&0x1)
270 /* end of defgroup getInfo */
273 * \defgroup setStat 状態報告API
278 #define radio_api_set_S_meter(s) radio.smeter = s
281 /* end of defgroup setStat */
284 /* end of defgroup radioAPI */
288 * \brief 復調アルゴリズム初期化関数
291 void init_demodulator(void);
292 void radio_demodulate_wide_FM( short idata[], short qdata[], short* left, short* right );
293 void radio_demodulate_non_wide_FM( int idata, int qdata, short* left, short* right );
295 #endif /* _MACRO_ONLY */
297 #endif /* DEMODULATOR_H_ */