1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef LNN_HEARTBEAT_FSM_H 17 #define LNN_HEARTBEAT_FSM_H 18 19 #include "common_list.h" 20 #include "lnn_heartbeat_medium_mgr.h" 21 #include "lnn_state_machine.h" 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 #define PKG_NAME_SIZE_MAX 65 28 29 typedef enum { 30 STATE_HB_INDEX_MIN = 0, 31 STATE_HB_NONE_INDEX = STATE_HB_INDEX_MIN, 32 STATE_HB_NORMAL_NODE_INDEX, 33 STATE_HB_MASTER_NODE_INDEX, 34 STATE_HB_INDEX_MAX, 35 } LnnHeartbeatState; 36 37 typedef enum { 38 EVENT_HB_MIN = 0, 39 EVENT_HB_AS_MASTER_NODE, 40 EVENT_HB_AS_NORMAL_NODE, 41 EVENT_HB_IN_NONE_STATE, 42 EVENT_HB_PROCESS_SEND_ONCE, 43 EVENT_HB_SEND_ONE_BEGIN = 5, 44 EVENT_HB_SEND_ONE_END, 45 EVENT_HB_CHECK_DEV_STATUS, 46 EVENT_HB_START_PROCESS, 47 EVENT_HB_STOP_SPECIFIC, 48 EVENT_HB_SET_MEDIUM_PARAM = 10, 49 EVENT_HB_UPDATE_SEND_INFO, 50 EVENT_HB_SCREEN_OFF_CHECK_STATUS, 51 EVENT_HB_MAX, 52 } LnnHeartbeatEventType; 53 54 typedef struct { 55 ListNode node; 56 uint16_t id; 57 LnnHeartbeatType hbType; 58 59 char fsmName[HB_FSM_NAME_LEN]; 60 FsmStateMachine fsm; 61 LnnHeartbeatState state; 62 LnnHeartbeatStrategyType strategyType; 63 } LnnHeartbeatFsm; 64 65 typedef struct { 66 LnnHeartbeatType hbType; 67 bool wakeupFlag; 68 bool isRelay; 69 bool *isRemoved; 70 } LnnRemoveSendEndMsgPara; 71 72 typedef struct { 73 LnnHeartbeatType hbType; 74 ConnectionAddrType addrType; 75 bool hasNetworkId; 76 bool isWakeUp; 77 const char networkId[NETWORK_ID_BUF_LEN]; 78 } LnnCheckDevStatusMsgPara; 79 80 typedef struct { 81 LnnHeartbeatType hbType; 82 LnnHeartbeatStrategyType strategyType; 83 bool isRelay; 84 bool isSyncData; 85 bool isNeedRestart; 86 bool hasScanRsp; 87 bool isFirstBegin; 88 bool isFast; 89 char callerId[PKG_NAME_SIZE_MAX]; 90 } LnnProcessSendOnceMsgPara; 91 92 int32_t LnnStartHeartbeatFsm(LnnHeartbeatFsm *hbFsm); 93 int32_t LnnStopHeartbeatFsm(LnnHeartbeatFsm *hbFsm); 94 95 int32_t LnnPostNextSendOnceMsgToHbFsm( 96 LnnHeartbeatFsm *hbFsm, const LnnProcessSendOnceMsgPara *para, uint64_t delayMillis); 97 int32_t LnnPostSendBeginMsgToHbFsm(LnnHeartbeatFsm *hbFsm, LnnHeartbeatType type, bool wakeupFlag, 98 LnnProcessSendOnceMsgPara *msgPara, uint64_t delayMillis); 99 int32_t LnnPostSendEndMsgToHbFsm(LnnHeartbeatFsm *hbFsm, LnnHeartbeatSendEndData *custData, uint64_t delayMillis); 100 int32_t LnnPostStartMsgToHbFsm(LnnHeartbeatFsm *hbFsm, uint64_t delayMillis); 101 int32_t LnnPostStopMsgToHbFsm(LnnHeartbeatFsm *hbFsm, LnnHeartbeatType type); 102 int32_t LnnPostTransStateMsgToHbFsm(LnnHeartbeatFsm *hbFsm, LnnHeartbeatEventType evtType); 103 int32_t LnnPostSetMediumParamMsgToHbFsm(LnnHeartbeatFsm *hbFsm, const LnnHeartbeatMediumParam *para); 104 int32_t LnnPostCheckDevStatusMsgToHbFsm( 105 LnnHeartbeatFsm *hbFsm, const LnnCheckDevStatusMsgPara *para, uint64_t delayMillis); 106 int32_t LnnPostUpdateSendInfoMsgToHbFsm(LnnHeartbeatFsm *hbFsm, LnnHeartbeatUpdateInfoType type); 107 int32_t LnnPostScreenOffCheckDevMsgToHbFsm( 108 LnnHeartbeatFsm *hbFsm, const LnnCheckDevStatusMsgPara *para, uint64_t delayMillis); 109 110 void LnnRemoveSendEndMsg(LnnHeartbeatFsm *hbFsm, LnnHeartbeatType type, bool wakeupFlag, bool isRelay, bool *isRemoved); 111 void LnnRemoveCheckDevStatusMsg(LnnHeartbeatFsm *hbFsm, LnnCheckDevStatusMsgPara *msgPara); 112 void LnnRemoveScreenOffCheckStatusMsg(LnnHeartbeatFsm *hbFsm, LnnCheckDevStatusMsgPara *msgPara); 113 void LnnRemoveProcessSendOnceMsg( 114 LnnHeartbeatFsm *hbFsm, LnnHeartbeatType hbType, LnnHeartbeatStrategyType strategyType); 115 116 LnnHeartbeatFsm *LnnCreateHeartbeatFsm(void); 117 void LnnDestroyHeartbeatFsm(LnnHeartbeatFsm *hbFsm); 118 119 #ifdef __cplusplus 120 } 121 #endif 122 #endif /* LNN_HEARTBEAT_FSM_H */ 123