/***********************************************************************************
* @fn main
*
* @brief This is the main entry of the "Light Switch" application.
* After the application modes are chosen the switch can
* send toggle commands to a light device.
* @param basicRfConfig - file scope variable. Basic RF configuration
* data
* appState - file scope variable. Holds application state
*
* @return none
*/
/***********************************************************************************
@函数 主函数
@简介 “灯开关”程序的起始主函数。在选定程序模式后,由开关节点按键 向 灯节点发送一个 状态切换命令来控制灯的灭。
@参数 basicRfConfig - Basic RF 配置信息
typedef struct {
uint16 myAddr; //本节点地址;
uint16 panId; //PANID号;
uint8 channel; // 通道号;
uint8 ackRequest; //是否要求有应答;
#ifdef SECURITY_CCM //安全设置(目前应用不涉及该应用,一般跳过处理);
uint8* securityKey;
uint8* securityNonce;
#endif
} basicRfCfg_t;
appState – 显示应用程序状态
basicRfRxInfo_t 和 basicRfTxState_t收发的一些信息状态。
@返回值 无
*/
void main(void)
{
uint8 appMode = NONE;
//如果程序中 多个功能选择的话 可以考虑 设备模式变量 来进行程序功能的选择;
//设备参数的选择也是同样的道理,如:设备编号。
// Config basicRF
basicRfConfig.panId = PAN_ID; //该程序中关于网络参数PANID 、通道号、短地址都以常量的形式固定;
basicRfConfig.channel = RF_CHANNEL;
basicRfConfig.ackRequest = TRUE; // 该值为真,该节点发送数据包后,要求接受方收到数据包后返回一个ACK;
#ifdef SECURITY_CCM
basicRfConfig.securityKey = key;
#endif
// Initalise board peripherals
halBoardInit(); // 进行时钟设置 和 IO设置,如:LED、按键、LCD等相关外设;
halJoystickInit(); // 重复上一步基本的初始化,多出部分为可选择功能:开启中断服务子程序;
// Initalise hal_rf
// 进行RF初始化,如果RF部分初始化失败,则指示灯动作;
if(halRfInit()==FAILED) {
HAL_ASSERT(FALSE);
}
// Indicate that device is powered
halLedSet(1); // LED1亮;
// Print Logo and splash screen on LCD
// 液晶显示logo;
utilPrintLogo("Light Switch");
// Wait for user to press S1 to enter menu
//等待按下S1 进入功能选择目录;
while (halButtonPushed()!=HAL_BUTTON_1);
halMcuWaitMs(350);
halLcdClear();
// Set application role
//通过Joystick操作 赋值给 程序模式变量 以进行功能的选择;
//若设备节点功能固定的话,这部分可舍去;
appMode = appSelectMode();
halLcdClear();
// Transmitter application
//根据 模式变量的值 来进入不同的功能程序;
//开关节点为发送程序;
if(appMode == SWITCH) {
// No return from here
appSwitch();
}
// Receiver application
//灯节点为接收程序;
else if(appMode == LIGHT) {
// No return from here
appLight();
}
// Role is undefined. This code should not be reached
//如果节点功能未被定义即,非开关非灯,则指示灯动作;
HAL_ASSERT(FALSE);
}