Glossary
- RCV: 电台接收机
- RCU: 主控?
- XTU:电台发射机
- FPP: 429 / 153 / 422 所有外部接口
- ICMU:综合信息处理机
- HF: High frequency 高频(短波电台)
- RTU: 通过 429 / 1553 / 网络(udp) 连接电台的外部设备。传输控制信息。
- SFU: 通过 422 连接电台的外部设备。传输数据链。
- FPP 电台程序里对外部接口。
- 业务 ⇒ ICMU 422 的上层协议。SLIP协议(Serial Line IP,串行线路IP协议,见RFC1055)封装。
- 波形(RCV) ⇒ 业务 422 的下层协议。
- 40 ⇒ 41, 42: 422 协议里的源和目的 ID。
- KJT:开机通(?),包含一些旧的定频通信等实现。
Analyze
Macro Controlled conditional compile
#ifdef BOARD_IS_MDM_41R00C_V3 // defined in GCC / G++ Config
#define CPU_6416
#define MAX_CH 2 //发送解调通道的数目
#define MAX_CH_XMITTER 1 //发射机数量
#define MAX_CH_RECEIVER 1 //接收机数量
#define USE_KJT_AND_JBZ //军兵种网内应用&&开机通业务 lgw@2015-8-18 18:27:10
#endif
Main: rcu_linux_main.cpp
argv[1] 传入 dbg_xmt_type //0:aisc 7:rf board 8:io bc 9:dsp 10:HSSI E0 11:ARM 207_2 12:NET 13:SIM 15:io board。ARM 板子为 7。2: debug mode
main:
OS_TASK_START_ALL(); // 启动各个内部工作线程(pthread)
AppNet_LogStart(); // log
AppNetAud_TskStartUp(); //207 (FPGA) receive thread 接口
OS_TASK_START_ALL(); // 启动所有线程。 task 管理 OS_EXT_ARM_LINUX.c
#define MAX_TSK_NUM 32
pthread_t mOSTskTbl [MAX_TSK_NUM] ; // 存放每个 task 的 pthread id
int mTskMsgQid[MAX_TSK_NUM] ; // 每个task 一个 msg queue
int mTskMsgErr[MAX_TSK_NUM] ; // 各个task错误码
int mTskMsgMsOut[MAX_TSK_NUM]; // timeout。每个task的定时器
OS_TSK_MBX_INIT(); // 初始化各线程的 System V message queue ([msgget](<https://man7.org/linux/man-pages/man2/msgget.2.html>))
OS_EEP_Init(; // os_eep_c_arm_linux.c, 读取电台工作参数表配置文件。位置: ./eep, savefile_A.bin, savefile_B.bin
OS_Reg_StartUp(); // NOOP
OS_HW_init_sio(); // 初始化 serial io (系统各串口设备) COM1-COM32 (主要是初始化缓冲区) stHwSIO[1].BufTxQue, BufRxQue / BufPtrStHwSioST_HW_SIO
OS_HW_init_frame(); // ST_FRAME stFrame[2];. 每个stFrame对应1个串口和 32 frames * 256 bytes 缓冲区。COM30 (29) / COM31 (30)。保密机(bmj)同步串口
OS_HW_init_rtc(); // FOR_MDM_2300 and RTC_DS3234: yes. RTC_DS1302: not. DS3234 RTC芯片。#define COM_RTC 26
OS_StartTimer(); // setitimer /SIGALRM 设置的 2000μs interval 定时器. signal_timer_handler
OsTaskCreateP(ID_DSP); // DSP
//#if USE_KJT_AUTO_TEST==1//lgw@2020/3/18 13:56:15 add,1 msgque 2share memory
OsTaskCreateP(ID_RCV) ;// Task_App_Rcv. RCU: 大部分主控功能
// rcu_xmit 发射流程状态机。4个功率(db)等级 0,6,3,12
/*
20*2个状态机
AppRcuTsk_Xmit_Manager_01 // idle 状态。
检测键控(>=0) => 02
xmit_Manager_02 : 更新发射机频率和业务(sub_xmit_load_new_freq)
发射中心频率 + 频偏
_03: 检测频率合法 =>6, 非法 => 4
6: 记录上一次频率(1stStGrpChan) 以备失败时恢复上次频率
7: noop
8: 对于电台,关闭接收机,关闭喇叭
9: fsub_xmit_strt_xmit 正式启动发射.设置 task_xmit_main 状态机为 5
10:设置发射机已经启动状态
11: 等待ptt释放 => stop_xmit 结束发射流程
15: 常态,正常发
rcutsk_xmit_main : 主发射流程状态机
4: idle
5: 检测频率合法,非法 => warning
6-9 : exception
10: set_ctrl_set_channel_ptt_on 打开信道 ptt => 207
set_filt_ptt_onoff 设置滤波器开关
sub_ctrl_key_pow_amplifier
*/
// rcu_recv 接受流程
// rcu_ptt.c PTT管理。
// LPC 声码化
/*
sub_ptt_manager : 模拟业务下的ptt状态机管理
sub_get_ptt_krq_status
5ms 去抖
Sub_Read_Krq_Ext 读取硬件 PTT 状态(电位) // 不同板子实现不同。最终通过 207 获取
sub_ptt_manager_lpc : 管理声码化业务模式下的 ptt
sub_ptt_manager_proc
*/
//#endif
OsTaskCreateP(ID_MAG) ;// Task_App_Mag。APP_MANAGER
OsTaskCreateP(ID_FPP) ; // Task_App_Fpp, 429 / 253 / 422 等所有外部接口
// MsgQueue.cpp 发送各种消息
OsTaskCreateP(ID_RCU) ;// Task_App_Rcu。电台接收机管理
OsTaskCreateP(ID_START) ;// TaskStart 打印其它 task 状态后推出