#pragma once #include "uart/ProtocolSender.h" #include "uart/UartContext.h" #include "core/utilities.h" #include "edge/call_log.h" #include "net/tcp_client.h" #include "net/tcp_model.h" #include "server/http_server.h" #include "base/strings.hpp" #include "pjsua/pjsua-lib/pjsua.h" #include "utils/GpioHelper.h" #include "utils/TimeHelper.h" #include "utils/BrightnessHelper.h" #include #include #include #include #include #include #include "service/BusinessConfig.h" static bool sosTimerRegistered = true; static bool isSleepTimerRegistered = false; // 是否开启息屏定时任务 static bool isSleep = false; // 是否在息屏 static bool isNursing = false; // 用于启动时判断是否处于护理状态 static bool isNetreset = false; static int netresetInt = 0; static string callTid = ""; static int timeDifference = 8; struct DeviceButtonFunctionTypeAndValue { string type; string value; }; static std::unordered_map deviceButtonFunction; static bool isConnectHandle = false; static bool isConnectSos = false; static bool isConnectHandle1 = false; static bool isConnectHandle2 = false; static bool isConnectHandle3 = false; static bool isConnectHandle4 = false; static bool isConnectOutKey1 = false; static bool isConnectOutKey2 = false; static bool isConnectOutKey3 = false; static bool isConnectOutKey4 = false; static bool isConnectOutKey5 = false; static bool isConnectOutKey6 = false; //static bool isTriggerHandle = false; //static bool isTriggerSos = false; static bool isTriggerKey5 = false; static bool isTriggerKey6 = false; static bool isTriggerKey7 = false; static bool isTriggerKey8 = false; static bool isTriggerKey9 = false; static bool isTriggerKey10 = false; static bool isTriggerKey11 = false; static bool isTriggerKey12 = false; static bool isTriggerKey13 = false; static bool isTriggerHandle1 = false; static bool isTriggerHandle2 = false; static bool isTriggerHandle3 = false; static bool isTriggerHandle4 = false; static bool isTriggerOutKey1 = false; static bool isTriggerOutKey2 = false; static bool isTriggerOutKey3 = false; static bool isTriggerOutKey4 = false; static bool isTriggerOutKey5 = false; static bool isTriggerOutKey6 = false; #define FUNCTION_TIMER_HANDLE 3 // 增援的定时器id #define SOS_CLICK_TIME_HANDLE 4 // sos的定时器id #define SOS_LAMP_TIME_HANDLE 5 // sos的门灯定时器id #define EVENT_TIME_HANDLE 8 // 事件定时器 #define SLEEP_STRAT_TIME_HANDLE 9 // 息屏 #define SYS_RESTART_TIME_HANDLE 10 // 重启 #define PROMPT_TIME_HANDLE 11 // 提示语 #define NURSEING_TIME_HANDLE 12 // 护理 #define DOOR_LIGHT_TIME_HANDLE 13 // 门灯 #define KEY5_TRIGGER_TIME_HANDLE 15 #define KEY6_TRIGGER_TIME_HANDLE 16 #define KEY7_TRIGGER_TIME_HANDLE 17 #define KEY8_TRIGGER_TIME_HANDLE 18 #define KEY9_TRIGGER_TIME_HANDLE 19 #define KEY10_TRIGGER_TIME_HANDLE 20 #define KEY11_TRIGGER_TIME_HANDLE 21 #define KEY12_TRIGGER_TIME_HANDLE 22 #define KEY13_TRIGGER_TIME_HANDLE 23 #define HANDLE1_TRIGGER_TIME_HANDLE 24 #define HANDLE2_TRIGGER_TIME_HANDLE 25 #define HANDLE3_TRIGGER_TIME_HANDLE 26 #define HANDLE4_TRIGGER_TIME_HANDLE 27 #define OUTKYE1_TRIGGER_TIME_HANDLE 28 #define OUTKYE2_TRIGGER_TIME_HANDLE 29 #define OUTKYE3_TRIGGER_TIME_HANDLE 30 #define OUTKYE4_TRIGGER_TIME_HANDLE 31 #define OUTKYE5_TRIGGER_TIME_HANDLE 32 #define OUTKYE6_TRIGGER_TIME_HANDLE 33 //#define HANDLE_TRIGGER_TIME_HANDLE 15 //#define SOS_TRIGGER_TIME_HANDLE 16 //#define HANDLE1_TRIGGER_TIME_HANDLE 17 //#define HANDLE2_TRIGGER_TIME_HANDLE 18 //#define HANDLE3_TRIGGER_TIME_HANDLE 19 //#define HANDLE4_TRIGGER_TIME_HANDLE 20 #define HTTP_SERVER_PORT 80 #define goback 200 #define SIP_RECONNECT_TIME_HANDLE 201 srv::HttpServer httpServer; std::list sosDataList; namespace { std::string uilogic[] = { "testActivity", "ui3Activity" }; void CloseUi(); int feed_dogs = 0; void PrintCallLog() { CallLogEntries entries; int ret = GetCallLog(&entries); LOGD("GetCallRecord %d", ret); for (auto r : entries) { LOGD("id=%d, uri=%s, contact=%s,duration=%d,created_at=%d", r.id, r.uri.c_str(), r.contact.c_str(), r.duration, r.created_at); } } void OnCallStateChanged(voip::Telephone* telephone, int call_id, voip::State state) { LOGD("call state = %d", state); if (state == voip::STATE_CALL_INCOMING || state == voip::STATE_CALL_CALLING || state == voip::STATE_CALL_CONFIRMED) { voip::CallInfo info = GetTelephone()->GetCallInfo(); LOGD("info.id == %d", info.id); LOGD("info.remote_uri == %s", info.remote_uri.c_str()); LOGD("info.remote_contact == %s", info.remote_contact.c_str()); string sipId = info.remote_uri.substr(info.remote_uri.find(":") + 1, info.remote_uri.find("@") - info.remote_uri.find(":") - 1); LOGD("sipId == %s", sipId.c_str()); if (StoragePreferences::getString(STORE_SIGNAL_TYPE, SIGNAL_TYPE) == "SIP"){ EASYUICONTEXT->openActivity("callActivity"); } else { if (sipId != "0000000000") { const char* currentAppName = EASYUICONTEXT->currentAppName(); string _currentAppName = currentAppName; if (_currentAppName != "callActivity") { telephone->Hangup(); LOGD("=================> 不在通话界面,直接挂断!"); return; } } } if (state == voip::STATE_CALL_INCOMING) { if (telephone->GetCallCount() > 1) { LOGD("call count > 1, return"); telephone->Hangup(call_id, voip::SIP_STATUS_CODE_BUSY_HERE); return; } //提前显示视频 if (StoragePreferences::getString(STORE_SIGNAL_TYPE, SIGNAL_TYPE) == "SIP"){ telephone->Answer(call_id, voip::SIP_STATUS_CODE_PROGRESS); telephone->Answer(); } else { acceptSIP(); } } } if (state == voip::STATE_CALL_DISCONNECTED) { LOGD("通话挂断"); if (telephone->GetCallCount() > 1) { LOGD("call count > 1, return"); return; } if (StoragePreferences::getString(STORE_SIGNAL_TYPE, SIGNAL_TYPE) == "SIP"){ //EASYUICONTEXT->goHome(); EASYUICONTEXT->goBack(); } pjsua_call_info ci; pjsua_call_get_info(call_id, &ci); LOGD("通话结束的状态码 ===> %d", ci.last_status); if (ci.last_status == voip::SIP_NOT_FOUND) { if (CallingStatus::instance()->busy()){ callActivityFinish(CallFinishType::NOT_FOUND); } mActivityPtr->registerUserTimer(SIP_RECONNECT_TIME_HANDLE, 1 * 1000); } else if (ci.last_status == voip::SIP_REQUEST_TIMES) { if (CallingStatus::instance()->busy()){ callActivityFinish(CallFinishType::REQUEST_TIMES); } mActivityPtr->registerUserTimer(SIP_RECONNECT_TIME_HANDLE, 1 * 1000); } else { if (CallingStatus::instance()->busy()){ callActivityFinish(CallFinishType::END); } } // //保存通话记录 // voip::CallInfo info = telephone->GetCallInfo(call_id); // CallLogEntry entry; // entry.uri = info.remote_uri; // entry.contact = info.remote_contact; // entry.duration = info.duration/1000; // // if (0 != PutCallLog(entry)) { // LOGE("保存通话记录失败"); // } // // int n = GetCallLogCount(); // if (n > CALL_LOG_COUNT_MAX) { // //超过最大通话记录条数,删除旧记录 // if (0 != DeleteOldCallLog(n - CALL_LOG_COUNT_MAX)) { // LOGE("删除失败"); // } // } // // const char* currentAppName = EASYUICONTEXT->currentAppName(); // string _currentAppName = currentAppName; // if (_currentAppName == "callActivity") { // callActivityFinish(HANDOFF); // return; // } //PrintCallLog(); } } void CloseUi() { for(int i = 0; i < 2; i++){ EASYUICONTEXT->closeActivity(uilogic[i].c_str()); } } void setBrightness(){ int dayLight = StoragePreferences::getInt(STORE_DAY_LIGHT,100); int nightLight = StoragePreferences::getInt(STORE_NIGHT_LIGHT,10); if (checkIsDay()){ BRIGHTNESSHELPER->setBrightness(dayLight); } else { BRIGHTNESSHELPER->setBrightness(nightLight); } } void addSipCallStateListener() { GetTelephone()->AddCallStateListener(OnCallStateChanged); } void removeSipCallStateListener() { GetTelephone()->RemoveCallStateListener(OnCallStateChanged); } } void setTimeDifference() { std::string _timeZone = StoragePreferences::getString(STORE_PART_TIME_ZONE, defaultPartTimeZone); if (_timeZone == "Africa/Lome") { timeDifference = 0; } else if (_timeZone == "Africa/Luanda") { timeDifference = 1; } else if (_timeZone == "Africa/Kigali") { timeDifference = 2; } else if (_timeZone == "Europe/Moscow") { timeDifference = 3; } else if (_timeZone == "Europe/Astrakhan") { timeDifference = 4; } else if (_timeZone == "Asia/Karachi") { timeDifference = 5; } else if (_timeZone == "Asia/Dhaka") { timeDifference = 6; } else if (_timeZone == "Asia/Ho_Chi_Minh") { timeDifference = 7; } else if (_timeZone == "Asia/Seoul") { timeDifference = 9; } else if (_timeZone == "Asia/Ust-Nera") { timeDifference = 10; } else if (_timeZone == "Asia/Magadan") { timeDifference = 11; } else if (_timeZone == "Asia/Anadyr") { timeDifference = 12; } else if (_timeZone == "Pacific/Apia") { timeDifference = 13; } else if (_timeZone == "Pacific/Kiritimati") { timeDifference = 14; } else if (_timeZone == "Atlantic/Cape_Verde") { timeDifference = -1; } else if (_timeZone == "America/Noronha") { timeDifference = -2; } else if (_timeZone == "America/Sao_Paulo") { timeDifference = -3; } else if (_timeZone == "America/Montserrat") { timeDifference = -4; } else if (_timeZone == "America/Bogota") { timeDifference = -5; } else if (_timeZone == "America/Merida") { timeDifference = -6; } else if (_timeZone == "America/Creston") { timeDifference = -7; } else if (_timeZone == "Pacific/Pitcairn") { timeDifference = -8; } else if (_timeZone == "Pacific/Gambier") { timeDifference = -9; } else if (_timeZone == "Pacific/Honolulu") { timeDifference = -10; } else if (_timeZone == "Pacific/Midway") { timeDifference = -11; } } int getTimeDifference() { return timeDifference; } std::list getSosDataList() { return sosDataList; } void cleanSosDataList() { sosDataList.clear(); } void deviceReboot() { LOGD("Device Reboot!"); const char* req = "-1"; TcpClient::instance()->sendMsg(req); lightControl("CALLLED", "000F"); sync(); reboot(RB_AUTOBOOT); } void systemRestart() { if (!isNetreset) { isNetreset = true; lightControl("CALLLED", "000F"); mActivityPtr->registerUserTimer(SYS_RESTART_TIME_HANDLE, 1000); } } string _typeStr; string _lightColorStr; string _actualColorStr; bool isDoorLightTimeHandle = false; void lightControl(std::string typeStr, std::string lightColorStr) { // 类型是门灯,并且还原成白色灯 std::string heartStr; if (typeStr == "DOORLED" && lightColorStr == "000F") { //护理状态,需要还原成护理灯 if (StoragePreferences::getBool(STORE_NURSING_TYPE, false)) { std::string color = StoragePreferences::getString(STORE_NURSING_COLOR_RGB, "010"); if (color != "" && color.size() == 3) { heartStr = "DOORLED," + color + "F"; } else { heartStr = "DOORLED,010F"; } } else { // 还原成无灯光的状态 heartStr = "DOORLED,000F"; } } else { heartStr = typeStr + "," + lightColorStr; } if (typeStr == "DOORLED" && isDoorLightTimeHandle) { isDoorLightTimeHandle = false; mActivityPtr->unregisterUserTimer(DOOR_LIGHT_TIME_HANDLE); } LOGD("=====> the heartStr == %s", heartStr.c_str()); const char* sendMsg = heartStr.c_str(); sendProtocolTo(UART_TTYS2, (byte*)(sendMsg), strlen(sendMsg)); } void lightControl(std::string typeStr, std::string lightColorStr, int time) { LOGD("频率闪烁,类型:%s,颜色:%s,频率:%d", typeStr.c_str(), lightColorStr.c_str(), time); _typeStr = typeStr; _lightColorStr = lightColorStr; _actualColorStr = lightColorStr; // 还原成无灯光的状态 std::string heartStr = typeStr + "," + lightColorStr; LOGD("=====> the heartStr == %s", heartStr.c_str()); const char* sendMsg = heartStr.c_str(); sendProtocolTo(UART_TTYS2, (byte*)(sendMsg), strlen(sendMsg)); isDoorLightTimeHandle = true; mActivityPtr->registerUserTimer(DOOR_LIGHT_TIME_HANDLE, time); } // 接收tcp消息 void handleMsg(byte* inBytes){ TcpModel tcpModel; tcpModel = getTcpModel(inBytes); LOGD("tcp model: %s, %s", tcpModel.type.c_str(), tcpModel.action.c_str()); if (tcpModel.type == TcpType::OTHER) { LOGD("trans tcp json failed"); } else if (tcpModel.type == TcpType::TIME) { if (tcpModel.action == TimeAction::SYNC) { string serverTime = ""; if (tcpModel.data != ""){ serverTime = tcpModel.data; } else { serverTime = tcpModel.json["time"].asString(); } LOGD("sync time : %s", serverTime.c_str()); // time_t timet = stoi(serverTime); // struct tm *t = gmtime(&timet); // char pDate[25]; // sprintf(pDate,"%d-%02d-%02d %02d:%02d:%02d", // 1900 + t->tm_year, 1+ t->tm_mon, t->tm_mday, // t->tm_hour + 8,t->tm_min,t->tm_sec); // LOGD("transfered time : %s", pDate); // TimeHelper::setDateTime(pDate); TimeHelper::setDataTimeByTimeDifference(serverTime, timeDifference); dataRefresh(); if (isNursing) { setNursingEnd(); } } } else if (tcpModel.type == TcpType::REINFORCE){ if (tcpModel.action == ReinforceAction::RESPONSED){ //回调 TcpCallback callback = TcpCacheManager::instance()->getFunc(tcpModel.tid); if (callback.tid != "0"){ callback.onSuccess(tcpModel.json); } const char* currentAppName = EASYUICONTEXT->currentAppName(); string _currentAppName = currentAppName; if (_currentAppName != "functionActivity") { Intent* intent = new Intent(); intent->putExtra(functionWindows, "helpResonse"); EASYUICONTEXT->openActivity("functionActivity", intent); } else { toFunctionActivity(""); } } } else if (tcpModel.type == TcpType::DEVICE){ if (tcpModel.action == DeviceAction::APP_UPDATE){ //软件升级 if (isSleep) { isSleep = false; BRIGHTNESSHELPER->screenOn(); } Intent* intent = new Intent(); intent->putExtra(appUpdate, "true"); EASYUICONTEXT->openActivity("updateActivity", intent); } else if (tcpModel.action == DeviceAction::RESTART) { // 重启设备 deviceReboot(); } else if (tcpModel.action == DeviceAction::REBOOT) { deviceReboot(); } else if (tcpModel.action == DeviceAction::DEVICE_REFRESH) { // 设备刷新 dataRefresh(); } else if (tcpModel.action == DeviceAction::SYSTEM_SETTING) { // 修改科室设置 getPartSetting(); } else if (tcpModel.action == DeviceAction::SERVER_CHANGE) { StoragePreferences::putString(STORE_GATEWAY, tcpModel.json["server_ip"].asCString()); StoragePreferences::putString(STORE_HTTP_PORT, tcpModel.json["server_port"].asCString()); deviceReboot(); } } else if (tcpModel.type == TcpType::DATA){ if (tcpModel.action == DataAction::REFRESH){ // 刷新数据 dataRefresh(); } } else if (tcpModel.type == TcpType::VOICE){ if (tcpModel.action == VoiceAction::FAILED){ sleep(1); if (CallingStatus::instance()->busy()){ callActivityFinish(CallFinishType::FAILED); } } else if (tcpModel.action == VoiceAction::SUCCESS){ CallingStatus::instance()->setTcpModel(tcpModel); // 只有呼叫成功才闪红灯 lightControl("DOORLED", "100F"); } else if (tcpModel.action == VoiceAction::ACCEPT){ if (CallingStatus::instance()->busy()){ CallingStatus::instance()->setTcpModel(tcpModel); std::string toSipId = tcpModel.json["toSipId"].asString(); callActivityFinish(CallFinishType::ACCEPT); //接听 buildSIP(toSipId); } // 进行门灯还原 lightControl("DOORLED", "000F"); } else if (tcpModel.action == VoiceAction::REJECT){ if (CallingStatus::instance()->busy()){ callActivityFinish(CallFinishType::REJECT); // 进行门灯还原 lightControl("DOORLED", "000F"); } } else if (tcpModel.action == VoiceAction::CANCEL){ if (CallingStatus::instance()->busy()){ callActivityFinish(CallFinishType::CANCEL); } } else if (tcpModel.action == VoiceAction::CALLING){ //对方忙线 callActivityFinish(CallFinishType::BUSY); } else if (tcpModel.action == VoiceAction::CALL){ //我方忙线判断 if (CallingStatus::instance()->busy()){ sendVoiceTcp(VoiceAction::CALLING, tcpModel, tcpModel.from_id); } else { lightControl("DOORLED", "200F"); CallingStatus::instance()->setTcpModel(tcpModel); //来电话了 Intent* intent = new Intent(); intent->putExtra(callActivityType, "toCall"); EASYUICONTEXT->openActivity("callActivity", intent); } } else if (tcpModel.action == VoiceAction::HANDOFF){ //判断 是否同一个对话 long iId = CallingStatus::instance()->getInteractionId(); if (iId > 0 && CallingStatus::instance()->busy()){ long inId = tcpModel.json["id"].asInt(); if (iId == inId && CallingStatus::instance()->busy()){ callActivityFinish(CallFinishType::HANDOFF); } } } else if (tcpModel.action == VoiceAction::SIP_RECONNECT) { mActivityPtr->registerUserTimer(SIP_RECONNECT_TIME_HANDLE, 1 * 1000); } else if (tcpModel.action == VoiceAction::GAIN_OK) { CallingStatus::instance()->setTcpModel(tcpModel); sleep(1); callActivityFinish(CallFinishType::GAIN_OK); } else if (tcpModel.action == VoiceAction::GAIN_FAIL) { if (CallingStatus::instance()->busy()){ callActivityFinish(CallFinishType::GAIN_FAIL); } } } else if (tcpModel.type == TcpType::SOS) { if (tcpModel.action == SosAction::CANCEL) { // SOS还原成无灯光的状态 lightControl("ULED", "0F"); // 进行门灯还原 lightControl("DOORLED", "000F"); statusLight(); // mActivityPtr->unregisterUserTimer(SOS_LAMP_TIME_HANDLE); } } else if (tcpModel.type == TcpType::SIDE) { if (tcpModel.action == SideAction::NURSING) { StoragePreferences::putString(STORE_NURSING_INTERACTION_ID, tcpModel.json["id"].asString()); // 收到nursing,需要把通话给挂断了 voip::CallInfo info = GetTelephone()->GetCallInfo(); LOGD("info state = %d",info.state); if (info.state == voip::STATE_CALL_CALLING || info.state == voip::STATE_CALL_CALLING || info.state == voip::STATE_CALL_CONFIRMED){ TcpModel storeModel = CallingStatus::instance()->getTcpModel(); //只回传iId storeModel.data = storeModel.json["id"].asString(); sendVoiceTcp(VoiceAction::HANDOFF, storeModel, storeModel.from_id); GetTelephone()->Hangup(info.id, voip::SIP_STATUS_CODE_DECLINE); GetTelephone()->Hangup(); EASYUICONTEXT->goBack(); } std::string color = StoragePreferences::getString(STORE_NURSING_COLOR_RGB, "010"); if (color != "" && color.size() == 3) { color = color + "F"; } else { color = "010F"; } lightControl("DOORLED", color); } else if (tcpModel.action == SideAction::NURSING_END) { // 收到nursing_end lightControl("DOORLED", "000F"); } else if (tcpModel.action == SideAction::CALL) { // 收到CALL,需要亮红灯 lightControl("DOORLED", "200F"); } else if (tcpModel.action == SideAction::ACCEPT) { // 进行门灯还原 lightControl("DOORLED", "000F"); if (isHandleId(tcpModel.to_id) && CallingStatus::instance()->busy()) { CallingStatus::instance()->setTcpModel(tcpModel); std::string toSipId = tcpModel.json["toSipId"].asString(); callActivityFinish(CallFinishType::ACCEPT); //接听 buildSIP(toSipId); } } else if (tcpModel.action == SideAction::CANCEL) { // 进行门灯还原 lightControl("DOORLED", "000F"); if (isHandleId(tcpModel.to_id) && CallingStatus::instance()->busy()) { callActivityFinish(CallFinishType::CANCEL); } } else if (tcpModel.action == SideAction::SOS_CALL) { // 收到SOS_CALL,需要亮红灯 // 门灯亮红灯 lightControl("DOORLED", "100F", 1000); lightControl("CALLLED", "100F"); sosTimerRegistered = false; mActivityPtr->registerUserTimer(SOS_CLICK_TIME_HANDLE, 10000); // 10秒后才能触发 // mActivityPtr->registerUserTimer(SOS_LAMP_TIME_HANDLE, 120000); // 2分钟后才能触发 if (tcpModel.json.isMember("id")) { sosDataList.push_back(tcpModel.json["id"].asString()); } } else if (tcpModel.action == SideAction::SOS_CANCEL) { // 进行门灯还原 lightControl("DOORLED", "000F"); statusLight(); } else if (tcpModel.action == SideAction::SHOW) { const char* currentAppName = EASYUICONTEXT->currentAppName(); string _currentAppName = currentAppName; if (_currentAppName == "callActivity") { return; } Json::Value _it = tcpModel.json; if (_it["actionType"].asString() != "VOICE") { return; } if (_currentAppName != "functionActivity") { Intent* intent = new Intent(); intent->putExtra(functionWindows, "gainCall"); EASYUICONTEXT->openActivity("functionActivity", intent); } size_t pos = tcpModel.tid.find("_"); if (pos != std::string::npos) { _it["tid"] = tcpModel.tid.substr(0, pos); } else { _it["tid"] = tcpModel.tid; } addGainCallData(_it); } else if (tcpModel.action == SideAction::CLEAR) { const char* currentAppName = EASYUICONTEXT->currentAppName(); string _currentAppName = currentAppName; if (_currentAppName == "functionActivity") { deleteGainCallData(tcpModel.json["id"].asString()); } } } else if (tcpModel.type == TcpType::CALLBACK) { if (tcpModel.action == CallbackAction::ACK) { LOGD("CALLBACK ACK !!!!"); //回调 TcpCallback callback = TcpCacheManager::instance()->getFunc(tcpModel.tid); if (callback.tid != "0"){ callback.onSuccess(tcpModel.json); } } else if (tcpModel.action == CallbackAction::SUCCESS) { //回调 TcpCallback callback = TcpCacheManager::instance()->getFunc(tcpModel.tid); if (callback.tid != "0"){ callback.onSuccess(tcpModel.json); } } else if (tcpModel.action == CallbackAction::FAILED) { sleep(1); //回调 TcpCallback callback = TcpCacheManager::instance()->getFunc(tcpModel.tid); if (callback.tid != "0"){ callback.onFalied(tcpModel.json); } if (tcpModel.tid == callTid){ callActivityFinish(CallFinishType::FAILED); } } } else if (tcpModel.type == TcpType::POSITION) { if (tcpModel.action == PositionAction::POSITION_START) { setPosistionItId(tcpModel.json["id"].asInt()); } } else if (tcpModel.type == TcpType::ROOMCHECK) { if (tcpModel.action == RoomCheckAction::START) { setRoomCheckItId(tcpModel.json["id"].asInt()); } } else if (tcpModel.type == TcpType::SCREEN_TIP) { if (tcpModel.action == ScreenTipAction::START) { setPromptTimeItId(tcpModel.json["id"].asInt()); } } else if (tcpModel.type == TcpType::AUTH) { if (tcpModel.action == AuthAction::LOGIN) { // 需要判断fromId跟自己是不是一样的,一样的就代表是自己发送出去,不一样的就代表员工已经登录到其他设备去了 if (tcpModel.from_id == StoragePreferences::getInt(STORE_DEVICE_ID, 0)) { LOGD("id ===> %d", tcpModel.json["id"].asInt()); setAuthItId(tcpModel.json["id"].asInt()); } else { navibarNfcLogout(); // logoutMedicalCare(); // const char* currentAppName = EASYUICONTEXT->currentAppName(); // string _currentAppName = currentAppName; // if (_currentAppName == "medicalCareActivity") { // goHome(); // } } } } else if (tcpModel.type == TcpType::BLUE_CODE) { if (tcpModel.action == BlueCodeAction::SUCCESS) { int id = tcpModel.json["id"].asInt(); LOGD("blue code id ===> %d", id); setBlueCodeId(id, tcpModel.tid); } } } bool getSleepTimerRegistered() { return isSleepTimerRegistered; } // 触发定时任务 void setSleepTimerRegistered(bool result) { LOGD("isSleepTimerRegistered = %d", isSleepTimerRegistered); LOGD("result = %d", result); if (mActivityPtr == NULL) { return; } if (result != isSleepTimerRegistered) { // 与定时任务不同时,才进行处理 if (isSleepTimerRegistered) { // 与定时任务开关进行判断,如果定时任务开启,那就要关闭 isSleepTimerRegistered = result; mActivityPtr->unregisterUserTimer(SLEEP_STRAT_TIME_HANDLE); // 关闭定时器 if (isSleep) { isSleep = false; BRIGHTNESSHELPER->screenOn(); } LOGD("关闭息屏"); } else { // 如果定时任务关着,那就要打开 isSleepTimerRegistered = result; int sleepTime = StoragePreferences::getInt(STORE_SLEEP_TIME, 3); if (sleepTime > 0) { mActivityPtr->registerUserTimer(SLEEP_STRAT_TIME_HANDLE, sleepTime * 60 * 1000); LOGD("开启息屏"); } } } } void scrrenOn() { isSleep = false; BRIGHTNESSHELPER->screenOn(); } void setLangeuage() { std::string deviceLanguage = StoragePreferences::getString(STORE_LANG, defaultLang); std::string partLanguage = StoragePreferences::getString(STORE_PART_LANG, defaultPartLang); if (deviceLanguage != defaultLang) { LOGD("设备自身拥有语言:%s", deviceLanguage.c_str()); EASYUICONTEXT->updateLocalesCode(deviceLanguage.c_str()); } else { LOGD("科室语言:%s", partLanguage.c_str()); if (partLanguage == "en") { EASYUICONTEXT->updateLocalesCode("en_US"); } else if (partLanguage == "es") { EASYUICONTEXT->updateLocalesCode("es_ES"); } else if (partLanguage == "ru") { EASYUICONTEXT->updateLocalesCode("ru_RU"); } else { EASYUICONTEXT->updateLocalesCode("zh_CN"); } } } void setCallTid(std::string tid) { callTid = tid; } void handleHCall(int id) { int handleId = getHandleId(id); if (handleId != 0) { const char* currentAppName = EASYUICONTEXT->currentAppName(); string _currentAppName = currentAppName; if (_currentAppName == "callActivity") { LOGD("已经在呼叫界面"); return; } string handleIdStr = to_string(handleId); Intent* intent = new Intent(); intent->putExtra(callActivityType, "handleHCall"); intent->putExtra(handleCallId, handleIdStr); EASYUICONTEXT->openActivity("callActivity", intent); } else { string errorMsg = LANGUAGEMANAGER->getValue("HandleError") + StoragePreferences::getString(STORE_MAC_ADDR, "0.0.0.0") + ":h" + to_string(id) + " \n" + LANGUAGEMANAGER->getValue("NotAdd"); Intent* intent = new Intent(); intent->putExtra(functionWindows, "warn"); intent->putExtra(warnText, errorMsg); EASYUICONTEXT->openActivity("functionActivity", intent); } } void sosCall(string sosMsg) { if (sosTimerRegistered) { LOGD("TCP -> SOS_CALL"); sendSosCall(sosMsg); // SOS亮红灯 lightControl("ULED", "1F"); // 门灯亮红灯 lightControl("DOORLED", "100F", 1000); lightControl("CALLLED", "100F"); sosTimerRegistered = false; mActivityPtr->registerUserTimer(SOS_CLICK_TIME_HANDLE, 10000); // 10秒后才能触发 // mActivityPtr->registerUserTimer(SOS_LAMP_TIME_HANDLE, 120000); // 2分钟后才能触发 } } void clearDeviceButtonFunction() { deviceButtonFunction.clear(); } void setDeviceButtonFunction(std::string deviceButtonFunctionStr) { LOGD("deviceButtonFunctionStr ==========> %s", deviceButtonFunctionStr.c_str()); Json::Reader reader; Json::Value deviceButtonFunctionJson; if (reader.parse(deviceButtonFunctionStr, deviceButtonFunctionJson)) { for (Json::Value json : deviceButtonFunctionJson) { const std::string key = json["key"].asString(); const std::string type = json["type"].asString(); DeviceButtonFunctionTypeAndValue typeAndValue; typeAndValue.type = type; if (type == "EVENT") { int value = json["value"].asInt(); std::stringstream valueStr; valueStr << value; typeAndValue.value = valueStr.str(); LOGD("key:%s type:%s value:%d ", key.c_str(), type.c_str(), value); } else { string valueStr = json["value"].asString(); typeAndValue.value = valueStr; LOGD("key:%s type:%s value:%s ", key.c_str(), type.c_str(), valueStr.c_str()); } deviceButtonFunction[key] = typeAndValue; } } } void handleCall(string key, string roleType) { if (roleType == "CANCEL") { voip::CallInfo info = GetTelephone()->GetCallInfo(); //拨打 或 挂断 if (CallingStatus::instance()->busy()){ lightControl("DOORLED", "000F"); callActivityFinish(CallFinishType::A1CLICK); } } else { voip::CallInfo info = GetTelephone()->GetCallInfo(); //拨打 或 挂断 if (CallingStatus::instance()->busy()){ lightControl("DOORLED", "000F"); callActivityFinish(CallFinishType::A1CLICK); } else { lightControl("DOORLED", "200F"); Intent* intent = new Intent(); intent->putExtra(callActivityType, "fromCall"); // intent->putExtra(callRoleType, roleType); EASYUICONTEXT->openActivity("callActivity", intent); } } } void handleSos(string value) { if (value == "SOS_CANCEL") { std::list _sosData = getSosDataList(); if (_sosData.empty()) { return; } std::list::iterator it = _sosData.begin(); while (it != _sosData.end()) { string sosDataStr = *it; sendSosCancel(sosDataStr); it++; } cleanSosDataList(); } else { sosCall(""); } } void handleEvent(string key, string id) { // else { // if (StoragePreferences::getString(STORE_CUSTOMER_ID, "") != "" || StoragePreferences::getInt(STORE_EMPTY_BED_CALL, 0) == 1) { // std::stringstream idStr(id); // int _id; // idStr >> _id; // Json::Value json; // json["id"] = _id; // sendEventClick(json); // // Intent* intent = new Intent(); // intent->putExtra(functionWindows, "eventCall"); // intent->putExtra(functionText, getEventMap(id)); // EASYUICONTEXT->openActivity("functionActivity", intent); // } // } } void handleReinforce(string key) { sendReinforceCall(); Intent* intent = new Intent(); intent->putExtra(functionWindows, "help"); EASYUICONTEXT->openActivity("functionActivity", intent); } void handleNursing(string key, string time) { if (!StoragePreferences::getBool(STORE_NURSING_TYPE, false)) { Intent* intent = new Intent(); intent->putExtra(functionWindows, "nursing3"); EASYUICONTEXT->openActivity("functionActivity", intent); } else { const char* currentAppName = EASYUICONTEXT->currentAppName(); string _currentAppName = currentAppName; if (_currentAppName != "functionActivity") { Intent* intent = new Intent(); intent->putExtra(functionWindows, "nursingEnd3"); EASYUICONTEXT->openActivity("functionActivity", intent); } else { nursingEnd3(); } } } void handleBlueCode() { if (StoragePreferences::getBool(STORE_NURSING_TYPE, false)) { setBlueCode(true); } } void getDeviceButtonFunction(string key) { const char* currentAppName = EASYUICONTEXT->currentAppName(); string _currentAppName = currentAppName; if (_currentAppName == "sipTestActivity") { setCheckbox(key); return; } if (deviceButtonFunction.find(key) != deviceButtonFunction.end()) { DeviceButtonFunctionTypeAndValue typeAndValue = deviceButtonFunction[key]; LOGD("typeAndValue.type: %s typeAndValue.value: %s", typeAndValue.type.c_str(), typeAndValue.value.c_str()); if (typeAndValue.type == "SOS") { handleSos(typeAndValue.value); } else if (typeAndValue.type == "VOICE") { handleCall(key, typeAndValue.value); } else if (typeAndValue.type == "EVENT") { handleEvent(key, typeAndValue.value); } else if (typeAndValue.type == "REINFORCE") { handleReinforce(key); } else if (typeAndValue.type == "NURSING") { handleNursing(key, typeAndValue.value); } else if (typeAndValue.type == "BLUE_CODE") { handleBlueCode(); } } else { if (key == "KEY5") { handleCall(key, "NURSE"); } else if (key == "KEY6") { handleCall(key, "NURSE"); } else if (key == "KEY7") { handleSos("SOS"); } else if (key == "KEY>") { handleCall(key, "CANCEL"); } else if (key == "KEY;") { handleBlueCode(); } else if (key == "KEY<") { handleNursing(key, ""); } else if (key == "KEY@") { handleSos("SOS_CANCEL"); } else if (key == "HANDKEY00" || key == "OUTKEY1") { handleHCall(1); } else if (key == "HANDKEY10" || key == "OUTKEY2") { handleHCall(2); } else if (key == "HANDKEY20" || key == "OUTKEY3") { handleHCall(3); } else if (key == "HANDKEY30" || key == "OUTKEY4") { handleHCall(4); } else if (key == "OUTKEY5") { handleHCall(5); } else if (key == "OUTKEY6") { handleHCall(6); } } } //================================= IO 口操作 //紧急按钮灯,明/灭 void setSOS_A5(bool light){ int result = -1; int slight = light?0:1; result = GpioHelper::output("A5", slight); if (result==0){ LOGD("set A5 SOS light %d. success",light); } else { LOGD("set A5 SOS light %d. failed",light); } } //A6,A7,A8 RGB灯控制 void setRGB_A678(bool R, bool G, bool B){ int rR = -1, rG = -1, rB = -1; int sR = R?0:1, sG = G?0:1, sB = B?0:1; rR = GpioHelper::output("A6", sR); rG = GpioHelper::output("A7", sG); rB = GpioHelper::output("A8", sB); const char *strLog = "set %s light %d. %d"; LOGD(strLog,"A6 R",R, rR); LOGD(strLog,"A7 G",G, rG); LOGD(strLog,"A8 B",B, rB); } //手柄按钮 class A1GpioListener : public IGpioListener{ public: bool onGpioEdge(const char *pPin) override { int state = GpioHelper::input("A1"); LOGD("IGpioListener GPIO IS A1=%d", state); if (state==0){ voip::CallInfo info = GetTelephone()->GetCallInfo(); //拨打 或 挂断 if (CallingStatus::instance()->busy()){ callActivityFinish(CallFinishType::A1CLICK); } else { Intent* intent = new Intent(); intent->putExtra(callActivityType, "fromCall"); // intent->putExtra(callRoleType, "NURSE"); EASYUICONTEXT->openActivity("callActivity", intent); } } return true; } void onGpioError(const char *pPin, int error) override { LOGD("IGpioListener ERROR GPIO IS %s, %d", pPin, error); } }; //7寸面板,呼出 class A2GpioListener : public IGpioListener{ public: bool onGpioEdge(const char *pPin) override { int state = GpioHelper::input("A2"); LOGD("IGpioListener GPIO IS A2=%d", state); if (state==0){ //拨打 或 接听 } return true; } void onGpioError(const char *pPin, int error) override { LOGD("IGpioListener ERROR GPIO IS %s, %d", pPin, error); } }; //7寸面板,挂断 class A3GpioListener : public IGpioListener{ public: bool onGpioEdge(const char *pPin) override { int state = GpioHelper::input("A3"); LOGD("IGpioListener GPIO IS A3=%d", state); if (state==0){ //挂断 } return true; } void onGpioError(const char *pPin, int error) override { LOGD("IGpioListener ERROR GPIO IS %s, %d", pPin, error); } }; //紧急按钮 class A4GpioListener : public IGpioListener{ public: bool onGpioEdge(const char *pPin) override { int state = GpioHelper::input("A4"); LOGD("IGpioListener GPIO IS A4=%d", state); if (state==0){ //发出 setSOS_A5(true); } return true; } void onGpioError(const char *pPin, int error) override { LOGD("IGpioListener ERROR GPIO IS %s, %d", pPin, error); } }; /** * 注册定时器 * 填充数组用于注册定时器 * 注意:id不能重复 */ static S_ACTIVITY_TIMEER REGISTER_ACTIVITY_TIMER_TAB[] = { {1, 5000}, {2, 30*1000} }; /** * 当界面构造时触发 */ static void onUI_init(){ // EASYUICONTEXT->updateLocalesCode(StoragePreferences::getString(STORE_LANG, defaultLang).c_str()); setTimeDifference(); setLangeuage(); //IO监测 // IGpioListener *iGpioListenerA1 = new A1GpioListener(); // GpioHelper::registerGpioListener("A1", iGpioListenerA1, E_GPIO_EDGE_TYPE_FALLING); // // IGpioListener *iGpioListenerA2 = new A2GpioListener(); // GpioHelper::registerGpioListener("A2", iGpioListenerA1, E_GPIO_EDGE_TYPE_FALLING); // // IGpioListener *iGpioListenerA3 = new A3GpioListener(); // GpioHelper::registerGpioListener("A3", iGpioListenerA1, E_GPIO_EDGE_TYPE_FALLING); // // IGpioListener *iGpioListenerA4 = new A4GpioListener(); // GpioHelper::registerGpioListener("A4", iGpioListenerA1, E_GPIO_EDGE_TYPE_FALLING); //TCP启动 TcpClient::instance()->startTcp(); //监听SIP信令 addSipCallStateListener(); //开启网页 httpServer.RunAsync(HTTP_SERVER_PORT); // 启动的时候更改为tcp模式 StoragePreferences::putString(STORE_SIGNAL_TYPE, "TCP"); if (StoragePreferences::getBool(STORE_NURSING_TYPE, false)) { LOGD("===============> 关闭护理状态"); StoragePreferences::putBool(STORE_NURSING_TYPE, false); isNursing = true; } //请求版本号 // if(UartContext::Uart3IsOpen()) { // string heartStr = "ASK,VNF-0"; // const char* sendMsg = heartStr.c_str(); // sendProtocolTo(UART_TTYS3, (byte*)(sendMsg), strlen(sendMsg)); // } #if 0 std::thread backend([](){ while (true) { if (feed_dogs > 0) { --feed_dogs; LOGD("feed"); int ret = GpioHelper::output("GPIO_2", 1); //拉高 if (ret != 0) { LOGE("GPIO操作失败"); } usleep(1000 * 20); ret = GpioHelper::output("GPIO_2", 0); //拉低 if (ret != 0) { LOGE("GPIO操作失败"); } } usleep(1000 * 1000); } }); backend.detach(); #endif } /** * 当切换到该界面时触发 */ static void onUI_intent(const Intent *intentPtr) { if (intentPtr != NULL) { //TODO } } /* * 当界面显示时触发 */ static void onUI_show() { StoragePreferences::putString(STORE_SIGNAL_TYPE, "TCP"); //进入主界面 EASYUICONTEXT->openActivity("mainActivity"); } /* * 当界面隐藏时触发 */ static void onUI_hide() { } /* * 当界面完全退出时触发 */ static void onUI_quit() { } /** * 串口数据回调接口 */ static void onProtocolDataUpdate(const SProtocolData &data) { LOGD("cmd = %s", data.cmd.c_str()); if (getIsUpdate()) { LOGD("处于升级过程中,串口不可使用"); return; } if (data.state!=""){ LOGD("state = %s",data.state.c_str()); } string heartStr; if (data.state == "0") { if (data.cmd == "KEY5") { isTriggerKey5 = true; mActivityPtr->registerUserTimer(KEY5_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "KEY6") { isTriggerKey6 = true; mActivityPtr->registerUserTimer(KEY6_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "KEY7") { isTriggerKey7 = true; mActivityPtr->registerUserTimer(KEY7_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "KEY>") { isTriggerKey8 = true; mActivityPtr->registerUserTimer(KEY8_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "KEY<") { isTriggerKey9 = true; mActivityPtr->registerUserTimer(KEY9_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "KEY;") { isTriggerKey10 = true; mActivityPtr->registerUserTimer(KEY10_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "KEY?") { isTriggerKey11 = true; mActivityPtr->registerUserTimer(KEY11_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "KEY=") { isTriggerKey12 = true; mActivityPtr->registerUserTimer(KEY12_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "KEY@") { isTriggerKey13 = true; mActivityPtr->registerUserTimer(KEY13_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "HANDKEY00") { isTriggerHandle1 = true; mActivityPtr->registerUserTimer(HANDLE1_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "HANDKEY10") { isTriggerHandle2 = true; mActivityPtr->registerUserTimer(HANDLE2_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "HANDKEY20") { isTriggerHandle3 = true; mActivityPtr->registerUserTimer(HANDLE3_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "HANDKEY30") { isTriggerHandle4 = true; mActivityPtr->registerUserTimer(HANDLE4_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "OUTKEY1") { isTriggerOutKey1 = true; mActivityPtr->registerUserTimer(OUTKYE1_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "OUTKEY2") { isTriggerOutKey2 = true; mActivityPtr->registerUserTimer(OUTKYE2_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "OUTKEY3") { isTriggerOutKey3 = true; mActivityPtr->registerUserTimer(OUTKYE3_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "OUTKEY4") { isTriggerOutKey4 = true; mActivityPtr->registerUserTimer(OUTKYE4_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "OUTKEY5") { isTriggerOutKey5 = true; mActivityPtr->registerUserTimer(OUTKYE5_TRIGGER_TIME_HANDLE, 3 * 1000); } else if (data.cmd == "OUTKEY6") { isTriggerOutKey6 = true; mActivityPtr->registerUserTimer(OUTKYE6_TRIGGER_TIME_HANDLE, 3 * 1000); } } else if (data.state == "1") { if ((data.cmd == "KEY5" && isTriggerKey5) || (data.cmd == "KEY6" && isTriggerKey6) || (data.cmd == "KEY7" && isTriggerKey7) || (data.cmd == "KEY>" && isTriggerKey8) || (data.cmd == "KEY<" && isTriggerKey9) || (data.cmd == "KEY;" && isTriggerKey10) || (data.cmd == "KEY?" && isTriggerKey11) || (data.cmd == "KEY=" && isTriggerKey12) || (data.cmd == "KEY@" && isTriggerKey13) || (data.cmd == "HANDKEY00" && isTriggerHandle1) || (data.cmd == "HANDKEY10" && isTriggerHandle2) || (data.cmd == "HANDKEY20" && isTriggerHandle3) || (data.cmd == "HANDKEY30" && isTriggerHandle4) || (data.cmd == "OUTKEY1" && isTriggerOutKey1) || (data.cmd == "OUTKEY2" && isTriggerOutKey2) || (data.cmd == "OUTKEY3" && isTriggerOutKey3) || (data.cmd == "OUTKEY4" && isTriggerOutKey4) || (data.cmd == "OUTKEY5" && isTriggerOutKey5) || (data.cmd == "OUTKEY6" && isTriggerOutKey6)) { getDeviceButtonFunction(data.cmd); } } else if (data.state == "3") { if (data.cmd == "KEY6") { isConnectHandle = true; } else if (data.cmd == "KEY7") { isConnectSos = true; } else if (data.cmd == "HANDKEY00") { isConnectHandle1 = true; } else if (data.cmd == "HANDKEY10") { isConnectHandle2 = true; } else if (data.cmd == "HANDKEY20") { isConnectHandle3 = true; } else if (data.cmd == "HANDKEY30") { isConnectHandle4 = true; } else if (data.cmd == "OUTKEY1") { isConnectOutKey1 = true; } else if (data.cmd == "OUTKEY2") { isConnectOutKey2 = true; } else if (data.cmd == "OUTKEY3") { isConnectOutKey3 = true; } else if (data.cmd == "OUTKEY4") { isConnectOutKey4 = true; } else if (data.cmd == "OUTKEY5") { isConnectOutKey5 = true; } else if (data.cmd == "OUTKEY6") { isConnectOutKey6 = true; } } else if (data.state == "4") { if (data.cmd == "KEY6" && isConnectHandle) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("HandleDisconnected")); } else if (data.cmd == "KEY7" && isConnectSos) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("SosDisconnected")); } else if (data.cmd == "HANDKEY00" && isConnectHandle1) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle1Disconnected")); } else if (data.cmd == "HANDKEY10" && isConnectHandle2) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle2Disconnected")); } else if (data.cmd == "HANDKEY20" && isConnectHandle3) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle3Disconnected")); } else if (data.cmd == "HANDKEY30" && isConnectHandle4) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle4Disconnected")); } else if (data.cmd == "OUTKEY1" && isConnectOutKey1) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle1Disconnected")); } else if (data.cmd == "OUTKEY2" && isConnectOutKey2) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle2Disconnected")); } else if (data.cmd == "OUTKEY3" && isConnectOutKey3) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle3Disconnected")); } else if (data.cmd == "OUTKEY4" && isConnectOutKey4) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle4Disconnected")); } else if (data.cmd == "OUTKEY5" && isConnectOutKey5) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle5Disconnected")); } else if (data.cmd == "OUTKEY6" && isConnectOutKey6) { sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle6Disconnected")); } } // if(UartContext::Uart2IsOpen()) { // 如果是true,表示串口打开了 // string heartStr; // // // 面板拨号 // if (data.cmd == "KEY5") { // if (data.state == "0") { // if (isSleep) { // scrrenOn(); // if (!StoragePreferences::getInt(STORE_SCREEN_LIGHT, 0)) { // return; // } // } // // const char* currentAppName = EASYUICONTEXT->currentAppName(); // string _currentAppName = currentAppName; // if (_currentAppName == "sipTestActivity") { // setCheckbox("KEY5"); // return; // } // else { // voip::CallInfo info = GetTelephone()->GetCallInfo(); // //拨打 或 挂断 // if (CallingStatus::instance()->busy()){ // callActivityFinish(CallFinishType::A1CLICK); // lightControl("DOORLED", "000F"); // } else { // lightControl("DOORLED", "100F"); // // Intent* intent = new Intent(); // intent->putExtra(isOutgoing, "true"); // EASYUICONTEXT->openActivity("callActivity", intent); // } // } // } // } // else if (data.cmd == "KEY6") { // if (data.state == "0") { // if (isSleep) { // scrrenOn(); // if (!StoragePreferences::getInt(STORE_SCREEN_LIGHT, 0)) { // return; // } // } // // const char* currentAppName = EASYUICONTEXT->currentAppName(); // string _currentAppName = currentAppName; // if (_currentAppName == "sipTestActivity") { // setCheckbox("KEY6"); // return; // } // // isTriggerHandle = true; // mActivityPtr->registerUserTimer(HANDLE_TRIGGER_TIME_HANDLE, 5 * 1000); // // } // else if (data.state == "1") { // if (isTriggerHandle) { // isTriggerHandle = false; // isConnectHandle = true; // // voip::CallInfo info = GetTelephone()->GetCallInfo(); // //拨打 或 挂断 // if (CallingStatus::instance()->busy()){ // callActivityFinish(CallFinishType::KEY6_CLICK); // lightControl("DOORLED", "000F"); // } else { // lightControl("DOORLED", "100F"); // // Intent* intent = new Intent(); // intent->putExtra(isOutgoing, "true"); // EASYUICONTEXT->openActivity("callActivity", intent); // } // } // } // else if (data.state == "3") { // LOGD("手柄在线"); // isConnectHandle = true; // } // else if (data.state == "4") { // if (!isConnectHandle || StoragePreferences::getInt(STORE_DEVICE_ID, 0) == 0) { // return; // } // sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("HandleDisconnected")); // } // // } // else if (data.cmd == "KEY7") { // if (data.state == "0") { // scrrenOn(); // // const char* currentAppName = EASYUICONTEXT->currentAppName(); // string _currentAppName = currentAppName; // if (_currentAppName == "sipTestActivity") { // setCheckbox("KEY7"); // return; // } // else { // if (sosTimerRegistered) { // isTriggerSos = true; // mActivityPtr->registerUserTimer(SOS_TRIGGER_TIME_HANDLE, 5 * 1000); // } // } // } // else if (data.state == "1") { // if (isTriggerSos) { // isConnectSos = true; // sosCall(""); // } // } // else if (data.state == "3") { // LOGD("SOS按钮在线"); // isConnectSos = true; // } // else if (data.state == "4") { // if (!isConnectSos || StoragePreferences::getInt(STORE_DEVICE_ID, 0) == 0) { // return; // } // // sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("SosDisconnected")); // } // // } // else if (data.cmd == "KEY<") { // if (isSleep) { // scrrenOn(); // } //// lightControl("DOORLED", "100F"); // } // else if (data.cmd == "KEY>") { // key>是面板挂断按钮 // if (data.state == "0") { // if (StoragePreferences::getString(STORE_SIGNAL_TYPE, SIGNAL_TYPE) == "SIP") { // setCheckbox("KEY>"); // return; // } // // if (isSleep) { // scrrenOn(); // } // else { // voip::CallInfo info = GetTelephone()->GetCallInfo(); // //拨打 或 挂断 // if (CallingStatus::instance()->busy()){ // callActivityFinish(CallFinishType::A1CLICK); // lightControl("DOORLED", "000F"); // } // } // } // // } // else if (data.cmd == "KEY;") { // if (isSleep) { // scrrenOn(); // } //// lightControl("DOORLED", "111F"); // } // else if (data.cmd == "HANDKEY00") { // if (data.state == "0") { // if (isSleep) { // scrrenOn(); // } // // isTriggerHandle1 = true; // mActivityPtr->registerUserTimer(HANDLE1_TRIGGER_TIME_HANDLE, 5 * 1000); // } // else if (data.state == "1") { // if (isTriggerHandle1) { // isTriggerHandle1 = false; // isConnectHandle1 = true; // // handleHCall(1); // } // } // else if (data.state == "3") { // LOGD("手柄1在线"); // isConnectHandle1 = true; // } // else if (data.state == "4") { // if (!isConnectHandle1 || StoragePreferences::getInt(STORE_DEVICE_ID, 0) == 0) { // return; // } // sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle1Disconnected")); // } // } // else if (data.cmd == "HANDKEY10") { // if (data.state == "0") { // if (isSleep) { // scrrenOn(); // } // // isTriggerHandle2 = true; // mActivityPtr->registerUserTimer(HANDLE2_TRIGGER_TIME_HANDLE, 5 * 1000); // } // else if (data.state == "1") { // if (isTriggerHandle2) { // isTriggerHandle2 = false; // isConnectHandle2 = true; // // handleHCall(2); // } // } // else if (data.state == "3") { // LOGD("手柄2在线"); // isConnectHandle2 = true; // } // else if (data.state == "4" || StoragePreferences::getInt(STORE_DEVICE_ID, 0) == 0) { // if (!isConnectHandle2) { // return; // } // sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle2Disconnected")); // } // } // else if (data.cmd == "HANDKEY20") { // if (data.state == "0") { // if (isSleep) { // scrrenOn(); // } // // isTriggerHandle3 = true; // mActivityPtr->registerUserTimer(HANDLE3_TRIGGER_TIME_HANDLE, 5 * 1000); // } // else if (data.state == "1") { // if (isTriggerHandle3) { // isTriggerHandle3 = false; // isConnectHandle3 = true; // // handleHCall(3); // } // } // else if (data.state == "3") { // LOGD("手柄3在线"); // isConnectHandle3 = true; // } // else if (data.state == "4" || StoragePreferences::getInt(STORE_DEVICE_ID, 0) == 0) { // if (!isConnectHandle3) { // return; // } // sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle3Disconnected")); // } // } // else if (data.cmd == "HANDKEY30") { // if (data.state == "0") { // if (isSleep) { // scrrenOn(); // } // // isTriggerHandle4 = true; // mActivityPtr->registerUserTimer(HANDLE4_TRIGGER_TIME_HANDLE, 5 * 1000); // } // else if (data.state == "1") { // if (isTriggerHandle4) { // isTriggerHandle4 = false; // isConnectHandle4 = true; // // handleHCall(4); // } // } // else if (data.state == "3") { // LOGD("手柄4在线"); // isConnectHandle4 = true; // } // else if (data.state == "4" || StoragePreferences::getInt(STORE_DEVICE_ID, 0) == 0) { // if (!isConnectHandle4) { // return; // } // sendDataRemindOhter(getFrameFullName() + " " + LANGUAGEMANAGER->getValue("Handle4Disconnected")); // } // } // else { // if (isSleep) { // scrrenOn(); // } // lightControl("DOORLED", "000F"); // } // } } /** * 定时器触发函数 * 不建议在此函数中写耗时操作,否则将影响UI刷新 * 参数: id * 当前所触发定时器的id,与注册时的id相同 * 返回值: true * 继续运行当前定时器 * false * 停止运行当前定时器 */ static bool onUI_Timer(int id){ switch (id) { case 1: { //定时器跑在UI线程,这里将喂狗标记加1 //++feed_dogs; //不用心跳 // if(UartContext::Uart3IsOpen()) { // string heartStr = "HEART,1E"; // const char* sendMsg = heartStr.c_str(); // sendProtocolTo(UART_TTYS3, (byte*)(sendMsg), strlen(sendMsg)); // } } break; case 2: //TCP心跳 { const char* req = "0"; TcpClient::instance()->sendMsg(req); } break; case SOS_CLICK_TIME_HANDLE: { sosTimerRegistered = true; return false; } break; case SOS_LAMP_TIME_HANDLE: { // SOS还原成无灯光的状态 lightControl("ULED", "0F"); // 进行门灯还原 lightControl("DOORLED", "000F"); statusLight(); return false; } break; case DOOR_LIGHT_TIME_HANDLE: { if (_lightColorStr == _actualColorStr) { _actualColorStr = "000F"; std::string heartStr = _typeStr + "," + _actualColorStr; LOGD("=====> the heartStr == %s", heartStr.c_str()); const char* sendMsg = heartStr.c_str(); sendProtocolTo(UART_TTYS2, (byte*)(sendMsg), strlen(sendMsg)); } else { _actualColorStr = _lightColorStr; std::string heartStr = _typeStr + "," + _actualColorStr; LOGD("=====> the heartStr == %s", heartStr.c_str()); const char* sendMsg = heartStr.c_str(); sendProtocolTo(UART_TTYS2, (byte*)(sendMsg), strlen(sendMsg)); } } break; case SLEEP_STRAT_TIME_HANDLE: { // 息屏 if (isSleepTimerRegistered) { isSleep = true; BRIGHTNESSHELPER->screenOff(); } else { // 如果是false的话,就需要关闭定时器 isSleep = false; BRIGHTNESSHELPER->screenOn(); } } break; case SYS_RESTART_TIME_HANDLE: netresetInt += 1; lightControl("NETRESET", "1F"); if (netresetInt == 5) { LOGD("网卡重启无效,程序内部重启"); //重启 deviceReboot(); } break; case KEY5_TRIGGER_TIME_HANDLE: { isTriggerKey5 = false; } break; case KEY6_TRIGGER_TIME_HANDLE: { isTriggerKey6 = false; return false; } break; case KEY7_TRIGGER_TIME_HANDLE: { isTriggerKey7 = false; return false; } break; case KEY8_TRIGGER_TIME_HANDLE: { isTriggerKey8 = false; return false; } break; case KEY9_TRIGGER_TIME_HANDLE: { isTriggerKey9 = false; return false; } break; case KEY10_TRIGGER_TIME_HANDLE: { isTriggerKey10 = false; return false; } break; case KEY11_TRIGGER_TIME_HANDLE: { isTriggerKey11 = false; return false; } break; case KEY12_TRIGGER_TIME_HANDLE: { isTriggerKey12 = false; return false; } break; case KEY13_TRIGGER_TIME_HANDLE: { isTriggerKey13 = false; return false; } break; case HANDLE1_TRIGGER_TIME_HANDLE: { isTriggerHandle1 = false; return false; } break; case HANDLE2_TRIGGER_TIME_HANDLE: { isTriggerHandle2 = false; return false; } break; case HANDLE3_TRIGGER_TIME_HANDLE: { isTriggerHandle3 = false; return false; } break; case HANDLE4_TRIGGER_TIME_HANDLE: { isTriggerHandle4 = false; return false; } break; case OUTKYE1_TRIGGER_TIME_HANDLE: { isTriggerOutKey1 = false; return false; } break; case OUTKYE2_TRIGGER_TIME_HANDLE: { isTriggerOutKey2 = false; return false; } break; case OUTKYE3_TRIGGER_TIME_HANDLE: { isTriggerOutKey3 = false; return false; } break; case OUTKYE4_TRIGGER_TIME_HANDLE: { isTriggerOutKey4 = false; return false; } break; case OUTKYE5_TRIGGER_TIME_HANDLE: { isTriggerOutKey5 = false; return false; } break; case OUTKYE6_TRIGGER_TIME_HANDLE: { isTriggerOutKey6 = false; return false; } break; case SIP_RECONNECT_TIME_HANDLE: { removeSipCallStateListener(); removeSipRegisterStateListener(); ReleaseTelephone(); addSipCallStateListener(); addSipRegisterStateListener(); return false; } break; default: break; } return true; } /** * 有新的触摸事件时触发 * 参数:ev * 新的触摸事件 * 返回值:true * 表示该触摸事件在此被拦截,系统不再将此触摸事件传递到控件上 * false * 触摸事件将继续传递到控件上 */ static bool onstartActivityTouchEvent(const MotionEvent &ev) { switch (ev.mActionStatus) { case MotionEvent::E_ACTION_DOWN://触摸按下 //LOGD("时刻 = %ld 坐标 x = %d, y = %d", ev.mEventTime, ev.mX, ev.mY); break; case MotionEvent::E_ACTION_MOVE://触摸滑动 break; case MotionEvent::E_ACTION_UP: //触摸抬起 break; default: break; } return false; }