|
|
@@ -293,27 +293,68 @@ int main(void)
|
|
|
printf("Device is ready\r\n");
|
|
|
printf("设备地址:0x%02X%02X\n", deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
|
|
|
uint8_t i = 0;
|
|
|
+
|
|
|
while (1)
|
|
|
{
|
|
|
/* USER CODE END WHILE */
|
|
|
|
|
|
/* USER CODE BEGIN 3 */
|
|
|
+
|
|
|
+
|
|
|
+ GPIO_PinState sosState = HAL_GPIO_ReadPin(SOS_KEY_GPIO_Port, SOS_KEY_Pin);//高为未按压,低为按下,优先级最高
|
|
|
+ // printf("SOS_KEY_Pin pin state = %d\r\n", sosState);
|
|
|
+
|
|
|
+ if (!sosState) {
|
|
|
+ E52_Heartbeat_Fun();
|
|
|
+ printf("SOS中\r\n");
|
|
|
+
|
|
|
+ deviceInfo.BlDataFlag = BL_START;
|
|
|
+ printf("开启蓝牙扫描\r\n");
|
|
|
+ HAL_Delay(1000);
|
|
|
+ deviceInfo.BlDataFlag = BL_STOP;
|
|
|
+ int k = 0;
|
|
|
+ while (receiveBlDataCount > k) {
|
|
|
+
|
|
|
+ printf("发送第%d个蓝牙数据给Lora\r\n", k);
|
|
|
+ if (deviceInfo.loraSendSuccessFlag == 0) {
|
|
|
+ E52_Send_SOS_Fun(k,0x00);
|
|
|
+ }else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ memset(totalData[k], 0, sizeof(totalData[k]));
|
|
|
+ k++;
|
|
|
+ }
|
|
|
+ HAL_Delay(1000);
|
|
|
+ E52_Send_Bl_Data_Fun(k,0x01);
|
|
|
+ printf("停止蓝牙扫描,开始发送蓝牙数据给Lora\r\n");
|
|
|
+
|
|
|
+ HAL_Delay(2000);
|
|
|
+ receiveBlDataCount = 0;
|
|
|
+ deviceInfo.timeCount = 0;
|
|
|
+ deviceInfo.forwardBLAndLoraDataDuration = 0;
|
|
|
+ k = 0;
|
|
|
+ printf("发送结束\r\n");
|
|
|
+ HAL_Delay(2000);
|
|
|
+
|
|
|
+ continue;
|
|
|
+ // HAL_Delay(000);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
// 命令为IDLE,且步骤为STEP_INIT 说明有新数据。
|
|
|
- if (GET_CMD( deviceInfo.commandFromCloud) == IDLE && GET_STEP(deviceInfo.commandFromCloud) == STEP_VERIFY) {
|
|
|
+ if (GET_CMD( deviceInfo.commandFromCloud) == IDLE && GET_STEP(deviceInfo.commandFromCloud) == STEP_VERIFY && sosState) {
|
|
|
E52_Analyze_Data();
|
|
|
}
|
|
|
|
|
|
// 检查是否接收到"心跳"命令,且设备在线
|
|
|
- if (!deviceInfo.isOnline){
|
|
|
+ if (!deviceInfo.isOnline && sosState){
|
|
|
printf("The device is not online.\r\n");
|
|
|
if (!deviceInfo.loraSendSuccessFlag) {
|
|
|
E52_Heartbeat_Fun();
|
|
|
}
|
|
|
HAL_Delay(3000);
|
|
|
}
|
|
|
- GPIO_PinState state;
|
|
|
- state = HAL_GPIO_ReadPin(SOS_KEY_GPIO_Port, SOS_KEY_Pin);
|
|
|
- printf("SOS_KEY_Pin pin state = %d\r\n", state);
|
|
|
+
|
|
|
// if (SOS_key_struct.sosCheckActive) {
|
|
|
// RTC_DateTimeTypeDef now;
|
|
|
// RTC_GetDateTime(&hrtc, &now);
|
|
|
@@ -334,7 +375,7 @@ int main(void)
|
|
|
// }
|
|
|
|
|
|
// 03:请求蓝牙数据
|
|
|
- if (GET_CMD( deviceInfo.commandFromCloud) == REQUEST_BLUETOOTH_DATA && deviceInfo.isOnline) {
|
|
|
+ if (GET_CMD( deviceInfo.commandFromCloud) == REQUEST_BLUETOOTH_DATA && deviceInfo.isOnline && sosState) {
|
|
|
|
|
|
switch (GET_STEP(deviceInfo.commandFromCloud)) {
|
|
|
case REQUEST_BLUETOOTH_DATA_SCAN:
|
|
|
@@ -380,7 +421,7 @@ int main(void)
|
|
|
}
|
|
|
|
|
|
// 08:请求心跳数据
|
|
|
- if (GET_CMD( deviceInfo.commandFromCloud) == E52_HEARTBEAT && deviceInfo.isOnline) {
|
|
|
+ if (GET_CMD( deviceInfo.commandFromCloud) == E52_HEARTBEAT && deviceInfo.isOnline && sosState) {
|
|
|
switch (GET_STEP(deviceInfo.commandFromCloud)) {
|
|
|
case HEARTBEAT_SEND:
|
|
|
if (deviceInfo.loraSendSuccessFlag == 0) {
|
|
|
@@ -402,7 +443,7 @@ int main(void)
|
|
|
}
|
|
|
|
|
|
// 07:配置E52
|
|
|
- if (GET_CMD( deviceInfo.commandFromCloud) == CONFIGURE_E52 && deviceInfo.isOnline) {
|
|
|
+ if (GET_CMD( deviceInfo.commandFromCloud) == CONFIGURE_E52 && deviceInfo.isOnline && sosState) {
|
|
|
switch (GET_STEP(deviceInfo.commandFromCloud)) {
|
|
|
case CONFIGURE_E52_SET_BROADCAST_TYPE: //第一步,配置广播类型
|
|
|
E52_CONFIG_BROADCAST_TYPE_FUN(deviceInfo.broadcast_type);
|