diff --git a/Linguist/FaceTick_DE.ts b/Linguist/FaceTick_DE.ts
new file mode 100644
index 0000000..560019a
--- /dev/null
+++ b/Linguist/FaceTick_DE.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ Maske Ok
+
+
+
+ Ohne Maske
+
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ Temp:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Passed
+
+
+
+ Sie dürfen nicht passieren
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ Serverausnahme
+
+
+
+ Adjust the face angle
+
+
+
+ Bitte näher kommen
+
+
+
+ Nicht autorisiertes Personal
+
+
+
+ Ohne Maske
+
+
+
+ Please use your ID
+
+
+
+ Please swipe card
+
+
+
+ Please face the camera
+
+
+
+ Maske Ok
+
+
+
+ Temp:
+
+
+
+ No-passing period
+
+
+
+ ID verification failed
+
+
+
+ Identitätsprüfung
+
+
+
+ Serverausnahme
+
+
+
+ Sie dürfen nicht passieren
+
+
+
+ Aktualisierung der Gesichtszüge...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ Identitätsprüfung
+
+
+
+ Adjust the face angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bitte näher kommen
+
+
+
+ Nicht autorisiertes Personal
+
+
+
+ Sie dürfen nicht passieren
+
+
+
+ Ohne Maske
+
+
+
+ Maske Ok
+
+
+
+ Temp:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ Identitätsprüfung
+
+
+
+ Adjust the face angle
+
+
+
+ Serverausnahme
+
+
+
+ ID verification failed
+
+
+
+ Bitte näher kommen
+
+
+
+ Nicht autorisiertes Personal
+
+
+
+ Sie dürfen nicht passieren
+
+
+
+ Ohne Maske
+
+
+
+ Maske Ok
+
+
+
+ Temp:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable 4WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_EN.ts b/Linguist/FaceTick_EN.ts
new file mode 100644
index 0000000..59090d7
--- /dev/null
+++ b/Linguist/FaceTick_EN.ts
@@ -0,0 +1,3134 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+ Please complete * information!
+
+
+
+ Duplicate IC card number!
+
+
+
+ The ID number already exists!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ Mask detection pass
+
+
+
+ No wearing mask
+
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ Delete
+
+
+
+ Are you sure to modify it?
+
+
+
+ OK
+
+
+
+ Please complete * information!
+
+
+
+ Invalid name!
+
+
+
+ Duplicate IC card number!
+
+
+
+ The ID number already exists!
+
+
+
+ Failed to modify, maybe it already deleted!
+
+
+
+ Are you sure to delete it?
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+ Loading, please wait ...
+
+
+
+ Palm vein registration successful
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ Face picture
+
+
+
+ *Access
+
+
+
+ Permanent
+
+
+
+ Not permanent
+
+
+
+ *Name
+
+
+
+ Access expiration date
+
+
+
+ Job number
+
+
+
+ Phone number
+
+
+
+ ID number
+
+
+
+ IC/NFC
+
+
+
+ Right palm vein
+
+
+
+ Left palm vein
+
+
+
+ Can be written into IC card by swiping card
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Please register your right hand ...
+
+
+
+ Palm vein registration successful
+
+
+
+ Registered
+
+
+
+ Palm vein registration failed
+
+
+
+ Please register your left hand ...
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+ Photograph
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ Temp:
+
+
+
+ UserPwdDialog
+
+
+ Please enter your password
+
+
+
+ OK
+
+
+
+ Delete
+
+
+
+ Clear
+
+
+
+ Back
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ ID:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Passed
+
+
+
+ No Passing
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ Server exception
+
+
+
+ Adjust the face angle
+
+
+
+ please scan QR code
+
+
+
+ Unauthorized Card
+
+
+
+ Detect face to pass
+
+
+
+ Unauthorized Personnel
+
+
+
+ No wearing mask
+
+
+
+ Please use your ID
+
+
+
+ Please swipe card
+
+
+
+ Please face the camera
+
+
+
+ Mask detection pass
+
+
+
+ Temp:
+
+
+
+ No-passing period
+
+
+
+ ID verification failed
+
+
+
+ Identity verification
+
+
+
+ Server exception
+
+
+
+ No Permissions
+
+
+
+ No Passing
+
+
+
+ Feature Updating...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ Identity verification
+
+
+
+ Adjust the face angle
+
+
+
+ please scan QR code
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Detect face to pass
+
+
+
+ Unauthorized Personnel
+
+
+
+ No Passing
+
+
+
+ No wearing mask
+
+
+
+ Mask detection pass
+
+
+
+ Temp:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ Identity verification
+
+
+
+ Adjust the face angle
+
+
+
+ please scan QR code
+
+
+
+ 未授权卡片
+ No Permissions
+
+
+
+ Server exception
+
+
+
+ ID verification failed
+
+
+
+ Detect face to pass
+
+
+
+ Unauthorized Personnel
+
+
+
+ No Passing
+
+
+
+ No wearing mask
+
+
+
+ Mask detection pass
+
+
+
+ Temp:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unauthorized Card
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Device
+
+
+
+ 人脸管理
+ Person Management
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Quick Settings
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Bluetooth
+
+
+
+ Bluetooth Speaker
+
+
+
+ Bluetooth door lock
+
+
+
+ Bluetooth door lock operation
+
+
+
+ 人脸库
+ People Library
+
+
+
+ Records
+
+
+
+ Modify Person
+
+
+
+ Photograph
+
+
+
+ Add
+
+
+
+ Save
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ None
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ GPIO接口
+ GPIO4 Port
+
+
+
+ GPIO5 Port
+
+
+
+ Door timeout alarm (seconds)
+
+
+
+ Tamper alarm
+
+
+
+ Anti-tamper alarm signal
+
+
+
+ (Not set)
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ (Not set)
+
+
+
+ Turned on
+
+
+
+ Closed
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Bluetooth
+
+
+
+ Dynamic base library
+
+
+
+ Password
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Bluetooth Speaker
+
+
+
+ Bluetooth door lock
+
+
+
+ Processing, please wait...
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Enable wired network
+
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Person Library
+
+
+
+ Records
+
+
+
+ settingUiFastCfgPark
+
+
+ Next
+
+
+
+ settingUiFastCfgWireNet
+
+
+ Next
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Under-screen NFC ID
+
+
+
+ Extend NFC ID
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ settingUiPark
+
+
+ (Not set)
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Resident second generation ID card
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Health code verification
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_FR.ts b/Linguist/FaceTick_FR.ts
new file mode 100644
index 0000000..2fc8027
--- /dev/null
+++ b/Linguist/FaceTick_FR.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ Masque OK
+
+
+
+ Aucun masque présent
+
+
+
+ Please show your security code
+
+
+
+ Vérification ...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Veuillez passer
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ Vérification ...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Veuillez passer
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ Température:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Veuillez passer
+
+
+
+ Entrée interdite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ Exception De Serveur
+
+
+
+ Adjust the face angle
+
+
+
+ Veuillez vous présenter face à la caméra
+
+
+
+ Personne non autorisée
+
+
+
+ Aucun masque présent
+
+
+
+ Veuillez utiliser votre identifiant
+
+
+
+ Veuillez glisser la carte
+
+
+
+ Veuillez faire face à la caméra
+
+
+
+ Masque OK
+
+
+
+ Température:
+
+
+
+ No-passing period
+
+
+
+ ID verification failed
+
+
+
+ Vérification d'identité
+
+
+
+ Exception de serveur
+
+
+
+ Entrée interdite
+
+
+
+ Mise à jour fonction visage...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ Vérification d'identité
+
+
+
+ Adjust the face angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Veuillez vous présenter face à la caméra
+
+
+
+ Personne non autorisée
+
+
+
+ Entrée interdite
+
+
+
+ Aucun masque présent
+
+
+
+ Masque OK
+
+
+
+ Température:
+
+
+
+ Veuillez glisser la carte
+
+
+
+ Veuillez utiliser votre identifiant
+
+
+
+ Veuillez faire face à la caméra
+
+
+
+ No-passing period
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ Vérification d'identité
+
+
+
+ Adjust the face angle
+
+
+
+ Exception De Serveur
+
+
+
+ ID verification failed
+
+
+
+ Veuillez vous présenter face à la caméra
+
+
+
+ Personne non autorisée
+
+
+
+ Entrée interdite
+
+
+
+ Aucun masque présent
+
+
+
+ Masque OK
+
+
+
+ Température:
+
+
+
+ Veuillez glisser la carte
+
+
+
+ Veuillez utiliser votre identifiant
+
+
+
+ Veuillez faire face à la caméra
+
+
+
+ No-passing period
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_HU.ts b/Linguist/FaceTick_HU.ts
new file mode 100644
index 0000000..34c25f2
--- /dev/null
+++ b/Linguist/FaceTick_HU.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ Maszk használat észlelve
+
+
+
+ Nem visel maszkot
+
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ Testhőmérséklet:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Passed
+
+
+
+ Áthaladás megtagadva
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ A Szerverkapcsolat Kivétel
+
+
+
+ Adjust the face angle
+
+
+
+ Arc leolvasása szükséges
+
+
+
+ Illetéktelen személy
+
+
+
+ Nem visel maszkot
+
+
+
+ Kérjük, használja az igazolványát
+
+
+
+ Kérjük, használja a kártyáját
+
+
+
+ Kérjük, nézzen szembe a kamerával
+
+
+
+ Maszk használat észlelve
+
+
+
+ Testhőmérséklet:
+
+
+
+ Áthaladási időszak szünetelése
+
+
+
+ ID verification failed
+
+
+
+ Azonosítás ellenőrzése folyamatban
+
+
+
+ A szerverkapcsolat kivétel
+
+
+
+ Áthaladás megtagadva
+
+
+
+ Arcfelismerés frissítés folyamatban...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ Azonosítás ellenőrzése folyamatban
+
+
+
+ Adjust the face angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Arc leolvasása szükséges
+
+
+
+ Illetéktelen személy
+
+
+
+ Áthaladás megtagadva
+
+
+
+ Nem visel maszkot
+
+
+
+ Maszk használat észlelve
+
+
+
+ Testhőmérséklet:
+
+
+
+ Kérjük, használja a kártyáját
+
+
+
+ Kérjük, használja az igazolványát
+
+
+
+ Kérjük, nézzen szembe a kamerával
+
+
+
+ Áthaladási időszak szünetelése
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ Azonosítás ellenőrzése folyamatban
+
+
+
+ Adjust the face angle
+
+
+
+ A Szerverkapcsolat Kivétel
+
+
+
+ ID verification failed
+
+
+
+ Arc leolvasása szükséges
+
+
+
+ Illetéktelen személy
+
+
+
+ Áthaladás megtagadva
+
+
+
+ Nem visel maszkot
+
+
+
+ Maszk használat észlelve
+
+
+
+ Testhőmérséklet:
+
+
+
+ Kérjük, használja a kártyáját
+
+
+
+ Kérjük, használja az igazolványát
+
+
+
+ Kérjük, nézzen szembe a kamerával
+
+
+
+ Áthaladási időszak szünetelése
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_IT.ts b/Linguist/FaceTick_IT.ts
new file mode 100644
index 0000000..93cb5c3
--- /dev/null
+++ b/Linguist/FaceTick_IT.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ Mascherina OK
+
+
+
+ Indossare mascherina
+
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ Temp:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Passed
+
+
+
+ Ingresso non autorizzato
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ Esclusione Del Server
+
+
+
+ Adjust the face angle
+
+
+
+ Prego inquadrare il viso
+
+
+
+ Personale non autorizzato
+
+
+
+ Indossare mascherina
+
+
+
+ Please use your ID
+
+
+
+ Please swipe card
+
+
+
+ Please face the camera
+
+
+
+ Mascherina OK
+
+
+
+ Temp:
+
+
+
+ No-passing period
+
+
+
+ ID verification failed
+
+
+
+ Identificazione in corso
+
+
+
+ Esclusione del server
+
+
+
+ Ingresso non autorizzato
+
+
+
+ Aggiornamento Funzione viso...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ Identificazione in corso
+
+
+
+ Adjust the face angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prego inquadrare il viso
+
+
+
+ Personale non autorizzato
+
+
+
+ Ingresso non autorizzato
+
+
+
+ Indossare mascherina
+
+
+
+ Mascherina OK
+
+
+
+ Temp:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ Identificazione in corso
+
+
+
+ Adjust the face angle
+
+
+
+ Esclusione Del Server
+
+
+
+ ID verification failed
+
+
+
+ Prego inquadrare il viso
+
+
+
+ Personale non autorizzato
+
+
+
+ Ingresso non autorizzato
+
+
+
+ Indossare mascherina
+
+
+
+ Mascherina OK
+
+
+
+ Temp:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_IW.ts b/Linguist/FaceTick_IW.ts
new file mode 100644
index 0000000..fb16f49
--- /dev/null
+++ b/Linguist/FaceTick_IW.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ זיהוי מסיכה אושר
+
+
+
+ לא זוהתה חבישת מסיכה
+
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ חום:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Passed
+
+
+
+ אין מעבר
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ חריג שרת
+
+
+
+ Adjust the face angle
+
+
+
+ אנא הזדהה, על מנת לעבור
+
+
+
+ גורם לא מאושר
+
+
+
+ לא זוהתה חבישת מסיכה
+
+
+
+ Please use your ID
+
+
+
+ Please swipe card
+
+
+
+ Please face the camera
+
+
+
+ זיהוי מסיכה אושר
+
+
+
+ חום:
+
+
+
+ No-passing period
+
+
+
+ ID verification failed
+
+
+
+ בדיקת זהות מתקדמת
+
+
+
+ חירום לשרת
+
+
+
+ אין מעבר
+
+
+
+ עידכון מתבצע...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ בדיקת זהות מתקדמת
+
+
+
+ Adjust the face angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ אנא הזדהה, על מנת לעבור
+
+
+
+ גורם לא מאושר
+
+
+
+ אין מעבר
+
+
+
+ לא זוהתה חבישת מסיכה
+
+
+
+ זיהוי מסיכה אושר
+
+
+
+ חום:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ בדיקת זהות מתקדמת
+
+
+
+ Adjust the face angle
+
+
+
+ חריג שרת
+
+
+
+ ID verification failed
+
+
+
+ אנא הזדהה, על מנת לעבור
+
+
+
+ גורם לא מאושר
+
+
+
+ אין מעבר
+
+
+
+ לא זוהתה חבישת מסיכה
+
+
+
+ זיהוי מסיכה אושר
+
+
+
+ חום:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_JP.ts b/Linguist/FaceTick_JP.ts
new file mode 100644
index 0000000..a9aab05
--- /dev/null
+++ b/Linguist/FaceTick_JP.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ マスクを確認しました
+
+
+
+ マスクを着けて下さい
+
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ 顔認識装置
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ 体表温度:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Passed
+
+
+
+ 係が来るまでお待ち下さい
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ サーバー例外
+
+
+
+ 顔の角度を調整する
+
+
+
+ 顔を近づけてください
+
+
+
+ 無許可の人員
+
+
+
+ マスクを着けて下さい
+
+
+
+ Please use your ID
+
+
+
+ Please swipe card
+
+
+
+ Please face the camera
+
+
+
+ マスクを確認しました
+
+
+
+ 体表温度:
+
+
+
+ No-passing period
+
+
+
+ ID verification failed
+
+
+
+ 身分確認中
+
+
+
+ サーバ接続異常
+
+
+
+ 係が来るまでお待ち下さい
+
+
+
+ 顔特徴を更新中...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ 身分確認中
+
+
+
+ 顔の角度を調整する
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 顔を近づけてください
+
+
+
+ 無許可の人員
+
+
+
+ 係が来るまでお待ち下さい
+
+
+
+ マスクを着けて下さい
+
+
+
+ マスクを確認しました
+
+
+
+ 体表温度:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ 身分確認中
+
+
+
+ 顔の角度を調整する
+
+
+
+ サーバー例外
+
+
+
+ ID verification failed
+
+
+
+ 顔を近づけてください
+
+
+
+ 無許可の人員
+
+
+
+ 係が来るまでお待ち下さい
+
+
+
+ マスクを着けて下さい
+
+
+
+ マスクを確認しました
+
+
+
+ 体表温度:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_KR.ts b/Linguist/FaceTick_KR.ts
new file mode 100644
index 0000000..62827f8
--- /dev/null
+++ b/Linguist/FaceTick_KR.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ 마스크 착용 통과
+
+
+
+ 마스크 미착용
+
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ Verifying...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Passed
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ 체온:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Passed
+
+
+
+ 통행 차단
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ 서버 예외
+
+
+
+ Adjust the face angle
+
+
+
+ 얼굴을 전달해 주세요.
+
+
+
+ 미등록자
+
+
+
+ 마스크 미착용
+
+
+
+ Please use your ID
+
+
+
+ Please swipe card
+
+
+
+ Please face the camera
+
+
+
+ 마스크 착용 통과
+
+
+
+ 체온:
+
+
+
+ No-passing period
+
+
+
+ ID verification failed
+
+
+
+ 신분 검증 중
+
+
+
+ 서버 연결 이상
+
+
+
+ 통행 차단
+
+
+
+ 안면특징 업그레이드...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ 신분 검증 중
+
+
+
+ Adjust the face angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 얼굴을 전달해 주세요.
+
+
+
+ 미등록자
+
+
+
+ 통행 차단
+
+
+
+ 마스크 미착용
+
+
+
+ 마스크 착용 통과
+
+
+
+ 체온:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ 신분 검증 중
+
+
+
+ Adjust the face angle
+
+
+
+ 서버 예외
+
+
+
+ ID verification failed
+
+
+
+ 얼굴을 전달해 주세요.
+
+
+
+ 미등록자
+
+
+
+ 통행 차단
+
+
+
+ 마스크 미착용
+
+
+
+ 마스크 착용 통과
+
+
+
+ 체온:
+
+
+
+ Please swipe card
+
+
+
+ Please use your ID
+
+
+
+ Please face the camera
+
+
+
+ No-passing period
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_PT.ts b/Linguist/FaceTick_PT.ts
new file mode 100644
index 0000000..59c0a54
--- /dev/null
+++ b/Linguist/FaceTick_PT.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ Máscara detectada
+
+
+
+ Máscara não detectada
+
+
+
+ Please show your security code
+
+
+
+ Verificando ...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Por favor passe
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ Verificando ...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Por favor passe
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ Temp:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Por favor passe
+
+
+
+ Acesso não autorizado
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ Exceção do servidor
+
+
+
+ Adjust the face angle
+
+
+
+ Identifique-se
+
+
+
+ Usuário não reconhecido
+
+
+
+ Máscara não detectada
+
+
+
+ Por favor, informe seu ID
+
+
+
+ Por favor, passe o cartão
+
+
+
+ Por favor, olhe para a câmera
+
+
+
+ Máscara detectada
+
+
+
+ Temp:
+
+
+
+ Fora do período autorizado
+
+
+
+ ID verification failed
+
+
+
+ Verificação da identidade
+
+
+
+ Excepção do servidor
+
+
+
+ Acesso não autorizado
+
+
+
+ Atualizando...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ Verificação da identidade
+
+
+
+ Adjust the face angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identifique-se
+
+
+
+ Usuário não reconhecido
+
+
+
+ Acesso não autorizado
+
+
+
+ Máscara não detectada
+
+
+
+ Máscara detectada
+
+
+
+ Temp:
+
+
+
+ Por favor, passe o cartão
+
+
+
+ Por favor, informe seu ID
+
+
+
+ Por favor, olhe para a câmera
+
+
+
+ Fora do período autorizado
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ Verificação da identidade
+
+
+
+ Adjust the face angle
+
+
+
+ Exceção do servidor
+
+
+
+ ID verification failed
+
+
+
+ Identifique-se
+
+
+
+ Usuário não reconhecido
+
+
+
+ Acesso não autorizado
+
+
+
+ Máscara não detectada
+
+
+
+ Máscara detectada
+
+
+
+ Temp:
+
+
+
+ Por favor, passe o cartão
+
+
+
+ Por favor, informe seu ID
+
+
+
+ Por favor, olhe para a câmera
+
+
+
+ Fora do período autorizado
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_SP.ts b/Linguist/FaceTick_SP.ts
new file mode 100644
index 0000000..559c1a8
--- /dev/null
+++ b/Linguist/FaceTick_SP.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ Mascarilla Ok
+
+
+
+ Sin Mascarilla
+
+
+
+ Please show your security code
+
+
+
+ Verificando ...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Por favor pase
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ Verificando ...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Por favor pase
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ Temp:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Por favor pase
+
+
+
+ NO PUEDE PASAR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ Excepción del servidor
+
+
+
+ Adjust the face angle
+
+
+
+ Por favor acérquese
+
+
+
+ Personal no autorizado
+
+
+
+ Sin Mascarilla
+
+
+
+ Por favor use su identificación
+
+
+
+ Pase la tarjeta
+
+
+
+ Por favor, mira a la cámara
+
+
+
+ Mascarilla Ok
+
+
+
+ Temp:
+
+
+
+ Período de no aprobación
+
+
+
+ Error de verificación de identificación
+
+
+
+ Identificación
+
+
+
+ Excepción del servidor
+
+
+
+ NO PUEDE PASAR
+
+
+
+ Actualización de características faciales...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ Identificación
+
+
+
+ Adjust the face angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Por favor acérquese
+
+
+
+ Personal no autorizado
+
+
+
+ NO PUEDE PASAR
+
+
+
+ Sin Mascarilla
+
+
+
+ Mascarilla Ok
+
+
+
+ Temp:
+
+
+
+ Pase la tarjeta
+
+
+
+ Por favor use su identificación
+
+
+
+ Por favor, mira a la cámara
+
+
+
+ Período de no aprobación
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ Identificación
+
+
+
+ Adjust the face angle
+
+
+
+ Excepción del servidor
+
+
+
+ Error de verificación de identificación
+
+
+
+ Por favor acérquese
+
+
+
+ Personal no autorizado
+
+
+
+ NO PUEDE PASAR
+
+
+
+ Sin Mascarilla
+
+
+
+ Mascarilla Ok
+
+
+
+ Temp:
+
+
+
+ Pase la tarjeta
+
+
+
+ Por favor use su identificación
+
+
+
+ Por favor, mira a la cámara
+
+
+
+ Período de no aprobación
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_TC.ts b/Linguist/FaceTick_TC.ts
new file mode 100644
index 0000000..3a06b12
--- /dev/null
+++ b/Linguist/FaceTick_TC.ts
@@ -0,0 +1,3072 @@
+
+
+
+
+ AccessRecordPage
+
+
+ 未搜索到相關通行記錄
+
+
+
+ 通行時間:
+
+
+
+ 通過
+
+
+
+ 不通過
+
+
+
+ AddPersonPage
+
+
+ 確定
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ 確定
+
+
+
+ ComSelectDialog
+
+
+ 確定
+
+
+
+ CustomDialog
+
+
+ 取消
+
+
+
+ DateTimeDialog
+
+
+ 確定
+
+
+
+ 點擊對應時間項設置
+
+
+
+ FaceDbPage
+
+
+ 未搜索到相關人員
+
+
+
+ 有效期:
+
+
+
+ 註冊時間:
+
+
+
+ 有效期:永久有效
+
+
+
+ InfoDialog
+
+
+ 知道了
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ 確定
+
+
+
+ 設置有誤,請重新輸入!
+
+
+
+ IpInputDialog
+
+
+ 確定
+
+
+
+ ItemChooseDialog
+
+
+ 確定
+
+
+
+ LineEditInputDialog
+
+
+ 確定
+
+
+
+ MaskWidget
+
+
+ 口罩檢測通過
+
+
+
+ 未佩戴口罩
+
+
+
+ 請出示個人平安碼
+
+
+
+ 正在驗證...
+
+
+
+ 驗證錯誤請重試
+
+
+
+ 請走人工通道
+
+
+
+ 請通行
+
+
+
+ 無效平安碼
+
+
+
+ 掃碼超時
+
+
+
+ MaskWidget_o
+
+
+ 請出示個人平安碼
+
+
+
+ 正在驗證...
+
+
+
+ 驗證錯誤請重試
+
+
+
+ 請走人工通道
+
+
+
+ 請通行
+
+
+
+ 無效平安碼
+
+
+
+ 掃碼超時
+
+
+
+ ModifyPersonPage
+
+
+ 確定
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ 確定
+
+
+
+ 取消
+
+
+
+ 恢復出廠
+
+
+
+ 工程密碼
+
+
+
+ 您確定恢復出廠設置嗎?
+
+
+
+ 恢復
+
+
+
+ PersonMsgUiPage
+
+
+ 請輸入人員姓名
+
+
+
+ 請選擇通行時間
+
+
+
+ QObject
+
+
+ 設置有誤,請重新輸入!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ 由於之前多次密碼驗證
+錯誤,請稍等一會重試!
+
+
+
+ 知道了
+
+
+
+ 由於之前多次密碼驗證錯誤,請稍等一會重試!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ 確定
+
+
+
+ RadioBtnChooseDialog
+
+
+ 確定
+
+
+
+ RegisterPersonPage
+
+
+ 設置有誤,請重新輸入!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ 確定
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ 人臉識別終端
+
+
+
+ StyleItemChooseDialog
+
+
+ 確定
+
+
+
+ 取消
+
+
+
+ TmprWidget
+
+
+ 體溫:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ 名稱
+
+
+
+ 密碼
+
+
+
+ 加入
+
+
+
+ 加密方式
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ 由於之前多次密碼驗證錯誤,請稍後再重試!
+
+
+
+ 知道了
+
+
+
+ 設備編碼:
+
+
+
+ 請輸入密碼
+
+
+
+ 當前管理員賬號:
+
+
+
+ 密碼錯誤,請重試
+
+
+
+ 確定
+
+
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ 請通行
+
+
+
+ 禁止通行
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ 服務器異常
+
+
+
+ 請調整人臉角度
+
+
+
+ 請刷臉通行
+
+
+
+ 未經許可人員
+
+
+
+ 未佩戴口罩
+
+
+
+ 請用本人證件
+
+
+
+ 請刷卡
+
+
+
+ 請正視鏡頭
+
+
+
+ 口罩檢測通過
+
+
+
+ 體溫:
+
+
+
+ 禁止通行時段
+
+
+
+ 身份證核驗失敗
+
+
+
+ 身份核驗中
+
+
+
+ 服務器連接异常
+
+
+
+ 禁止通行
+
+
+
+ 人臉特徵更新中...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ 身份核驗中
+
+
+
+ 請調整人臉角度
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 請刷臉通行
+
+
+
+ 未經許可人員
+
+
+
+ 禁止通行
+
+
+
+ 未佩戴口罩
+
+
+
+ 口罩檢測通過
+
+
+
+ 體溫:
+
+
+
+ 請刷卡
+
+
+
+ 請用本人證件
+
+
+
+ 請正視鏡頭
+
+
+
+ 禁止通行時段
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ 身份核驗中
+
+
+
+ 請調整人臉角度
+
+
+
+ 服務器異常
+
+
+
+ 身份證核驗失敗
+
+
+
+ 請刷臉通行
+
+
+
+ 未經許可人員
+
+
+
+ 禁止通行
+
+
+
+ 未佩戴口罩
+
+
+
+ 口罩檢測通過
+
+
+
+ 體溫:
+
+
+
+ 請刷卡
+
+
+
+ 請用本人證件
+
+
+
+ 請正視鏡頭
+
+
+
+ 禁止通行時段
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ 軟件未授權
+
+
+
+ 請聯繫平台管理員
+
+
+
+ 重新檢測授權狀態
+
+
+
+ 進入系統設置
+
+
+
+ 瑞為技術
+RECONOVA
+
+
+
+ settingUi
+
+
+ 操作
+
+
+
+ 信息查看
+
+
+
+ 設備管理
+
+
+
+ 人脸管理
+ 人臉管理
+
+
+
+ 門禁管理
+
+
+
+ 識別設置
+
+
+
+ 系統管理
+
+
+
+ 時間設置
+
+
+
+ 網路設置
+
+
+
+ 有線網路
+
+
+
+ 無線網路
+
+
+
+ 無線網路接入
+
+
+
+ 4G網路
+
+
+
+ 人脸库
+ 人臉庫
+
+
+
+ 通行記錄
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ 本地繼電器已使用
+
+
+
+ 禁用
+
+
+
+ 本地繼電器
+
+
+
+ 韋根26
+
+
+
+ 韋根34
+
+
+
+ 韋根42
+
+
+
+ 開鎖延遲(秒)
+
+
+
+ 開鎖時間(秒)
+
+
+
+ 開鎖信號
+
+
+
+ 告警信號
+
+
+
+ 設置有誤,請重新輸入!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ 從不
+
+
+
+ 設定為0時永不進入待機
+
+
+
+ 設定為0時永不進入熄屏
+
+
+
+ 界面顯示IP
+
+
+
+ 音量控制
+
+
+
+ 亮度控制
+
+
+
+ 進入屏保時間(秒)
+
+
+
+ 熄屏等待時間(秒)
+
+
+
+ 時間設置
+
+
+
+ 網路設置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ 處理中,請稍候...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ 處理中,請稍候...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ 搜索中,請稍候...
+
+
+
+ 處理中,請稍候...
+
+
+
+ 設置有誤,請重新輸入!
+
+
+
+ 確定
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ 設置有誤,請重新輸入!
+
+
+
+ 處理中,請稍候...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ 獲取4G網絡配置失敗,請重試!
+
+
+
+ 您確定要禁用4G網路嗎?
+
+
+
+ 您確定要啟用4G網路嗎?
+
+
+
+ 處理中,請稍候...
+
+
+
+ 設置4G網路失敗,請重試!
+
+
+
+ 您確定要重啟4G網路嗎?
+
+
+
+ 重啟成功!
+
+
+
+ 重啟4G網路失敗,請重試!
+
+
+
+ 啟用
+
+
+
+ SIM卡信息
+
+
+
+ 重啟4G網路
+
+
+
+ 未插卡
+
+
+
+ 中國移動
+
+
+
+ 中國電信
+
+
+
+ 中國聯通
+
+
+
+ 4G啟動中...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ 獲取無線網路配置失敗,請重試!
+
+
+
+ 搜索中,請稍候...
+
+
+
+ 您確定要禁用無線網路嗎?
+
+
+
+ 您確定要啟用無線網路嗎?
+
+
+
+ 處理中,請稍候...
+
+
+
+ 設置無線網路失敗,請重試!
+
+
+
+ 無線網路連接成功,是否禁用有線網路?
+
+
+
+ 禁用有線網路失敗,請重試!
+
+
+
+ 請輸入密碼
+
+
+
+ 連接無線網路失敗,請重試!
+
+
+
+ 連接成功!
+
+
+
+ 啟用
+
+
+
+ 其它網路
+
+
+
+ 重新搜索
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ 獲取無線網路配置失敗,請重試!
+
+
+
+ IP設置不能為空!
+
+
+
+ 子網掩碼設置不能為空!
+
+
+
+ IP設置有誤!
+
+
+
+ 子網掩碼設置有誤!
+
+
+
+ 網關設置有誤!
+
+
+
+ DNS設置有誤!
+
+
+
+ 處理中,請稍候...
+
+
+
+ 設置無線網路失敗,請重試!
+
+
+
+ 無線網路連接成功,是否禁用有線網路?
+
+
+
+ 禁用有線網路失敗,請重試!
+
+
+
+ 連接無線網路失敗,請重試!
+
+
+
+ 您確定要忽略此網路嗎?
+
+
+
+ 您確定要關閉自動獲取嗎?
+
+
+
+ 您確定要打開自動獲取嗎?
+
+
+
+ 連接此網路
+
+
+
+ 忽略此網路
+
+
+
+ 自動獲取
+
+
+
+ 手動配置
+
+
+
+ 設備IP
+
+
+
+ 子網掩碼
+
+
+
+ 設備網關
+
+
+
+ DNS服務器
+
+
+
+ settingUiDevMngNetWire
+
+
+ 獲取有線網路配置失敗,請重試!
+
+
+
+ IP設置不能為空!
+
+
+
+ 子網掩碼設置不能為空!
+
+
+
+ IP設置有誤!
+
+
+
+ 子網掩碼設置有誤!
+
+
+
+ 網關設置有誤!
+
+
+
+ DNS設置有誤!
+
+
+
+ 處理中,請稍候...
+
+
+
+ 設置有線網路失敗,請重試!
+
+
+
+ 您确定要禁用有線網路吗?
+
+
+
+ 您确定要啟用有線網路吗?
+
+
+
+ 您确定要禁用DHCP吗?
+
+
+
+ 您确定要啟用DHCP吗?
+
+
+
+ 啟用
+
+
+
+ DHCP
+
+
+
+ 手動配寘
+
+
+
+ 設備IP
+
+
+
+ 子網掩碼
+
+
+
+ 設備網關
+
+
+
+ DNS服務器
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ 獲取4G網路配置失敗,請重試!
+
+
+
+ 有線網路
+
+
+
+ 無線網路
+
+
+
+ 4G網路
+
+
+
+ settingUiDevMngTime
+
+
+ 設置有誤,請重新輸入!
+
+
+
+ 處理中,請稍候...
+
+
+
+ NTP校時失敗,請檢查!
+
+
+
+ NTP獲取時間
+
+
+
+ NTP服務器
+
+
+
+ 校時間隔(小時)
+
+
+
+ 時區
+
+
+
+ 手動設置
+
+
+
+ UTC-11太平洋/中途島
+
+
+
+ UTC-9:30太平洋/馬克薩斯
+
+
+
+ UTC-9美國/安克雷奇
+
+
+
+ UTC-8美國/道森
+
+
+
+ UTC-7美國/博伊西
+
+
+
+ UTC-6美國/巴伊亞州_班德拉斯
+
+
+
+ UTC-5美國/多倫多
+
+
+
+ UTC-4美國/安圭拉
+
+
+
+ UTC-3:30加拿大/紐芬蘭
+
+
+
+ UTC-3美國/阿拉瓜那
+
+
+
+ UTC-2美國/諾羅尼亞
+
+
+
+ UTC-1美國/斯科比斯松
+
+
+
+ UTC+0歐洲/哥倫比亞/倫敦
+
+
+
+ UTC+1歐洲/阿姆斯特丹
+
+
+
+ UTC+2亞洲/大馬士革
+
+
+
+ UTC+3亞洲/科威特
+
+
+
+ UTC+3:30亞洲/德黑蘭
+
+
+
+ UTC+4印度/哥倫比亞
+
+
+
+ UTC+4:30亞洲/喀布爾
+
+
+
+ UTC+5印度/馬爾代夫
+
+
+
+ UTC+5:30亞洲/科倫坡
+
+
+
+ UTC+5:45亞洲/加德滿都
+
+
+
+ UTC+6印度/查戈斯
+
+
+
+ UTC+6:30亞洲/仰光
+
+
+
+ UTC+7亞洲/曼谷
+
+
+
+ UTC+8亞洲/北京/台北
+
+
+
+ UTC+8:45澳大利亞/尤克拉
+
+
+
+ UTC+9亞洲/首爾/東京
+
+
+
+ UTC+9:30澳大利亞/達爾文
+
+
+
+ UTC+10澳大利亞/墨爾本
+
+
+
+ UTC+10:30澳大利亞/領主豪
+
+
+
+ UTC+11太平洋/瓜達爾卡納爾島
+
+
+
+ UTC+12太平洋/奧克蘭
+
+
+
+ UTC+12:45太平洋/查塔姆
+
+
+
+ UTC+13湯加/努庫阿洛法
+
+
+
+ UTC+14太平洋/基里蒂馬蒂
+
+
+
+ settingUiDevTest
+
+
+ 您確定重新啟動FaceTick嗎?
+
+
+
+ 重新啟動
+
+
+
+ 您確定恢復出廠設置嗎?
+
+
+
+ 恢復
+
+
+
+ settingUiFaceMng
+
+
+ 人臉庫(人)
+
+
+
+ 通行記錄(條)
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ 設備編碼
+
+
+
+ 軟體版本
+
+
+
+ 硬件配置
+
+
+
+ MAC地址
+
+
+
+ 設備IP
+
+
+
+ 總容量(GB)
+
+
+
+ 可用容量(GB)
+
+
+
+ 註冊人數
+
+
+
+ 未上傳通行記錄
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ 服務器地址:
+
+
+
+ 端口:
+
+
+
+ 設置有誤,請重新輸入!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ 身份核驗
+
+
+
+ 人臉識別閾值
+
+
+
+ 人臉識別自定義閾值(0-100):
+
+
+
+ 口罩檢測
+
+
+
+ 未戴口罩禁止通行
+
+
+
+ 活體檢測
+
+
+
+ 寬鬆
+
+
+
+ 一般
+
+
+
+ 適中
+
+
+
+ 嚴格
+
+
+
+ 極嚴格
+
+
+
+ 自定義
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ 您需要重新啟動設備以設置並切換語言
+
+
+
+ 重新啟動
+
+
+
+ 服務器地址:
+
+
+
+ 端口:
+
+
+
+ 設置有誤,請重新輸入!
+
+
+
+ 您確定重新啟動FaceTick嗎?
+
+
+
+ 您確定清空數據嗎?
+
+
+
+ 清空數據
+
+
+
+ 您確定恢復出廠設置嗎?
+
+
+
+ 恢復
+
+
+
+ 設備語言
+
+
+
+ 自動重啟
+
+
+
+ 自動重啟時間
+
+
+
+ 自動重啟間隔(天)
+
+
+
+ 手動重啟
+
+
+
+ 服務器
+
+
+
+ 數據清空
+
+
+
+ 恢復出廠設置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_TH.ts b/Linguist/FaceTick_TH.ts
new file mode 100644
index 0000000..26db6a4
--- /dev/null
+++ b/Linguist/FaceTick_TH.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ หน้ากากผ่าน
+
+
+
+ ไม่มีหน้ากาก
+
+
+
+ Please show your security code
+
+
+
+ กำลังตรวจสอบ ...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ กรุณาผ่าน
+
+
+
+ Invalid security code
+
+
+
+ สแกนรหัสหมดเวลา
+
+
+
+ MaskWidget_o
+
+
+ Please show your security code
+
+
+
+ กำลังตรวจสอบ ...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ กรุณาผ่าน
+
+
+
+ Invalid security code
+
+
+
+ สแกนรหัสหมดเวลา
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ อุณหภูมิ:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ กรุณาผ่าน
+
+
+
+ ห้ามเข้า
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ ข้อยกเว้นของเซิร์ฟเวอร์
+
+
+
+ Adjust the face angle
+
+
+
+ กรุณาขยับมาใกล้อีก
+
+
+
+ บุคลากรที่ไม่ได้รับอนุญาต
+
+
+
+ ไม่มีหน้ากาก
+
+
+
+ กรุณาใช้ ID ของคุณ
+
+
+
+ กรุณารูดบัตร
+
+
+
+ กรุณาหันหน้าเข้าหากล้อง
+
+
+
+ หน้ากากผ่าน
+
+
+
+ อุณหภูมิ:
+
+
+
+ ระยะเวลาที่ไม่ผ่าน
+
+
+
+ การยืนยัน ID ล้มเหลว
+
+
+
+ การตรวจสอบตัวตน
+
+
+
+ ยกเว้นเซิร์ฟเวอร์
+
+
+
+ ห้ามเข้า
+
+
+
+ อัพเดตคุณสมบัติใบหน้า...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ การตรวจสอบตัวตน
+
+
+
+ Adjust the face angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ กรุณาขยับมาใกล้อีก
+
+
+
+ บุคลากรที่ไม่ได้รับอนุญาต
+
+
+
+ ห้ามเข้า
+
+
+
+ ไม่มีหน้ากาก
+
+
+
+ หน้ากากผ่าน
+
+
+
+ อุณหภูมิ:
+
+
+
+ กรุณารูดบัตร
+
+
+
+ กรุณาใช้ ID ของคุณ
+
+
+
+ กรุณาหันหน้าเข้าหากล้อง
+
+
+
+ ระยะเวลาที่ไม่ผ่าน
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ การตรวจสอบตัวตน
+
+
+
+ Adjust the face angle
+
+
+
+ ข้อยกเว้นของเซิร์ฟเวอร์
+
+
+
+ การยืนยัน ID ล้มเหลว
+
+
+
+ กรุณาขยับมาใกล้อีก
+
+
+
+ บุคลากรที่ไม่ได้รับอนุญาต
+
+
+
+ ห้ามเข้า
+
+
+
+ ไม่มีหน้ากาก
+
+
+
+ หน้ากากผ่าน
+
+
+
+ อุณหภูมิ:
+
+
+
+ กรุณารูดบัตร
+
+
+
+ กรุณาใช้ ID ของคุณ
+
+
+
+ กรุณาหันหน้าเข้าหากล้อง
+
+
+
+ ระยะเวลาที่ไม่ผ่าน
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/FaceTick_TR.ts b/Linguist/FaceTick_TR.ts
new file mode 100644
index 0000000..c45d0ad
--- /dev/null
+++ b/Linguist/FaceTick_TR.ts
@@ -0,0 +1,3071 @@
+
+
+
+
+ AccessRecordPage
+
+
+ No relevant pass records were found
+
+
+
+ Passing Time:
+
+
+
+ Allow
+
+
+
+ Prohibit
+
+
+
+ AddPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalendarDialog
+
+
+ OK
+
+
+
+ ComSelectDialog
+
+
+ OK
+
+
+
+ CustomDialog
+
+
+ Cancel
+
+
+
+ DateTimeDialog
+
+
+ OK
+
+
+
+ Time Setting
+
+
+
+ FaceDbPage
+
+
+ No relevant personnel found
+
+
+
+ Valid:
+
+
+
+ Registration Time:
+
+
+
+ Valid:Permanent
+
+
+
+ InfoDialog
+
+
+ OK
+
+
+
+ IpInputBar
+
+
+
+
+
+
+
+
+
+
+ IpInputBarDialog
+
+
+ OK
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ IpInputDialog
+
+
+ OK
+
+
+
+ ItemChooseDialog
+
+
+ OK
+
+
+
+ LineEditInputDialog
+
+
+ OK
+
+
+
+ MaskWidget
+
+
+ Geçiş için maskeyi algıla
+
+
+
+ Maske yok
+
+
+
+ Lütfen kişisel güvenlik kodunuzu gösterin
+
+
+
+ Doğrulanıyor...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Lütfen geç
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ MaskWidget_o
+
+
+ Lütfen kişisel güvenlik kodunuzu gösterin
+
+
+
+ Doğrulanıyor...
+
+
+
+ Verification error, please try again
+
+
+
+ Please take the artificial channel
+
+
+
+ Lütfen geç
+
+
+
+ Invalid security code
+
+
+
+ Scan code timeout
+
+
+
+ ModifyPersonPage
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ Restore Factory
+
+
+
+ Password
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ PersonMsgUiPage
+
+
+ Please enter the name of the person
+
+
+
+ Please select a passing time
+
+
+
+ QObject
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ 由于之前多次密码验证
+错误,请稍等一会重试!
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Multiple password verification errors, please wait a while and try again!
+
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ Face Library
+
+
+
+ Pass Record
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Wired Network
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Never
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting
+
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100)
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+ QuestionDialog
+
+
+ OK
+
+
+
+ RadioBtnChooseDialog
+
+
+ OK
+
+
+
+ RegisterPersonPage
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SceneMsgWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingUiQrcode
+
+
+
+
+
+
+ SetupUiConfig
+
+
+ Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetupUiPrivacyDoc
+
+
+
+
+
+
+ SetupUiProtoDoc
+
+
+
+
+
+
+ SetupUiStart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SliderDialog
+
+
+ OK
+
+
+
+ SnapFacePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SplashScreenWithMsg
+
+
+ Face Tick
+
+
+
+ StyleItemChooseDialog
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+ TmprWidget
+
+
+ Ateş:
+
+
+
+ UserPwdDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WifiAccPointDialog
+
+
+ Name
+
+
+
+ Password
+
+
+
+ Join
+
+
+
+ Encryption
+
+
+
+ keyboard
+
+
+ can't load
+
+
+
+ mainUi
+
+
+ 由于之前多次密码验证错误,
+请稍后再重试!
+ Multiple password verification errors,
+ please wait a while and try again!
+
+
+
+ OK
+
+
+
+ Equipment Number:
+
+
+
+ Please Enter Password
+
+
+
+ Account:
+
+
+
+ Wrong Password
+
+
+
+ OK
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallConsole
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiCallDial
+
+
+
+
+
+
+
+
+
+
+ recoUiHealthCodePage
+
+
+ Lütfen geç
+
+
+
+ Geçiş yok
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiPassword
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognize
+
+
+ Sunucu istisnası
+
+
+
+ Adjust the face angle
+
+
+
+ Geçiş için yüz algıla
+
+
+
+ Yetkisiz personel
+
+
+
+ Maske yok
+
+
+
+ Lütfen kimliğinizi kullanın
+
+
+
+ Lütfen kartı kaydırın
+
+
+
+ Lütfen yüzünüzü kameraya dönün
+
+
+
+ Geçiş için maskeyi algıla
+
+
+
+ Ateş:
+
+
+
+ Geçmeyen dönem
+
+
+
+ Kimlik doğrulanamadı
+
+
+
+ Kimlik doğrulaması ilerliyor
+
+
+
+ Sunucu istisnası
+
+
+
+ Geçiş yok
+
+
+
+ Özellikler güncelleniyor...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiRecognizeScene
+
+
+ Kimlik doğrulaması ilerliyor
+
+
+
+ Adjust the face angle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Geçiş için yüz algıla
+
+
+
+ Yetkisiz personel
+
+
+
+ Geçiş yok
+
+
+
+ Maske yok
+
+
+
+ Geçiş için maskeyi algıla
+
+
+
+ Ateş:
+
+
+
+ Lütfen kartı kaydırın
+
+
+
+ Lütfen kimliğinizi kullanın
+
+
+
+ Lütfen yüzünüzü kameraya dönün
+
+
+
+ Geçmeyen dönem
+
+
+
+ recoUiRecognizeTypeBase
+
+
+ Kimlik doğrulaması ilerliyor
+
+
+
+ Adjust the face angle
+
+
+
+ Sunucu istisnası
+
+
+
+ Kimlik doğrulanamadı
+
+
+
+ Geçiş için yüz algıla
+
+
+
+ Yetkisiz personel
+
+
+
+ Geçiş yok
+
+
+
+ Maske yok
+
+
+
+ Geçiş için maskeyi algıla
+
+
+
+ Ateş:
+
+
+
+ Lütfen kartı kaydırın
+
+
+
+ Lütfen kimliğinizi kullanın
+
+
+
+ Lütfen yüzünüzü kameraya dönün
+
+
+
+ Geçmeyen dönem
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ recoUiSceneResult
+
+
+
+
+
+
+
+
+
+
+ recoUiUnauthorized
+
+
+ Unauthorized
+
+
+
+ Please contact the platform administrator
+
+
+
+ Recheck authorization status
+
+
+
+ Enter system settings
+
+
+
+ RECONOVA
+
+
+
+ settingUi
+
+
+ Menu
+
+
+
+ Information
+
+
+
+ Equipment
+
+
+
+ 人脸管理
+ Face
+
+
+
+ Access Control
+
+
+
+ AI
+
+
+
+ System
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ WLAN access
+
+
+
+ 4G
+
+
+
+ 人脸库
+ Face Library
+
+
+
+ Pass Record
+
+
+
+
+
+
+
+
+
+
+
+ Face
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Face Library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiAccMng
+
+
+ Relay is used
+
+
+
+ Disable
+
+
+
+ KZ-OUT
+
+
+
+ WG 26
+
+
+
+ WG 34
+
+
+
+ WG 42
+
+
+
+ Unlock delay(s)
+
+
+
+ Unlock Time(s)
+
+
+
+ Unlock signal
+
+
+
+ Warning signal
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMng
+
+
+ Never
+
+
+
+ No standby when set to 0
+
+
+
+ Do not turn off the screen when set to 0
+
+
+
+ Display IP
+
+
+
+ Volume
+
+
+
+ Brightness
+
+
+
+ Enter Screen
+
+
+
+ Off Screen
+
+
+
+ Time Setting
+
+
+
+ Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBt
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLock
+
+
+ Enable
+
+
+
+ Processing, please wait...
+
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtLockAccPoint
+
+
+ MAC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpk
+
+
+ Searching, please wait...
+
+
+
+ Processing, please wait...
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngBtSpkAccPoint
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNet4G
+
+
+ Failed to get 4G, please try again!
+
+
+
+ Are you sure to disable 4G?
+
+
+
+ Are you sure to enable 4G?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set 4G, please try again!
+
+
+
+ Are you sure you want to restart 4G?
+
+
+
+ Successful restart!
+
+
+
+ Failed to restart 4G, please try again!
+
+
+
+ Enable
+
+
+
+ SIM
+
+
+
+ Reboot
+
+
+
+ No SIM
+
+
+
+ China Mobile
+
+
+
+ China Telecom
+
+
+
+ China Unicom
+
+
+
+ 4G Starting...
+
+
+
+ settingUiDevMngNetWifi
+
+
+ Failed to get wlan, please try again!
+
+
+
+ Searching, please wait...
+
+
+
+ Are you sure to disable WLAN?
+
+
+
+ Are you sure to enable WLAN?
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Please Enter Password
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Connection Succeeded!
+
+
+
+ Enable
+
+
+
+ Other
+
+
+
+ Search Again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiDevMngNetWifiAccPoint
+
+
+ Failed to get wlan, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set wlan, please try again!
+
+
+
+ The wlan connection is successful, is the wired network disabled?
+
+
+
+ Failed to disable wired network, please try again!
+
+
+
+ Failed to connect to the wlan, please try again!
+
+
+
+ Are you sure you want to ignore this network?
+
+
+
+ Are you sure you want to turn off automatic acquisition?
+
+
+
+ Are you sure you want to turn on automatic acquisition?
+
+
+
+ Connection
+
+
+
+ Ignore
+
+
+
+ Automatic Acquisition
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+ settingUiDevMngNetWire
+
+
+ Failed to obtain wired network configuration, please try again!
+
+
+
+ IP cannot be empty!
+
+
+
+ The subnet mask cannot be empty!
+
+
+
+ The IP setting is wrong!
+
+
+
+ The subnet mask is wrong!
+
+
+
+ Wrong gateway!
+
+
+
+ DNS settings are wrong!
+
+
+
+ Processing, please wait...
+
+
+
+ Failed to set up wired network, please try again!
+
+
+
+ Are you sure you want to disable the wired network?
+
+
+
+ Are you sure you want to enable the wired network?
+
+
+
+ Are you sure you want to disable DHCP?
+
+
+
+ Are you sure you want to enable DHCP?
+
+
+
+ Enable
+
+
+
+ DHCP
+
+
+
+ Manual
+
+
+
+ Device IP
+
+
+
+ Subnet Mask
+
+
+
+ Device Gateway
+
+
+
+ DNS Server
+
+
+
+
+
+
+
+ settingUiDevMngNetwork
+
+
+ Failed to obtain 4G, please try again!
+
+
+
+ Wired Network
+
+
+
+ WLAN
+
+
+
+ 4G
+
+
+
+ settingUiDevMngTime
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Processing, please wait...
+
+
+
+ NTP time calibration failed, please check!
+
+
+
+ NTP get time
+
+
+
+ NTP Server
+
+
+
+ Time Interval
+
+
+
+ Time Zone
+
+
+
+ Manual
+
+
+
+ UTC-11Pacific / Midway
+
+
+
+ UTC-9:30Pacific / Maxas
+
+
+
+ UTC-9USA / Anchorage
+
+
+
+ UTC-8USA / Dawson
+
+
+
+ UTC-7USA / Boise
+
+
+
+ UTC-6United States / Bahia_Banderas
+
+
+
+ UTC-5USA / Toronto
+
+
+
+ UTC-4United States / Anguilla
+
+
+
+ UTC-3:30Canada / Newfoundland Island
+
+
+
+ UTC-3United States / Alaguana
+
+
+
+ UTC-2US / Noronha
+
+
+
+ UTC-1USA / Skobisson
+
+
+
+ UTC+0Europe / Lisbon / London
+
+
+
+ UTC+1Europe / Amsterdam
+
+
+
+ UTC+2Asia / Damascus
+
+
+
+ UTC+3Asia / Kuwait
+
+
+
+ UTC+3:30Asia / Tehran
+
+
+
+ UTC+4India / Mauritius
+
+
+
+ UTC+4:30Asia / Kabul
+
+
+
+ UTC+5India / Maldives
+
+
+
+ UTC+5:30Asia / Colombo
+
+
+
+ UTC+5:45Asia / Kathmandu
+
+
+
+ UTC+6India / Chagos
+
+
+
+ UTC+6:30Asia / Yangon
+
+
+
+ UTC+7Asia / Bangkok
+
+
+
+ UTC+8Asia / Beijing/Taipei
+
+
+
+ UTC+8:45Australia / Ukra
+
+
+
+ UTC+9Asia / Seoul / Tokyo
+
+
+
+ UTC+9:30Australia / Darwin
+
+
+
+ UTC+10Melbourne, Australia
+
+
+
+ UTC+10:30Australian / lord
+
+
+
+ UTC+11Pacific / Guadalcanal
+
+
+
+ UTC+12Pacific / Auckland
+
+
+
+ UTC+12:45Pacific / Chatham
+
+
+
+ UTC+13Tonga/ Nuku'alofa
+
+
+
+ UTC+14Pacific / Kiritimati
+
+
+
+ settingUiDevTest
+
+
+ Are you sure to restart?
+
+
+
+ Restart
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ settingUiFaceMng
+
+
+ Face Library(people)
+
+
+
+ Pass Record
+
+
+
+ settingUiFastCfgPark
+
+
+
+
+
+
+ settingUiFastCfgWireNet
+
+
+
+
+
+
+ settingUiInfo
+
+
+ Number
+
+
+
+ Software Version
+
+
+
+ Configuration
+
+
+
+ MAC
+
+
+
+ Device IP
+
+
+
+ Storage Capacity(GB)
+
+
+
+ Available Storage(GB)
+
+
+
+ Registered Number
+
+
+
+ Pass record not uploaded
+
+
+
+
+
+
+
+
+
+
+
+ settingUiPark
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiRecoSet
+
+
+ Identity Verification
+
+
+
+ Face Recognition Threshold
+
+
+
+ Customize(0-100):
+
+
+
+ Mask Test
+
+
+
+ No pass without a mask
+
+
+
+ Live Detection
+
+
+
+ Loose
+
+
+
+ General
+
+
+
+ Moderate
+
+
+
+ Strict
+
+
+
+ Extremely strict
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ settingUiSysMng
+
+
+ You need to restart the device to set the language
+
+
+
+ Restart
+
+
+
+ server address:
+
+
+
+ port:
+
+
+
+ The setting is wrong, please re-enter!
+
+
+
+ Are you sure to restart?
+
+
+
+ Are you sure to clear the data?
+
+
+
+ Clear data
+
+
+
+ Are you sure to restore factory settings?
+
+
+
+ Restore
+
+
+
+ Language
+
+
+
+ Automatic Restart
+
+
+
+ Automatic Restart Time
+
+
+
+ Automatic Restart Tnterval(day)
+
+
+
+ Restart
+
+
+
+ Server
+
+
+
+ Data Clear
+
+
+
+ Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Linguist/facetick.pro b/Linguist/facetick.pro
new file mode 100644
index 0000000..ee6f646
--- /dev/null
+++ b/Linguist/facetick.pro
@@ -0,0 +1,123 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2020-09-14T10:46:41
+#
+#-------------------------------------------------
+
+QT += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = facetick
+TEMPLATE = app
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which has been marked as deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
+
+CONFIG += c++11
+
+SOURCES += \
+ keyboard/keyboard.cpp \
+ keyboard/LineEditWithKeyboard.cpp \
+ keyboard/LineEditWithPopup.cpp \
+ interface/View.cpp \
+ interface/BackstageInterfaceForUi.cpp \
+ interface/BackStage.cpp \
+ recoUi/recoUiRecognize.cpp \
+ recoUi/recoUiCallConsole.cpp \
+ recoUi/recoUiRecognizeScene.cpp \
+ recoUi/recoUiUnauthorized.cpp \
+ recoUi/recoUiCallDial.cpp \
+ recoUi/recoUiRecognizeTypeBase.cpp \
+ recoUi/recoUiPassword.cpp \
+ recoUi/recoUiHealthCode.cpp \
+ recoUi/recoUi.cpp \
+ recoUi/recoUiScreensaver.cpp \
+ setupUi/SetupUi.cpp \
+ setUi/settingUiFastCfg.cpp \
+ setUi/settingUiSysMng.cpp \
+ setUi/settingUiInfo.cpp \
+ setUi/settingUiAccMng.cpp \
+ setUi/settingUIProjectSet.cpp \
+ setUi/settingUiFaceMng.cpp \
+ setUi/settingUi.cpp \
+ setUi/settingUiDevMng.cpp \
+ setUi/settingUiRecoSet.cpp \
+ setUi/settingUiDevTest.cpp \
+ utility/DndModeCountDownItem.cpp \
+ utility/SwitchControl.cpp \
+ utility/UiTools.cpp \
+ mainUi/UiConfig.cpp \
+ mainUi/mainUi.cpp
+
+
+HEADERS += \
+ keyboard/LineEditWithKeyboard.h \
+ keyboard/keyboard.h \
+ keyboard/LineEditWithPopup.h \
+ interface/BackStage.h \
+ interface/View.h \
+ interface/BackstageInterfaceForUi.h \
+ interface/UiInterfaceForBackstage.h \
+ recoUi/recoUiHealthCode.h \
+ recoUi/recoUiCallDial.h \
+ recoUi/recoUiCallConsole.h \
+ recoUi/recoUiPassword.h \
+ recoUi/recoUiRecognizeScene.h \
+ recoUi/recoUiRecognize.h \
+ recoUi/recoUiScreensaver.h \
+ recoUi/recoUiUnauthorized.h \
+ recoUi/recoUiRecognizeTypeBase.h \
+ recoUi/recoUi.h \
+ setupUi/SetupUi.h \
+ setUi/settingUiDevTest.h \
+ setUi/settingUiAccMng.h \
+ setUi/settingUIProjectSet.h \
+ setUi/settingUiFastCfg.h \
+ setUi/settingUi.h \
+ setUi/settingUiRecoSet.h \
+ setUi/settingUiDevMng.h \
+ setUi/settingUiSysMng.h \
+ setUi/settingUiInfo.h \
+ setUi/settingUiFaceMng.h \
+ utility/AsyncEvent.h \
+ utility/SwitchControl.h \
+ utility/DndModeCountDownItem.h \
+ utility/UiTools.h \
+ mainUi/debug.h \
+ mainUi/UiConfig.h \
+ mainUi/UiCommon.h \
+ mainUi/mainUi.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
+
+RESOURCES += \
+ res.qrc
+
+CONFIG += C++11
+#CONFIG += console pro
+
+TRANSLATIONS += FaceTick_TC.ts
+TRANSLATIONS += FaceTick_EN.ts
+TRANSLATIONS += FaceTick_JP.ts
+TRANSLATIONS += FaceTick_KR.ts
+TRANSLATIONS += FaceTick_SP.ts
+TRANSLATIONS += FaceTick_TH.ts
+TRANSLATIONS += FaceTick_PT.ts
+TRANSLATIONS += FaceTick_IT.ts
+TRANSLATIONS += FaceTick_FR.ts
+TRANSLATIONS += FaceTick_IW.ts
+TRANSLATIONS += FaceTick_DE.ts
+TRANSLATIONS += FaceTick_TR.ts
+TRANSLATIONS += FaceTick_HU.ts
diff --git a/Linguist/interface/BackStage.cpp b/Linguist/interface/BackStage.cpp
new file mode 100644
index 0000000..8cf1120
--- /dev/null
+++ b/Linguist/interface/BackStage.cpp
@@ -0,0 +1,3669 @@
+#include
+#include
+#include
+#include "webrtc/WebRTCVideoChat.h"
+#include
+#include
+#include
+#include
+
+
+#include "rw_zlog.h"
+#include "common_utils.h"
+#include "assert.h"
+#include "cmd_process.h"
+#include "db_manage.h"
+#include "BackStage.h"
+#include "file_utils.h"
+#include "rw_protocol.h"
+#include "detector/detector_tracker.h"
+#include "decision_actuator/standby.h"
+#include "dev_version.h"
+#include "libcJSON.h"
+#include "ScopeGuard.h"
+#include "Peripheral.h"
+#include "cmd_process.h"
+#include "pe_input/pe_input.h"
+#include "decision_center/decision_center.h"
+#include "tracker_lock/tracker_lock.h"
+#include "camera/camera.h"
+#include "UiConfig.h"
+#include "bluetooth.h"
+#include "View.h"
+#include "person_manage.h"
+
+#include "CardReaderProp.h"
+#include "decision_actuator/decision_actuator.h"
+
+
+Backstage::Backstage(void* pParaMng, void* pObjs)
+{
+ m_paramMng = reinterpret_cast(pParaMng);
+ m_objs = reinterpret_cast(pObjs);
+}
+
+Backstage::~Backstage()
+{
+}
+
+int Backstage::registerPerson(char *name, char *term, int nDataOrigin)
+{
+ if ((name == nullptr) || (term == nullptr))
+ {
+ LOGE("param error!name==%p, term===%p", name, term);
+ return -1;
+ }
+
+ return 0;
+}
+
+int Backstage::startIdentyState(bool setfaceReco, bool setPeInput)
+{
+ LOGI("startIdentyState");
+ if(setfaceReco && m_objs){
+ GDetectorTracker *tracker = (GDetectorTracker*)m_objs->findObject("DetectorTracker");
+ GStandby *pStandby = (GStandby*)m_objs->findObject("standby");
+ GTrackerLock *pTrackLock = (GTrackerLock*)m_objs->findObject("trackerLock");
+ if (tracker && pStandby && pTrackLock){
+ if(!Singleton::GetInstance()->isHardwareTesting()){
+ tracker->setRgbFaceDetMode(false);
+ pStandby->setKeepAwake(false);
+ }
+ else{
+ LOGI("is testing hardware...");
+ tracker->setRgbFaceDetMode(true);
+ pStandby->setKeepAwake(true);
+ }
+ pTrackLock->lockCtrl(false);
+ }
+ }
+ if(setPeInput){
+ Singleton::GetInstance()->enableUserInput(Peripheral::enOptorMid, false, true);
+ }
+ return 0;
+}
+
+int Backstage::stopIdentyState(bool setfaceReco, bool setPeInput)
+{
+ LOGI("stopIdentyState");
+ if(setfaceReco && m_objs){
+ GDetectorTracker *tracker = (GDetectorTracker*)m_objs->findObject("DetectorTracker");
+ GStandby *pStandby = (GStandby*)m_objs->findObject("standby");
+ GTrackerLock *pTrackLock = (GTrackerLock*)m_objs->findObject("trackerLock");
+ if (tracker && pStandby && pTrackLock){
+ tracker->setRgbFaceDetMode(false, true);
+ pStandby->setKeepAwake(true);
+ pTrackLock->lockCtrl(true);
+ }
+ }
+ if(setPeInput){
+ Singleton::GetInstance()->enableUserInput(Peripheral::enOptorMid, true, false);
+ }
+ return 0;
+}
+
+int Backstage::verifyFactorySettingPwd(const char *pwd)
+{
+ int ret = -1;
+ if(nullptr == pwd)
+ {
+ LOGE("param pwd is NULL!");
+ return -1;
+ }
+ if (FileUtils::fileIsExist(PASSWORD_FILE))
+ {
+ ifstream infile;
+ infile.open(PASSWORD_FILE);
+ if(infile.is_open()){
+ //std::string s;
+ //while(getline(infile,s)) {
+ //cout<clearParam();
+ FileUtils::removeFile(AGEING_TIME_FILE);
+ FileUtils::removeFile(DB_PATH"faceGate.db");
+ FileUtils::removeFile(NETWORK_CFG_FILE);
+ FileUtils::remove_dir(MEETING_DIR);
+ FileUtils::remove_dir(TTS_PERSISTENCE_DIR);
+
+ //devReboot(); //need black page before reboot
+
+ return resetNetworkCfg();
+}
+
+int Backstage::getDeviceId(char *devId, int len)// 获取设备id
+{
+ int ret = -1;
+ constexpr auto macFile = "/data/.mac";
+ memset(devId, 0, len);
+ if (FileUtils::fileIsExist(macFile) && FileUtils::getFileSize(macFile) > 0) {
+ const std::string sDevId = getDevId();
+ LOGD("sDevId=%s", sDevId.c_str());
+ if (sDevId.length() < (unsigned)len) {
+ strcpy(devId, sDevId.c_str());
+ ret = 0;
+ }
+ }
+ return ret;
+}
+
+std::string Backstage::getUnderScreenNfcModuleId(){
+ CardReaderProp prop(CARD_READER_PROP_FILE);
+ return prop.UnderScreenCardReaderModuleId();
+}
+
+std::string Backstage::getExtendNfcModuleId(){
+ CardReaderProp prop(CARD_READER_PROP_FILE);
+ return prop.ExtendUsbCardReaderModuleId();
+}
+
+bool Backstage::isIdModuleInfoUploaded(){
+ LOGI("isIdModuleInfoUploaded");
+ return FileUtils::fileIsExist("/tmp/.idModuleInfoUpload2Iot");
+}
+
+bool Backstage::isDevSettingDisable()
+{
+ return m_paramMng->getDisableDevSettingSw();
+}
+
+void Backstage::setAntiDemolitionAvail(bool avail, bool upload)
+{
+ m_paramMng->setAntiDemolitionAvail(avail);
+
+ static int outputType = 0;
+ if(avail){
+ outputType = getAntiDemolitionOutput();
+ if(1 == outputType){
+ GDecisionActuator::relayOnCB(2);
+ }else if(2 == outputType){
+ Singleton::GetInstance()->controlGpioOut(BasePeripheral::enGpio2, false);
+ }else if(3 == outputType){
+ Singleton::GetInstance()->controlGpioOut(BasePeripheral::enGpio3, false);
+ }
+
+ if(upload){
+ RWProtocol::getInstance()->addAlarmEvent(2, utils::getNowTimeS(), "");
+ }
+ }else if(outputType){
+ if(1 == outputType){
+ GDecisionActuator::relayOnCB(3);
+ }else if(2 == outputType){
+ Singleton::GetInstance()->controlGpioOut(BasePeripheral::enGpio2, true);
+ }else if(3 == outputType){
+ Singleton::GetInstance()->controlGpioOut(BasePeripheral::enGpio3, true);
+ }
+ }
+}
+
+bool Backstage::getAntiDemolitionSw()
+{
+ return m_paramMng->getAntiDemolitionSw();
+}
+
+void Backstage::setAntiDemolitionSw(bool sw)
+{
+ m_paramMng->setAntiDemolitionSw(sw);
+}
+
+int Backstage::getAntiDemolitionOutput()
+{
+ return m_paramMng->getAntiDemolitionOutput();
+}
+
+void Backstage::setAntiDemolitionOutput(int output)
+{
+ m_paramMng->setAntiDemolitionOutput(output);
+}
+
+int Backstage::getGpio4Cfg()
+{
+ return m_paramMng->getGpio4Cfg();
+}
+
+void Backstage::setGpio4Cfg(int cfg)
+{
+ m_paramMng->setGpio4Cfg(cfg);
+}
+
+int Backstage::getGpio5Cfg()
+{
+ return m_paramMng->getGpio5Cfg();
+}
+
+void Backstage::setGpio5Cfg(int cfg)
+{
+ m_paramMng->setGpio5Cfg(cfg);
+}
+
+int Backstage::getDoorCloseOvertime()
+{
+ return m_paramMng->getDoorCloseOvertime();
+}
+
+void Backstage::setDoorCloseOvertime(int overtime)
+{
+ m_paramMng->setDoorCloseOvertime(overtime);
+}
+
+bool Backstage::getDisableDevSettingSw()
+{
+ return m_paramMng->getDisableDevSettingSw();
+}
+
+void Backstage::setDisableDevSettingSw(bool sw)
+{
+ m_paramMng->setDisableDevSettingSw(sw);
+}
+
+int Backstage::getTicketCheckCountToday()
+{
+ const std::string curDay = utils::format_time(time(nullptr)).substr(0, 10);
+ const std::string cntDay = RWProtocol::getInstance()->m_paramMng->getTicketCheckDay();
+ if(curDay != cntDay){
+ return 0;
+ }
+ return m_paramMng->getTicketCheckCount();
+}
+
+int Backstage::getTicketModePeopleCountType()
+{
+ return m_paramMng->getTicketModePeopleCountType();
+}
+
+int Backstage::getCallDevList() {
+ WebRTCVideoChat::instance()->requestContacts();
+ return 0;
+}
+
+int Backstage::queryCallDevList(const std::string &text, std::vector &devList) {
+ devList.clear();
+ auto contacts = WebRTCVideoChat::instance()->contactsSearch(text);
+ for (auto &contact : contacts) {
+ stCallDev info;
+ info.code = contact.code;
+ info.devTag = contact.uniqueTag;
+ info.name = contact.name;
+ info.type = contact.type;
+ info.status = contact.status;
+ devList.push_back(info);
+ }
+ return 0;
+}
+
+int Backstage::callDev(const std::string &devTag, int devType) {
+ WebRTCVideoChat::instance()->callRemote(devType == 2 ? WebRTCVideoChat::Platform : WebRTCVideoChat::Device, devTag);
+ return 0;
+}
+
+int Backstage::callAbort() {
+ WebRTCVideoChat::instance()->setCurrentSessionAction(WebRTCVideoChat::Action::Cancel);
+ return 0;
+}
+
+int Backstage::callHangUp() {
+ WebRTCVideoChat::instance()->setCurrentSessionAction(WebRTCVideoChat::Action::Hangup);
+ return 0;
+}
+
+int Backstage::callReject() {
+ WebRTCVideoChat::instance()->setCurrentSessionAction(WebRTCVideoChat::Action::Reject);
+ return 0;
+}
+
+int Backstage::callAccept() {
+ WebRTCVideoChat::instance()->setCurrentSessionAction(WebRTCVideoChat::Action::Pickup);
+ return 0;
+}
+
+int Backstage::openCallRemoteDoor() {
+ WebRTCVideoChat::instance()->setCurrentSessionAction(WebRTCVideoChat::Action::OpenDoor);
+ return 0;
+}
+
+void Backstage::verifyAbort()
+{
+ GDecisionActuator *decAor = (GDecisionActuator*)m_objs->findObject("decisionActuator");
+ if (!decAor){return;}
+ decAor->verifyAbort();
+}
+
+bool Backstage::getShowIdAndVerSw()
+{
+ return m_paramMng->getRecoUiShowDevIdAndVerSw();
+}
+
+int Backstage::setShowIdAndVerSw(bool sw)
+{
+ m_paramMng->setRecoUiShowDevIdAndVerSw(sw);
+ return 0;
+}
+
+int Backstage::playAudio(enAudioIndex index)
+{
+ GDecisionActuator *decAor = (GDecisionActuator*)m_objs->findObject("decisionActuator");
+ if (!decAor){return -1;}
+ const std::vector indexMap{32};
+ if(index < 0 || index >= indexMap.size()){return -2;}
+ return decAor->_playAudioProc(indexMap.at(index));
+}
+
+int Backstage::userItemChoose(int index)
+{
+ GDecisionCenter *decCenter = (GDecisionCenter*)m_objs->findObject("decisionCenter");
+ if (decCenter){
+ decCenter->userItemChoose(index);
+ }
+ return 0;
+}
+
+int Backstage::callSetVideoStream(bool enable) {
+ WebRTCVideoChat::instance()->setCurrentSessionAction(enable ? WebRTCVideoChat::Action::EnableVideo
+ : WebRTCVideoChat::Action::DisableVideo);
+ return 0;
+}
+
+int Backstage::getHardwareConfig(char *hardVer, int len)//获取系统版本
+{
+ int ret = -1;
+ std::string version;
+ getHardVersion(version);
+ LOGD("version=%s",version.c_str());
+ if(version.length() < (unsigned)len){
+ strcpy(hardVer, version.c_str());
+ ret = 0;
+ }
+ return ret;
+}
+
+int Backstage::getStorSpace(int &total, float &free)//获取存储空间
+{
+ int ret = -1;
+
+#if 0
+ char buf[1024] = {0};
+ FILE *fp = popen("df -h | grep \"/data\"", "r");
+ if (fp == NULL)
+ {
+ LOGE("popen FAIL!");
+ return ret;
+ }
+ while(fgets(buf, 1024, fp) != NULL)
+ {
+ LOGD("read buf : %s", buf);
+ if (strstr(buf, "/data") && strstr(buf, "G"))
+ {
+ unsigned iPos = 0;
+ std::string line(buf);
+ for(int i=0; i<2; i++){
+ iPos = line.find_last_of(" ");
+ if(iPos != std::string::npos){
+ line = std::string(line.begin(), line.begin() + iPos);
+ line = line.substr(line.find_first_not_of(' '), line.find_last_not_of(' ') + 1);
+ }
+ }
+ iPos = line.find_last_of(" ");
+ if(iPos != std::string::npos)
+ {
+ line = line.substr(iPos + 1);
+ line = line.substr(line.find_first_not_of(' '), line.find_last_not_of(' ') + 1);
+ LOGD("avai space:%s", line.c_str());
+ line.erase(line.length() - 1);
+ if(line.length() > 0){
+ free = std::stof(line);
+ ret = 0;
+ }
+ }
+ }
+ }
+ total = 16;
+ if(SERIES_B021 == DevVersion::getInstance()->getDevSeries())
+ {
+ total = 8;
+ }
+#else
+ ret = getStoreSpace(free, total);
+#if 0
+ total = 16;
+ if(SERIES_B021 == DevVersion::getInstance()->getDevSeries())
+ {
+ total = 8;
+ }
+#endif
+#endif
+ return ret;
+}
+
+int Backstage::getAppVersion(char *appVer, int len)//获取应用版本号
+{
+ int ret = -1;
+ std::string version;
+ getSoftVersion(version);
+ if (version.at(version.length() - 1) == '\n')
+ {
+ version.erase(version.length() - 1);
+ }
+
+ if(version.length() < (unsigned)len){
+ strcpy(appVer, version.c_str());
+ ret = 0;
+ }
+ return ret;
+}
+
+int Backstage::getRegisterNum()//获取注册人员数
+{
+ int personCount = 0;
+ DBManage::getInstance()->getPersonAllCount(personCount);
+ return personCount;
+}
+
+int Backstage::getAccessRecordQty()
+{
+ int sum = 0;
+ const string countSql = "select count(*) from access_record";
+ DBManage::getInstance()->getCountOfTableBySQL(countSql, sum);
+ LOGD("sum==%d", sum);
+ return sum;
+}
+
+int Backstage::getAccessRecordNotUpload()//获取未上传通行记录
+{
+ return DBManage::getInstance()->getAccessRecordsNumByUploadSta(dbspace::enRodUpNotYet);
+}
+
+int Backstage::getVolume()//获取音量大小
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getVolume();
+}
+
+int Backstage::setVolume(int vol)//设置音量大小
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setVolume(vol);
+
+ int res = blueToothMng::getInstance().setVolume(vol);
+ if (res != 0)
+ {
+ LOGE("bluetooth fail!");
+ }
+
+ return 0;
+}
+
+int Backstage::getLcdBrightness()//获取屏幕亮度
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getLcdBrightness();
+}
+
+int Backstage::setLcdBrightness(int brightness)//设置屏幕亮度
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setLcdBrightness(brightness);
+ return 0;
+}
+
+bool Backstage::getFillLightSw()//获取智能补光开关
+{
+ return 0;
+}
+
+int Backstage::setFillLightSw(bool isOpen)//获取智能补光开关
+{
+ return 0;
+}
+
+int Backstage::getStandbyTime()//获取待机时间
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getStandbyTime();
+}
+
+int Backstage::setStandbyTime(int time)//设置待机时间
+{
+ assert(nullptr != m_paramMng);
+ const bool isMeetingMode = m_paramMng->getMeetingMode() >= 0;
+ const bool isDndMode = m_paramMng->getDndMode() >= 0;
+ if (isMeetingMode) { // 会议模式
+ m_paramMng->setMeetingScreensaverTimeBackup(time);
+ } else if (isDndMode) {
+ m_paramMng->setDndModeStandbyTime(time);
+ } else {
+ m_paramMng->setStandbyTime(time);
+ }
+ return 0;
+}
+
+int Backstage::getCloseScreenTime()//获取关屏等待时间
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getCloseScreenTime();
+}
+
+int Backstage::setCloseScreenTime(int time)//获取关屏等待时间
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setCloseScreenTime(time);
+ return 0;
+}
+
+int Backstage::getLanguage()//获取语言
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getLanguage();
+}
+
+int Backstage::setLanguage(int lang)//设置语言
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setLanguage(lang);
+ return 0;
+}
+
+int Backstage::getIP(char *ip, int len, int& type)//获取IP
+{
+ std::string maskString;
+ std::string ipString;
+ std::string ifName;
+
+ if(utils::checkNetRun(std::string("eth0")))
+ {
+ ifName = "eth0";
+ type = 0;
+ }
+ else if(utils::checkNetRun(std::string("wlan0")))
+ {
+ ifName = "wlan0";
+ type = 1;
+ }
+ else if(utils::checkNetRun(std::string("wwan0")))
+ {
+ ifName = "wwan0";
+ type = 2;
+ }
+ else if(utils::checkNetRun(std::string("ppp0")))
+ {
+ ifName = "ppp0";
+ type = -1;
+
+ static int lastType = 6; //满格信号
+ std::string text;
+ do{
+ if(0 != utils::read_file("/tmp/.4G_signal_intensity", text)){break;}
+ if(text.find("+CSQ:") == std::string::npos){break;}
+ size_t end = text.find_last_of(",");
+ if(end == std::string::npos){break;}
+ const std::string sigStr = text.substr(6, end - 6); //+CSQ: 24,99
+ int nSig = -1;
+ try{nSig = std::stoi(sigStr);}catch(...){break;}
+ if(nSig >= 5 && nSig <= 6){type = 2;} //1格
+ else if(nSig >= 7 && nSig <= 9){type = 3;} //2格
+ else if(nSig >= 10 && nSig <= 11){type = 4;} //3格
+ else if(nSig >= 12 && nSig <= 14){type = 5;} //4格
+ else if(nSig >= 15 && nSig <= 31){type = 6;} //5格
+ else{type = 7;} //无信号
+ lastType = type;
+ }while(0);
+ if(type < 0){LOGE("sig text:%s", text.c_str());type = lastType;}
+ }
+ else{
+ type = -1;
+ }
+ int iRet = 0;
+ if(type >= 0){
+ iRet = utils::getIpAndMask(ifName, ipString, maskString);
+ snprintf(ip, len, "%s", ipString.c_str());
+ //LOGD("local ip==%s", ip);
+ }
+ //LOGI("getIP type:%d", type);
+ return iRet;
+}
+
+int Backstage::setIP(char *ip)//设置IP
+{
+ return 0;
+}
+
+enIpMethod Backstage::getIpMethod()//获取IP方法
+{
+ return (enIpMethod)0;
+}
+
+int Backstage::setIpMethod(enIpMethod ipMethod)//设置IP方法
+{
+ return 0;//MVC_Ctrler::getInstance()->setIpMethod(ipMethod);
+}
+
+int Backstage::getSubnetMask(char *mask, int len)//获取子网掩码
+{
+ return 0;//MVC_Ctrler::getInstance()->getSubnetMask(mask, len);
+}
+
+int Backstage::setSubnetMask(char *mask)//设置子网掩码
+{
+ return 0;//MVC_Ctrler::getInstance()->setSubnetMask(mask);
+}
+
+int Backstage::getGateway(char *gateway, int len)//获取默认网关
+{
+ return 0;//MVC_Ctrler::getInstance()->getGateway(gateway, len);
+}
+
+int Backstage::setGateway(char *gateway)//设置默认网关
+{
+ return 0;//MVC_Ctrler::getInstance()->setGateway(gateway);
+}
+
+int Backstage::getDNS(char *dns, int len)//获取DNS
+{
+ return 0;//MVC_Ctrler::getInstance()->getDNS(dns, len);
+}
+
+int Backstage::setDNS(char *dns)//设置DNS
+{
+ return 0;//MVC_Ctrler::getInstance()->setDNS(dns);
+}
+
+int Backstage::getEthMac(char *mac, int len)//获取mac
+{
+ int ret = -1;
+ const std::string macString = utils::getNetMac("eth0");
+ LOGD("macString=%s", macString.c_str());
+ if(macString.length() < (unsigned)len){
+ strcpy(mac, macString.c_str());
+ ret = 0;
+ }
+ return ret;
+}
+
+int Backstage::getWifiMac(char *mac, int len)//获取wifi mac
+{
+ return 0;
+}
+
+int Backstage::getServerAddr(char *addr, int len)//获取服务器ip
+{
+ assert(nullptr != m_paramMng);
+ int ret = -1;
+ std::string serverinfo = m_paramMng->getServerIP();
+ if(serverinfo.length() < (unsigned)len){
+ strcpy(addr, serverinfo.c_str());
+ ret = 0;
+ }
+ return ret;
+}
+
+int Backstage::setServerAddr(char *addr, bool byQrcode)//设置服务器ip
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setLastModifyServer(1);
+ m_paramMng->setServerIP(addr);
+ if (!byQrcode)
+ {
+ FileUtils::removeFile(QRCODE_CONFIG_FILE);//用户修改平台IP后就删除保存的二维码信息文件,modify by wwb-20220104
+ }
+ //RWProtocol::getInstance()->modifySrvAddrInfo(1);
+ return 0;
+}
+
+int Backstage::testServerIP(char *addr, float &time)//测试服务器ip
+{
+ return 0;
+}
+
+int Backstage::getIotServerIP(char *ip, int len)//获取服务器ip
+{
+ return 0;//MVC_Ctrler::getInstance()->getIotServerIP(ip, len);
+}
+
+int Backstage::setIotServerIP(char *ip)//设置服务器ip
+{
+ return 0;//MVC_Ctrler::getInstance()->setIotServerIP(ip);
+}
+
+int Backstage::getIotPort()//获取端口号, 成功返回端口号,失败返回-1
+{
+ return 0;//MVC_Ctrler::getInstance()->getIotPort();
+}
+
+int Backstage::setIotPort(int port)//设置端口号
+{
+ return 0;//MVC_Ctrler::getInstance()->setIotPort(port);
+}
+
+bool Backstage::getIpShowSw()
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getIpShowSw();
+}
+
+int Backstage::setIpShowSw(bool sw)
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setIpShowSw(sw);
+ return 0;
+}
+
+int Backstage::getBtSwitch(bool &isOpen)
+{
+ assert(nullptr != m_paramMng);
+ isOpen = m_paramMng->getBluetoothSw();
+ return 0;
+}
+
+int Backstage::getBtName(string &devName)
+{
+ assert(nullptr != m_paramMng);
+ devName = m_paramMng->getDevName();
+ return 0;
+}
+
+int Backstage::getBtPairedDev(list &devList)
+{
+ std::list pairedList;
+ blueToothMng::getInstance().getPairedDevs(pairedList);
+ devList.clear();
+ for(const auto &iter : pairedList)
+ {
+ BlueToothDevStat_e state = BlueToothDevStat_paired;
+ //连接状态:0搜索到, 1配对中, 2已配对, 3连接中, 4已连接
+// if (std::get<0>(iter) == 3)
+// {
+// state = BlueToothDevStat_connecting;
+// }
+ //else
+ if (std::get<0>(iter) == 4)
+ {
+ state = BlueToothDevStat_connected;
+ }
+ LOGD("name:%s, state:%d", std::get<3>(iter).c_str(), std::get<0>(iter));
+ devList.emplace_back(BluetoothDev_t(std::get<2>(iter), std::get<3>(iter), state));
+ }
+
+ return 0;
+}
+
+int Backstage::getBtAvailDev(list &devList)
+{
+ std::list scanedList;
+ blueToothMng::getInstance().getScanedDevs(scanedList);
+
+ devList.clear();
+ for(const auto &iter : scanedList)
+ {
+ //LOGD("name:%s, state:%d", std::get<1>(iter).c_str(), std::get<0>(iter));
+ devList.emplace_back(BluetoothDev_t(std::get<2>(iter), std::get<3>(iter), BlueToothDevStat_idle));
+ }
+
+ return 0;
+}
+
+int Backstage::getBtAllInfo(BluetoothStat_t &bluetoothStat)
+{
+ assert(nullptr != m_paramMng);
+
+ bluetoothStat.clear();
+ bluetoothStat.devName = m_paramMng->getDevName();
+ bluetoothStat.isEnable = m_paramMng->getBluetoothSw();
+ getBtPairedDev(bluetoothStat.pairedDev);
+ getBtAvailDev(bluetoothStat.availableDev);
+
+ return 0;
+}
+
+//blueToothMng模块里有一个线程循环再搜索,所以没有提供主动搜索接口,只提供了获取搜索列表的接口,这里调用getBtAvailDev即可
+int Backstage::btScan(list &devList)
+{
+#if 0
+ std::list searchedList;
+ blueToothMng::getInstance().search(searchedList);
+ devList.clear();
+
+ for(const auto &iter : searchedList)
+ {
+ LOGD("name:%s, state:%d", std::get<1>(iter).c_str(), std::get<0>(iter));
+ devList.emplace_back(BluetoothDev_t(std::get<2>(iter), std::get<1>(iter), BlueToothDevStat_idle));
+ }
+#endif
+ return 0;
+}
+
+int Backstage::btSetSwitch(bool isOpen)
+{
+ assert(nullptr != m_paramMng);
+
+ m_paramMng->setBluetoothSw(isOpen);
+ if (isOpen)
+ {
+ blueToothMng::getInstance().open();
+ }
+ else
+ {
+ m_paramMng->setBleLockSw(false);
+ blueToothMng::getInstance().close();
+ }
+
+ return 0;
+}
+
+int Backstage::btSetName(const string &devName)
+{
+ if (blueToothMng::getInstance().modifySysName(devName) == 0)
+ {
+ m_paramMng->setDevName(devName);
+ return 0;
+ }
+ return -1;
+}
+
+int Backstage::btPaire(const string &devId)
+{
+ int res = blueToothMng::getInstance().pair(devId);
+ if (res != 0)
+ {
+ LOGE("bluetooth pairing fail! res:%d", res);
+ }
+ return res;
+}
+
+int Backstage::btDisPaire(const string &devId)
+{
+ int res = blueToothMng::getInstance().disPair(devId);
+ if (res != 0)
+ {
+ LOGE("bluetooth disPairing fail! res:%d", res);
+ }
+
+ return res;
+}
+
+int Backstage::btConnect(const string &devId)
+{
+ int res = blueToothMng::getInstance().connect(devId);
+ if (res != 0)
+ {
+ LOGE("bluetooth connect fail!");
+ }
+
+ return res;
+}
+
+int Backstage::btDisConnect(const string &devId)
+{
+ int res = blueToothMng::getInstance().disConnect(devId);
+ if (res != 0)
+ {
+ LOGE("bluetooth disConnect fail! res:%d", res);
+ }
+
+ return res;
+}
+
+int Backstage::btRenameDev(const string &devId, const string &devName)
+{
+ return blueToothMng::getInstance().modifyDevName(devId, devName);
+}
+
+#if 1 //for test
+bool g_isBluetoothEnable = false;
+#endif
+bool Backstage::getParamBluetoothEnable()
+{
+ return g_isBluetoothEnable;
+}
+
+int Backstage::setParamBluetoothEnable(bool sw)
+{
+ g_isBluetoothEnable = sw;
+ return 0;
+}
+
+#if 1 //for test
+string g_bluetoothName = "rw-bluetooth";
+#endif
+string Backstage::getParamBluetoothName()
+{
+ return g_bluetoothName;
+}
+
+int Backstage::setParamBluetoothName(string name)
+{
+ g_bluetoothName = name;
+ return 0;
+}
+
+int Backstage::getUnlockTime()//获取开锁时间
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getUnlockTime();
+}
+
+int Backstage::setUnlockTime(int time)//设置开锁时间
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setUnlockTime(time);
+ return 0;
+}
+
+int Backstage::getUnlockDelay()//获取开锁延时
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getUnlockDelay();
+}
+
+int Backstage::setUnlockDelay(int time)//设置开锁延时
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setUnlockDelay(time);
+ return 0;
+}
+
+enUnlockSignal Backstage::getUnlockSig()//获取开锁信号
+{
+ assert(nullptr != m_paramMng);
+ if(m_paramMng->getUnlockSig() >= UnlockSigButt){
+ return UnlockSigRelay;
+ }
+ return (enUnlockSignal)m_paramMng->getUnlockSig();
+}
+
+int Backstage::setUnlockSig(enUnlockSignal value)//设置开锁信号
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setUnlockSig(value);
+ return 0;
+}
+
+enAssist Backstage::getAssistIn()//获取辅助输入
+{
+ return (enAssist)0;//MVC_Ctrler::getInstance()->getAssistIn();
+}
+
+int Backstage::setAssistIn(enAssist assist)//设置辅助输入
+{
+ return 0;//MVC_Ctrler::getInstance()->setAssistIn(assist);
+}
+
+enAssist Backstage::getAssistOut()//获取辅助输出
+{
+ return (enAssist)0;//MVC_Ctrler::getInstance()->getAssistOut();
+}
+
+int Backstage::setAssistOut(enAssist assist)//设置辅助输出
+{
+ return 0;//MVC_Ctrler::getInstance()->setAssistOut(assist);
+}
+
+enWiegand Backstage::getWiegandIn()//获取韦根输入
+{
+ return (enWiegand)0;//MVC_Ctrler::getInstance()->getWiegandIn();
+}
+
+int Backstage::setWiegandIn(enWiegand wiegand)//设置韦根输入
+{
+ return 0;//MVC_Ctrler::getInstance()->setWiegandIn(wiegand);
+}
+
+enWiegand Backstage::getWiegandOut()//获取韦根输出
+{
+ return (enWiegand)0;
+}
+
+int Backstage::setWiegandOut(enWiegand wiegand)//设置韦根输出
+{
+ return 0;
+}
+
+enBaudRate Backstage::getBaudRate()//获取波特率
+{
+ return (enBaudRate)0;
+}
+
+int Backstage::setBaudRate(enBaudRate baudRate)//设置波特率
+{
+ return 0;
+}
+
+int Backstage::getWarningSig()//获取报警信号v
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getWarningSig();
+}
+
+int Backstage::setWarningSig(int signal)//设置报警信号
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setWarningSig(signal);
+ return 0;
+}
+
+enLogo Backstage::getLogo()//获取logo
+{
+ assert(nullptr != m_paramMng);
+ return (enLogo)m_paramMng->getLogo();
+}
+
+int Backstage::setLogo(enLogo logo)//设置logo
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setLogo((int)logo);
+ return 0;
+}
+
+int Backstage::getCustomLogo(char *logo, int len)//获取自定义logo
+{
+ assert(nullptr != m_paramMng);
+ std::string customLogo = m_paramMng->getCustomLogo();
+ snprintf(logo, len, "%s", customLogo.c_str());
+ LOGD("customLogo: %s", customLogo.c_str());
+ return 0;
+}
+
+enLogo Backstage::getLogoTime()//获取logo+time
+{
+ return (enLogo)0;//MVC_Ctrler::getInstance()->getLogoTime();
+
+}
+int Backstage::setLogoTime(enLogo logo)//设置logo+time
+{
+ return 0;//MVC_Ctrler::getInstance()->setLogoTime(logo);
+}
+
+enLogo Backstage::getBackground()//获取背景图
+{
+ return (enLogo)0;//MVC_Ctrler::getInstance()->getBackground();
+}
+
+int Backstage::setBackground(enLogo logo)//设置背景图
+{
+ return 0;//MVC_Ctrler::getInstance()->setBackground(logo);
+}
+
+enRecogResult Backstage::getSuccessResult(char *data, int len)//获取成功结果
+{
+ int nRet = 0;//MVC_Ctrler::getInstance()->getSuccessResult(data, len);
+ nRet = (nRet < 0) ? RecogResultButt : nRet;
+ return (enRecogResult)nRet;
+}
+
+int Backstage::setSuccessResult(enRecogResult result, char *data)//设置成功结果
+{
+ return 0;//MVC_Ctrler::getInstance()->setSuccessResult(result, data);
+}
+
+enRecogResult Backstage::getFailResult(char *data, int len)//获取失败结果
+{
+ int nRet = 0;//MVC_Ctrler::getInstance()->getFailResult(data, len);
+ nRet = (nRet < 0) ? RecogResultButt : nRet;
+ return (enRecogResult)nRet;
+}
+
+int Backstage::setFailResult(enRecogResult result, char *data)//设置失败结果
+{
+ return 0;//MVC_Ctrler::getInstance()->setFailResult(result, data);
+}
+
+bool Backstage::getPlayAudioSw()//获取语音播报开关
+{
+ return 0;//MVC_Ctrler::getInstance()->getPlayAudioSw();
+}
+
+int Backstage::setPlayAudioSw(bool isOpen)//设置语音播报开关
+{
+ return 0;//MVC_Ctrler::getInstance()->setPlayAudioSw(isOpen);
+}
+
+bool Backstage::getIdentificationSw()//获取身份核验开关
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getRecoSw();
+}
+
+int Backstage::setIdentificationSw(bool sw)//设置身份核验开关
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setRecoSw(sw);
+ return 0;
+}
+
+enSimilarityTh Backstage::getSimilarityTh()//获取相似度阈值
+{
+ assert(nullptr != m_paramMng);
+ return (enSimilarityTh)m_paramMng->getSimilarityType();
+}
+
+int Backstage::setSimilarityTh(enSimilarityTh th)//设置相似度阈值
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setSimilarityType(th);
+ return 0;
+}
+
+int Backstage::setCustomSimilarity(int sim) //设置自定义识别相似度
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setSimilarityTh(sim);
+ return 0;
+}
+
+int Backstage::getCustomSimilarity() //获取自定义识别相似度
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getSimilarityTh();
+}
+
+bool Backstage::getLivingBodySw()//获取活体开关
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getInfraAntiAttack();
+}
+
+int Backstage::setLivingBodySw(bool isOpen)//设置活体开关
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setInfraAntiAttack(isOpen);
+ return 0;
+}
+
+enLivingBodyTh Backstage::getLivingBodyTh()//获取活体检测阈值
+{
+ return (enLivingBodyTh)0;
+}
+
+int Backstage::setLivingBodyTh(enLivingBodyTh th)//设置活体检测阈值
+{
+ return 0;
+}
+
+bool Backstage::getLivingBodyFailSw()//获取活体失败图片留存开关
+{
+ return 0;
+}
+
+int Backstage::setLivingBodyFailSw(bool isOpen)//设置失败图片留存开关
+{
+ return 0;
+}
+
+int Backstage::getVerifyInterval()//获取验证间隔时间
+{
+ return 0;
+}
+
+int Backstage::setVerifyInterval(int time)//设置验证间隔时间
+{
+ return 0;
+}
+
+enRecogDistance Backstage::getRecogDistance()//获取识别距离
+{
+ return (enRecogDistance)0;//MVC_Ctrler::getInstance()->getRecogDistance();
+}
+
+int Backstage::setRecogDistance(enRecogDistance distance)//设置识别距离
+{
+ return 0;//MVC_Ctrler::getInstance()->setRecogDistance(distance);
+}
+
+enRecogAngle Backstage::getRecogAngle()//获取识别角度
+{
+ return (enRecogAngle)0;//MVC_Ctrler::getInstance()->getRecogAngle();
+}
+
+int Backstage::setRecogAngle(enRecogAngle angle)//设置识别角度
+{
+ return 0;//MVC_Ctrler::getInstance()->setRecogAngle(angle);
+}
+
+int Backstage::getMaxTraceNum()//获取人脸最大跟踪数
+{
+ return 0;//MVC_Ctrler::getInstance()->getMaxTraceNum();
+}
+
+int Backstage::setMaxTraceNum(int num)//设置人脸最大跟踪数
+{
+ return 0;//MVC_Ctrler::getInstance()->setMaxTraceNum(num);
+}
+
+enFaceQuality Backstage::getFaceQuality()//获取人脸质量阈值
+{
+ return (enFaceQuality)0;//MVC_Ctrler::getInstance()->getFaceQuality();
+}
+
+int Backstage::setFaceQuality(enFaceQuality quality)//设置人脸质量阈值
+{
+ return 0;//MVC_Ctrler::getInstance()->setFaceQuality(quality);
+}
+
+bool Backstage::getDynamicFeatureSw()
+{
+ return m_paramMng->getDynamicFeatureSw();
+}
+
+int Backstage::setDynamicFeatureSw(bool sw)
+{
+ LOGD("setDynamicFeatureSw:%d", sw);
+ m_paramMng->setDynamicFeatureSw(sw);
+ return 0;
+}
+
+bool Backstage::getNtpServerSw()//获取NTP服务开关
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getNtpServerSw();
+}
+
+int Backstage::setNtpServerSw(bool isOpen)//设置NTP服务开关
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setNtpServerSw(isOpen);
+ return 0;
+}
+
+int Backstage::getNtpServerAddr(char *addr, int len)//获取NTP服务地址
+{
+ assert(nullptr != m_paramMng);
+ int ret = -1;
+ std::string serverinfo = m_paramMng->getNtpServerAddr();
+ if(serverinfo.length() < (unsigned)len){
+ strcpy(addr, serverinfo.c_str());
+ ret = 0;
+ }
+ return ret;
+}
+
+int Backstage::setNtpServerAddr(char *addr)//设置NTP服务地址
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setNtpServerAddr(addr);
+ return 0;
+}
+
+int Backstage::testNtpServer(char *addr, float &time)//测试NTP服务
+{
+ return 0;//MVC_Ctrler::getInstance()->testNtpServer(addr, time);
+}
+
+int Backstage::getNtpServerPort()//获取NTP端口,成功返回端口号,失败返回-1
+{
+ return m_paramMng->getNtpServerPort();
+}
+
+int Backstage::setNtpServerPort(int port)//设置NTP服务端口
+{
+ m_paramMng->setNtpServerPort(port);
+ return 0;
+}
+int Backstage::getNtpCheckInterval()
+{
+ return m_paramMng->getNtpSyncInterval();
+}
+
+int Backstage::setNtpCheckInterval(int interval)
+{
+ m_paramMng->setNtpSyncInterval(interval);
+ return 0;
+}
+
+int Backstage::getNtpTimeZone(char *timeZone, int len)
+{
+ assert(nullptr != m_paramMng);
+ int ret = -1;
+ std::string zone = m_paramMng->getZone();
+ if(zone.length() < (unsigned)len){
+ strcpy(timeZone, zone.c_str());
+ ret = 0;
+ }
+ return ret;
+}
+
+int Backstage::setNtpTimeZone(char *timeZone)
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setZone(timeZone);
+ return 0;
+}
+
+int Backstage::setVerifyFactorySettingPwd(char *pwd)//设置工程密码
+{
+ return 0;
+}
+
+int Backstage::testHardware()//硬件检测
+{
+ return 0;
+}
+
+int Backstage::cleanData()//清除数据
+{
+ int ret = clearData();
+ //清空数据会隐藏密码输入显示,需检查是否有本地设置密码
+ if(m_paramMng->getLocalDevPwd().length()){
+ View::getInstance()->setPwdButton(true);
+ }
+ return ret;
+}
+
+int Backstage::devReboot()//重启设备
+{
+ m_paramMng->setLcdBrightness(0, true);
+ sleep(1);
+ //deviceReboot();
+ DEV_REBOOT;
+ //system("reboot -f");
+ return 0;
+}
+
+int Backstage::startCapture()
+{
+ int nRet = 0;
+ return nRet;
+}
+
+int Backstage::deletePerson(long long personID)
+{
+ int nRet = 0;
+
+ return nRet;
+}
+
+int Backstage::queryPersonList(long long* pPersonIDBuff, int nBuffCount, long long startID, int& nRealPerson)
+{
+ int nRet = 0;
+
+ return nRet;
+}
+
+unsigned Backstage::queryPerson(const char* searchText)
+{
+ LOGD("searchText:%s", searchText);
+ const std::string countSql = std::string("select count(*) from person_info where 1=1 and name like '%") + searchText + "%'";
+ int sum = 0;
+ DBManage::getInstance()->getCountOfTableBySQL(countSql, sum);
+ LOGD("sum:%d", sum);
+ return (unsigned)sum;
+}
+
+unsigned Backstage::queryPerson(const char* searchText, int pageIndex, stQueryPersonInfo personRet[], int personRetSize)
+{
+ unsigned nRet = 0;
+ const std::string persql = std::string("select * from person_info where 1=1 and name like '%") + searchText
+ + "%' order by reg_time desc limit " + utils::to_string(personRetSize)
+ + " offset " + utils::to_string(pageIndex * personRetSize);
+
+ std::list personInfoList;
+ DBManage::getInstance()->queryPersonListBySQL(persql, personInfoList);
+ int i = 0;
+ for (auto &personInfo : personInfoList)
+ {
+ if(i < personRetSize){
+#if 0
+ snprintf(personRet[i].name, sizeof(personRet[i].name), personInfo.name.c_str());
+ snprintf(personRet[i].regTime, sizeof(personRet[i].regTime), utils::format_time(personInfo.regTime).c_str());
+ snprintf(personRet[i].expTime, sizeof(personRet[i].expTime), personInfo.expTime.c_str());
+#endif
+ personRet[i].name = personInfo.name;
+ personRet[i].regTime = utils::format_time(personInfo.regTime).c_str();
+ personRet[i].expTime = personInfo.expTime;
+
+ personRet[i].personId = personInfo.personId;
+ personRet[i].idNum = personInfo.idNum;
+ personRet[i].jobNum = personInfo.jobNum;
+ personRet[i].phoneNum = personInfo.phoneNum;
+ personRet[i].icNum = personInfo.cpuCardContent.empty() ? personInfo.icNum : personInfo.cpuCardContent;
+ personRet[i].personType = personInfo.personType;
+ string imgPath = utils::makeRegisterImgPath(personInfo.personId, personInfo.source, 1);
+ if(0 != access(imgPath.c_str(), F_OK))//如果不存在就去数据库中查找图片路径
+ {
+ LOGE("register img %s not exsit .", imgPath.c_str());
+ dbspace::rwFeatInfo faceInfo;
+ if (0 == DBManage::getInstance()->queryFaceByPersonId(personInfo.personId, faceInfo))
+ {
+ imgPath = faceInfo.image;
+ }
+ }
+#if 0
+ snprintf(personRet[i].imgPath, sizeof(personRet[i].imgPath), imgPath.c_str());
+#endif
+ personRet[i].imgPath = imgPath;
+ i++;
+ nRet = (unsigned)i;
+ }
+ }
+ return nRet;
+}
+
+unsigned Backstage::queryAccessRecord(const char* name, const char* time)
+{
+ unsigned nRet = 0;
+ std::string countSql("select count(*) from access_record where 1=1");
+ if(name){
+ countSql += " and name like '%";
+ countSql += name;
+ countSql += "%'";
+ }
+ if(time){
+ std::string timeBegin(time);
+ timeBegin += " 00:00:00";
+ std::string timeEnd(time);
+ timeEnd += " 23:59:59";
+
+ long long beginTime = utils::format_time(timeBegin.c_str());
+ long long endTime = utils::format_time(timeEnd.c_str());
+ LOGD("beginTime:%lld, endTime:%lld", beginTime, endTime);
+ countSql += " and access_time<=";
+ countSql += utils::to_string(endTime*1000);
+ countSql += " and access_time>=";
+ countSql += utils::to_string(beginTime*1000);//通行记录里面保存的是ms
+ }
+ int sum = 0;
+ DBManage::getInstance()->getCountOfTableBySQL(countSql, sum);
+ LOGD("sum:%d", sum);
+ nRet = (unsigned)sum;
+ return nRet;
+}
+
+unsigned Backstage::queryAccessRecord(const char* name, const char* time, int pageIndex, stQueryAccRedInfo recordRet[], int recordRetSize)
+{
+ unsigned nRet = 0;
+ std::string dataSql("select * from access_record where 1=1");
+ if(name){
+ dataSql += " and name like '%";
+ dataSql += name;
+ dataSql += "%'";
+ }
+ //时间格式必须为2020-04-05 00:00:00
+ if(time){
+ std::string timeBegin(time);
+ timeBegin += " 00:00:00";
+ std::string timeEnd(time);
+ timeEnd += " 23:59:59";
+
+ long long beginTime = utils::format_time(timeBegin.c_str());
+ long long endTime = utils::format_time(timeEnd.c_str());
+ LOGD("beginTime:%lld, endTime:%lld", beginTime, endTime);
+ dataSql += " and access_time<=";
+ dataSql += utils::to_string(endTime*1000);
+ dataSql += " and access_time>=";
+ dataSql += utils::to_string(beginTime*1000);//通行记录里面保存的是ms
+ }
+ dataSql += " order by access_time desc";
+ dataSql += " limit ";
+ dataSql += utils::to_string(recordRetSize);
+ dataSql += " offset ";
+ dataSql += utils::to_string(recordRetSize * pageIndex);
+
+ std::list accessInfoList;
+ DBManage::getInstance()->queryAccessRecordListBySQL(dataSql, accessInfoList);
+ int i = 0;
+ for (std::list::iterator itr = accessInfoList.begin(); itr != accessInfoList.end(); itr++)
+ {
+ if(i < recordRetSize){
+ snprintf(recordRet[i].name, sizeof(recordRet[i].name), (*itr).name.length() > 0 ? (*itr).name.c_str() : (m_paramMng->getLanguage() < 2 ? "陌生人" : "stranger"));
+ snprintf(recordRet[i].accessTime, sizeof(recordRet[i].accessTime), utils::format_time((*itr).accessTime/1000).c_str());
+ snprintf(recordRet[i].imgPath, sizeof(recordRet[i].imgPath), (*itr).imgFile.c_str());
+ recordRet[i].allowPass = (bool)((*itr).gateStatus);
+ i++;
+ nRet = (unsigned)i;
+ }
+ }
+ return nRet;
+}
+
+int Backstage::clearPeople()
+{
+ int nRet = 0;
+
+ return nRet;
+}
+
+int Backstage::getPersonListState(int &sum, unsigned long long &maxPersonID)
+{
+ int nRet = 0;
+
+ return nRet;
+}
+
+int Backstage::wakeUpFromScreenSaverOrScreenOff()
+{
+ return 0;
+}
+
+int Backstage::delPerson(long long personId)
+{
+ return Singleton::GetInstance()->deletePerson(personId);
+}
+
+int Backstage::modifyPerson(stQueryPersonInfo &personInfo)
+{
+ dbspace::rwPersonInfo dbPersonInfo;
+ dbPersonInfo.source = 1;
+ dbPersonInfo.personId = personInfo.personId;
+ dbPersonInfo.name = personInfo.name;
+ dbPersonInfo.idNum = personInfo.idNum;
+ dbPersonInfo.jobNum = personInfo.jobNum;
+ dbPersonInfo.phoneNum = personInfo.phoneNum;
+ dbPersonInfo.expTime = personInfo.expTime;
+ dbPersonInfo.icNum = personInfo.icNum;
+ int ret = Singleton::GetInstance()->modifyPerson(dbPersonInfo);
+
+ return ret;
+}
+
+int Backstage::addPerson(stQueryPersonInfo &personInfo)
+{
+ int count = 0;
+ DBManage::getInstance()->getPersonAllCount(count);
+ if (count >= REG_PERSON_NUM_MAX)
+ {
+ LOGE("The maximum number(%d) of people!", count);
+ return -99;
+ }
+
+ dbspace::rwPersonInfo dbPersonInfo;
+ dbPersonInfo.source = 1;
+ //dbPersonInfo.personId = personInfo.personId;
+ dbPersonInfo.name = personInfo.name;
+ dbPersonInfo.idNum = personInfo.idNum;
+ dbPersonInfo.jobNum = personInfo.jobNum;
+ dbPersonInfo.phoneNum = personInfo.phoneNum;
+ dbPersonInfo.expTime = personInfo.expTime;
+ dbPersonInfo.icNum = personInfo.icNum;
+
+ struct stat st;
+ if ((stat(personInfo.imgPath.c_str(), &st)<0) || (!S_ISREG(st.st_mode))){
+ LOGE("file:%s is Non-existent!", personInfo.imgPath.c_str());
+ return -1;
+ }
+ int len = st.st_size;
+ unsigned char *pImg = (unsigned char *)malloc(len);
+ if(pImg == nullptr){
+ LOGE("malloc size(%d) FAIL!", len);
+ return -1;
+ }
+ ON_SCOPE_EXIT([&]{free(pImg);pImg = NULL;});
+
+ int faceImgLen = utils::read_file(personInfo.imgPath.c_str(), pImg, len);
+ if (faceImgLen <= 0)
+ {
+ LOGE("file: %s size is 0!", personInfo.imgPath.c_str());
+ return -1;
+ }
+
+ dbspace::rwFaceImg faceImg;
+ faceImg.imgType = dbspace::jpg;
+ faceImg.imgData = pImg;
+ faceImg.imgLen = len;
+ faceImg.faceX = 0;
+ faceImg.faceY = 0;
+ faceImg.faceW = 0;
+ faceImg.faceH = 0;
+ int ret = Singleton::GetInstance()->registerPerson(dbPersonInfo, faceImg);
+
+ return ret;
+#if 0
+ if (ret != 0)
+ {
+ if (ret == -6)
+ {
+ code = CODE_CARD_ALREDDY_EXISTS;
+ }
+ else if (ret == -5)
+ {
+ code = CODE_EXTRACT_FEATURE;
+ }
+ else if (ret == -7)
+ {
+ code = CODE_ID_ALREDDY_EXISTS;
+ }
+ else
+ {
+ code = CODE_REGISTER_PERSON_FAIL;
+ }
+ ret = -1;
+ }
+#endif
+}
+
+int Backstage::snapFace(std::string &feature, std::string &savePath)
+{
+ GPeInput* pPeInput = (GPeInput*)m_objs->findObject("peInput");
+ //GCamera* pCamera = (GCamera*)m_objs->findObject("normal");
+ if(pPeInput){
+ std::shared_ptr spOriImage;
+ pPeInput->getSpImageFrame(spOriImage);
+ if (spOriImage.get() == nullptr)
+ {
+ LOGE("spOriImage is nullptr");
+ return -1;
+ }
+#if 0
+ //fds::RwImage *pflipImg = spOriImage->getFlipImage();
+ int width = spOriImage->image.ext.width;
+ int height = spOriImage->image.ext.height;
+ uint8_t* nv21 = (uint8_t*)spOriImage->image.data;
+ uint8_t* size = (uint8_t*)spOriImage->image.ext.size;
+ dbspace::rwFaceImg faceImg = {0, 0, 0, 0, width, height, width, dbspace::nv21, size, nv21, savePath};
+#endif
+ fds::RwImage *rwImage = spOriImage->getJpegImage();
+#if 0
+ #ifdef __RV1109__
+ fds::RwImage* rwImage = spOriImage->getFlipJpegImage();
+ #else
+ fds::RwImage* rwImage = spOriImage->getJpegImage();
+ #endif
+#endif
+ if(rwImage == nullptr)
+ {
+ LOGE("getJpegImage is nullptr");
+ return -1;
+ }
+ dbspace::rwFaceImg faceImg = {0, 0, 0, 0, rwImage->ext.width, rwImage->ext.height, rwImage->ext.width,
+ dbspace::jpg, rwImage->ext.size, (uint8_t*)rwImage->data, savePath};
+
+
+ std::vector tmp(FEATURE_SIZE);
+ RwFeature feat = {0};
+ feat.feature_size = FEATURE_SIZE;
+ feat.feature = tmp.data();
+ int ret = faceImg.getFeature(feat);
+ if (ret != 0)
+ {
+ LOGE("getFeature fail-->ret:%d", ret);
+ return -5;
+ }
+
+ if (faceImg.imgJpgData == nullptr)
+ {
+ LOGE("jpg is null!");
+ return -1;
+ }
+
+ feature.assign((char*)feat.feature, feat.feature_size);
+ LOGD("jpg name:%s, imgdata:%p, imgLen:%d", faceImg.imgName.c_str(), faceImg.imgJpgData.get(), faceImg.imgLen);
+ ret = utils::write_file(faceImg.imgName, (char *)(faceImg.imgJpgData.get()), faceImg.imgLen);
+
+ return ret;
+ }
+
+ return -1;
+}
+
+bool Backstage::getMaskCheckSwitch()
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getMaskSw();
+}
+
+int Backstage::setMaskCheckSwitch(const bool sw)
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setMaskSw(sw);
+ return 0;
+}
+
+
+bool Backstage::getNoMaskNoPassSwitch()
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getNoMaskPassSw();
+}
+
+int Backstage::setNoMaskNoPassSwitch(const bool sw)
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setNoMaskPassSw(sw);
+ return 0;
+}
+
+bool Backstage::getTemperatureCheckSwitch()
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getTempSw();
+}
+
+int Backstage::setTemperatureCheckSwitch(const bool sw)
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setTempSw(sw);
+ return 0;
+}
+
+bool Backstage::getNoTemperatureNoPassSwitch()
+{
+ return 0;//MVC_Ctrler::getInstance()->getTempAnomalyNoEntrySwitch();
+}
+
+int Backstage::setNoTemperatureNoPassSwitch(const bool sw)
+{
+ return 0;//MVC_Ctrler::getInstance()->setTempAnomalyNoEntrySwitch(sw);
+}
+
+
+float Backstage::getLowTemperature()
+{
+ return 0;//MVC_Ctrler::getInstance()->getLowTemperature();
+}
+
+int Backstage::setLowTemperature(const float temp)
+{
+ return 0;//MVC_Ctrler::getInstance()->setLowTemperature(temp);
+}
+
+float Backstage::getHighTemperature()
+{
+ return 0;//MVC_Ctrler::getInstance()->getHighTemperature();
+}
+
+int Backstage::setHighTemperature(const float temp)
+{
+ return 0;//MVC_Ctrler::getInstance()->setHighTemperature(temp);
+}
+
+bool Backstage::getQRCodeSwitch()
+{
+ return 0;//MVC_Ctrler::getInstance()->getQRCodeSwitch();
+}
+
+int Backstage::setQRCodeSwitch(const bool sw)
+{
+ return 0;
+}
+
+int Backstage::setDateTime(const char *dateTime)
+{
+ const std::string cmd = std::string("date -s \"") + dateTime + "\" && hwclock -w -u -f /dev/rtc0";
+ LOGD("setDateTime cmd:%s", cmd.c_str());
+ return utils::RW_System(cmd.c_str());
+}
+
+bool Backstage::getDataEncryptSw()
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getEncryptSw();
+}
+
+
+int Backstage::setDataEncryptSw(bool sw)
+{
+ LOGD("setEncryptSw:%d", sw);
+ m_paramMng->setEncryptSw(sw);
+ return 0;
+}
+
+bool Backstage::getAutoRebootSw()
+{
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getAutoRebootSw();
+}
+
+int Backstage::setAutoRebootSw(bool sw)
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setAutoRebootSw(sw);
+ updateRebootTime(sw, m_paramMng->getAutoRebootInterval(), m_paramMng->getAutoRebootTime().c_str());
+ return 0;
+}
+
+int Backstage::getAutoRebootTime(char* time, int len)
+{
+ assert(nullptr != m_paramMng);
+ int ret = -1;
+ std::string rebootTime = m_paramMng->getAutoRebootTime();
+ if(rebootTime.length() < (unsigned)len){
+ strcpy(time, rebootTime.c_str());
+ ret = 0;
+ }
+ return ret;
+}
+
+int Backstage::setAutoRebootTime(const char *time)
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setAutoRebootTime(time);
+ updateRebootTime(m_paramMng->getAutoRebootSw(), m_paramMng->getAutoRebootInterval(), time);
+ return 0;
+}
+
+int Backstage::getAutoRebootInterval()
+{
+
+ assert(nullptr != m_paramMng);
+ return m_paramMng->getAutoRebootInterval();
+}
+
+int Backstage::setAutoRebootInterval(int interval)
+{
+ assert(nullptr != m_paramMng);
+ m_paramMng->setAutoRebootInterval(interval);
+ updateRebootTime(m_paramMng->getAutoRebootSw(), interval, m_paramMng->getAutoRebootTime().c_str());
+ return 0;
+}
+
+int Backstage::ntpTimeCorrect()
+{
+ int ret = -1;
+ do{
+ bool ntpSw = getNtpServerSw();
+ if(ntpSw){
+ char ntpaddr[64] = {'\0'};
+ if(0 != getNtpServerAddr(ntpaddr, sizeof(ntpaddr))){
+ break;
+ }
+ char timeZone[64] = {'\0'};
+ if(0 != getNtpTimeZone(timeZone, sizeof(timeZone))){
+ break;
+ }
+ ret = ntpUpdater::getInstance().setParam(ntpSw, ntpaddr, getNtpCheckInterval(), timeZone);
+ //ret = ntpTimeCorrection(ntpSw, ntpaddr, getNtpCheckInterval(), timeZone);
+ }
+ else{
+ //ret = ntpTimeCorrection(false, "", 0, "");
+ ret = ntpUpdater::getInstance().setParam(false, "", 0, "");
+ }
+ }while(0);
+ return ret;
+}
+
+int Backstage::ntpTimeCorrectForDevTest(const std::string& ntpServerIp)
+{
+ int ret = 0;
+ //工厂生产时Mes服务器开启NTP校时服务
+ std::string cmd = utils::to_string(APP_BIN_PATH"ntpdate.sh ") + utils::to_string("/dev/rtc0 ") + ntpServerIp;
+ LOGI("update ntp time for device test, cmd:%s", cmd.c_str());
+
+ int nReturn = utils::RW_System(cmd.c_str());//return 1 is
+ int err = WEXITSTATUS(nReturn);
+ if (0 != err)
+ {
+ LOGE("exec [%s] fail,err=%d,nReturn=%d", cmd.c_str(), err, nReturn);
+ ret = -1;
+ }
+ return ret;
+}
+
+int Backstage::getNetWireCfg(stNetWire& wireCfg)
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "get_networkSettings");
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *obj = cJSON_GetObjectItem(root, "data");
+ if (NULL == obj){
+ LOGE("parse data error!");
+ ret = -3;
+ break;
+ }
+
+ cJSON *jsTmp = cJSON_GetObjectItem(obj, "type");
+ if (NULL == jsTmp) {
+ LOGE("parse type error!");
+ ret = -6;
+ break;
+ }
+ if (jsTmp->valueint < 0 || jsTmp->valueint > 1){
+ LOGE("type error: %d", jsTmp->valueint);
+ ret = -7;
+ break;
+ }
+ wireCfg.cfg.type = jsTmp->valueint;
+ LOGI("wireCfg.cfg.type:%d", wireCfg.cfg.type);
+
+ jsTmp = cJSON_GetObjectItem(obj, "status");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -4;
+ break;
+ }
+ if (jsTmp->valueint < 0 || jsTmp->valueint > 1){
+ LOGE("status error: %d", jsTmp->valueint);
+ ret = -5;
+ break;
+ }
+ wireCfg.cfg.enable = jsTmp->valueint;
+ LOGI("wireCfg.cfg.enable:%d", wireCfg.cfg.enable);
+ if(false == wireCfg.cfg.enable){
+ ret = 0;
+ break;
+ }
+
+ if(wireCfg.cfg.type){ //dhcp
+ std::string maskString;
+ std::string ipString;
+ if(0 == utils::getIpAndMask("eth0", ipString, maskString)){
+ snprintf(wireCfg.cfg.ip, sizeof(wireCfg.cfg.ip), ipString.c_str());
+ snprintf(wireCfg.cfg.mask, sizeof(wireCfg.cfg.mask), maskString.c_str());
+ }
+ std::string gw;
+ if(0 == utils::GetDefaultGw(gw)){
+ snprintf(wireCfg.cfg.gw, sizeof(wireCfg.cfg.gw), gw.c_str());
+ }
+ snprintf(wireCfg.cfg.dns, sizeof(wireCfg.cfg.dns), utils::getDNS().c_str());
+ ret = 0;
+ break;
+ }
+
+ jsTmp = cJSON_GetObjectItem(obj, "ip");
+ if (NULL == jsTmp){
+ LOGE("parse ip error!");
+ ret = -8;
+ break;
+ }
+ snprintf(wireCfg.cfg.ip, sizeof(wireCfg.cfg.ip), jsTmp->valuestring);
+ LOGI("ip:%s", wireCfg.cfg.ip);
+
+ jsTmp = cJSON_GetObjectItem(obj, "netmask");
+ if (NULL == jsTmp){
+ LOGE("parse netmask error!");
+ ret = -9;
+ break;
+ }
+ snprintf(wireCfg.cfg.mask, sizeof(wireCfg.cfg.mask), jsTmp->valuestring);
+ LOGI("netmask:%s", wireCfg.cfg.mask);
+
+ jsTmp = cJSON_GetObjectItem(obj, "gateway");
+ if (NULL == jsTmp){
+ LOGE("parse gateway error!");
+ ret = -10;
+ break;
+ }
+ snprintf(wireCfg.cfg.gw, sizeof(wireCfg.cfg.gw), jsTmp->valuestring);
+ LOGI("gateway:%s", wireCfg.cfg.gw);
+
+ jsTmp = cJSON_GetObjectItem(obj, "dns");
+ if (NULL == jsTmp){
+ LOGE("parse dns error!");
+ ret = -11;
+ break;
+ }
+ snprintf(wireCfg.cfg.dns, sizeof(wireCfg.cfg.dns), jsTmp->valuestring);
+ LOGI("dns:%s", wireCfg.cfg.dns);
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+
+int Backstage::setNetWireCfg(const stNetWire& wireCfg)
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "set_networkSettings");
+ cJSON_AddNumberToObject(json, "type", wireCfg.cfg.type);
+ if(!wireCfg.cfg.type){
+ cJSON_AddStringToObject(json, "ip", wireCfg.cfg.ip);
+ cJSON_AddStringToObject(json, "netmask", wireCfg.cfg.mask);
+ if(wireCfg.cfg.gw[0]){
+ cJSON_AddStringToObject(json, "gateway", wireCfg.cfg.gw);
+ }
+ if(wireCfg.cfg.dns[0]){
+ cJSON_AddStringToObject(json, "dns", wireCfg.cfg.dns);
+ }
+ }
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *jsTmp = cJSON_GetObjectItem(root, "ret");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -3;
+ break;
+ }
+ if (0 != jsTmp->valueint){
+ LOGE("netconfig ret: %d", jsTmp->valueint);
+ ret = -4;
+ break;
+ }
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+int Backstage::setNetWireEnable(bool enable)
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "update_network_status");
+ cJSON_AddBoolToObject(json, "status", enable);
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *jsTmp = cJSON_GetObjectItem(root, "ret");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -3;
+ break;
+ }
+ if (0 != jsTmp->valueint){
+ LOGE("netconfig ret: %d", jsTmp->valueint);
+ ret = -4;
+ break;
+ }
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+
+
+int Backstage::getNetWifiCfg(stNetWifi& wifiCfg)
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "get_wifiSettings");
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *obj = cJSON_GetObjectItem(root, "data");
+ if (NULL == obj){
+ LOGE("parse data error!");
+ ret = -3;
+ break;
+ }
+
+ cJSON *jsTmp = cJSON_GetObjectItem(obj, "status");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -4;
+ break;
+ }
+ if (jsTmp->valueint < 0 || jsTmp->valueint > 1){
+ LOGE("status error: %d", jsTmp->valueint);
+ ret = -5;
+ break;
+ }
+ wifiCfg.cfg.enable = jsTmp->valueint;
+ LOGI("wireCfg.cfg.enable:%d", wifiCfg.cfg.enable);
+ if(false == wifiCfg.cfg.enable){
+ ret = 0;
+ break;
+ }
+
+ jsTmp = cJSON_GetObjectItem(obj, "enableAp");
+ if (NULL == jsTmp){
+ LOGE("parse enableAp error!");
+ ret = -12;
+ break;
+ }
+ wifiCfg.enableAp = jsTmp->valueint;
+
+ if(wifiCfg.enableAp){
+ jsTmp = cJSON_GetObjectItem(obj, "apPwd");
+ if (NULL == jsTmp){
+ LOGE("parse apPwd error!");
+ ret = -12;
+ break;
+ }
+ snprintf(wifiCfg.apPwd, sizeof(wifiCfg.apPwd), jsTmp->valuestring);
+ ret = 0;
+ break;
+ }
+
+ jsTmp = cJSON_GetObjectItem(obj, "enctype");
+ if (NULL == jsTmp){
+ LOGE("parse enctype error!");
+ ret = -12;
+ break;
+ }
+ snprintf(wifiCfg.encType, sizeof(wifiCfg.encType), jsTmp->valuestring);
+ LOGI("encType:%s", wifiCfg.encType);
+
+ jsTmp = cJSON_GetObjectItem(obj, "ssid");
+ if (NULL == jsTmp){
+ LOGE("parse ssid error!");
+ ret = -13;
+ break;
+ }
+ snprintf(wifiCfg.ssid, sizeof(wifiCfg.ssid), jsTmp->valuestring);
+ LOGI("ssid:%s", wifiCfg.ssid);
+
+ jsTmp = cJSON_GetObjectItem(obj, "pwd");
+ if (NULL == jsTmp){
+ LOGE("parse pwd error!");
+ ret = -14;
+ break;
+ }
+ snprintf(wifiCfg.pwd, sizeof(wifiCfg.pwd), jsTmp->valuestring);
+ LOGI("pwd:%s", wifiCfg.pwd);
+
+ jsTmp = cJSON_GetObjectItem(obj, "connected");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -15;
+ break;
+ }
+ if (jsTmp->valueint < 0 || jsTmp->valueint > 1){
+ LOGE("connected error: %d", jsTmp->valueint);
+ ret = -16;
+ break;
+ }
+ wifiCfg.isConnected = jsTmp->valueint;
+ LOGI("wireCfg.connected:%d", wifiCfg.isConnected);
+
+ jsTmp = cJSON_GetObjectItem(obj, "type");
+ if (NULL == jsTmp) {
+ LOGE("parse type error!");
+ ret = -6;
+ break;
+ }
+ if (jsTmp->valueint < 0 || jsTmp->valueint > 1){
+ LOGE("type error: %d", jsTmp->valueint);
+ ret = -7;
+ break;
+ }
+ wifiCfg.cfg.type = jsTmp->valueint;
+ LOGI("wifiCfg.cfg.type:%d", wifiCfg.cfg.type);
+ if(wifiCfg.cfg.type){ //dhcp
+ std::string maskString;
+ std::string ipString;
+ if(0 == utils::getIpAndMask("wlan0", ipString, maskString)){
+ snprintf(wifiCfg.cfg.ip, sizeof(wifiCfg.cfg.ip), ipString.c_str());
+ snprintf(wifiCfg.cfg.mask, sizeof(wifiCfg.cfg.mask), maskString.c_str());
+ }
+ std::string gw;
+ if(0 == utils::GetDefaultGw(gw)){
+ snprintf(wifiCfg.cfg.gw, sizeof(wifiCfg.cfg.gw), gw.c_str());
+ }
+ snprintf(wifiCfg.cfg.dns, sizeof(wifiCfg.cfg.dns), utils::getDNS().c_str());
+ ret = 0;
+ break;
+ }
+
+ jsTmp = cJSON_GetObjectItem(obj, "ip");
+ if (NULL == jsTmp){
+ LOGE("parse ip error!");
+ ret = -8;
+ break;
+ }
+ snprintf(wifiCfg.cfg.ip, sizeof(wifiCfg.cfg.ip), jsTmp->valuestring);
+ LOGI("ip:%s", wifiCfg.cfg.ip);
+
+ jsTmp = cJSON_GetObjectItem(obj, "netmask");
+ if (NULL == jsTmp){
+ LOGE("parse netmask error!");
+ ret = -9;
+ break;
+ }
+ snprintf(wifiCfg.cfg.mask, sizeof(wifiCfg.cfg.mask), jsTmp->valuestring);
+ LOGI("netmask:%s", wifiCfg.cfg.mask);
+
+ jsTmp = cJSON_GetObjectItem(obj, "gateway");
+ if (NULL == jsTmp){
+ LOGE("parse gateway error!");
+ ret = -10;
+ break;
+ }
+ snprintf(wifiCfg.cfg.gw, sizeof(wifiCfg.cfg.gw), jsTmp->valuestring);
+ LOGI("gateway:%s", wifiCfg.cfg.gw);
+
+ jsTmp = cJSON_GetObjectItem(obj, "dns");
+ if (NULL == jsTmp){
+ LOGE("parse dns error!");
+ ret = -11;
+ break;
+ }
+ snprintf(wifiCfg.cfg.dns, sizeof(wifiCfg.cfg.dns), jsTmp->valuestring);
+ LOGI("ip:%s", wifiCfg.cfg.dns);
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+
+int Backstage::setNetWifiCfg(const stNetWifi& wifiCfg)
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "set_wifiSettings");
+ cJSON_AddStringToObject(json, "enctype", wifiCfg.encType);
+ cJSON_AddStringToObject(json, "ssid", wifiCfg.ssid);
+ cJSON_AddStringToObject(json, "pwd", wifiCfg.pwd);
+ cJSON_AddNumberToObject(json, "type", wifiCfg.cfg.type);
+ if(!wifiCfg.cfg.type){
+ cJSON_AddStringToObject(json, "ip", wifiCfg.cfg.ip);
+ cJSON_AddStringToObject(json, "netmask", wifiCfg.cfg.mask);
+ if(wifiCfg.cfg.gw[0]){
+ cJSON_AddStringToObject(json, "gateway", wifiCfg.cfg.gw);
+ }
+ if(wifiCfg.cfg.dns[0]){
+ cJSON_AddStringToObject(json, "dns", wifiCfg.cfg.dns);
+ }
+ }
+ cJSON_AddBoolToObject(json, "enableAp", wifiCfg.enableAp);
+ cJSON_AddStringToObject(json, "apPwd", wifiCfg.apPwd);
+ cJSON_AddBoolToObject(json, "isApCfg", wifiCfg.isAPCfg);
+ cJSON_AddBoolToObject(json, "isDevCfg", true);
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *jsTmp = cJSON_GetObjectItem(root, "ret");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -3;
+ break;
+ }
+ if (0 != jsTmp->valueint){
+ LOGE("netconfig ret: %d", jsTmp->valueint);
+ ret = -4;
+ break;
+ }
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+
+int Backstage::setNetWifiEnable(bool enable)
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "update_wifi_status");
+ cJSON_AddBoolToObject(json, "status", enable);
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *jsTmp = cJSON_GetObjectItem(root, "ret");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -3;
+ break;
+ }
+ if (0 != jsTmp->valueint){
+ LOGE("netconfig ret: %d", jsTmp->valueint);
+ ret = -4;
+ break;
+ }
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+
+int Backstage::getSsidList(stAccPoint accPointList[], int accPointListSize)
+{
+#if 0 //test
+ int ret = -1;
+ std::vector vSsidList;
+ std::vector vSigLev;
+ std::vector vEncrypt;
+ ret = wifiScan(vSsidList, vSigLev, vEncrypt, targetSsid);
+ if(0 == ret){
+ int i = 0;
+ for(auto& s : vSsidList){
+ if(i < accPointListSize){
+ if("" != s){
+ snprintf(accPointList[i].ssid, sizeof(accPointList[i].ssid), s.c_str());
+ accPointList[i].sigLev = vSigLev[i];
+ accPointList[i].isEncrypt = vEncrypt[i];
+ if(s == targetSsid){
+ targetConn = wifiConnect(targetSsid, targetSsidPwd);
+ }
+ i++;
+ }
+ }
+ else{
+ break;
+ }
+ }
+ ret = i;
+ }
+ return ret;
+#else
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "get_wifiList");
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *obj = cJSON_GetObjectItem(root, "data");
+ if (NULL == obj){
+ LOGE("parse data error!");
+ ret = -3;
+ break;
+ }
+
+ cJSON *ap_arry = cJSON_GetObjectItem(obj, "wifiList");
+ if( NULL == ap_arry ){
+ LOGE("parse wifiList error!");
+ ret = -4;
+ break;
+ }
+ int i = 0;
+ cJSON *client_list = ap_arry->child;
+ while( client_list != NULL ){
+ if(i < accPointListSize){
+ char *ssid = cJSON_GetObjectItem( client_list , "ssid")->valuestring;
+ if(ssid && *ssid){
+ LOGI("ssid:%s", accPointList[i].ssid);
+ snprintf(accPointList[i].ssid, sizeof(accPointList[i].ssid), ssid);
+ accPointList[i].sigLev = cJSON_GetObjectItem( client_list , "sig")->valueint;
+ accPointList[i].isEncrypt = (bool)cJSON_GetObjectItem( client_list , "ept")->valueint;
+ accPointList[i].isConnected = (bool)cJSON_GetObjectItem( client_list , "conn")->valueint;
+ i++;
+ LOGI("ssid:%s, sigLev:%d, isEncrypt:%d, isConnected:%d", accPointList[i].ssid, accPointList[i].sigLev, accPointList[i].isEncrypt, accPointList[i].isConnected);
+ }
+ }
+ else{
+ LOGE("space for ssid list not enough");
+ break;
+ }
+ client_list = client_list->next ;
+ }
+ ret = i;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+#endif
+}
+
+int Backstage::claerNetWifiCfg()
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "clear_wifiSettings");
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *jsTmp = cJSON_GetObjectItem(root, "ret");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -3;
+ break;
+ }
+ if (0 != jsTmp->valueint){
+ LOGE("netconfig ret: %d", jsTmp->valueint);
+ ret = -4;
+ break;
+ }
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+
+int Backstage::getNet4GCfg(stNet4G& n4gCfg)
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "get_4g_status");
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *obj = cJSON_GetObjectItem(root, "data");
+ if (NULL == obj){
+ LOGE("parse data error!");
+ ret = -3;
+ break;
+ }
+
+ cJSON *jsTmp = cJSON_GetObjectItem(obj, "hasDevice");
+ if (NULL == jsTmp){
+ LOGE("parse available error!");
+ ret = -4;
+ break;
+ }
+ if (jsTmp->valueint < 0 || jsTmp->valueint > 1){
+ LOGE("status available: %d", jsTmp->valueint);
+ ret = -5;
+ break;
+ }
+ n4gCfg.available = jsTmp->valueint;
+ LOGI("n4gCfg.available:%d", n4gCfg.available);
+ if(false == n4gCfg.available){
+ ret = 0;
+ break;
+ }
+
+ jsTmp = cJSON_GetObjectItem(obj, "status");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -6;
+ break;
+ }
+ if (jsTmp->valueint < 0 || jsTmp->valueint > 1){
+ LOGE("status error: %d", jsTmp->valueint);
+ ret = -7;
+ break;
+ }
+ n4gCfg.enable = jsTmp->valueint;
+ LOGI("n4gCfg.enable:%d", n4gCfg.enable);
+ if(false == n4gCfg.enable){
+ ret = 0;
+ break;
+ }
+
+ jsTmp = cJSON_GetObjectItem(obj, "service_provider_type");
+ if (NULL == jsTmp){
+ LOGE("parse provider error!");
+ ret = -8;
+ break;
+ }
+ n4gCfg.provider = jsTmp->valueint;
+ LOGI("provider:%d", n4gCfg.provider);
+
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+
+int Backstage::setNet4GEnable(bool enable)
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "update_4g_status");
+ cJSON_AddBoolToObject(json, "status", enable);
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *jsTmp = cJSON_GetObjectItem(root, "ret");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -3;
+ break;
+ }
+ if (0 != jsTmp->valueint){
+ LOGE("netconfig ret: %d", jsTmp->valueint);
+ ret = -4;
+ break;
+ }
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+
+int Backstage::reboot4G()
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "reboot_4g");
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *jsTmp = cJSON_GetObjectItem(root, "ret");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -3;
+ break;
+ }
+ if (0 != jsTmp->valueint){
+ LOGE("netconfig ret: %d", jsTmp->valueint);
+ ret = -4;
+ break;
+ }
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+
+int Backstage::getScreenSaverConfig(stScreensaverCfg& cfg)
+{
+ cfg.type = m_paramMng->getScreensaverType();
+ cfg.interval = m_paramMng->getScreensaverInter();
+ cfg.picQty = 0;
+ std::string screensaverCfg(m_paramMng->getScreensaverPics());
+ while(screensaverCfg.length()){
+ unsigned iPos = screensaverCfg.find(";");
+ if(iPos != std::string::npos){
+ snprintf(&cfg.pic[cfg.picQty][0], sizeof(cfg.pic[0]), screensaverCfg.substr(0, iPos).c_str());
+ LOGI("screenasver %d : %s", cfg.picQty, &cfg.pic[cfg.picQty][0]);
+ cfg.picQty++;
+ screensaverCfg = (screensaverCfg.length() > iPos + 1 ? screensaverCfg.substr(iPos + 1) : "");
+ }
+ else{
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+int Backstage::sendPassword(const char *password)
+{
+ if(m_objs){
+ LOGI("sendPassword");
+ GPeInput *peinput = (GPeInput*)m_objs->findObject("peinput");
+ if (nullptr != peinput){
+ peinput->sendPassword(password);
+ }
+ }
+ return 0;
+}
+
+void Backstage::resetDecisionCenterTimer()
+{
+ if(m_objs){
+ LOGI("resetDecisionCenterTimer");
+ GDecisionCenter *decCenter = (GDecisionCenter*)m_objs->findObject("decisionCenter");
+ if (nullptr != decCenter){
+ decCenter->timerReset();
+ }
+ }
+}
+
+int Backstage::pauseDataFlow()
+{
+ if(m_objs){
+ LOGI("pause Data Flow");
+ #if 0
+ GDecisionCenter *decCenter = (GDecisionCenter*)m_objs->findObject("decisionCenter");
+ if (nullptr != decCenter){
+ if(!Singleton::GetInstance()->isHardwareTesting()){
+ decCenter->pauseDataFlowAfterAllNotRecoResRecvd();
+ }
+ else{
+ LOGI("is testing hardware...");
+ }
+ return 0;
+ }
+ #else
+ GTrackerLock *pTrackLock = (GTrackerLock*)m_objs->findObject("trackerLock");
+ GStandby *pStandby = (GStandby*)m_objs->findObject("standby");
+ if (nullptr != pTrackLock && nullptr != pStandby){
+ if(!Singleton::GetInstance()->isHardwareTesting()){
+ pTrackLock->lockCtrl(true);
+ }
+ else{
+ LOGI("is testing hardware...");
+ }
+ return 0;
+ }
+ #endif
+ }
+ return -1;
+}
+
+int Backstage::resumeDataFlow()
+{
+ if(m_objs){
+ LOGI("resume Data Flow");
+ #if 0
+ GDecisionCenter *decCenter = (GDecisionCenter*)m_objs->findObject("decisionCenter");
+ if (nullptr != decCenter){
+ decCenter->resumeDataFlow();
+ return 0;
+ }
+ #else
+ GTrackerLock *pTrackLock = (GTrackerLock*)m_objs->findObject("trackerLock");
+ if (pTrackLock){
+ pTrackLock->lockCtrl(false);
+ return 0;
+ }
+ #endif
+ }
+ return -1;
+}
+
+int Backstage::candidateChoosedInPopupWindow(int index)
+{
+ LOGI("candidateChoosedInPopupWindow:%d", (int)index);
+ if(index >= 0){
+ RWProtocol::getInstance()->sendSelectedItem(index);
+ }
+ else{
+ if(m_objs){
+ LOGI("cancle choosed by user");
+ GDecisionCenter *decCenter = (GDecisionCenter*)m_objs->findObject("decisionCenter");
+ if (nullptr != decCenter){
+ decCenter->recheckResult(2);//二次核验未经许可人员
+ }
+ }
+ }
+ return 0;
+}
+
+int Backstage::resetNetworkCfg()
+{
+ int ret = -1;
+ cJSON *json = cJSON_CreateObject();
+ if (!json){
+ LOGE("cJSON_CreateObject list FAIL!");
+ return ret;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(json);});
+ cJSON_AddStringToObject(json, "cmd", "set_default_setting");
+ char *jsonBuf = cJSON_PrintUnformatted(json);
+ if(jsonBuf){
+ LOGI("udp json:%s", jsonBuf);
+ std::string reply;
+ if(0 == udpSend(std::string(jsonBuf), reply)){
+ do{
+ cJSON *root = cJSON_Parse(reply.c_str());
+ if (!root){
+ LOGE("parse root error. ");
+ ret = -2;
+ break;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ cJSON *jsTmp = cJSON_GetObjectItem(root, "ret");
+ if (NULL == jsTmp){
+ LOGE("parse status error!");
+ ret = -3;
+ break;
+ }
+ if (0 != jsTmp->valueint){
+ LOGE("reset Network Cfg ret: %d", jsTmp->valueint);
+ ret = -4;
+ break;
+ }
+ ret = 0;
+ }while(0);
+ }
+ free(jsonBuf);
+ }
+ return ret;
+}
+
+int Backstage::udpSend(const string &sendData, string &recvData)
+{
+ int fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (fd < 0)
+ {
+ LOGE("create socket fail!");
+ return -1;
+ }
+
+ timeval tv = {30, 0};
+ int ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char*)&tv, sizeof(timeval));
+ if (ret)
+ {
+ ::close(fd);
+ return -2;
+ }
+
+ struct sockaddr_in sin;
+ bzero(&sin, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_addr.s_addr = htonl(INADDR_ANY);
+ sin.sin_port = htons(6788);
+ sendto(fd, sendData.c_str(), sendData.length(), 0, (struct sockaddr *)&sin, sizeof(struct sockaddr));
+
+ char buff[1024 * 8] = {0};
+ #if 0
+ int len = recvfrom(fd, buff, sizeof(buff) - 1, 0, nullptr, nullptr);
+ #else
+ int len = 0;
+ int tryTime = 3;
+ do{
+ len = recvfrom(fd, buff, sizeof(buff) - 1, 0, nullptr, nullptr);
+ }while(len < 0 && 4 == errno && tryTime--);
+ #endif
+ if (len < 0)
+ {
+ LOGE("no recv data, ret:%d, errno:%d", len, errno);
+ ::close(fd);
+ return -3;
+ }
+ if (buff[len - 2] == '\n' && buff[len - 1] == '\0')
+ {
+ buff[len - 2] = '\0';
+ len -= 1;
+ }
+ else
+ {
+ buff[len] = '\0';
+ len++;
+ }
+ LOGD("recv[%d]:%s", strlen(buff), buff);
+ recvData = buff;
+
+ ::close(fd);
+ return 0;
+}
+
+bool Backstage::isWiegandIoTestOk()
+{
+ LOGI("isWiegandIoTestOk");
+ GPeInput* pPeInput = (GPeInput*)m_objs->findObject("peInput");
+ if(pPeInput){
+ pPeInput->hardwareTest(enWgOut);
+ usleep(300000);
+ return pPeInput->isWiegandLoopTestOk();
+ }
+ return false;
+}
+
+bool Backstage::isRelayAndGpioTestOk()
+{
+ LOGI("isRelayAndGpioTestOk");
+ bool ret = true;
+ for(int i=0; i::GetInstance()->hasGpio((BasePeripheral::enGpio)i)){
+ LOGI("has no gpio%d", i);
+ continue;
+ }
+ int value = 0;
+ if(Singleton::GetInstance()->getGpioValue((BasePeripheral::enGpio)i, value) < 0){
+ LOGE("get Gpio%d Value failed!", i);
+ ret = false;
+ }
+ if(value != 1){
+ LOGE("gpio%d not high before relay on", i);
+ ret = false;
+ }
+ }
+ LOGI("relay on");
+ Singleton::GetInstance()->controlKZOut(true);
+ usleep(100000);
+ for(int i=0; i::GetInstance()->hasGpio((BasePeripheral::enGpio)i)){
+ LOGI("has no gpio%d", i);
+ continue;
+ }
+ int value = 0;
+ if(Singleton::GetInstance()->getGpioValue((BasePeripheral::enGpio)i, value) < 0){
+ LOGE("get Gpio%d Value failed!", i);
+ ret = false;
+ }
+ if(value != 0){
+ LOGE("gpio%d not low after relay on", i);
+ ret = false;
+ }
+ }
+ LOGI("relay off");
+ Singleton::GetInstance()->controlKZOut(false);
+ return ret;
+}
+
+bool Backstage::isRs485TestOk()
+{
+ LOGI("isRs485TestOk");
+
+ Singleton::GetInstance()->setTestingFlag(true);
+ ON_SCOPE_EXIT([] { Singleton::GetInstance()->setTestingFlag(false); });
+ usleep(100000);
+
+ std::string usbTo485DevNode;
+ do{
+ std::string cmd = "ls /sys/bus/usb-serial/drivers/ftdi_sio/ | grep tty";
+ if(utils::read_popen(cmd, usbTo485DevNode) > 0){
+ LOGI("get ftdi_sio usb to rs485 dev node:%s", usbTo485DevNode.c_str());
+ break;
+ }
+ cmd = "ls /sys/bus/usb-serial/drivers/ch341-uart/ | grep ttyUSB0";
+ if(utils::read_popen(cmd, usbTo485DevNode) > 0){
+ LOGI("get ch341-uart usb to rs485 dev node:%s", usbTo485DevNode.c_str());
+ break;
+ }
+ LOGE("get usb to rs485 dev node failed!");
+ return false;
+ }while(0);
+ LOGI("Dev Node:%s", usbTo485DevNode.c_str());
+ const std::string devNode = "/dev/" + usbTo485DevNode;
+ int usbTo485 = open(devNode.c_str(), O_RDWR | O_NOCTTY);
+ if(usbTo485 < 0){
+ return false;
+ }
+ setSerialOpt(usbTo485, 9600, 8, 'N', 1);
+
+ LOGI("rs485 send str 123456");
+ Singleton::GetInstance()->rs485Send((const unsigned char*)"123456", strlen("123456"));
+
+ char buffer[32] = {0};
+ int readBytes = read(usbTo485, buffer, sizeof(buffer) - 1);
+ LOGI("usb2485 recv: %s", buffer);
+ if(readBytes <= 0){
+ close(usbTo485);
+ return false;
+ }
+
+ int writeLen = write(usbTo485, buffer, readBytes);
+ LOGI("usb2485 send data:%s, len:%d", buffer, writeLen);
+
+ usleep(100000);
+
+ int len = Singleton::GetInstance()->rs485Recv((unsigned char*)buffer, sizeof(buffer));
+ LOGI("rs485 recv len:%d", len);
+ if(len <= 0){
+ close(usbTo485);
+ return false;
+ }
+ LOGI("data: %s", (const char*)buffer);
+ close(usbTo485);
+
+ return (!memcmp("123456", buffer, strlen("123456")));
+}
+
+bool Backstage::isReaderUnderScreenTestOk()
+{
+ LOGI("isReaderUnderScreenTestOk");
+ GPeInput* pPeInput = (GPeInput*)m_objs->findObject("peInput");
+ if(!pPeInput){
+ return false;
+ }
+ pPeInput->hardwareTest(enReadCardUnderScreen);
+ return pPeInput->isReaderUnderScreenTestOk();
+}
+
+bool Backstage::isWifiTestOk()
+{
+ LOGI("isWifiTestOk");
+ #define TEST_SSID "reconova" // "RW-5F" //
+ #define TEST_PWD "12345678" //"RW@sz=B103#" //
+
+ const int ssidListSize = 64;
+ stAccPoint ssidList[ssidListSize];
+ int ret = getSsidList(ssidList, ssidListSize);
+ LOGI("ssid list size:%d", ret);
+ if(ret > 0){
+ for(int i=0; i 45){
+ return wifiConnect(TEST_SSID, TEST_PWD);
+ }
+ }
+ }
+ return false;
+}
+
+bool Backstage::isRtcTestOk()
+{
+ LOGI("isRtcTestOk, time:%lld", utils::getNowTimeMS());
+ //return utils::getNowTimeMS() > 946656000000; //20000101 00:00:00
+ return FileUtils::fileIsExist("/data/.rtc_test_ok");
+}
+
+bool Backstage::isWireEthTestOk()
+{
+ LOGI("isWireEthTestOk");sleep(1);return true;
+}
+
+bool Backstage::is4gTestOk()
+{
+ LOGI("is4gTestOk");sleep(1);return true;
+}
+
+bool Backstage::isSerial1TestOk()
+{
+ LOGI("isSerial1TestOk");
+
+ system("killall skcaper");
+ Singleton::GetInstance()->setTestingFlag(true);
+ ON_SCOPE_EXIT([] { Singleton::GetInstance()->setTestingFlag(false); });
+ usleep(100000);
+
+ const std::string devNode = "/dev/ttyS3";
+ LOGI("Dev Node:%s", devNode.c_str());
+ int fdSerial1 = open(devNode.c_str(), O_RDWR | O_NOCTTY);
+ if(fdSerial1 < 0){
+ LOGE("open %s failed!", devNode.c_str());
+ return false;
+ }
+ setSerialOpt(fdSerial1, 9600, 8, 'N', 1);
+
+ const char* testData = "123456";
+ int writeLen = write(fdSerial1, testData, strlen(testData));
+ LOGI("write len:%d", writeLen);
+
+ usleep(100000);
+
+ char buffer[32] = {0};
+ int readBytes = read(fdSerial1, buffer, sizeof(buffer) - 1);
+ LOGI("serial0 read bytes: %d", readBytes);
+ if(readBytes <= 0){
+ close(fdSerial1);
+ return false;
+ }
+ close(fdSerial1);
+ LOGI("data: %s", (const char*)buffer);
+ return (!memcmp(testData, buffer, strlen(testData)));
+}
+
+
+void Backstage::screenTest()
+{
+ LOGI("screenTest");
+ GPeInput* pPeInput = (GPeInput*)m_objs->findObject("peInput");
+ if(pPeInput){
+ pPeInput->hardwareTest(enLcd);
+ }
+}
+
+void Backstage::speakerTest()
+{
+ LOGI("speakerTest");
+ GPeInput* pPeInput = (GPeInput*)m_objs->findObject("peInput");
+ if(pPeInput){
+ pPeInput->hardwareTest(enSpeaker);
+ }
+}
+
+void Backstage::microphoneTest(bool record)
+{
+ LOGI("microphoneTest");
+ GPeInput *pPeInput = (GPeInput *)m_objs->findObject("peInput");
+ if (pPeInput) {
+ pPeInput->hardwareTest(record ? enMicrophoneRecord : enMicrophonePlay);
+ }
+}
+
+void Backstage::audioSwitchTest() {
+ LOGI("Backstage::audioSwitchTest()");
+ auto pPeInput = reinterpret_cast(m_objs->findObject("peInput"));
+ if (pPeInput != nullptr) {
+ pPeInput->hardwareTest(enAuidoSwitch);
+ }
+}
+
+void Backstage::tpTest()
+{
+ LOGI("tpTest");
+ GPeInput* pPeInput = (GPeInput*)m_objs->findObject("peInput");
+ if(pPeInput){
+ //pPeInput->hardwareTest(enTp);
+ }
+}
+
+void Backstage::irCamTest()
+{
+ LOGI("irCamTest");
+ GPeInput* pPeInput = (GPeInput*)m_objs->findObject("peInput");
+ if(pPeInput){
+ pPeInput->hardwareTest(enIrCamOn);
+ sleep(3);
+ pPeInput->hardwareTest(enIrCamOff);
+ }
+}
+
+void Backstage::irLedTest()
+{
+ LOGI("irLedTest");
+ GPeInput* pPeInput = (GPeInput*)m_objs->findObject("peInput");
+ if(pPeInput){
+ pPeInput->hardwareTest(enIrCamOn);
+ for(int i=0; i<3; i++){
+ Singleton::GetInstance()->setIRledBrightness(0);
+ usleep(500000);
+ Singleton::GetInstance()->setIRledBrightness(255);
+ usleep(500000);
+ }
+ pPeInput->hardwareTest(enIrCamOff);
+ }
+}
+
+void Backstage::ageingTest(unsigned hours)
+{
+ LOGI("ageingTest");
+ std::string cmd{"{\"cmd\":\"set_ageing_test\",\"sw\":"};
+ if(hours){
+ cmd += "true,\"all_time\":";
+ cmd += utils::to_string(hours);
+ cmd += "}";
+ }
+ else{
+ cmd += "false}";
+ }
+ udpLoopToSvr(cmd);
+}
+
+int Backstage::getMacFromMes(const char* mesAddrAndProdNo, const char* pcbSeq, std::string& mac)
+{
+ LOGI("getMacFromMes:%s, %s", mesAddrAndProdNo, pcbSeq);
+ const std::string tmp(mesAddrAndProdNo);
+ unsigned iPos = tmp.find("/");
+ if(iPos == std::string::npos){
+ return -1;
+ }
+
+ std::string mesAddr = tmp.substr(0, iPos);
+ std::string prodNo = tmp.substr(iPos + 1);
+ std::string strPcbSeq = pcbSeq;
+ std::string cmd = "curl -s -K 12 -m 20 -k -X POST \"http://";
+ cmd += utils::trim(mesAddr);
+ cmd += "/mrs/getProdField?prodNo=";
+ cmd += utils::trim(prodNo);
+ cmd += "&pcbSeq=";
+ cmd += utils::trim(strPcbSeq);
+ cmd += "&fieldName=lanmac\"";
+ LOGI("cmd:%s", cmd.c_str());
+ if(utils::read_popen(cmd, mac) <= 0){
+ LOGE("get mac failed!");
+ return -2;
+ }
+ if(mac.length() != 12){
+ LOGE("mac invalid, len:%d, mac:%s", mac.length(), mac.c_str());
+ return -3;
+ }
+ for(int i=5; i>0; i--){
+ mac.insert(i * 2, 1, ':');
+ }
+ LOGI("mac:%s", mac.c_str());
+ cmd = "keydata set mac ";
+ cmd += mac;
+ cmd += " -f";
+ LOGI("cmd:%s", cmd.c_str());
+ int nReturn = utils::RW_System(cmd.c_str());
+ int nResult = WEXITSTATUS(nReturn);
+ if(nResult != 0){
+ LOGE("str=%s, nReturn=%d, nResult=%d", cmd.c_str(), nReturn, nResult);
+ return -1;
+ }
+ cmd = "echo -n \"";
+ cmd += mac;
+ cmd += " \" > /data/.HWaddr";
+ LOGI("cmd:%s", cmd.c_str());
+ nReturn = utils::RW_System(cmd.c_str());
+ nResult = WEXITSTATUS(nReturn);
+ if(nResult != 0){
+ LOGE("str=%s, nReturn=%d, nResult=%d", cmd.c_str(), nReturn, nResult);
+ return -1;
+ }
+ return 0;
+}
+
+bool Backstage::isAgeing(std::string& hours)
+{
+ LOGI("isAgeing");
+ if(FileUtils::fileIsExist(AGEING_TIME_FILE)){
+ if(0 == utils::read_file(AGEING_TIME_FILE, hours)){
+ LOGI("ageing time:%s hours", hours.c_str());
+ return true;
+ }
+ }
+ return false;
+}
+
+int Backstage::getKeyDataMac(std::string& mac)
+{
+ LOGI("getKeyDataMac");
+ return utils::read_popen("keydata get mac", mac);
+}
+
+int Backstage::getRecoUiAdConfig(stScreensaverCfg& cfg)
+{
+ cfg.type = 1;
+ cfg.interval = m_paramMng->getAdInter();
+ cfg.picQty = 0;
+ LOGI("reco ui ad config:%s", m_paramMng->getAdPics().c_str());
+ std::string screensaverCfg(m_paramMng->getAdPics());
+ while(screensaverCfg.length()){
+ unsigned iPos = screensaverCfg.find(";");
+ if(iPos != std::string::npos){
+ snprintf(&cfg.pic[cfg.picQty][0], sizeof(cfg.pic[0]), screensaverCfg.substr(0, iPos).c_str());
+ LOGI("ad %d : %s", cfg.picQty, &cfg.pic[cfg.picQty][0]);
+ cfg.picQty++;
+ screensaverCfg = (screensaverCfg.length() > iPos + 1 ? screensaverCfg.substr(iPos + 1) : "");
+ }
+ else{
+ return -1;
+ }
+ }
+ return 0;
+}
+
+int Backstage::recoUiTypeSwitch(unsigned x, unsigned y, unsigned w, unsigned h)
+{
+ GCamera* pcam = (GCamera*)m_objs->findObject("normal");
+ if (nullptr != pcam){
+ pcam->voSetDisWin(x, y, w, h);
+ }
+ setLogo(getLogo());//get logo when reci ui switch
+
+ return 0;
+}
+
+int Backstage::getDevPwd(int& type, std::string& pwd)
+{
+ int ret = DBManage::getInstance()->getDevicePin(pwd);
+ if(0 == ret && pwd.length()){
+ type = 2;
+ return 0;
+ }
+
+ pwd = m_paramMng->getLocalDevPwd();
+ type = 1;
+ return 0;
+}
+
+int Backstage::setLocalDevPwd(const std::string& pwd)
+{
+ m_paramMng->setLocalDevPwd(pwd);
+
+ //该参数配置需要支持清空(取消本地密码操作)
+ //清空时参数对应的更新处理不会关闭识别界面密码按键
+ //因此需要在这里关闭密码按键显示
+ if(0 == pwd.length()){
+ LOGI("hide password button cause pwd deleted by user");
+ View::getInstance()->setPwdButton(false);
+ }
+
+ return 0;
+}
+
+int Backstage::getKeyDataHardware(std::string& hardware)
+{
+ LOGI("getKeyDataHardware");
+ return utils::read_popen("keydata get hardware", hardware);
+}
+
+int Backstage::setKeyDataHardwareAndUpdataFunction(const std::string& hardware)
+{
+ LOGI("set hardware:%s", hardware.c_str());
+ std::string setHwCmd{"keydata set hardware "};
+ setHwCmd += hardware;
+ setHwCmd += " -f";
+ system(setHwCmd.c_str());
+
+ std::ostringstream oss;
+ oss << "echo " << hardware << " > " WEB_DATA_PATH ".hardversion; sync";
+ auto command = oss.str();
+ LOGD("command: %s", command.c_str());
+ system(command.c_str());
+
+ DevVersion::getInstance()->init(); // 工装重新录入型号后,再重新加载
+
+ auto manufacturer = DevVersion::getInstance()->getManu();
+ if (manufacturer == Manu_E::ManuRWRk1109V05) {
+ Singleton::GetInstance()->setAudioOutEnabled(m_paramMng->getAudioOutEnabled());
+ }
+
+ const bool hasReaderUnderScreen = ('2' == hardware[strlen("HWA531052") - 1]);
+ Singleton::GetInstance()->functionSwitch(0, hasReaderUnderScreen);
+ const bool hasTp = ('1' == hardware[strlen("HWA5310522C11") - 1]);
+ LOGI("has TP:%d", hasTp);
+ View::getInstance()->showCursorSwitch(!hasTp);
+ return 0;
+}
+
+
+int Backstage::setSetupAlreadyFlag()
+{
+ FileUtils::removeFile(SETUP_ALREADY_FILE);
+ return 0;
+}
+
+int Backstage::getParkInfo(std::string& info)
+{
+ info = m_paramMng->getParkInfo();
+ return 0;
+}
+
+int Backstage::setParkInfo(const std::string& info)
+{
+ m_paramMng->setParkInfo(info);
+ return 0;
+}
+
+int Backstage::getDevPosi(std::string& posi)
+{
+ posi = m_paramMng->getDevicePosition();
+ return 0;
+}
+
+int Backstage::setDevPosi(const std::string& posi)
+{
+ m_paramMng->setDevicePosition(posi);
+ return 0;
+}
+
+int Backstage::getRs485Cfg()
+{
+ if(m_paramMng->getRs485Cfg() == -1){
+ if(m_paramMng->getAccessController() >= 0){return 1;} //协议1
+ else if(m_paramMng->getPassCheckByRs485()){return 2;} //协议2
+ return 0; //禁用
+ }
+ return m_paramMng->getRs485Cfg();
+}
+
+int Backstage::setRs485Cfg(int cfg)
+{
+ #if 0
+ switch (cfg){
+ case 0:{m_paramMng->setAccessController(-1);m_paramMng->setPassCheckByRs485(false);}break;
+ case 1:{m_paramMng->setPassCheckByRs485(false);m_paramMng->setAccessController(0);}break;//协议1:门禁控制器
+ case 2:{m_paramMng->setPassCheckByRs485(true);m_paramMng->setAccessController(-1);}break;//协议2:闸机信号反馈
+ default:LOGE("rs485 cfg error!");break;
+ }
+ #else
+ m_paramMng->setRs485Cfg(cfg);
+ #endif
+ return 0;
+}
+
+int Backstage::setReverseAccessSw(bool enabled) {
+ int ret = -1;
+ if (m_paramMng != nullptr) {
+ m_paramMng->setReverseAccessSw(enabled);
+ ret = 0;
+ }
+ return ret;
+}
+
+bool Backstage::getReverseAccessSw() const {
+ bool ret = false;
+ if (m_paramMng != nullptr) {
+ ret = m_paramMng->getReverseAccessSw();
+ }
+ return ret;
+}
+
+int Backstage::getRs485Prot1Addr()
+{
+ return m_paramMng->getAccessController();
+}
+
+int Backstage::setRs485Prot1Addr(int addr)
+{
+ if(addr < 0 || addr > 255){return -1;}
+ m_paramMng->setAccessController(addr);return 0;
+}
+
+int Backstage::getRs485Prot3Cfg(int& handCfg, int& feetCfg)
+{
+ handCfg = m_paramMng->getStaticHandCfg();
+ feetCfg = m_paramMng->getStaticFeetCfg();
+ return 0;
+}
+
+int Backstage::setRs485Prot3Cfg(int handCfg, int feetCfg)
+{
+ m_paramMng->setStaticHandCfg(handCfg);
+ m_paramMng->setStaticFeetCfg(feetCfg);
+ return 0;
+}
+
+int Backstage::getGPIOCfg()
+{
+ //return m_paramMng->getGpio4Sw() ? m_paramMng->getGpio4Use() + 1 : 0;
+ return 0;
+}
+
+int Backstage::setGPIOCfg(int cfg)
+{
+#if 0
+ switch (cfg){
+ case 0:{m_paramMng->setGpio4Sw(false);}break;//禁用
+ case 1:{m_paramMng->setGpio4Sw(true);m_paramMng->setGpio4Use(0);}break;//开门信号上报(门磁)
+ default:LOGE("gpio cfg error!");break;
+ }
+#endif
+ return 0;
+}
+
+int Backstage::getIDFaceVerifySw()
+{
+ return m_paramMng->getFaceIDVerifySw();
+}
+
+int Backstage::setIDFaceVerifySw(bool sw)
+{
+ m_paramMng->setFaceIDVerifySw(sw);
+ return 0;
+}
+
+int Backstage::getBtLockCfg(BtDoorLock& cfg)
+{
+ cfg.isEnable = m_paramMng->getBleLockSw();
+
+ int manu[5] = {0};
+ std::string manuS = m_paramMng->getBleManu();
+ sscanf(manuS.c_str(), "%d,%d,%d,%d,%d", manu, manu+1, manu+2, manu+3, manu+4);
+
+ char name[5][128] = {0};
+ std::string nameS = m_paramMng->getBleName();
+ sscanf(nameS.c_str(), "%[^,],%[^,],%[^,],%[^,],%s", name[0], name[1], name[2], name[3], name[4]);
+
+ char mac[5][20] = {0};
+ std::string macS = m_paramMng->getBleMac();
+ sscanf(macS.c_str(), "%[^,],%[^,],%[^,],%[^,],%s", mac[0], mac[1], mac[2], mac[3], mac[4]);
+
+ for(cfg.qty = 0; cfg.qty < 5 && manu[cfg.qty] > 0; cfg.qty++)
+ {
+ LOGD("manu[%d]=%d", cfg.qty, manu[cfg.qty]);
+ cfg.manufacturer.emplace_back(manu[cfg.qty]);
+
+ LOGD("name[%d]=%s", cfg.qty, name[cfg.qty]);
+ cfg.position.emplace_back(name[cfg.qty]);
+
+ LOGD("mac[%d]=%s", cfg.qty, mac[cfg.qty]);
+ cfg.mac.emplace_back(mac[cfg.qty]);
+ }
+ return 0;
+}
+
+int Backstage::setBtLockCfg(const BtDoorLock& cfg)
+{
+ LOGI("setBtLockCfg");
+
+ blueToothMng::getInstance().clearBleLock();
+
+ std::string bleManu;
+ std::string bleName;
+ std::string bleId;
+ for(int i=0; isetBleManu(bleManu.c_str());
+ m_paramMng->setBleName(bleName.c_str());
+ m_paramMng->setBleMac(bleId.c_str());
+ m_paramMng->setBleLockSw(cfg.isEnable);
+ return 0;
+}
+
+int Backstage::getBtLockRemainingBatPwr(const std::string& mac)
+{
+ return blueToothMng::getInstance().getElecValue(blueToothMng::enBleLockManu::BYX, mac.c_str());
+}
+
+bool Backstage::getHealthCodeSw()
+{
+ return m_paramMng->getHealthCodeSw();
+}
+
+int Backstage::setHealthCodeSw(bool sw)
+{
+ m_paramMng->setHealthCodeSw(sw);
+ if(sw){
+ m_paramMng->setRecoSw(true);
+ m_paramMng->setFaceIDVerifySw(true);
+ }
+ return 0;
+}
+
+bool Backstage::getHealthCodeNoFaceRequired(){
+ return m_paramMng->getHealthNoFaceRequired();
+}
+
+int Backstage::setHealthCodeNoFaceRequired(bool sw){
+ m_paramMng->setHealthNoFaceRequired(sw);
+ return 0;
+}
+
+bool Backstage::getHealthCodeAllowStranger()
+{
+ return m_paramMng->getHealthCodeAllowStrangerSw();
+}
+
+int Backstage::setHealthCodeAllowStranger(bool sw)
+{
+ m_paramMng->setHealthCodeAllowStrangerSw(sw);
+ return 0;
+}
+
+int Backstage::getHealthCodePassCfg(int& codeColorCfg, int& c19tCfg, int& tripCfg, int& abtCfg)
+{
+ codeColorCfg = m_paramMng->getHealthCodeColorPassCfg();
+ c19tCfg = m_paramMng->getHealthC19TResPassCfg();
+ tripCfg = m_paramMng->getHealthTripResPassCfg();
+ abtCfg = m_paramMng->getHealthAbtResPassCfg();
+ return 0;
+}
+
+int Backstage::setHealthCodePassCfg(int codeColorCfg, int c19tCfg, int tripCfg, int abtCfg)
+{
+ m_paramMng->setHealthCodeColorPassCfg(codeColorCfg);
+ m_paramMng->setHealthC19TResPassCfg(c19tCfg);
+ m_paramMng->setHealthTripResPassCfg(tripCfg);
+ m_paramMng->setHealthAbtResPassCfg(abtCfg);
+ return 0;
+}
+
+std::string Backstage::utfRawStrToEncodeStr(const std::string &str) {
+ return utils::utfRawStrToEncodeStr(str);
+}
+
+int Backstage::udpLoopToSvr(const std::string &sendData)
+{
+ int udpFd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (udpFd < 0){
+ LOGE("create socket fail!");
+ }
+
+ timeval tv = {1, 0};
+ int ret = setsockopt(udpFd, SOL_SOCKET, SO_RCVTIMEO, (char*)&tv, sizeof(timeval));
+ if (ret){
+ LOGE("setsockopt failed");
+ ::close(udpFd);
+ udpFd = -1;
+ }
+ struct sockaddr_in sin;
+ bzero(&sin, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_addr.s_addr = htonl(INADDR_ANY);
+ sin.sin_port = htons(6790);
+ sendto(udpFd, sendData.c_str(), sendData.length(), 0, (struct sockaddr *)&sin, sizeof(struct sockaddr));
+ LOGI("udp send:%s", sendData.c_str());
+ ::close(udpFd);
+ return 0;
+}
+
+
diff --git a/Linguist/interface/BackStage.h b/Linguist/interface/BackStage.h
new file mode 100644
index 0000000..12cbd1a
--- /dev/null
+++ b/Linguist/interface/BackStage.h
@@ -0,0 +1,344 @@
+#ifndef BACKSTAGEI_H
+#define BACKSTAGEI_H
+
+#include "BackstageInterfaceForUi.h"
+#include "param_manage.h"
+#include "golib/golib.h"
+
+
+class Backstage : public BackstageInterfaceForUi
+{
+public:
+ Backstage(void* pParaMng, void* pObjs);
+ virtual ~Backstage();
+
+ int registerPerson(char *name, char *term, int nDataOrigin = 1);
+ int startIdentyState(bool setfaceReco = true, bool setPeInput = true);
+ int stopIdentyState(bool setfaceReco = true, bool setPeInput = true);
+
+ //工程设置
+ int verifyFactorySettingPwd(const char *pwd);//验证密码
+ int recoveryFactorySetting();//恢复出厂设置
+
+ //设备设置
+ int getDeviceId(char *devId, int len);//获取设备id
+ int getHardwareConfig(char *hardVer, int len);
+ int getStorSpace(int &total, float &free);//获取存储空间
+ int getAppVersion(char *appVer, int len);//获取应用版本号
+ int getRegisterNum();//获取注册人员数
+ int getAccessRecordNotUpload();//获取未上传通行记录
+ int getAccessRecordQty();//获取通行记录条数
+ int getVolume();//获取音量大小
+ int setVolume(int vol);//设置音量大小
+ int getLcdBrightness();//获取屏幕亮度
+ int setLcdBrightness(int brightness);//设置屏幕亮度
+ bool getFillLightSw();//获取智能补光开关
+ int setFillLightSw(bool isOpen);//获取智能补光开关
+ int getStandbyTime();//获取待机时间
+ int setStandbyTime(int time);//设置待机时间
+ int getCloseScreenTime();//获取关屏等待时间
+ int setCloseScreenTime(int time);//获取关屏等待时间
+ int getLanguage();//获取语言
+ int setLanguage(int lang);//设置语言
+ //网络设置
+ int getIP(char *ip, int len, int& type);//获取IP
+ int setIP(char *ip);//设置IP
+ enIpMethod getIpMethod();//获取IP方法
+ int setIpMethod(enIpMethod ipMethod);//设置IP方法
+ int getSubnetMask(char *mask, int len);//获取子网掩码
+ int setSubnetMask(char *mask);//设置子网掩码
+ int getGateway(char *gateway, int len);//获取默认网关
+ int setGateway(char *gateway);//设置默认网关
+ int getDNS(char *dns, int len);//获取DNS
+ int setDNS(char *dns);//设置DNS
+ int getEthMac(char *mac, int len);//获取mac
+ int getWifiMac(char *mac, int len);//获取wifi mac
+ int getServerAddr(char *addr, int len);//获取服务器ip
+ int setServerAddr(char *addr, bool byQrcode = false);//设置服务器ip
+ int testServerIP(char *addr, float &time);//测试服务器ip,成功返回0,失败-1
+ int getIotServerIP(char *ip, int len);//获取服务器ip
+ int setIotServerIP(char *ip);//设置服务器ip
+ int getIotPort();//获取端口号, 成功返回端口号,失败返回-1
+ int setIotPort(int port);//设置端口号
+ bool getIpShowSw();
+ int setIpShowSw(bool sw);
+ //蓝牙设置
+ //if success, return 0, else return err num;
+ int getBtSwitch(bool &isOpen);
+ int getBtName(string &devName);
+ int getBtPairedDev(list &devList);
+ int getBtAvailDev(list &devList);
+ int getBtAllInfo(BluetoothStat_t &bluetoothStat);
+
+ int btScan(list &devList);//这个接口不需要吧?现在是定时的去搜索?所以点击“可用设备"条目时,直接调用getBtAvailDev就可以了?
+ int btSetSwitch(bool isOpen);
+ int btSetName(const string &devName);
+ int btPaire(const string &devId);
+ int btDisPaire(const string &devId);
+ int btConnect(const string &devId);
+ int btDisConnect(const string &devId);
+ int btRenameDev(const string &devId, const string &devName);
+
+ bool getParamBluetoothEnable();//获取蓝牙的开关
+ int setParamBluetoothEnable(bool sw);//设置蓝牙的开关
+ std::string getParamBluetoothName();//获取蓝牙设备名称
+ int setParamBluetoothName(std::string name);//设置蓝牙设备名称
+ //门禁设置
+ int getUnlockTime();//获取开锁时间
+ int setUnlockTime(int time);//设置开锁时间
+ int getUnlockDelay();//获取开锁延时
+ int setUnlockDelay(int time);//设置开锁延时
+ enUnlockSignal getUnlockSig();//获取开锁信号
+ int setUnlockSig(enUnlockSignal value);//设置开锁信号
+ enAssist getAssistIn();//获取辅助输入
+ int setAssistIn(enAssist assist);//设置辅助输入
+ enAssist getAssistOut();//获取辅助输出
+ int setAssistOut(enAssist assist);//设置辅助输出
+ enWiegand getWiegandIn();//获取韦根输入
+ int setWiegandIn(enWiegand wiegand);//设置韦根输入
+ enWiegand getWiegandOut();//获取韦根输出
+ int setWiegandOut(enWiegand wiegand);//设置韦根输出
+ enBaudRate getBaudRate();//获取波特率
+ int setBaudRate(enBaudRate baudRate);//设置波特率
+ int getWarningSig();//获取报警信号
+ int setWarningSig(int signal);//设置报警信号
+ //交互提示
+ enLogo getLogo();//获取logo
+ int setLogo(enLogo logo);//设置logo
+ int getCustomLogo(char *logo, int len);
+ enLogo getLogoTime();//获取logo+time
+ int setLogoTime(enLogo logo);//设置logo+time
+ enLogo getBackground();//获取背景图
+ int setBackground(enLogo logo);//设置背景图
+ enRecogResult getSuccessResult(char *data, int len);//获取成功结果
+ int setSuccessResult(enRecogResult result, char *data);//设置成功结果
+ enRecogResult getFailResult(char *data, int len);//获取失败结果
+ int setFailResult(enRecogResult result, char *data);//设置失败结果
+ bool getPlayAudioSw();//获取语音播报开关
+ int setPlayAudioSw(bool isOpen);//设置语音播报开关
+
+ //人脸识别
+ bool getIdentificationSw();//获取身份核验开关
+ int setIdentificationSw(bool sw);//设置身份核验开关
+ enSimilarityTh getSimilarityTh();//获取相似度阈值
+ int setSimilarityTh(enSimilarityTh th);//设置相似度阈值
+ int setCustomSimilarity(int sim);//设置自定义识别相似度
+ int getCustomSimilarity();//获取自定义识别相似度
+ bool getLivingBodySw();//获取活体开关
+ int setLivingBodySw(bool isOpen);//设置活体开关
+ enLivingBodyTh getLivingBodyTh();//获取活体检测阈值
+ int setLivingBodyTh(enLivingBodyTh th);//设置活体检测阈值
+ bool getLivingBodyFailSw();//获取活体失败图片留存开关
+ int setLivingBodyFailSw(bool isOpen);//设置失败图片留存开关
+ int getVerifyInterval();//获取验证间隔时间
+ int setVerifyInterval(int time);//设置验证间隔时间
+ enRecogDistance getRecogDistance();//获取识别距离
+ int setRecogDistance(enRecogDistance distance);//设置识别距离
+ enRecogAngle getRecogAngle();//获取识别角度
+ int setRecogAngle(enRecogAngle angle);//设置识别角度
+ int getMaxTraceNum();//获取人脸最大跟踪数
+ int setMaxTraceNum(int num);//设置人脸最大跟踪数
+ enFaceQuality getFaceQuality();//获取人脸质量阈值
+ int setFaceQuality(enFaceQuality quality);//设置人脸质量阈值
+ virtual bool getDynamicFeatureSw();//获取动态底库的开关
+ virtual int setDynamicFeatureSw(bool sw);//设置动态底库的开关
+ //系统设置
+ bool getNtpServerSw();//获取NTP服务开关
+ int setNtpServerSw(bool isOpen);//设置NTP服务开关
+ int getNtpServerAddr(char *addr, int len);//获取NTP服务地址
+ int setNtpServerAddr(char *addr);//设置NTP服务地址
+ int testNtpServer(char *addr, float &time);//测试NTP服务, 成功返回0,失败-1
+ int getNtpServerPort();//获取NTP端口,成功返回端口号,失败返回-1
+ int setNtpServerPort(int port);//设置NTP服务端口
+ int getNtpCheckInterval();
+ int setNtpCheckInterval(int interval);
+ int getNtpTimeZone(char *timeZone, int len);
+ int setNtpTimeZone(char *timeZone);
+ int setVerifyFactorySettingPwd(char *pwd);//设置工程密码
+ int testHardware();//硬件检测
+ int cleanData();//清除数据
+ int devReboot();//重启设备
+
+ int startCapture();//start capture on register
+ int deletePerson(long long personID);
+ int queryPersonList(long long* pPersonIDBuff, int nBuffCount, long long startID, int& nRealPerson);
+ unsigned queryPerson(const char* searchText);
+ unsigned queryPerson(const char* searchText, int pageIndex, stQueryPersonInfo personRet[], int personRetSize);
+ unsigned queryAccessRecord(const char* name, const char* time);
+ unsigned queryAccessRecord(const char* name, const char* time, int pageIndex, stQueryAccRedInfo recordRet[], int recordRetSize);
+ int clearPeople();
+ int getPersonListState(int &sum, unsigned long long &maxPersonID);
+
+ int wakeUpFromScreenSaverOrScreenOff();
+
+ virtual int delPerson(long long personId);
+ virtual int modifyPerson(stQueryPersonInfo &personInfo);
+ virtual int addPerson(stQueryPersonInfo &personInfo);
+ virtual int snapFace(std::string &feature, std::string &savePath);
+
+ bool getMaskCheckSwitch();
+ int setMaskCheckSwitch(const bool sw);
+
+ bool getNoMaskNoPassSwitch();
+ int setNoMaskNoPassSwitch(const bool sw);
+
+ bool getTemperatureCheckSwitch();
+ int setTemperatureCheckSwitch(const bool sw);
+ bool getNoTemperatureNoPassSwitch();
+ int setNoTemperatureNoPassSwitch(const bool sw);
+
+ float getLowTemperature();
+ int setLowTemperature(const float temp);
+ float getHighTemperature();
+ int setHighTemperature(const float temp);
+
+ bool getQRCodeSwitch();
+ int setQRCodeSwitch(const bool sw);
+
+ bool getDataEncryptSw();
+ int setDataEncryptSw(bool sw);
+ int setDateTime(const char *dateTime);
+ bool getAutoRebootSw();
+ int setAutoRebootSw(bool sw);
+ int getAutoRebootTime(char* time, int len);
+ int setAutoRebootTime(const char *time);
+ int getAutoRebootInterval();
+ int setAutoRebootInterval(int interval);
+ int ntpTimeCorrect();
+ int ntpTimeCorrectForDevTest(const std::string& ntpServerIp);
+
+ int getNetWireCfg(stNetWire& wireCfg);
+ int setNetWireCfg(const stNetWire& wireCfg);
+ int setNetWireEnable(bool enable);
+
+ int getNetWifiCfg(stNetWifi& wifiCfg);
+ int setNetWifiCfg(const stNetWifi& wifiCfg);
+ int setNetWifiEnable(bool enable);
+ int getSsidList(stAccPoint accPointList[], int accPointListSize);
+ int claerNetWifiCfg();
+
+ int getNet4GCfg(stNet4G& n4gCfg);
+ int setNet4GEnable(bool enable);
+ int reboot4G();
+
+ int getScreenSaverConfig(stScreensaverCfg& cfg);
+
+ int sendPassword(const char *password);
+
+ void resetDecisionCenterTimer();
+ int pauseDataFlow();
+ int resumeDataFlow();
+
+ int candidateChoosedInPopupWindow(int index);
+
+ bool isWiegandIoTestOk();
+ bool isRelayAndGpioTestOk();
+ bool isRs485TestOk();
+ bool isReaderUnderScreenTestOk();
+ bool isWifiTestOk();
+ bool isRtcTestOk();
+ bool isWireEthTestOk();
+ bool is4gTestOk();
+ bool isSerial1TestOk();
+
+ void screenTest();
+ void speakerTest();
+ void microphoneTest(bool record) final;
+ void audioSwitchTest() final;
+ void tpTest();
+ void irCamTest();
+ void irLedTest();
+ void ageingTest(unsigned hours);
+ int getMacFromMes(const char* mesAddrAndProdNo, const char* pcbSeq, std::string& mac);
+ bool isAgeing(std::string& hours);
+ int getKeyDataMac(std::string& mac);
+
+ int getRecoUiAdConfig(stScreensaverCfg& cfg);
+ int recoUiTypeSwitch(unsigned x, unsigned y, unsigned w, unsigned h);
+
+ int getDevPwd(int& type, std::string& pwd);
+ int setLocalDevPwd(const std::string& pwd);
+
+ int getKeyDataHardware(std::string& hardware);
+ int setKeyDataHardwareAndUpdataFunction(const std::string& hardware);
+
+ int setSetupAlreadyFlag();
+ int getParkInfo(std::string& info);
+ int setParkInfo(const std::string& info);
+ int getDevPosi(std::string& posi);
+ int setDevPosi(const std::string& posi);
+
+ int getRs485Cfg();
+ int setRs485Cfg(int cfg);
+ int getRs485Prot1Addr();
+ int setRs485Prot1Addr(int addr);
+ int getRs485Prot3Cfg(int& handCfg, int& feetCfg);
+ int setRs485Prot3Cfg(int handCfg, int feetCfg);
+ int getGPIOCfg();
+ int setGPIOCfg(int cfg);
+ int setReverseAccessSw(bool enabled) final;
+ bool getReverseAccessSw() const final;
+ int getIDFaceVerifySw();
+ int setIDFaceVerifySw(bool sw);
+ int getBtLockCfg(BtDoorLock& cfg);
+ int setBtLockCfg(const BtDoorLock& cfg);
+ int getBtLockRemainingBatPwr(const std::string& mac);
+ bool getHealthCodeSw();
+ int setHealthCodeSw(bool sw);
+ bool getHealthCodeNoFaceRequired();
+ int setHealthCodeNoFaceRequired(bool sw);
+ bool getHealthCodeAllowStranger();
+ int setHealthCodeAllowStranger(bool sw);
+ int getHealthCodePassCfg(int& codeColorCfg, int& c19tCfg, int& tripCfg, int& abtCfg);
+ int setHealthCodePassCfg(int codeColorCfg, int c19tCfg, int tripCfg, int abtCfg);
+
+ std::string utfRawStrToEncodeStr(const std::string &str);
+
+ std::string getUnderScreenNfcModuleId();
+ std::string getExtendNfcModuleId();
+ bool isIdModuleInfoUploaded();
+ bool isDevSettingDisable();
+ void setAntiDemolitionAvail(bool avail, bool upload);
+ bool getAntiDemolitionSw();
+ void setAntiDemolitionSw(bool sw);
+ int getAntiDemolitionOutput();
+ void setAntiDemolitionOutput(int output);
+ int getGpio4Cfg();
+ void setGpio4Cfg(int cfg);
+ int getGpio5Cfg();
+ void setGpio5Cfg(int cfg);
+ int getDoorCloseOvertime();
+ void setDoorCloseOvertime(int overtime);
+ bool getDisableDevSettingSw();
+ void setDisableDevSettingSw(bool sw);
+ int getTicketCheckCountToday();
+ int getTicketModePeopleCountType();
+
+ int getCallDevList();//获取通话设备列表
+ int queryCallDevList(const std::string& text, std::vector& devList);//查询指定的通话设备
+ int callDev(const std::string& devTag, int devType);//发起通话请求
+ int callAbort();//放弃通话(拨通之前)
+ int callHangUp();//挂断
+ int callReject();//拒接
+ int callAccept();//接听
+ int callSetVideoStream(bool enable);//允许/禁用视频
+ int openCallRemoteDoor() final; // 被打入电话过程中,打开对面面板机控制的闸机
+
+ void verifyAbort();
+ bool getShowIdAndVerSw();
+ int setShowIdAndVerSw(bool sw);
+ int playAudio(enAudioIndex index);
+ int userItemChoose(int index);
+
+private:
+ int udpSend(const string &sendData, string &recvData);
+
+ int resetNetworkCfg();
+ int udpLoopToSvr(const std::string &sendData);
+
+private:
+ ParamManage *m_paramMng = nullptr;
+ GOBJ m_objs = nullptr;
+};
+
+#endif
diff --git a/Linguist/interface/BackstageInterfaceForUi.cpp b/Linguist/interface/BackstageInterfaceForUi.cpp
new file mode 100644
index 0000000..79dfe96
--- /dev/null
+++ b/Linguist/interface/BackstageInterfaceForUi.cpp
@@ -0,0 +1,6 @@
+
+#include "BackstageInterfaceForUi.h"
+
+
+
+
diff --git a/Linguist/interface/BackstageInterfaceForUi.h b/Linguist/interface/BackstageInterfaceForUi.h
new file mode 100644
index 0000000..ad56385
--- /dev/null
+++ b/Linguist/interface/BackstageInterfaceForUi.h
@@ -0,0 +1,574 @@
+#ifndef BACKSTAGEINTERFACEFORUI
+#define BACKSTAGEINTERFACEFORUI
+
+#include
+using namespace std;
+
+typedef unsigned char UINT8;
+typedef unsigned short int UINT16;
+typedef unsigned int UINT32;
+typedef unsigned long long int UINT64;
+
+typedef enum
+{
+ DHCP, //DHCP方式
+ STATIC //静态
+}enIpMethod;
+
+typedef enum _unlockSignal
+{
+ DISABLE = 0, //禁用
+ UnlockSigRelay, //继电器
+ UnlockSigWiegand26, //韦根
+ UnlockSigWiegand34, //韦根
+ UnlockSigWiegand42, //韦根
+ UnlockSigRs485, //485
+ UnlockSigButt
+}enUnlockSignal;
+
+typedef enum _assist
+{
+ FireFightingLinkage, //消防联动
+ NormallyOpenOutput, //常开输出
+ Nothing //无
+}enAssist;
+
+typedef enum _Wiegand
+{
+ Wiegand26, //韦根26
+ Wiegand34, //韦根34
+ Wiegand37 //韦根37
+}enWiegand;
+
+typedef enum _Logo
+{
+ LogoDefault, //默认
+ LogoNeutral, //中性
+ LogoServerSetting//平台配置
+}enLogo;
+
+typedef enum _recogResult
+{
+ RecogResultDefault, //默认
+ RecogResultShowName, //显示人员姓名(识别成功时使用)
+ RecogResultNotRegister, //未注册(识别失败时使用)
+ RecogResultCustom, //自定义
+ RecogResultButt //出错时返回
+}enRecogResult;
+
+
+typedef enum _similarityTh
+{
+ SimilarityThLoose, //宽松
+ SimilarityThGeneral, //一般
+ SimilarityThDefault, //默认
+ SimilarityThStrict, //严格
+ SimilarityThVeryStrict, //极严格
+ SimilarityThCustom //自定义
+}enSimilarityTh;
+
+typedef enum _livingBodyTh
+{
+ LivingBodyLoose, //宽松
+ LivingBodyGeneral, //一般
+ LivingBodyStrict, //严格
+}enLivingBodyTh;
+
+typedef enum _recogDistance
+{
+ RecogDistanceNear, //近
+ RecogDistanceMid, //适中
+ RecogDistanceFar, //远
+ RecogDistanceFarther //更远
+}enRecogDistance;
+
+typedef enum _recogAngle
+{
+ RecogAngleLittle, //15°
+ RecogAngleMid, //30°
+ RecogAngleBig, //45°
+}enRecogAngle;
+
+typedef enum _faceQuality
+{
+ FaceQualityBad, //较差
+ FaceQualityGood, //适中
+ FaceQualityBetter, //较好
+}enFaceQuality;
+
+typedef enum _baudRate
+{
+ BaudRate9600,
+ BaudRate14400,
+ BaudRate19200,
+ BaudRate38400,
+ BaudRate57600,
+ BaudRate115200
+}enBaudRate;
+
+typedef struct
+{
+ std::string imgPath;
+ std::string name;
+ std::string expTime;
+ std::string regTime;
+ long long personId;
+ std::string idNum;
+ std::string jobNum;
+ std::string phoneNum;
+ std::string icNum;
+ std::string feature;
+ int personType;
+ void clear()
+ {
+ personId = -1;
+ imgPath.clear();
+ name.clear();
+ expTime.clear();
+ regTime.clear();
+ idNum.clear();
+ jobNum.clear();
+ phoneNum.clear();
+ icNum.clear();
+ feature.clear();
+ personType = -1;
+ }
+}stQueryPersonInfo;
+
+typedef struct
+{
+ char imgPath[128];
+ char name[64];
+ char accessTime[64];
+ bool allowPass;
+}stQueryAccRedInfo;
+
+typedef struct
+{
+ int type; //0:static, 1:DHCP
+ char ip[16];
+ char mask[16];
+ char gw[16];
+ char dns[16];
+ bool enable;
+}stNetworkPara;
+
+typedef struct
+{
+ stNetworkPara cfg;
+}stNetWire;
+
+typedef struct
+{
+ stNetworkPara cfg;
+ char encType[16];
+ char ssid[64];
+ char pwd[64];
+ bool isConnected;
+ bool enableAp;
+ char apPwd[32];
+ bool isAPCfg = false;
+}stNetWifi;
+
+typedef struct
+{
+ char ssid[32];
+ int sigLev;
+ bool isEncrypt;
+ bool isConnected;
+}stAccPoint;
+
+typedef struct
+{
+ //char provider[32];
+ int provider;
+ bool enable;
+ bool available;
+}stNet4G;
+
+typedef struct
+{
+ int type;
+ int interval;
+ int picQty;
+ char pic[10][128];
+}stScreensaverCfg;
+
+enum BlueToothDevStat_e
+{
+ BlueToothDevStat_idle,
+ BlueToothDevStat_pairing,
+ BlueToothDevStat_paired,
+ BlueToothDevStat_connecting,
+ BlueToothDevStat_connected
+ //...
+};
+
+struct BluetoothDev_t
+{
+ string id;//唯一的标识?
+ string name;
+ //other attribute
+ //e.g 当前dev的状态:已连接/连接中/空闲...
+ BlueToothDevStat_e devStat;
+ BluetoothDev_t(){}
+ BluetoothDev_t(string _id, string _name, BlueToothDevStat_e _devStat):id(_id), name(_name), devStat(_devStat){}
+ void clear(){id.clear(); name.clear();devStat = BlueToothDevStat_idle;}
+};
+
+struct BluetoothStat_t
+{
+ string devName;
+ bool isEnable;
+ list pairedDev;
+ list availableDev;
+ void clear(){devName.clear(); isEnable=false; pairedDev.clear(); availableDev.clear();}
+};
+
+struct BtDoorLock
+{
+ bool isEnable = false;
+ int qty = 0;
+ std::vector manufacturer;
+ std::vector position;
+ std::vector mac;
+};
+
+typedef struct{
+ std::string name;
+ std::string code;
+ std::string devTag;
+ int type;
+ int status;
+}stCallDev;
+
+typedef enum {
+ audioInputPwd = 0
+}enAudioIndex;
+
+class BackstageInterfaceForUi
+{
+public:
+ virtual ~BackstageInterfaceForUi(){}
+ virtual int registerPerson(char *name, char *term, int nDataOrigin = 1) = 0;//注册人员,返回值:成功0,失败-1
+ virtual int startIdentyState(bool setfaceReco = true, bool setPeInput = true) = 0;//开始识别
+ virtual int stopIdentyState(bool setfaceReco = true, bool setPeInput = true) = 0;//停止识别
+
+ //工程设置
+ virtual int verifyFactorySettingPwd(const char *pwd) = 0;//验证密码,返回值:0、验证成功, -1失败
+ virtual int recoveryFactorySetting() = 0;//恢复出厂设置,返回值:0、成功, -1失败
+ //设备设置
+ virtual int getDeviceId(char *devId, int len) = 0;//获取设备id
+ virtual int getHardwareConfig(char *config, int len) = 0;//获取硬件配置
+ virtual int getStorSpace(int &total, float &free) = 0;//获取存储空间
+ virtual int getAppVersion(char *appVer, int len) = 0;//获取应用版本号
+ virtual int getRegisterNum() = 0;//获取注册人员数
+ virtual int getAccessRecordNotUpload() = 0;//获取未上传通行记录
+ virtual int getAccessRecordQty() = 0;//获取通行记录条数
+ virtual int getVolume() = 0;//获取音量大小
+ virtual int setVolume(int vol) = 0;//设置音量大小
+ virtual int getLcdBrightness() = 0;//获取屏幕亮度
+ virtual int setLcdBrightness(int brightness) = 0;//设置屏幕亮度
+ virtual bool getFillLightSw() = 0;//获取智能补光开关
+ virtual int setFillLightSw(bool isOpen) = 0;//获取智能补光开关
+ virtual int getStandbyTime() = 0;//获取待机时间
+ virtual int setStandbyTime(int time) = 0;//设置待机时间
+ virtual int getCloseScreenTime() = 0;//获取关屏等待时间
+ virtual int setCloseScreenTime(int time) = 0;//获取关屏等待时间
+ virtual int getLanguage() = 0;//获取语言
+ virtual int setLanguage(int lang) = 0;//设置语言
+ //网络设置
+ virtual int getIP(char *ip, int len, int& type) = 0;//获取IP
+ virtual int setIP(char *ip) = 0;//设置IP
+ virtual enIpMethod getIpMethod() = 0;//获取IP方法
+ virtual int setIpMethod(enIpMethod ipMethod) = 0;//设置IP方法
+ virtual int getSubnetMask(char *mask, int len) = 0;//获取子网掩码
+ virtual int setSubnetMask(char *mask) = 0;//设置子网掩码
+ virtual int getGateway(char *gateway, int len) = 0;//获取默认网关
+ virtual int setGateway(char *gateway) = 0;//设置默认网关
+ virtual int getDNS(char *dns, int len) = 0;//获取DNS
+ virtual int setDNS(char *dns) = 0;//设置DNS
+ virtual int getEthMac(char *mac, int len) = 0;//获取mac
+ virtual int getWifiMac(char *mac, int len) = 0;//获取wifi mac
+ virtual int getServerAddr(char *addr, int len) = 0;//获取服务器ip
+ virtual int setServerAddr(char *addr, bool byQrcode = false) = 0;//设置服务器ip
+ virtual int testServerIP(char *addr, float &time) = 0;//测试服务器ip,成功返回0,失败-1
+ virtual int getIotServerIP(char *ip, int len) = 0;//获取服务器ip
+ virtual int setIotServerIP(char *ip) = 0;//设置服务器ip
+ virtual int getIotPort() = 0;//获取端口号, 成功返回端口号,失败返回-1
+ virtual int setIotPort(int port) = 0;//设置端口号
+ virtual bool getIpShowSw() = 0;//获取IP是否在屏幕上显示的开关
+ virtual int setIpShowSw(bool sw) = 0;//设置IP是否在屏幕上显示的开关
+ //蓝牙设置
+ //if success, return 0, else return err num;
+ virtual int getBtSwitch(bool &isOpen) = 0;
+ virtual int getBtName(string &devName) = 0;
+ virtual int getBtPairedDev(list &devList) = 0;
+ virtual int getBtAvailDev(list &devList) = 0;
+ virtual int getBtAllInfo(BluetoothStat_t &bluetoothStat) = 0;
+
+ virtual int btScan(list &devList) = 0;//这个接口不需要吧?现在是定时的去搜索?所以点击“可用设备"条目时,直接调用getBtAvailDev就可以了?
+ virtual int btSetSwitch(bool isOpen) = 0;
+ virtual int btSetName(const string &devName) = 0;
+ virtual int btPaire(const string &devId) = 0;
+ virtual int btDisPaire(const string &devId) = 0;
+ virtual int btConnect(const string &devId) = 0;
+ virtual int btDisConnect(const string &devId) = 0;
+ virtual int btRenameDev(const string &devId, const string &devName) = 0;
+
+ virtual bool getParamBluetoothEnable() = 0;//获取蓝牙的开关
+ virtual int setParamBluetoothEnable(bool sw) = 0;//设置蓝牙的开关
+ virtual std::string getParamBluetoothName() = 0;//获取蓝牙设备名称
+ virtual int setParamBluetoothName(std::string name) = 0;//设置蓝牙设备名称
+ //门禁设置
+ virtual int getUnlockTime() = 0;//获取开锁时间,取值范围是1-10秒。默认值为1秒
+ virtual int setUnlockTime(int time) = 0;//设置开锁时间
+ virtual int getUnlockDelay() = 0;//获取开锁延时,取值范围是0-10秒。默认值为0秒
+ virtual int setUnlockDelay(int time) = 0;//设置开锁延时
+ virtual enUnlockSignal getUnlockSig() = 0;//获取开锁信号
+ virtual int setUnlockSig(enUnlockSignal value) = 0;//设置开锁信号,返回-1:不支持,-2:表示和报警信号冲突,0:成功
+ virtual enAssist getAssistIn() = 0;//获取辅助输入
+ virtual int setAssistIn(enAssist assist) = 0;//设置辅助输入
+ virtual enAssist getAssistOut() = 0;//获取辅助输出
+ virtual int setAssistOut(enAssist assist) = 0;//设置辅助输出
+ virtual enWiegand getWiegandIn() = 0;//获取韦根输入
+ virtual int setWiegandIn(enWiegand wiegand) = 0;//设置韦根输入
+ virtual enWiegand getWiegandOut() = 0;//获取韦根输出
+ virtual int setWiegandOut(enWiegand wiegand) = 0;//设置韦根输出
+ virtual enBaudRate getBaudRate() = 0;//获取波特率
+ virtual int setBaudRate(enBaudRate baudRate) = 0;//设置波特率
+ virtual int getWarningSig() = 0;//获取报警信号
+ virtual int setWarningSig(int signal) = 0;//设置报警信号, signal,0:禁用,1:继电器。返回-1:和开门信号设置的继电器有冲突,返回0:成功
+ virtual int setReverseAccessSw(bool enabled) = 0;
+ virtual bool getReverseAccessSw() const = 0;
+ //交互提示
+ virtual enLogo getLogo() = 0;//获取logo
+ virtual int setLogo(enLogo logo) = 0;//设置logo
+ virtual int getCustomLogo(char *logo, int len) = 0;
+ virtual enLogo getLogoTime() = 0;//获取logo+time
+ virtual int setLogoTime(enLogo logo) = 0;//设置logo+time
+ virtual enLogo getBackground() = 0;//获取背景图
+ virtual int setBackground(enLogo logo) = 0;//设置背景图
+ virtual enRecogResult getSuccessResult(char *data = nullptr, int len = 0) = 0;//获取成功结果
+ virtual int setSuccessResult(enRecogResult result = RecogResultDefault, char *data = nullptr) = 0;//设置成功结果
+ virtual enRecogResult getFailResult(char *data = nullptr, int len = 0) = 0;//获取失败结果
+ virtual int setFailResult(enRecogResult result = RecogResultDefault, char *data = nullptr) = 0;//设置失败结果
+ virtual bool getPlayAudioSw() = 0;//获取语音播报开关
+ virtual int setPlayAudioSw(bool isOpen) = 0;//设置语音播报开关
+ //人脸识别
+ virtual bool getIdentificationSw() = 0;//获取身份核验开关
+ virtual int setIdentificationSw(bool sw) = 0;//设置身份核验开关
+ virtual enSimilarityTh getSimilarityTh() = 0;//获取相似度阈值
+ virtual int setSimilarityTh(enSimilarityTh th) = 0;//设置相似度阈值
+ virtual int setCustomSimilarity(int sim) = 0;//设置自定义识别相似度
+ virtual int getCustomSimilarity() = 0;//获取自定义识别相似度
+ virtual bool getLivingBodySw() = 0;//获取活体开关
+ virtual int setLivingBodySw(bool isOpen) = 0;//设置活体开关
+ virtual enLivingBodyTh getLivingBodyTh() = 0;//获取活体检测阈值
+ virtual int setLivingBodyTh(enLivingBodyTh th) = 0;//设置活体检测阈值
+ virtual bool getLivingBodyFailSw() = 0;//获取活体失败图片留存开关
+ virtual int setLivingBodyFailSw(bool isOpen) = 0;//设置失败图片留存开关
+ virtual int getVerifyInterval() = 0;//获取验证间隔时间,取值范围0-5秒。0秒表示一人只做一次识别。大于1秒时,当上次同一人识别时间超过设定间隔时,再次进行识别
+ virtual int setVerifyInterval(int time) = 0;//设置验证间隔时间
+ virtual enRecogDistance getRecogDistance() = 0;//获取识别距离
+ virtual int setRecogDistance(enRecogDistance distance) = 0;//设置识别距离
+ virtual enRecogAngle getRecogAngle() = 0;//获取识别角度
+ virtual int setRecogAngle(enRecogAngle angle) = 0;//设置识别角度
+ virtual int getMaxTraceNum() = 0;//获取人脸最大跟踪数,取值范围是1-10. 默认值为1.即每次只识别画面中最大的人脸
+ virtual int setMaxTraceNum(int num) = 0;//设置人脸最大跟踪数
+ virtual enFaceQuality getFaceQuality() = 0;//获取人脸质量阈值
+ virtual int setFaceQuality(enFaceQuality quality) = 0;//设置人脸质量阈值
+ virtual bool getDynamicFeatureSw() = 0;//获取动态底库的开关
+ virtual int setDynamicFeatureSw(bool sw) = 0;//设置动态底库的开关
+ //系统设置
+ virtual bool getNtpServerSw() = 0;//获取NTP服务开关
+ virtual int setNtpServerSw(bool isOpen) = 0;//设置NTP服务开关
+ virtual int getNtpServerAddr(char *addr, int len) = 0;//获取NTP服务地址
+ virtual int setNtpServerAddr(char *addr) = 0;//设置NTP服务地址
+ virtual int testNtpServer(char *addr, float &time) = 0;//测试NTP服务, 成功返回0,失败-1
+ virtual int getNtpServerPort() = 0;//获取NTP端口,成功返回端口号,失败返回-1
+ virtual int setNtpServerPort(int port) = 0;//设置NTP服务端口
+ virtual int getNtpCheckInterval() = 0;///////////////////////////////////////////
+ virtual int setNtpCheckInterval(int interval) = 0;///////////////////////////////////////////
+ virtual int getNtpTimeZone(char *timeZone, int len) = 0;///////////////////////////////////////////
+ virtual int setNtpTimeZone(char* timeZone) = 0;///////////////////////////////////////////
+ virtual int setVerifyFactorySettingPwd(char *pwd) = 0;//设置工程密码,密码要求:数字0-9,字母a-z,A-Z,共6位。默认密码为666666
+ virtual int testHardware() = 0;//硬件检测,包括:a)双摄像头的回显, b)补光灯的点亮,c)继电器开关,d)刷卡信息的显示
+ virtual int cleanData() = 0;//清除数据
+ virtual int devReboot() = 0;//重启设备
+
+ virtual int startCapture() = 0;//start capture on register
+
+ virtual int deletePerson(long long personID) = 0;
+
+ /*query person ID
+ *pPersonIDBuff : [out]person id list
+ *nBuffCount : [in] buff size
+ *startID : [in] start id, the param greater zero
+ */
+ virtual int queryPersonList(long long* pPersonIDBuff, int nBuffCount, long long startID, int& nRealPerson) = 0;
+ virtual int clearPeople() = 0;
+ virtual unsigned queryPerson(const char* searchText) = 0;
+ virtual unsigned queryPerson(const char* searchText, int pageIndex, stQueryPersonInfo personRet[], int personRetSize) = 0;
+ virtual unsigned queryAccessRecord(const char* name, const char* time) = 0;
+ virtual unsigned queryAccessRecord(const char* name, const char* time, int pageIndex, stQueryAccRedInfo recordRet[], int recordRetSize) = 0;
+ virtual int getPersonListState(int &sum, unsigned long long &maxPersonID) = 0;
+ virtual int wakeUpFromScreenSaverOrScreenOff() = 0;
+
+ virtual int delPerson(long long personId) = 0;
+ virtual int modifyPerson(stQueryPersonInfo &personInfo) = 0;
+ virtual int addPerson(stQueryPersonInfo &personInfo) = 0;
+ virtual int snapFace(std::string &feature, std::string &savePath) = 0;
+
+ virtual bool getMaskCheckSwitch() = 0;
+ virtual int setMaskCheckSwitch(const bool sw) = 0;
+
+ virtual bool getNoMaskNoPassSwitch() = 0;
+ virtual int setNoMaskNoPassSwitch(const bool sw) = 0;
+
+ virtual bool getTemperatureCheckSwitch() = 0;
+ virtual int setTemperatureCheckSwitch(const bool sw) = 0;
+
+ virtual bool getNoTemperatureNoPassSwitch() = 0;
+ virtual int setNoTemperatureNoPassSwitch(const bool sw) = 0;
+
+ virtual float getLowTemperature() = 0;
+ virtual int setLowTemperature(const float temp) = 0;
+ virtual float getHighTemperature() = 0;
+ virtual int setHighTemperature(const float temp) = 0;
+ virtual bool getQRCodeSwitch() = 0;
+ virtual int setQRCodeSwitch(const bool sw) = 0;
+
+ virtual int setDateTime(const char *dateTime) = 0;
+
+ virtual bool getDataEncryptSw() = 0;
+ virtual int setDataEncryptSw(bool sw) = 0;
+ virtual bool getAutoRebootSw() = 0;
+ virtual int setAutoRebootSw(bool sw) = 0;
+ virtual int getAutoRebootTime(char* time, int len) = 0;
+ virtual int setAutoRebootTime(const char *time) = 0;
+ virtual int getAutoRebootInterval() = 0;
+ virtual int setAutoRebootInterval(int interval) = 0;
+
+ virtual int ntpTimeCorrect() = 0;
+ virtual int ntpTimeCorrectForDevTest(const std::string& ntpServerIp) = 0;
+
+ virtual int getNetWireCfg(stNetWire& wireCfg) = 0;
+ virtual int setNetWireCfg(const stNetWire& wireCfg) = 0;
+ virtual int setNetWireEnable(bool enable) = 0;
+
+ virtual int getNetWifiCfg(stNetWifi& wifiCfg) = 0;
+ virtual int setNetWifiCfg(const stNetWifi& wifiCfg) = 0;
+ virtual int setNetWifiEnable(bool enable) = 0;
+ virtual int getSsidList(stAccPoint accPointList[], int accPointListSize) = 0;
+ virtual int claerNetWifiCfg() = 0;
+
+ virtual int getNet4GCfg(stNet4G& n4gCfg) = 0;
+ virtual int setNet4GEnable(bool enable) = 0;
+ virtual int reboot4G() = 0;
+
+ virtual int getScreenSaverConfig(stScreensaverCfg& cfg) = 0;
+
+ virtual int sendPassword(const char *password) = 0;
+ virtual void resetDecisionCenterTimer() = 0;
+ virtual int pauseDataFlow() = 0;
+ virtual int resumeDataFlow() = 0;
+
+ virtual int candidateChoosedInPopupWindow(int index) = 0;
+
+ virtual bool isWiegandIoTestOk() = 0;
+ virtual bool isRelayAndGpioTestOk() = 0;
+ virtual bool isRs485TestOk() = 0;
+ virtual bool isReaderUnderScreenTestOk() = 0;
+ virtual bool isWifiTestOk() = 0;
+ virtual bool isRtcTestOk() = 0;
+ virtual bool isWireEthTestOk() = 0;
+ virtual bool is4gTestOk() = 0;
+ virtual bool isSerial1TestOk() = 0;
+
+ virtual void screenTest() = 0;
+ virtual void speakerTest() = 0;
+ virtual void microphoneTest(bool record) = 0;
+ virtual void audioSwitchTest() = 0;
+ virtual void tpTest() = 0;
+ virtual void irCamTest() = 0;
+ virtual void irLedTest() = 0;
+ virtual void ageingTest(unsigned hours) = 0;
+ virtual int getMacFromMes(const char* mesAddrAndProdNo, const char* pcbSeq, std::string& mac) = 0;
+ virtual bool isAgeing(std::string& hours) = 0;
+ virtual int getKeyDataMac(std::string& mac) = 0;
+
+ virtual int getRecoUiAdConfig(stScreensaverCfg& cfg) = 0;
+ virtual int recoUiTypeSwitch(unsigned x, unsigned y, unsigned w, unsigned h) = 0;
+
+ virtual int getDevPwd(int& type, std::string& pwd) = 0;
+ virtual int setLocalDevPwd(const std::string& pwd) = 0;
+
+ virtual int getKeyDataHardware(std::string& hardware) = 0;
+ virtual int setKeyDataHardwareAndUpdataFunction(const std::string& hardware) = 0;
+
+ virtual int setSetupAlreadyFlag() = 0;
+ virtual int getParkInfo(std::string& info) = 0;
+ virtual int setParkInfo(const std::string& info) = 0;
+ virtual int getDevPosi(std::string& posi) = 0;
+ virtual int setDevPosi(const std::string& posi) = 0;
+
+ virtual int getRs485Cfg() = 0;
+ virtual int setRs485Cfg(int cfg) = 0;
+ virtual int getRs485Prot1Addr() = 0;
+ virtual int setRs485Prot1Addr(int addr) = 0;
+ virtual int getRs485Prot3Cfg(int& handCfg, int& feetCfg) = 0;
+ virtual int setRs485Prot3Cfg(int handCfg, int feetCfg) = 0;
+ virtual int getGPIOCfg() = 0;
+ virtual int setGPIOCfg(int cfg) = 0;
+ virtual int getIDFaceVerifySw() = 0;
+ virtual int setIDFaceVerifySw(bool sw) = 0;
+ virtual int getBtLockCfg(BtDoorLock& cfg) = 0;
+ virtual int setBtLockCfg(const BtDoorLock& cfg) = 0;
+ virtual int getBtLockRemainingBatPwr(const std::string& mac) = 0;
+ virtual bool getHealthCodeSw() = 0;
+ virtual int setHealthCodeSw(bool sw) = 0;
+ virtual bool getHealthCodeNoFaceRequired() = 0;
+ virtual int setHealthCodeNoFaceRequired(bool sw) = 0;
+ virtual bool getHealthCodeAllowStranger() = 0;
+ virtual int setHealthCodeAllowStranger(bool sw) = 0;
+ virtual int getHealthCodePassCfg(int& codeColorCfg, int& c19tCfg, int& tripCfg, int& abtCfg) = 0;
+ virtual int setHealthCodePassCfg(int codeColorCfg, int c19tCfg, int tripCfg, int abtCfg) = 0;
+ virtual std::string getUnderScreenNfcModuleId() = 0;
+ virtual std::string getExtendNfcModuleId() = 0;
+ virtual bool isIdModuleInfoUploaded() = 0;
+ virtual bool isDevSettingDisable() = 0;
+ virtual void setAntiDemolitionAvail(bool avail, bool upload) = 0;
+ virtual bool getAntiDemolitionSw() = 0;
+ virtual void setAntiDemolitionSw(bool sw) = 0;
+ virtual int getAntiDemolitionOutput() = 0;
+ virtual void setAntiDemolitionOutput(int output) = 0;
+ virtual int getGpio4Cfg() = 0;
+ virtual void setGpio4Cfg(int cfg) = 0;
+ virtual int getGpio5Cfg() = 0;
+ virtual void setGpio5Cfg(int cfg) = 0;
+ virtual int getDoorCloseOvertime() = 0;
+ virtual void setDoorCloseOvertime(int overtime) = 0;
+ virtual bool getDisableDevSettingSw() = 0;
+ virtual void setDisableDevSettingSw(bool sw) = 0;
+ virtual int getTicketCheckCountToday() = 0;
+ virtual int getTicketModePeopleCountType() = 0;
+ virtual std::string utfRawStrToEncodeStr(const std::string &str) = 0;
+ virtual int getCallDevList() = 0;
+ virtual int queryCallDevList(const std::string& text, std::vector& devList) = 0;
+ virtual int callDev(const std::string& devTag, int devType) = 0;
+ virtual int callAbort() = 0;
+ virtual int callHangUp() = 0;
+ virtual int callReject() = 0;
+ virtual int callAccept() = 0;
+ virtual int callSetVideoStream(bool enable) = 0;
+ virtual int openCallRemoteDoor() = 0;
+ virtual void verifyAbort() = 0;
+ virtual bool getShowIdAndVerSw() = 0;
+ virtual int setShowIdAndVerSw(bool sw) = 0;
+ virtual int playAudio(enAudioIndex index) = 0;
+ virtual int userItemChoose(int index) = 0;
+};
+
+#endif // BACKSTAGEINTERFACEFORUI
+
diff --git a/Linguist/interface/UiInterfaceForBackstage.h b/Linguist/interface/UiInterfaceForBackstage.h
new file mode 100644
index 0000000..996d52c
--- /dev/null
+++ b/Linguist/interface/UiInterfaceForBackstage.h
@@ -0,0 +1,120 @@
+#ifndef UIINTERFACEFORBACKSTAGE
+#define UIINTERFACEFORBACKSTAGE
+
+#include "UiTools.h"
+#include
+
+class UiInterfaceForBackstage : public WidgetWithBackstageInterface
+{
+public:
+ typedef enum
+ {
+ PLATFORM_CONNECTION_STATUS_DISCONNECTED,
+ PLATFORM_CONNECTION_STATUS_CONNECTED,
+ PLATFORM_CONNECTION_STATUS_LOGGED
+ }PLATFORM_CONNECTION_STATUS_E;
+
+ typedef enum
+ {
+ QRCode_Msg_Standby,
+ QRCode_Msg_GreenCode,
+ QRCode_Msg_YellowCode,
+ QRCode_Msg_RedCode,
+ QRCode_Msg_Verifying,
+ QRCode_Msg_Error,
+ QRCode_Msg_OtherCode,
+ QRCode_Msg_Overtime
+ }QRCode_Msg_E;
+
+ virtual long long getUiVersion() = 0;
+
+ virtual void showUnauthorizedPage() = 0;
+ virtual void showScreenSaverPage() = 0;
+
+ virtual void showRecoMsgReco() = 0;
+ virtual void showRecoMsgRetry() = 0;
+ virtual void showRecoMsgFail(int failType) = 0;
+ virtual void notifyFaceInfo(const bool faceAvailable) = 0;
+ virtual void showRecoSuccess(const char *name) = 0;
+ virtual void showRecoMsgIDFail() = 0;
+
+ virtual int showFaceImg(const unsigned char *imgData, const int imgLen) = 0;
+ virtual void updatePlatformConnectionStatus(const PLATFORM_CONNECTION_STATUS_E) = 0;
+
+ virtual void showRecoMsgMoveForehead() = 0; //移动到额头区
+ virtual void showRecoMsgForeheadNormalTemp(const float temp, const bool isC) = 0; //显示正常温度
+ virtual void showRecoMsgForeheadAbnormalTemp(const float temp, const bool isHigh, const bool isC) = 0; //显示异常温度
+
+ virtual void showRecoMsgReadTempFailed() = 0; //体温检测失败
+ virtual void showRecoMsgNoMaskWarn() = 0; //请戴口罩
+ virtual void showRecoMsgMaskOk() = 0;
+ virtual void showRecoMsgMaskWarn() = 0;
+
+ virtual void showRecoMsgNoEntry(const bool) = 0; //显示禁止通行
+
+ virtual void turnOffScanLine() = 0;
+
+ virtual void clearLocalFacePage() = 0; //清除本地人脸库数据,在平台清空本地人脸的时候
+ virtual void updateLogo(const enLogo) = 0; //更新logo
+
+ virtual void showQRCodeMsg(const QRCode_Msg_E) = 0;
+ virtual void showQRCodeReco() = 0;
+ virtual void showFaceReco() = 0;
+ virtual void updateRecoUiIp() = 0;
+
+ virtual void showFeatureUpdateProgress(const unsigned current, const unsigned all) = 0;
+ virtual void closeFeatureUpdateProgress() = 0;
+
+ virtual void showRecoUiMask(int maskType) = 0;
+
+ virtual void showNotiMsg(const char *msg, int color) = 0;
+
+ virtual void updateScreenSaver() = 0;
+
+ virtual int grabScreen(const QString& picName, int rotate = 0) = 0;
+
+ virtual void showDrawPage() = 0;
+ virtual int switchToRecoUi() = 0;
+
+ virtual int showCenterMsg(const char* msg, int type) = 0;
+
+ virtual int showUserPwd(const char* name) = 0;
+ virtual void setPwdButton(bool visible) = 0;
+ virtual void showPwdUiPersonName(const char* name) = 0;
+ virtual void showUserPwdError(int type, int color) = 0;
+ virtual void showUserCandidate(const char* title, const char** opns, int opnsNum) = 0;
+ virtual void showDevTestPage(const char* devCfgMsg) = 0;
+ virtual void setDevTestMesAddrAndProdNoText(const char* text) = 0;
+ virtual void setDevTestPcbSeqText(const char* text) = 0;
+ virtual void setDevTestConfigInfo(const char* text) = 0;
+
+ virtual void showOrHideFaceFrame(bool show) = 0;
+ virtual void showPassResult(bool pass) = 0;
+
+ virtual void showRecoUiColorFaceSnapshot(const char* path) = 0;
+ virtual void showRecoUiColorFaceSnapshot(const unsigned char* jpgDate, int len) = 0;
+ virtual void recoUiswitchToType(int type) = 0;
+
+ virtual void qrcodeFastCfgResult(bool isSuccessed) = 0;
+
+ virtual void icCardResult(const char *icCardNum) = 0;
+
+ virtual void showHealthMsg(int type, float temp, const char * msg, bool pass, const unsigned char* jpgDate,
+ int jpgLen, const char * tripCity, const char* failReason, int bgColor, int displayTime) = 0;
+ virtual void showHealthCodeAuthStatus(int status) = 0;
+ virtual void showAntiDismantleDetect(bool upload) = 0;
+ virtual void showSceneResult(int result, const char* resultText, const char* businessInfo, int displayTime) = 0;
+ virtual void updatePersonNumAccessed(int personAccess, int personAll) = 0;
+ virtual bool isScenePassing() = 0;
+ virtual void setSceneUiPersonCountType(int type) = 0;
+ virtual void updateSceneUiPersonCount(int count) = 0;
+ virtual void showCallDialPage() = 0;
+ virtual void setCallConsoleStatus(int status, const char* tip) = 0;
+ virtual void setDndMode(bool enabled, const std::chrono::system_clock::time_point &time) = 0;
+ virtual void showRecoUiDevIdAndVer(bool show) = 0;
+ virtual void showUserItemChoose(const std::vector& items) = 0;
+};
+
+
+#endif // UIINTERFACEFORBACKSTAGE
+
diff --git a/Linguist/interface/View.cpp b/Linguist/interface/View.cpp
new file mode 100644
index 0000000..8a2d8d4
--- /dev/null
+++ b/Linguist/interface/View.cpp
@@ -0,0 +1,635 @@
+/********************************************************************
+* Name : View.cpp
+* Param :
+* Return :
+* Describ :
+* Author :
+* Date :
+********************************************************************/
+
+#include "View.h"
+#include "rw_zlog.h"
+#include "param_manage.h"
+#include "timer/timer.h"
+#include "AsyncEvent.h"
+#include "recoUiCallConsole.h"
+
+
+View * View::m_this = nullptr;
+
+View::View( )
+{
+ m_ui = nullptr;
+ m_backstage = nullptr;
+}
+
+View* View::getInstance()
+{
+ if( nullptr == m_this )
+ {
+ m_this = new View;
+ }
+
+ return m_this;
+}
+
+
+int View::viewInitBackstage( void* pParaMng, void* pObjs, bool needSetupWizard)
+{
+ m_backstage = new Backstage(pParaMng, pObjs);
+ m_backstage->stopIdentyState();
+ m_needSetupWizard = needSetupWizard;
+ return 0;
+}
+
+int View::viewCreateUi(int languageType, bool showCursor)
+{
+ LOGD("language type: %d", languageType);
+ if(languageType < 0){
+ return -1;
+ }
+ m_ui = new mainUi(languageType, m_needSetupWizard);
+ if(nullptr == m_backstage){
+ LOGE("backstage not ready!!!");
+ return -2;
+ }
+ showCursorSwitch(showCursor);
+ m_ui->setBackstageUiinterface(m_backstage);
+ LOGI("ui version:%lld", m_ui->getUiVersion());
+
+ return 0;
+}
+
+int View::viewCreateSettingUi()
+{
+ int ret = -1;
+ if(m_ui){
+ m_ui->createSettingUi();
+ ret = 0;
+ }
+ return ret;
+}
+
+void View::showRecoMsgReco()
+{
+ if (m_ui)
+ {
+ m_ui->showRecoMsgReco();
+ }
+}
+
+void View::showUnauthorizedPage()
+{
+ if (m_ui)
+ {
+ m_ui->showUnauthorizedPage();
+ }
+}
+
+void View::showScreenSaverPage()
+{
+ if (m_ui)
+ {
+ m_ui->showScreenSaverPage();
+ }
+}
+
+void View::showErrorDisplayPage(enErrCode errCode)
+{
+
+}
+
+void View::notifyFaceInfo(const bool faceAvailable)
+{
+ if(m_ui)
+ {
+ m_ui->notifyFaceInfo(faceAvailable);
+ }
+}
+
+void View::showRecoMsgRetry()
+{
+ if (m_ui)
+ {
+ m_ui->showRecoMsgRetry();
+ }
+}
+
+void View::showRecoMsgFail(int failType)//未经许可人员
+{
+ if (m_ui)
+ {
+ m_ui->showRecoMsgFail(failType);
+ }
+}
+
+void View::showRecoSuccess(const char *name)
+{
+ if (m_ui)
+ {
+ m_ui->showRecoSuccess(name);
+ }
+}
+
+void View::showFaceImg(const unsigned char *imgData, const int imgLen)
+{
+ if (m_ui)
+ {
+ m_ui->showFaceImg(imgData, imgLen);
+ }
+}
+
+void View::showRecoMsgIDFail()//身份证核验失败
+{
+ if (m_ui)
+ {
+ m_ui->showRecoMsgIDFail();
+ }
+}
+
+void View::updatePlatformConnectionStatus(UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_E state)
+{
+ //LOGD("m_ui===%p", m_ui);
+ if (m_ui)
+ {
+ m_ui->updatePlatformConnectionStatus(state);
+ }
+}
+
+void View::showRecoMsgMoveForehead() //移动到额头区
+{
+ if (m_ui)
+ {
+ m_ui->showRecoMsgMoveForehead();
+ }
+}
+
+void View::showRecoMsgForeheadNormalTemp(const float temp, const bool isC) //显示正常温度
+{
+ //LOGD("view show temp: %f", temp);
+ if (m_ui)
+ {
+ m_ui->showRecoMsgForeheadNormalTemp(temp, isC);
+ }
+}
+
+void View::showRecoMsgForeheadAbnormalTemp(const float temp, const bool isHigh, const bool isC) //显示异常温度
+{
+ //LOGD("view show temp: %f", temp);
+ if (m_ui)
+ {
+ m_ui->showRecoMsgForeheadAbnormalTemp(temp, isHigh, isC);
+ }
+}
+
+void View::showRecoMsgReadTempFailed() //体温检测失败
+{
+ if (m_ui)
+ {
+ m_ui->showRecoMsgReadTempFailed();
+ }
+}
+
+void View::showRecoMsgNoMaskWarn() //请戴口罩
+{
+ if (m_ui)
+ {
+ m_ui->showRecoMsgNoMaskWarn();
+ }
+}
+
+void View::showRecoMsgMaskOk() //口罩检测成功
+{
+ if (m_ui)
+ {
+ m_ui->showRecoMsgMaskOk();
+ }
+}
+
+void View::showRecoMsgNoEntry(const bool noEntry) //禁止通行
+{
+ if (m_ui)
+ {
+ m_ui->showRecoMsgNoEntry(noEntry);
+ }
+}
+
+void View::showRecoMsgMaskWarn()
+{
+ m_ui->showRecoMsgMaskWarn();
+}
+
+void View::turnOffScanLine() //关闭扫描线
+{
+ if (m_ui)
+ {
+ m_ui->turnOffScanLine();
+ }
+}
+
+void View::updateLogo(int logo)
+{
+ if (m_ui)
+ {
+ LOGD("logo=======%d", logo);
+ m_ui->updateLogo((enLogo)logo);
+ }
+}
+
+void View::showQRCodeResult(int result)
+{
+ if (m_ui)
+ {
+
+ if(result)LOGD("result=======%d", result);
+ m_ui->showQRCodeMsg(static_cast(result));
+ }
+}
+
+void View::showQRCodeReco()
+{
+ LOGD("m_ui==%p", m_ui);
+ if (m_ui)
+ {
+ m_ui->showQRCodeReco();
+ }
+}
+
+void View::showFaceReco()
+{
+ if (m_ui)
+ {
+ m_ui->showFaceReco();
+ }
+}
+
+void View::updateRecoUiIp()
+{
+ if (m_ui)
+ {
+ m_ui->updateRecoUiIp();
+ }
+}
+
+void View::showFeatureUpdateProgress(const unsigned current, const unsigned all)
+{
+ if (m_ui){
+ m_ui->showFeatureUpdateProgress(current, all);
+ }
+}
+
+void View::closeFeatureUpdateProgress()
+{
+ if (m_ui){
+ m_ui->closeFeatureUpdateProgress();
+ }
+}
+
+void View::showCalibrationBox()
+{
+ if (m_ui)
+ {
+ m_ui->showRecoUiMask((int)View::enRecoUiMaskType::enRecoUiMaskTempCalibra);
+ }
+}
+
+void View::closeCalibrationBox()
+{
+ if (m_ui)
+ {
+ m_ui->showRecoUiMask((int)View::enRecoUiMaskType::enRecoUiMaskLight);
+ }
+}
+
+void View::showNotiMsg(const char *msg, int color, double displayTime)
+{
+ if (m_ui && msg){
+ m_ui->showNotiMsg(msg, color);
+ if(strlen(msg)){
+ rw_timer_del(m_ullNotiMsgShowTmr);
+ rw_timer_add(&m_ullNotiMsgShowTmr, displayTime, 1, msgShowOvertimeCloseCB, (void*)0);
+ }
+ }
+}
+
+void View::switchLightOrDarkRecoUi(bool isDark)
+{
+ if (m_ui)
+ {
+ View::enRecoUiMaskType type = View::enRecoUiMaskType::enRecoUiMaskLight;
+ if(isDark){
+ type = View::enRecoUiMaskType::enRecoUiMaskDark;
+ }
+ m_ui->showRecoUiMask((int)type);
+ }
+}
+
+void View::updateScreenSaver()
+{
+ if (m_ui)
+ {
+ m_ui->updateScreenSaver();
+ }
+}
+
+void View::grabScreen(const char* picName, int rotate)
+{
+ if (m_ui)
+ {
+ m_ui->grabScreen(picName, rotate);
+ }
+}
+
+void View::switchToRecoUi()
+{
+ if (m_ui)
+ {
+ m_ui->switchToRecoUi();
+ }
+}
+
+void View::showCenterMsg(const char* msg, double displayTime, int type)
+{
+ if (m_ui && msg){
+ LOGI("showCenterMsg:%s", msg);
+ m_ui->showCenterMsg(msg, type);
+ rw_timer_del(m_ullCenterMsgShowTmr);
+ if(strlen(msg)){
+ LOGI("enable timer...");
+ rw_timer_add(&m_ullCenterMsgShowTmr, displayTime, 1, msgShowOvertimeCloseCB, (void*)1);
+ }
+ }
+}
+
+void View::closeCenterMsgWin()
+{
+ LOGI("close center msg window");
+ m_ui->showCenterMsg("", 0);
+ rw_timer_del(m_ullCenterMsgShowTmr);
+}
+
+void View::showDrawPage()
+{
+ if (m_ui){
+ m_ui->showDrawPage();
+ }
+}
+
+void View::showCursorSwitch(bool sw)
+{
+ if (m_ui){
+ m_ui->showCursorSwitch(sw);
+ }
+}
+
+void View::setPwdButton(bool visible)
+{
+ if (m_ui){
+ m_ui->setPwdButton(visible);
+ }
+}
+
+void View::showPwdUiPersonName(const char* name)
+{
+ if (m_ui){
+ m_ui->showPwdUiPersonName(name);
+ }
+}
+
+
+View::~View()
+{
+ delete m_ui;
+ delete m_backstage;
+}
+
+int View::msgShowOvertimeCloseCB(void *data)
+{
+ if(0 == (int)data){
+ View::getInstance()->showNotiMsg("", 0);
+ }else if(1 == (int)data){
+ View::getInstance()->showCenterMsg("");
+ }
+ return 0;
+}
+
+int View::setNetWire(const stNetWire& wireCfg)
+{
+ return m_backstage->setNetWireCfg(wireCfg);
+}
+
+int View::setServerAddr(const char *addr, bool byQrcode)
+{
+ return m_backstage->setServerAddr((char*)addr, byQrcode);
+}
+
+void View::showUserPwd(const char* name)
+{
+ if (m_ui){
+ m_ui->showUserPwd(name);
+ }
+}
+
+void View::showUserPwdError(int type, int color)
+{
+ if (m_ui){
+ m_ui->showUserPwdError(type, color);
+ }
+}
+
+void View::showUserCandidate(const char** opns, int opnsNum)
+{
+ if (m_ui){
+ m_ui->showUserCandidate("请选择项目", opns, opnsNum);
+ }
+}
+
+void View::showDevTestPage(const char* devCfgMsg)
+{
+ if (m_ui){
+ m_ui->showDevTestPage(devCfgMsg);
+ UiConfig::GetInstance()->setDevTestStatus(true);
+ }
+}
+
+void View::setDevTestMesAddrAndProdNoText(const char* text)
+{
+ if (m_ui){
+ m_ui->setDevTestMesAddrAndProdNoText(text);
+ }
+}
+
+void View::setDevTestPcbSeqText(const char* text)
+{
+ if (m_ui){
+ m_ui->setDevTestPcbSeqText(text);
+ }
+}
+
+#if 0
+void View::setDevTestConfigInfo(const char* text)
+{
+ m_ui->setDevTestConfigInfo(text);
+}
+#endif
+
+void View::showOrHideFaceFrame(bool show)
+{
+ if (m_ui){
+ m_ui->showOrHideFaceFrame(show);
+ }
+}
+
+void View::showPassResult(bool pass)
+{
+ if (m_ui){
+ m_ui->showPassResult(pass);
+ }
+}
+
+void View::showRecoUiColorFaceSnapshot(const char* path)
+{
+ m_ui->showRecoUiColorFaceSnapshot(path);
+}
+
+void View::showRecoUiColorFaceSnapshot(const unsigned char* jpgDate, int len)
+{
+ m_ui->showRecoUiColorFaceSnapshot(jpgDate, len);
+}
+
+
+void View::recoUiswitchToType(int type)
+{
+ m_ui->recoUiswitchToType(type);
+}
+
+void View::qrcodeFastCfgResult(bool isSuccessed)
+{
+ m_ui->qrcodeFastCfgResult(isSuccessed);
+}
+
+void View::icCardResult(const char *icCardNum)
+{
+ m_ui->icCardResult(icCardNum);
+}
+
+bool View::isInSettingUi()
+{
+ return m_ui->isInSettingUi();
+}
+
+void View::updateAdScreen()
+{
+ return m_ui->updateAdScreen();
+}
+
+void View::showHealthMsg(int type, float temp, const char* msg, bool pass,
+ const unsigned char* jpgDate, int jpgLen, const char* tripCity, const char* failReason, int bgColor, int displayTime)
+{
+ m_ui->showHealthMsg(type, temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor, displayTime);
+}
+
+/*
+0:隐藏
+1:打开
+2:未授权
+3:已授权
+4:授权不可用
+*/
+void View::showHealthCodeAuthStatus(int status)
+{
+ m_ui->showHealthCodeAuthStatus(status);
+}
+
+void View::showAntiDismantleDetect(bool upload)
+{
+ m_ui->showAntiDismantleDetect(upload);
+}
+
+void View::showSceneResult(int result, const char* resultText, const char* businessInfo, int displayTime)
+{
+ m_ui->showSceneResult(result, resultText, businessInfo, displayTime);
+}
+
+void View::updatePersonNumAccessed(int personAccess, int personAll)
+{
+ m_ui->updatePersonNumAccessed(personAccess, personAll);
+}
+
+bool View::isScenePassing()
+{
+ return m_ui->isScenePassing();
+}
+
+void View::setSceneUiPersonCountType(int type)
+{
+ return m_ui->setSceneUiPersonCountType(type);
+}
+
+void View::updateSceneUiPersonCount(int count)
+{
+ m_ui->updateSceneUiPersonCount(count);
+}
+
+void View::showCallBtn(bool callButton, bool videoButton) {
+ auto event = new AsyncEvent([=]() {
+ emit m_ui->signalShowCallBtn(callButton, videoButton);
+ });
+ QCoreApplication::postEvent(m_ui, event);
+}
+
+void View::showCallDialPage()
+{
+ m_ui->showCallDialPage();
+}
+
+void View::showCallReceiverCallIn(const char* callerName, bool videoEnable)
+{
+ m_ui->setCallConsoleStatus(videoEnable ? 51 : 50, callerName);
+}
+
+void View::showCallInitiatorConnected(bool videoEnable)
+{
+ m_ui->setCallConsoleStatus(videoEnable ? 1 : 0, "");
+}
+
+void View::exitCall()
+{
+ m_ui->setCallConsoleStatus(100, "");
+}
+
+void View::showCallPlatformCallIn(const char *callerName) {
+ m_ui->setCallConsoleStatus(recoUiCallConsole::PlatformCallIn, callerName);
+}
+
+void View::showCallVideoPlayer(bool show) {
+ m_ui->setCallConsoleStatus(show ? recoUiCallConsole::ShowVideo : recoUiCallConsole::HideVideo, "");
+}
+
+void View::setDndMode(bool enabled, const std::chrono::system_clock::time_point &time) {
+ auto event = new AsyncEvent([=]() { m_ui->setDndMode(enabled, time); });
+ QCoreApplication::postEvent(m_ui, event);
+}
+
+void View::showRecoUiDevIdAndVer(bool show)
+{
+ m_ui->showRecoUiDevIdAndVer(show);
+}
+
+void View::showUserItemChoose(const std::vector& items)
+{
+ m_ui->showUserItemChoose(items);
+}
+
+
+
+#include
+#include
+void rotateRgbImage(const unsigned char* inputImage, int width, int height, unsigned char* outptuImg, double angle)
+{
+ QImage inputImg((const uchar*)inputImage, width, height, QImage::Format_RGB888);
+ QMatrix matrix;
+ matrix.rotate(angle);
+ memcpy(outptuImg, inputImg.transformed(matrix).bits(), width * height * 3);
+}
+
diff --git a/Linguist/interface/View.h b/Linguist/interface/View.h
new file mode 100644
index 0000000..cf026ca
--- /dev/null
+++ b/Linguist/interface/View.h
@@ -0,0 +1,174 @@
+/********************************************************************
+* Name : View.h
+* Param :
+* Return :
+* Describ :
+* Author : Zhang Botong
+* Date : 2019-11-13
+********************************************************************/
+
+#ifndef VIEW_H
+#define VIEW_H
+
+#include "BackStage.h"
+#include "mainUi.h"
+
+typedef enum
+{
+ Error1_N = 1000,
+ Error_INPUT_PARAM,
+ Error1_1,
+ ErrorLive,
+ Error_PERSON_ID_NO_EXIST,
+ Error_REGISTER_PERSON,
+ Error_DELETE_PERSON,
+ Error_CLEAR_PERSON,
+ Error_QUERY_PERSON_COUNT,
+ Error_QUERY_MAX_PERSON_ID,
+ Error_NO_FACE,
+ Error_NO_FACE_IMAGE,
+ Error_REGISTER_FACE,
+ Error_DELETE_FACE,
+ Error_QUERY_PERSONID,
+ Error_QUERY
+}enErrCode;
+
+class View
+{
+public:
+ enum class enRecoUiMaskType
+ {
+ enRecoUiMaskNormal,
+ enRecoUiMaskTempCalibra,
+ enRecoUiMaskLight,
+ enRecoUiMaskDark,
+
+ enRecoUiMaskMax
+ };
+
+ static View* getInstance();
+ static int msgShowOvertimeCloseCB(void *data);
+
+ int viewInitBackstage(void* pParaMng, void* pObjs, bool needSetupWizard);
+ int viewCreateUi(int languageType, bool showCursor);
+ int viewCreateSettingUi();
+ virtual ~View();
+
+ void showRecoMsgReco();
+ void showUnauthorizedPage();
+ void showScreenSaverPage();
+ void showErrorDisplayPage(enErrCode errCode);
+ void notifyFaceInfo(const bool faceAvailable);
+
+ void showRecoMsgRetry();
+ void showRecoMsgFail(int failType = 0);
+ void showRecoSuccess(const char *name);
+ void showFaceImg(const unsigned char *imgData, const int imgLen);
+ void showRecoMsgIDFail();
+
+ void startCapture();
+ void updatePlatformConnectionStatus(UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_E state);
+
+ void showRecoMsgMoveForehead(); //移动到额头区
+ void showRecoMsgForeheadNormalTemp(const float temp, const bool isC); //显示正常温度
+ void showRecoMsgForeheadAbnormalTemp(const float temp, const bool isHigh, const bool isC); //显示异常温度
+
+ void showRecoMsgReadTempFailed(); //体温检测失败
+ void showRecoMsgNoMaskWarn(); //请戴口罩
+ void showRecoMsgMaskOk(); //口罩检测成功
+ void showRecoMsgNoEntry(const bool noEntry); //禁止通行或者清除禁止通行
+ void showRecoMsgMaskWarn();
+ void turnOffScanLine(); //关闭扫描线
+ void updateLogo(int logo);
+ void showQRCodeResult(int result);
+ void showQRCodeReco();
+ void showFaceReco();
+ void updateRecoUiIp();
+
+ void showFeatureUpdateProgress(const unsigned current, const unsigned all);
+ void closeFeatureUpdateProgress();
+
+ void showCalibrationBox();
+ void closeCalibrationBox();
+
+ //color:0-white, 1-red, 2-yellow
+ void showNotiMsg(const char *msg, int color, double displayTime = 3600 * 8);
+
+ void switchLightOrDarkRecoUi(bool isDark);
+
+ void updateScreenSaver();
+ void grabScreen(const char* picName, int rotate = 0);
+ void showDrawPage();
+ void switchToRecoUi();
+
+ void showCenterMsg(const char* msg, double displayTime = 3.0, int type = 0);
+ void closeCenterMsgWin();
+
+ void showCursorSwitch(bool sw);
+ void setPwdButton(bool visible);
+
+ int setNetWire(const stNetWire& wireCfg);
+ int setServerAddr(const char *addr, bool byQrcode = false);
+
+ void showPwdUiPersonName(const char* name);
+ void showUserPwd(const char* name);
+ void showUserPwdError(int type, int color = 0);
+
+ void showUserCandidate(const char** opns, int opnsNum);
+ void showDevTestPage(const char* devCfgMsg);
+ void setDevTestMesAddrAndProdNoText(const char* text);
+ void setDevTestPcbSeqText(const char* text);
+ #if 0
+ void setDevTestConfigInfo(const char* text);
+ #endif
+
+ void showOrHideFaceFrame(bool show);
+ void showPassResult(bool pass);
+
+ void showRecoUiColorFaceSnapshot(const char* path);
+ void showRecoUiColorFaceSnapshot(const unsigned char* jpgDate, int len);
+ void recoUiswitchToType(int type);
+ void qrcodeFastCfgResult(bool isSuccessed);
+
+ void icCardResult(const char* icCardNum);
+ bool isInSettingUi();
+ void updateAdScreen();
+
+ void showHealthMsg(int type, float temp, const char* msg, bool pass, const unsigned char* jpgDate,
+ int jpgLen, const char* tripCity, const char* failReason, int bgColor, int displayTime = 3);
+ void showHealthCodeAuthStatus(int status);
+
+ void showAntiDismantleDetect(bool upload);
+
+ void showSceneResult(int result, const char* resultText, const char* businessInfo, int displayTime);
+ void updatePersonNumAccessed(int personAccess, int personAll);
+ bool isScenePassing();
+ void setSceneUiPersonCountType(int type);
+ void updateSceneUiPersonCount(int count);
+
+ void showCallBtn(bool callButton, bool videoButton);//显示/隐藏通话按键
+ void showCallDialPage();//显示拨号页面
+ void showCallReceiverCallIn(const char* callerName, bool videoEnable);//显示接收者通话拨入
+ void showCallInitiatorConnected(bool videoEnable);//显示发起者通话接通
+ void exitCall();//退出通话界面
+ void showCallPlatformCallIn(const char* callerName);//显示平台通话拨入
+ void showCallVideoPlayer(bool show);//显示/隐藏视频播放
+ void setDndMode(bool enabled, const std::chrono::system_clock::time_point &time);
+ void showRecoUiDevIdAndVer(bool show);
+ void showUserItemChoose(const std::vector& items);
+
+protected:
+ View();
+private:
+ Backstage* m_backstage;
+ mainUi* m_ui;
+ static View * m_this;
+ bool m_needSetupWizard = false;
+
+ unsigned long long m_ullNotiMsgShowTmr = 0;
+ unsigned long long m_ullCenterMsgShowTmr = 0;
+};
+
+void rotateRgbImage(const unsigned char* inputImage, int width, int height, unsigned char* outptuImg, double angle);
+
+#endif
diff --git a/Linguist/keyboard/LineEditWithKeyboard.cpp b/Linguist/keyboard/LineEditWithKeyboard.cpp
new file mode 100644
index 0000000..48282d1
--- /dev/null
+++ b/Linguist/keyboard/LineEditWithKeyboard.cpp
@@ -0,0 +1,33 @@
+#include "LineEditWithKeyboard.h"
+#include
+#include "keyboard.h"
+
+LineEditWithKeyboard::LineEditWithKeyboard(QWidget *parent) :
+ QLineEdit(parent), m_keyboard(nullptr)
+{
+}
+
+void LineEditWithKeyboard::mousePressEvent(QMouseEvent *event)
+{
+ qDebug() << "LineEditWithKeyboard::mousePressEvent";
+ emit signalMousePressed();
+
+ keyboard::GetInstance(this);
+ QLineEdit::mousePressEvent(event);
+}
+
+void LineEditWithKeyboard::slotWordChoose(QString word)
+{
+ setText(text() + word);
+}
+
+void LineEditWithKeyboard::keyPressEvent(QKeyEvent* event)
+{
+ //qDebug() << "LineEditWithKeyboard::keyPressEvent";
+ emit signalMousePressed();
+ QWidget* w = dynamic_cast(parent());
+ if(w)
+ w->setFocus();
+ QLineEdit::keyPressEvent(event);
+}
+
diff --git a/Linguist/keyboard/LineEditWithKeyboard.h b/Linguist/keyboard/LineEditWithKeyboard.h
new file mode 100644
index 0000000..3e46d30
--- /dev/null
+++ b/Linguist/keyboard/LineEditWithKeyboard.h
@@ -0,0 +1,28 @@
+#ifndef LINEDIT_WITH_KEYBOARD
+#define LINEDIT_WITH_KEYBOARD
+#include
+#include
+#include "keyboard.h"
+
+class LineEditWithKeyboard : public QLineEdit
+{
+ Q_OBJECT
+public:
+ LineEditWithKeyboard(QWidget *parent = nullptr);
+
+protected:
+ void mousePressEvent(QMouseEvent *event);
+
+signals:
+ void signalMousePressed();
+
+public slots:
+ void slotWordChoose(QString word);
+
+private:
+ void keyPressEvent(QKeyEvent* event);
+
+ keyboard* m_keyboard;
+};
+
+#endif // LINEDIT_WITH_KEYBOARD
diff --git a/Linguist/keyboard/LineEditWithPopup.cpp b/Linguist/keyboard/LineEditWithPopup.cpp
new file mode 100644
index 0000000..ba4e071
--- /dev/null
+++ b/Linguist/keyboard/LineEditWithPopup.cpp
@@ -0,0 +1,17 @@
+#include "LineEditWithPopup.h"
+
+LineEditWithPopup::LineEditWithPopup(QWidget *parent) : QLineEdit(parent)
+{
+ connect(this, SIGNAL(signalCallPopup()), this, SLOT(slotShowPopup));
+}
+
+
+void LineEditWithPopup::mousePressEvent(QMouseEvent *event)
+{
+
+ QLineEdit::mousePressEvent(event);
+}
+
+void LineEditWithPopup::slotShowPopup()
+{
+}
diff --git a/Linguist/keyboard/LineEditWithPopup.h b/Linguist/keyboard/LineEditWithPopup.h
new file mode 100644
index 0000000..f31cc82
--- /dev/null
+++ b/Linguist/keyboard/LineEditWithPopup.h
@@ -0,0 +1,23 @@
+#ifndef LINEEDITWITHPOPUP_H
+#define LINEEDITWITHPOPUP_H
+
+#include
+#include
+
+class LineEditWithPopup : public QLineEdit
+{
+ Q_OBJECT
+public:
+ explicit LineEditWithPopup(QWidget *parent = nullptr);
+signals:
+ void signalCallPopup();
+
+public slots:
+ void slotShowPopup();
+
+private:
+ QStringList* m_list;
+ void mousePressEvent(QMouseEvent *event);
+};
+
+#endif // LINEEDITWITHPOPUP_H
diff --git a/Linguist/keyboard/keyboard.cpp b/Linguist/keyboard/keyboard.cpp
new file mode 100644
index 0000000..4eadc1d
--- /dev/null
+++ b/Linguist/keyboard/keyboard.cpp
@@ -0,0 +1,594 @@
+#include "keyboard.h"
+#include "LineEditWithKeyboard.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "UiConfig.h"
+#include "UiTools.h"
+
+//∧ len:3
+#define KEY_COL_UNIT 4
+#define KEY_HIDE " ▼ "
+#define KEY_UPPER "△"
+#define KEY_LOWER "∧"
+#define KEY_SYMBOL " !@# "
+#define KEY_SYMBOL_BACK "Back"
+#define KEY_CN "中"
+#define KEY_EN "En"
+#define KEY_SPACE " Space "
+#define KEY_BACKSPACE " ← "
+#define KEY_ENTER "Enter"
+
+
+
+//添加按键时需要注意不要超出头文件中定义的按键个数
+static const char* lower_letter[] = {KEY_HIDE,
+ "1","2","3","4","5","6","7","8","9","0",
+ "q","w","e","r","t","y","u","i","o","p",
+ "a","s","d","f","g","h","j","k","l",
+ KEY_UPPER,"z","x","c","v","b","n","m",KEY_BACKSPACE,
+ KEY_CN,KEY_SYMBOL,KEY_SPACE,".",KEY_ENTER};
+
+static const char* upper_letter[] = {KEY_HIDE,
+ "1","2","3","4","5","6","7","8","9","0",
+ "Q","W","E","R","T","Y","U","I","O","P",
+ "A","S","D","F","G","H","J","K","L",
+ KEY_LOWER,"Z","X","C","V", "B","N","M",KEY_BACKSPACE,
+ KEY_CN,KEY_SYMBOL,KEY_SPACE,".",KEY_ENTER};
+
+static const char* cn_letter[] = {KEY_HIDE,
+ "-","=","[","]","\\",";","\'",",","?","/",
+ "!","@","#","$","%","^","&&","*","(",")",
+ "_","+","{","}","|",":","\"","<",">",
+ "~","·","×","÷","「","」","✘","√",KEY_BACKSPACE,
+ KEY_CN,KEY_SYMBOL_BACK,KEY_SPACE,".",KEY_ENTER};
+
+static const int COL_NUM_EACH_ROW[] = {1, 10, 10, 9, 9, 5};
+static const int KEY_NUM = sizeof(lower_letter) / sizeof(*lower_letter);
+
+
+#if 0
+QPushButton* keyboard::m_btn[KEYS_QUANTITY_MAX] = {nullptr};
+//chinese support
+QVector* keyboard::m_btnsCnCdd = nullptr;
+QLineEdit* keyboard::m_editCn = nullptr;
+QPushButton* keyboard::m_btnCnPrePage = nullptr;
+QPushButton* keyboard::m_btnCnNextPage = nullptr;
+#endif
+
+QFile* keyboard::m_pinyinFile = nullptr;
+QRegExp* keyboard::m_regExp = nullptr;
+QMultiMap* keyboard::m_pinyinMap = nullptr;
+
+keyboard* keyboard::m_instance = nullptr;
+keyboard::enKeyboardStatus keyboard::m_status = enKeyboardNotGen;
+
+keyboard* keyboard::GetInstance(QWidget *parent)
+{
+ if(nullptr == m_instance && nullptr != parent){
+ qDebug() << "create keyboard";
+ m_status = enKeyboardCreating;
+ m_instance = new keyboard(parent);
+ m_instance->popup();
+ m_status = enKeyboardCreated;
+ }
+ if(parent){
+ QObject* recv = static_cast(parent);
+ if(m_instance->receiver() != recv){
+ m_instance->setReceiver(static_cast(parent));
+ }
+ }
+ return m_instance;
+}
+
+void keyboard::close()
+{
+ if(m_instance){
+ if(enKeyboardCreated == m_status){
+ qDebug() << "close keyboard";
+ m_instance->slotClose();
+ }
+ else {
+ qDebug() << "close keyboard later";
+ QTimer::singleShot(500, m_instance, SLOT(slotClose()));
+ }
+ }
+}
+
+void keyboard::preLoad()
+{
+ if(nullptr == m_instance){
+ qDebug() << "keyboard pre load";
+ keyboard();
+ }
+}
+
+keyboard::keyboard(QWidget *parent) : QDialog(parent), m_receiver(nullptr)
+{
+ m_status = enKeyboardNotGen;
+ m_editCn = nullptr;
+ m_btnCnPrePage = nullptr;
+ m_btnCnNextPage = nullptr;
+
+ setReceiver(static_cast(parent));
+
+ qDebug() << "keyboard()";
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::ButtonText, Qt::white);
+
+ const int chooseBtnHeight = UiConfig::GetInstance()->getUiWidth() / 16;
+
+ m_btnsCnCdd.resize(8);
+ QHBoxLayout* hLayoutCdd = new QHBoxLayout();
+ for(auto &b : m_btnsCnCdd)
+ {
+ //if(nullptr == b){
+ b = new QPushButton();
+ b->setFixedWidth(static_cast(UiConfig::GetInstance()->getUiWidth()) / m_btnsCnCdd.size());
+ b->setPalette(palette);
+ b->setStyleSheet("background-color: transparent;");
+ b->setFlat(true);
+ b->setFixedSize(chooseBtnHeight * 2, chooseBtnHeight);
+ connect(b, SIGNAL(clicked(bool)), this, SLOT(slotCandidateBtnClicked()));
+ //}
+ hLayoutCdd->addWidget(b, 1, Qt::AlignLeft);
+ }
+ hLayoutCdd->addWidget(new QLabel(this), 100, Qt::AlignRight);
+
+ if(nullptr == m_editCn){
+ m_editCn = new QLineEdit();
+ m_editCn->setReadOnly(true);
+ palette.setColor(QPalette::Text, Qt::white);
+ m_editCn->setPalette(palette);
+ m_editCn->setFixedSize(chooseBtnHeight * 4, chooseBtnHeight);
+ m_editCn->setStyleSheet("background:transparent;border-width:0;border-style:outset");
+ }
+ if(nullptr == m_btnCnPrePage){
+ m_btnCnPrePage = new QPushButton();
+ m_btnCnPrePage->setText(" ↑ ");
+ m_btnCnPrePage->setPalette(palette);
+ m_btnCnPrePage->setFixedSize(chooseBtnHeight * 2, chooseBtnHeight);
+ m_btnCnPrePage->setStyleSheet("background-color: rgb(57, 53, 50);");
+ connect(m_btnCnPrePage, SIGNAL(clicked(bool)), this, SLOT(slotPageTurnBtnClicked()));
+ }
+
+ if(nullptr == m_btnCnNextPage){
+ m_btnCnNextPage = new QPushButton();
+ m_btnCnNextPage->setText(" ↓ ");
+ m_btnCnNextPage->setPalette(palette);
+ m_btnCnNextPage->setFixedSize(chooseBtnHeight * 2, chooseBtnHeight);
+ m_btnCnNextPage->setStyleSheet("background-color: rgb(57, 53, 50);");
+ connect(m_btnCnNextPage, SIGNAL(clicked(bool)), this, SLOT(slotPageTurnBtnClicked()));
+ }
+
+ QVBoxLayout* vLayout = new QVBoxLayout();
+ vLayout->addLayout(hLayoutCdd);
+
+ QHBoxLayout* hLayoutLine[ROW_NUM] = {nullptr};
+ for(int i = 0; i < ROW_NUM; i ++)
+ {
+ hLayoutLine[i] = new QHBoxLayout();
+ hLayoutLine[i]->setMargin(0);
+ //hLayoutLine[i]->setSpacing(15);
+ if(i < ROW_NUM - 1){ //最后一列不需要
+ hLayoutLine[i]->addStretch(0);
+ }
+ }
+ hLayoutLine[0]->addWidget(m_editCn, 2, Qt::AlignLeft);
+ hLayoutLine[0]->addWidget(m_btnCnPrePage, 1, Qt::AlignLeft);
+ hLayoutLine[0]->addWidget(m_btnCnNextPage, 1, Qt::AlignLeft);
+
+ int col = 0;
+ int row = 0;
+ int colMax = 0; //最大列数
+ int colTaken = 0;
+ palette.setColor(QPalette::ButtonText, Qt::white);
+ QFont ft;
+ ft.setPointSize(UiConfig::GetInstance()->isRkDevice() ? 12 : 24);
+ for(int i = 0; i < KEY_NUM; i ++)
+ {
+ m_btn[i] = new QPushButton(this);
+ m_btn[i]->setPalette(palette);
+ m_btn[i]->setStyleSheet("background-color: rgb(57, 53, 50);");
+ m_btn[i]->setFocusPolicy(Qt::NoFocus);
+ m_btn[i]->setFont(ft);
+ //m_btn[i]->setFlat(true);
+
+ connect(m_btn[i], SIGNAL(clicked(bool)), this, SLOT(slotBtnClicked()));
+ connect(m_btn[i], SIGNAL(pressed()), this, SLOT(slotBtnPressed()));
+ connect(m_btn[i], SIGNAL(released()), this, SLOT(slotBtnReleased()));
+
+ int btnCol = (strlen(lower_letter[i]) / KEY_COL_UNIT) + 1;
+ hLayoutLine[row]->addWidget(m_btn[i]);
+
+ colTaken += btnCol;
+ col++;
+ if(COL_NUM_EACH_ROW[row] == col)
+ {
+ col = 0;
+ row++;
+ if(colTaken > colMax){
+ colMax = colTaken;
+ }
+ colTaken = 0;
+ }
+ }
+
+ int unit = (UiConfig::GetInstance()->getUiWidth() - ((colMax - 1) * SPACE)) / colMax;
+ for(int i = 0; i < KEY_NUM; i ++)
+ {
+ int btnCol = (strlen(lower_letter[i]) / KEY_COL_UNIT) + 1;
+ m_btn[i]->setFixedSize(unit * btnCol, static_cast(unit));
+ }
+ for(int i = 0; i < ROW_NUM; i ++)
+ {
+ if(i > 0 && i < ROW_NUM - 1){ //首行和尾行不需要
+ hLayoutLine[i]->addStretch(0);
+ }
+ vLayout->addLayout(hLayoutLine[i]);
+ }
+ vLayout->setSpacing(5);//10
+ vLayout->setContentsMargins(0, 10, 0, 10);
+ setLayout(vLayout);
+ setFocusPolicy(Qt::NoFocus);
+ setWindowFlags( Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Tool | Qt::WindowDoesNotAcceptFocus);
+
+ if(nullptr == m_pinyinFile){
+ m_pinyinFile = new QFile();
+ m_pinyinFile->setFileName(":/res/inputCn/pinyin-utf8"); //设置QFile的名称
+ if(!m_pinyinFile->open(QIODevice::ReadOnly) ){ //只读模式,打开文件
+ QMessageBox::warning(nullptr, "pinyin file", "can't load"); //打开失败,则报错
+ }
+ }
+ if(nullptr == m_regExp){
+ m_regExp = new QRegExp();
+ m_regExp->setCaseSensitivity(Qt::CaseSensitive); //设置正则表达式的参数,Qt::CaseInsensitive,大小写敏感
+ m_regExp->setPattern(QString("([a-z]+)")); //获得正则本身,获取a-z
+ }
+ if(nullptr == m_pinyinMap){
+ m_pinyinMap = new QMultiMap();
+ while(!m_pinyinFile->atEnd())
+ {
+ QByteArray lineData = m_pinyinFile->readLine(); //读取一行
+ //qDebug() << "line:" << QString(data.data());
+ int ret = m_regExp->indexIn(QString(lineData.data()), 0, QRegExp::CaretAtZero); //进行匹配,如果成功则返回index,不成功返回-1 ,data.data()是读取到的一行数据,返回值应该是匹配到的位置
+ //qDebug() << "ret =" << ret;
+ //qDebug() << "m_regExp.cap(1):" << m_regExp.cap(1) << "QString(lineData.data()).left(ret):" << QString(lineData.data()).left(ret);
+ if("\r\n" != QString(lineData.data()).left(ret)){
+ m_pinyinMap->insert(m_regExp->cap(1), QString(lineData.data()).left(ret)); //将mmap对象的成员初始化;key是字母,value是行字
+ }
+ }
+ m_pinyinFile->close();
+ }
+ setInputMethodCn(false);
+ setAttribute(Qt::WA_DeleteOnClose);
+ setFixedWidth(UiConfig::GetInstance()->getUiWidth());
+
+ m_labelTip = new QLabel(this);
+ m_labelTip->setFixedSize(unit, static_cast(unit * 1.5));
+ m_labelTip->setFont(ft);
+ m_labelTip->setStyleSheet("background-color: rgb(15, 116, 248);");
+ m_labelTip->setAlignment(Qt :: AlignCenter);
+ m_labelTip->hide();
+
+ m_timer = new QTimer(this);
+ connect(m_timer, SIGNAL(timeout()), this, SLOT(slotTimer()));
+
+ shiftkeyboard(2);
+}
+
+keyboard::~keyboard()
+{
+ qDebug() << "~keyboard()";
+ m_instance = nullptr;
+}
+
+void keyboard::setInputMethodCn(bool setCn)
+{
+ if(setCn){
+ m_editCn->clear();
+ m_editCn->show();
+ }
+ else {
+ for(auto &b : m_btnsCnCdd){
+ b->hide();
+ }
+ m_editCn->hide();
+ m_btnCnPrePage->hide();
+ m_btnCnNextPage->hide();
+ }
+ isInputMethodCn = setCn;
+}
+
+void keyboard::shiftkeyboard(int caps)
+{
+ const char** letter = nullptr;
+ if(0 == caps){
+ letter = upper_letter;
+ }
+ else if (1 == caps) {
+ letter = cn_letter;
+ }
+ else if (2 == caps) {
+ letter = lower_letter;
+ }
+ for(int i = 0; i < KEY_NUM; i ++){
+ if(m_btn[i]->text().isEmpty()){ //if has icon, clear first
+ m_btn[i]->setIcon(QIcon());
+ }
+ if(QString(letter[i]) == KEY_BACKSPACE){
+ m_btn[i]->setText("");
+ //m_btn[i]->setIcon(QIcon(":res/image/pwd_del_large.png"));
+ setButtonBackImage(m_btn[i], ":res/image/pwd_del_large_black.png", m_btn[i]->height() / 2 , static_cast(m_btn[i]->height() * 0.34));//w/2*(24/35)
+ m_btn[i]->setStyleSheet("background-color: rgb(57, 53, 50);");
+ m_btn[i]->setProperty("key", letter[i]);
+ }
+ else if(QString(letter[i]) == KEY_UPPER){
+ m_btn[i]->setText("");
+ //m_btn[i]->setIcon(QIcon(":res/image/shift_large.png"));
+ setButtonBackImage(m_btn[i], ":res/image/shift_large_black.png", m_btn[i]->height() / 2, m_btn[i]->height() / 2);
+ m_btn[i]->setStyleSheet("background-color: rgb(57, 53, 50);");
+ m_btn[i]->setProperty("key", letter[i]);
+ }
+ else if(QString(letter[i]) == KEY_LOWER){
+ m_btn[i]->setText("");
+ //m_btn[i]->setIcon(QIcon(":res/image/shift_lock_large.png"));
+ setButtonBackImage(m_btn[i], ":res/image/shift_lock_large_black.png", m_btn[i]->height() / 2, m_btn[i]->height() / 2);
+ m_btn[i]->setStyleSheet("background-color: rgb(57, 53, 50);");
+ m_btn[i]->setProperty("key", letter[i]);
+ }
+ else{
+ m_btn[i]->setText(letter[i]);
+ }
+ }
+}
+
+void keyboard::slotBtnPressed()
+{
+ //qDebug() << "unit:" << dynamic_cast(sender())->width();
+ QPushButton* btn = dynamic_cast(sender());
+ if(btn){
+ for(int i = 0; i < KEY_NUM - 4; i ++){
+ if(btn == m_btn[i]){
+ int len = strlen(btn->text().toStdString().c_str());
+ if(len > 0 && len <= 3){
+ m_labelTip->setText(btn->text());
+ m_labelTip->move(btn->x(), btn->y() - m_labelTip->height());
+ m_labelTip->show();
+ }
+ }
+ }
+ m_curPressedKey = btn;
+ m_timer->start(500);
+ }
+}
+
+void keyboard::slotBtnReleased()
+{
+ m_labelTip->hide();
+ m_timer->stop();
+ m_curPressedKey = nullptr;
+}
+
+void keyboard::slotBtnClicked()
+{
+ for(int i = 0; i < KEY_NUM; i ++){
+ if(sender() == m_btn[i]){
+ keyPress(m_btn[i]);
+ break;
+ }
+ }
+}
+
+void keyboard::slotPageTurnBtnClicked()
+{
+ if(sender() == m_btnCnPrePage){
+ changePage(--m_iCddPageIndex);
+ }
+ else if (sender() == m_btnCnNextPage) {
+ changePage(++m_iCddPageIndex);
+ }
+}
+
+void keyboard::slotCandidateBtnClicked()
+{
+ for(auto &b : m_btnsCnCdd){
+ if(sender() == b){
+ emit signalWordChoose(b->text());
+ m_editCn->clear();
+ for(auto &btn : m_btnsCnCdd){
+ btn->hide();
+ }
+ m_btnCnPrePage->hide();
+ m_btnCnNextPage->hide();
+ break;
+ }
+ }
+}
+
+void keyboard::slotClose()
+{
+ done(0);
+}
+
+void keyboard::slotTimer()
+{
+ if(m_curPressedKey){
+ m_timer->start(100);
+ keyPress(m_curPressedKey);
+ }
+}
+
+
+void keyboard::paintEvent(QPaintEvent *event)
+{
+ QPainter painter(this);
+ painter.fillRect(this->rect(), QColor(0, 0, 0,/*0x1f, 0x28, 0x41,*/ 255)); //QColor最后一个参数代表背景的透明度
+ return QWidget::paintEvent(event);
+}
+
+void keyboard::keyPress(const QPushButton* btn)
+{
+ if(!btn){
+ return;
+ }
+
+ QString str = btn->text();
+ if(str.isEmpty()){
+ str = btn->property("key").toString();
+ }
+
+ QKeyEvent* event = nullptr;
+ if(str == KEY_BACKSPACE){
+ event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
+ }else if(str == KEY_ENTER){
+ event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
+ }else if(str == KEY_UPPER){
+ shiftkeyboard(0);//upper_letter
+ }else if(str == KEY_LOWER){
+ shiftkeyboard(2);//lower_letter
+ }else if(str == KEY_CN){
+ shiftkeyboard(2);
+ for(int j = 0; j < KEY_NUM; j ++){
+ if(m_btn[j]->text() == KEY_CN){
+ m_btn[j]->setText(KEY_EN);
+ }
+ }
+ setInputMethodCn(true);
+ }else if(str == KEY_EN){
+ for(int j = 0; j < KEY_NUM; j ++){
+ if(m_btn[j]->text() == KEY_EN){
+ m_btn[j]->setText(KEY_CN);
+ }
+ }
+ setInputMethodCn(false);
+ }else if(str == KEY_HIDE){
+ slotClose();
+ }else if(str == KEY_SYMBOL){
+ shiftkeyboard(1);
+ }else if(str == KEY_SYMBOL_BACK){
+ shiftkeyboard(2);
+ }else{
+ if(str == KEY_SPACE)
+ str = " ";
+ else if (str == "&&") {
+ str = "&";
+ }
+ event = new QKeyEvent(QEvent::KeyPress, 0, Qt::NoModifier, str);
+ }
+
+ if(isInputMethodCn){
+ if(str >= "a" && str <= "z"){ //qt5.5 does not have isLower() func
+ m_editCn->setText(m_editCn->text() + str);
+ matching(m_editCn->text());
+ }else if (str == KEY_BACKSPACE) {
+ if("" != m_editCn->text()){
+ m_editCn->setText(m_editCn->text().remove(m_editCn->text().length() - 1, 1));
+ matching(m_editCn->text());
+ }else{
+ QApplication::sendEvent(m_receiver, new QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier));
+ }
+ }else {
+ if(nullptr != event){
+ QApplication::sendEvent(m_receiver, event);
+ }
+ }
+ }else{
+ if(nullptr != event){
+ QApplication::sendEvent(m_receiver, event);
+ }
+ }
+ static_cast(m_receiver)->setFocus();
+}
+
+
+void keyboard::popup(const int posToBottom)
+{
+ qDebug() << "keyboard popup";
+ show();
+ move(0, UiConfig::GetInstance()->getUiHeight() - height() - posToBottom);
+#if 0
+ qDebug() << "child: " << children().size();
+ QObjectList& childList = const_cast(children());
+ childList.clear();
+ qDebug() << "****************child: " << children().size();
+#endif
+}
+
+void keyboard::matching(const QString& userInput)
+{
+ //qDebug() << "input:" << userInput;
+ QList list = m_pinyinMap->values(userInput);
+ int foundQty = list.size();
+ //qDebug() << "list:" << foundQty;
+ m_pinyinList.clear();
+#if 0
+ for (QList::const_reverse_iterator itr = list.rbegin(); itr != list.rend(); ++itr){
+ m_pinyinList.append(*itr);
+ }
+#else
+ for(int i=0; ihide();
+ }
+
+ const int matchQty = m_pinyinList.size();
+ //qDebug() << "matchQty:" << matchQty;
+ if(matchQty){
+ const int btnQty = m_btnsCnCdd.size();
+ const int showQty = matchQty - (index * btnQty) > btnQty ? btnQty : matchQty - (index * btnQty);
+ for(int i=0; iisHidden()){
+ m_btnsCnCdd.at(i)->show();
+ }
+ m_btnsCnCdd.at(i)->setText(m_pinyinList.value(i + index * btnQty));
+ //qDebug() << "word:" << m_pinyinList.value(i + index * btnQty);
+ }
+
+ m_btnCnPrePage->show();
+ m_btnCnNextPage->show();
+ m_btnCnPrePage->setEnabled(0 != index);
+ m_btnCnNextPage->setEnabled( (showQty == btnQty) && (matchQty - ((index + 1) * btnQty)) );
+ }
+ else {
+ m_btnCnPrePage->hide();
+ m_btnCnNextPage->hide();
+ }
+}
+
+void keyboard::setReceiver(QObject* receiver)
+{
+ if(nullptr != receiver){
+ if(m_receiver){
+ disconnect(this, SIGNAL(signalWordChoose(QString)), m_receiver, SLOT(slotWordChoose(QString)));
+ }
+ m_receiver = receiver;
+ connect(this, SIGNAL(signalWordChoose(QString)), m_receiver, SLOT(slotWordChoose(QString)));
+ }
+}
+
+
+QObject* keyboard::receiver() const
+{
+ return m_receiver;
+}
diff --git a/Linguist/keyboard/keyboard.h b/Linguist/keyboard/keyboard.h
new file mode 100644
index 0000000..14df657
--- /dev/null
+++ b/Linguist/keyboard/keyboard.h
@@ -0,0 +1,85 @@
+#ifndef KEYBOARD_H
+#define KEYBOARD_H
+
+#include
+#include
+#include
+#include
+
+//chinese support
+#include
+#include
+#include
+#include
+
+class keyboard : public QDialog
+{
+ Q_OBJECT
+public:
+ typedef enum
+ {
+ enKeyboardNotGen,
+ enKeyboardCreating,
+ enKeyboardCreated
+ }enKeyboardStatus;
+
+ static const int KEYS_QUANTITY_MAX = 60;
+ static const int SPACE = 5;
+ static const int ROW_NUM = 6;
+
+ static keyboard* GetInstance(QWidget *parent);
+ static void preLoad();
+ static void close();
+
+ ~keyboard();
+ void popup(const int posToBottom = 0);
+
+signals:
+ void signalWordChoose(QString word);
+
+public slots:
+ void slotBtnClicked();
+ void slotBtnPressed();
+ void slotBtnReleased();
+ void slotPageTurnBtnClicked();
+ void slotCandidateBtnClicked();
+ void slotClose();
+ void slotTimer();
+
+private:
+ static keyboard* m_instance;
+ QObject* m_receiver;
+ static enKeyboardStatus m_status;
+
+ QPushButton* m_btn[KEYS_QUANTITY_MAX];
+ //chinese support
+ QVector m_btnsCnCdd;
+ QLineEdit* m_editCn;
+ QPushButton* m_btnCnPrePage;
+ QPushButton* m_btnCnNextPage;
+
+ static QFile* m_pinyinFile;
+ static QRegExp* m_regExp;
+ static QMultiMap* m_pinyinMap;
+
+ bool isInputMethodCn;
+ int m_iCddPageIndex;
+ QList m_pinyinList;
+
+ QLabel* m_labelTip;
+ QTimer* m_timer;
+ QPushButton* m_curPressedKey;
+
+ explicit keyboard(QWidget *parent = nullptr);
+ void setInputMethodCn(bool setCn);
+ void matching(const QString& userInput);
+ void changePage(int index);
+ void setReceiver(QObject*);
+ QObject* receiver() const;
+
+ void shiftkeyboard(int caps);
+ void paintEvent(QPaintEvent *event);
+ void keyPress(const QPushButton* btn);
+};
+
+#endif // KEYBOARD_H
diff --git a/Linguist/mainUi/UiCommon.h b/Linguist/mainUi/UiCommon.h
new file mode 100644
index 0000000..72ce028
--- /dev/null
+++ b/Linguist/mainUi/UiCommon.h
@@ -0,0 +1,16 @@
+#ifndef UICOMMON_H
+#define UICOMMON_H
+
+typedef enum
+{
+ OPTION_LOGO = 0,
+ OPTION_LOGOTIME,
+ OPTION_BACKGROUND,
+ OPTION_RECOGNIZE_OK,
+ OPTION_RECOGNIZE_FAIL,
+ OPTION_AUDIO_OK,
+ OPTION_AUDIO_FAIL,
+ OPTION_OTHERS
+}INTERACION_OPTION;
+
+#endif // UICOMMON_H
diff --git a/Linguist/mainUi/UiConfig.cpp b/Linguist/mainUi/UiConfig.cpp
new file mode 100644
index 0000000..f5ae70a
--- /dev/null
+++ b/Linguist/mainUi/UiConfig.cpp
@@ -0,0 +1,369 @@
+#include "UiConfig.h"
+#include
+#include
+
+
+const int UiConfig::GLOBAL_FONT_SIZE[SUPPORT_SCREEN_SIZE_QUANTITY] = {11, 20, 20, 8, 8};
+
+const QString UiConfig::WELCOME[SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/start-600-1024.jpg",
+":/res/image/start-800-1280.jpg",
+":/res/image/start-720-1280.jpg",
+":/res/image/start-800-1280.jpg",
+":/res/image/start-720-1280.jpg"
+};
+
+
+const QString UiConfig::LANGUAGE_FILE[SUPPORT_LANGUAGE_QUANTITY] = {
+ "", "FaceTick_TC.qm", "FaceTick_EN.qm", "FaceTick_JP.qm", "FaceTick_KR.qm",
+ "FaceTick_SP.qm", "FaceTick_TH.qm", "FaceTick_PT.qm", "FaceTick_IT.qm", "FaceTick_IW.qm",
+ "FaceTick_FR.qm", "FaceTick_DE.qm", "FaceTick_TR.qm", "FaceTick_HU.qm"};
+const int UiConfig::DEV_NAME_FONT_SIZE[SUPPORT_SCREEN_SIZE_QUANTITY][SUPPORT_LANGUAGE_QUANTITY] = {
+ {25, 25, 15, 25, 25, 15, 25, 15, 15, 15, 15, 15, 15, 15},
+ {50, 50, 30, 50, 50, 30, 50, 30, 30, 30, 30, 30, 30, 30},
+ {50, 50, 30, 50, 50, 30, 50, 30, 30, 30, 30, 30, 30, 30},
+ {20, 20, 12, 20, 20, 12, 20, 12, 12, 12, 12, 12, 12, 12},
+ {20, 20, 12, 20, 20, 12, 20, 12, 12, 12, 12, 12, 12, 12}
+};
+const int UiConfig::MASK_FONT_SIZE[SUPPORT_SCREEN_SIZE_QUANTITY][SUPPORT_LANGUAGE_QUANTITY] = {
+ {20, 20, 14, 12, 20, 12, 12, 12, 8, 12, 12, 14, 12, 12},
+ {40, 40, 28, 24, 40, 24, 24, 26, 18, 24, 24, 28, 24, 24},
+ {40, 40, 28, 24, 40, 24, 24, 26, 18, 24, 24, 28, 24, 24},
+ {15, 15, 10, 9, 12, 10, 10, 8, 7, 10, 10, 11, 10, 8},
+ {15, 15, 10, 9, 12, 10, 10, 8, 7, 10, 10, 11, 10, 8}
+};
+const int UiConfig::PERSON_MSG_FONT_SIZE[SUPPORT_SCREEN_SIZE_QUANTITY][SUPPORT_LANGUAGE_QUANTITY] = {
+ {20, 20, 14, 15, 12, 15, 14, 13, 9, 12, 10, 13, 13, 9},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {14, 15, 9, 10, 10, 12, 11, 8, 8, 10, 6, 8, 10, 8},
+ {15, 15, 9, 10, 10, 12, 11, 8, 8, 10, 6, 8, 10, 8}
+};
+
+const long long UiConfig::UI_VERSION = 202011171553;
+
+UiConfig* UiConfig::m_instance = nullptr;
+
+UiConfig* UiConfig::GetInstance()
+{
+ if( m_instance == nullptr )
+ {
+ m_instance = new UiConfig();
+ }
+ return m_instance;
+}
+
+UiConfig::UiConfig()
+{
+ m_languageType = 0;
+ memset(m_recoUiTunningFontSize, 0, sizeof(m_recoUiTunningFontSize));
+}
+
+UiConfig::~UiConfig()
+{
+
+}
+
+void UiConfig::setUiConfig(const ScreenSize_E config)
+{
+ m_screenSize = config;
+ if(ScreenSize_7inch == config){ //haiqing 7inch
+ m_screenWidth = 600;
+ m_screenHeight = 1024;
+ }
+ else if(ScreenSize_8inch == config || ScreenSize_8inch_rk == config){
+ m_screenWidth = 800;
+ m_screenHeight = 1280;
+ }
+ else if(ScreenSize_5inch == config || ScreenSize_5inch_rk == config){
+ m_screenWidth = 720;
+ m_screenHeight = 1280;
+ }
+ else {
+ //nop
+ }
+}
+
+void UiConfig::setUiFaceFrameSize(const FaceFrameSize_E config)
+{
+ m_faceFrameSize = config;
+}
+
+int UiConfig::getUiWidth() const
+{
+ return m_screenWidth;
+}
+
+int UiConfig::getUiHeight() const
+{
+ return m_screenHeight;
+}
+
+const QString& UiConfig::getWelcome() const
+{
+ return WELCOME[(int)m_screenSize];
+}
+
+#if 0
+bool UiConfig::is7inch() const
+{
+ return (ScreenSize_7inch == m_screenSize);
+}
+
+bool UiConfig::is8inch() const
+{
+ return (ScreenSize_8inch == m_screenSize);
+}
+
+bool UiConfig::is5inch() const
+{
+ return (ScreenSize_5inch == m_screenSize);
+}
+#endif
+
+bool UiConfig::is8inchA038HaimanFaceFrame() const
+{
+ return FaceFrameSize_8inchHaiman_A038 == m_faceFrameSize;
+}
+
+bool UiConfig::is8inchA038JinggongFaceFrame() const
+{
+ return FaceFrameSize_8inchJinggong_A038 == m_faceFrameSize;
+}
+
+int UiConfig::getScreenConfigIndex() const
+{
+ return static_cast(m_screenSize);
+}
+
+int UiConfig::getGlobalFontSize() const
+{
+ return GLOBAL_FONT_SIZE[static_cast(m_screenSize)];
+}
+
+int UiConfig::setLanguageType(const int type)
+{
+ m_languageType = type;
+ return 0;
+}
+
+int UiConfig::getLanguageType() const
+{
+ return m_languageType;
+}
+
+#ifdef CUSTOM_QRCODE_AREA //自定义扫描框
+
+int UiConfig::getQRCodeAreaCoordinateX() const
+{
+ return m_QRCodeAreaX;
+}
+
+int UiConfig::getQRCodeAreaCoordinateY() const
+{
+ return m_QRCodeAreaY;
+}
+
+int UiConfig::getQRCodeAreaWidth() const
+{
+ return (m_screenWidth - (m_QRCodeAreaX * 2));
+}
+
+int UiConfig::getQRCodeAreaHeight() const
+{
+ //区域为正方形
+ return getQRCodeAreaWidth();
+}
+
+void UiConfig::setQRCodeAreaCoordinateX(const int x)
+{
+ m_QRCodeAreaX = x;
+}
+
+void UiConfig::setQRCodeAreaCoordinateY(const int y)
+{
+ m_QRCodeAreaY = y;
+}
+
+#else
+
+int UiConfig::getQRCodeAreaCoordinateX() const
+{
+ return QRCODE_AREA_COORDINATE_X;
+}
+
+int UiConfig::getQRCodeAreaCoordinateY() const
+{
+ return QRCODE_AREA_COORDINATE_Y;
+}
+
+int UiConfig::getQRCodeAreaWidth() const
+{
+ return (m_screenWidth - (QRCODE_AREA_COORDINATE_X * 2));
+}
+
+int UiConfig::getQRCodeAreaHeight() const
+{
+ //区域为正方形
+ return getQRCodeAreaWidth();
+ //return (m_screenHeight - (QRCODE_AREA_COORDINATE_Y * 2));
+}
+
+#endif
+
+void UiConfig::setHardwareTesting(bool sw)
+{
+ m_bIsHardwareTesting = sw;
+}
+
+bool UiConfig::getHardwareTesting() const
+{
+ return m_bIsHardwareTesting;
+}
+
+void UiConfig::showFaceFrameByTempExist(bool set)
+{
+ m_bShowFaceFrame = set;
+}
+
+bool UiConfig::isFaceFrameShowByTempExist() const
+{
+ return m_bShowFaceFrame;
+}
+
+void UiConfig::setTpAvailable(bool available)
+{
+ m_bTpAvailable = available;
+}
+
+bool UiConfig::isTpAvailable() const
+{
+ return m_bTpAvailable;
+}
+
+void UiConfig::setfuncNotSupport(Func_E func)
+{
+ if(func < sizeof(m_ullfuncNotSupp) * 8){
+ m_ullfuncNotSupp |= (1 << func);
+ }
+}
+
+bool UiConfig::isFuncNotSupport(Func_E func) const
+{
+ if(func < sizeof(m_ullfuncNotSupp) * 8){
+ return (bool)(m_ullfuncNotSupp & (1 << func));
+ }
+ return true;
+}
+
+void UiConfig::setRecoUiStyle(int style) {
+ if (style >= 0) {
+ m_recoUiStyle = style;
+ }
+}
+
+bool UiConfig::isRecoUiStyleClassical() const
+{
+ return (0 == m_recoUiStyle);
+}
+
+bool UiConfig::isRecoUiStyleStandard() const
+{
+ return (1 == m_recoUiStyle);
+}
+
+bool UiConfig::isRecoUiStyleColor() const
+{
+ return (2 == m_recoUiStyle);
+}
+
+bool UiConfig::isRecoUiStyleAd() const
+{
+ return (3 == m_recoUiStyle);
+}
+
+bool UiConfig::isRecoUiStyleScene() const
+{
+ return (4 == m_recoUiStyle);
+}
+
+
+#if 0
+void UiConfig::setRecoUiFontSizeScale(int sizeType)
+{
+ m_recoUiFontSizeType = sizeType;
+}
+
+float UiConfig::recoUiFontSizeScale() const
+{
+ const QVector scales{1.0f, 1.25f, 1.5f};
+ return m_recoUiFontSizeType < scales.size() ? scales[m_recoUiFontSizeType] : 1.0f;
+}
+#endif
+
+void UiConfig::setRecoUiFontSize(unsigned index, int size)
+{
+ if(index < sizeof (m_recoUiTunningFontSize) / sizeof (m_recoUiTunningFontSize[0])){
+ m_recoUiTunningFontSize[index] = size;
+ }
+}
+
+int UiConfig::recoUiFontSize(unsigned index) const
+{
+ if(index < sizeof (m_recoUiTunningFontSize) / sizeof (m_recoUiTunningFontSize[0])){
+ return m_recoUiTunningFontSize[index];
+ }
+ return 0;
+}
+
+int UiConfig::setRecoUITextCfg(RecoUiTextCfg::enTextType type, RecoUiTextCfg::enDisMode mode, const char* cusText, RecoUiTextCfg::enFontSize fontSize)
+{
+ m_textCfg[type].m_mode = mode;
+ m_textCfg[type].m_cusText = cusText;
+ m_textCfg[type].m_fontSize = fontSize;
+ return 0;
+}
+
+float UiConfig::recoUiTextCfgFontSize(RecoUiTextCfg::enTextType type)
+{
+ const float scales[] = {1.0f, 1.2f, 0.8f, 1.4f};
+ return scales[UiConfig::GetInstance()->m_textCfg[type].m_fontSize];
+}
+
+void UiConfig::setDefaultScreensaver(int index)
+{
+ m_defaultScreensaver = index;
+}
+
+int UiConfig::defaultScreensaver() const
+{
+ return m_defaultScreensaver;
+}
+
+bool UiConfig::isRkDevice() const
+{
+ return (ScreenSize_8inch_rk == m_screenSize || ScreenSize_5inch_rk == m_screenSize);
+}
+
+void UiConfig::setDevTestStatus(bool test)
+{
+ m_isDevTesting = test;
+}
+
+bool UiConfig::isDevTesting() const
+{
+ return m_isDevTesting;
+}
+
+void UiConfig::setFastCfgStatus(bool cfg)
+{
+ m_isFastCfging = cfg;
+}
+
+bool UiConfig::isFastCfging() const
+{
+ return m_isFastCfging;
+}
+
+
+
diff --git a/Linguist/mainUi/UiConfig.h b/Linguist/mainUi/UiConfig.h
new file mode 100644
index 0000000..45b5168
--- /dev/null
+++ b/Linguist/mainUi/UiConfig.h
@@ -0,0 +1,303 @@
+#ifndef UICONFIG_H
+#define UICONFIG_H
+
+#include "memory.h"
+#include
+
+
+//#define DEBUG_MODE
+
+#define QRCODE_SUPPORT
+
+#ifdef QRCODE_SUPPORT
+#define CUSTOM_QRCODE_AREA
+#endif
+
+
+typedef enum
+{
+ ScreenSize_7inch,
+ ScreenSize_8inch,
+ ScreenSize_5inch,
+ ScreenSize_8inch_rk,
+ ScreenSize_5inch_rk
+}ScreenSize_E;
+
+typedef enum
+{
+ FaceFrameSize_8inchJinggong_B020,
+ FaceFrameSize_8inchHaiman_A038,
+ FaceFrameSize_8inchJinggong_A038,
+
+ FaceFrameSize_Butt
+}FaceFrameSize_E;
+
+typedef enum
+{
+ FuncWifi,
+ FuncWg42,
+ FuncCardReaderUnderScreen,
+ FuncDataEncrypt
+}Func_E;
+
+class RecoUiTextCfg
+{
+public:
+ typedef enum
+ {
+ TextOtherRecoResult,
+ TextFacePass = 0,
+ TextAllowPass,
+ TextAuthFailed,
+ TextNoEntry,
+ TextNOMask,
+ TextMaskOk,
+ TextTemp,
+ TextTapCard,
+ TextUseOwnCertifi,
+ TextFaceCam,
+ TextNoEntryTime,
+
+ TextCfgMax
+ }enTextType;
+
+ typedef enum
+ {
+ DisModeDefault,
+ DisModeHide,
+ DisModeCustom,
+
+ DisModeHideKeyWord
+ }enDisMode;
+
+ typedef enum
+ {
+ FontSizeDefault,
+ FontSizeLarge,
+ FontSizeSmall,
+ FontSizeHuge
+ }enFontSize;
+
+ enDisMode m_mode = DisModeDefault;
+ QString m_cusText;
+ enFontSize m_fontSize = FontSizeDefault;
+ char m_padding[4];
+};
+
+
+class UiConfig
+{
+public:
+ static const long long UI_VERSION;
+
+ static const int SUPPORT_SCREEN_SIZE_QUANTITY = 5;
+ static const int SUPPORT_LANGUAGE_QUANTITY = 14; //简 繁 英 日 韩 西班牙 泰 葡萄牙 意大利 希伯来 法 德 土耳其 匈牙利
+
+ static const int GLOBAL_FONT_SIZE[SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString WELCOME[SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int DEV_NAME_FONT_SIZE[SUPPORT_SCREEN_SIZE_QUANTITY][SUPPORT_LANGUAGE_QUANTITY];
+ static const int MASK_FONT_SIZE[SUPPORT_SCREEN_SIZE_QUANTITY][SUPPORT_LANGUAGE_QUANTITY];
+ static const int PERSON_MSG_FONT_SIZE[SUPPORT_SCREEN_SIZE_QUANTITY][SUPPORT_LANGUAGE_QUANTITY];
+ static const QString LANGUAGE_FILE[SUPPORT_LANGUAGE_QUANTITY];
+
+ //大 86 294
+ //小133 324
+ static const int QRCODE_AREA_COORDINATE_X = 133;
+ static const int QRCODE_AREA_COORDINATE_Y = 324;
+ //static const int QRCODE_AREA_WIDTH = 0;
+ //static const int QRCODE_AREA_HEIGHT = 0;
+
+ RecoUiTextCfg m_textCfg[RecoUiTextCfg::TextCfgMax];
+
+
+ typedef enum
+ {
+ #ifndef DEBUG_MODE
+
+ //启动画面展示时间,单位:毫秒
+ START_SCREEN_TIMEOUT = 4000,
+
+ //设置界面密码多次输错等待时间,单位:分钟
+ PWD_ACCEPT_DELAY_TIME = 2,
+ //设置界面密码尝试次数,到达次数后需要等待一段时间
+ RETRY_TIMES_MAX_PER_GROUP = 6,
+ //设置界面密码输入无操作自动返回时间,单位:秒
+ NO_OPERATION_OVERTIME_RETURN = 30,
+
+ //识别界面鼠标点击进入设置界面次数
+ MOUSE_CLICK_TIMES_TO_SETTING = 10,
+
+ //长按时长进设置界面,需大于200ms,单位:毫秒
+ TOUCH_TIME_TO_SETTING = 1000, //3000
+
+ #define SPECIAL_PWD_1 "recon123"
+
+ #else
+
+ //启动画面展示时间,单位:毫秒
+ START_SCREEN_TIMEOUT = 1000,
+
+ //设置界面密码多次输错等待时间,单位:分钟
+ PWD_ACCEPT_DELAY_TIME = 1,
+ //设置界面密码尝试次数,到达次数后需要等待一段时间
+ RETRY_TIMES_MAX_PER_GROUP = 2,
+ //设置界面密码输入无操作自动返回时间,单位:秒
+ NO_OPERATION_OVERTIME_RETURN = 10,
+
+ //识别界面鼠标点击进入设置界面次数
+ MOUSE_CLICK_TIMES_TO_SETTING = 2,
+
+ //长按时长进设置界面,需大于200ms,单位:毫秒
+ TOUCH_TIME_TO_SETTING = 300,
+
+ #define SPECIAL_PWD_1 "x"
+
+ #endif
+
+ //主风格颜色
+ MAIN_STYLE_COLOR_RED = 255,
+ MAIN_STYLE_COLOR_GREEN = 255,
+ MAIN_STYLE_COLOR_BLUE = 255,
+ MAIN_STYLE_COLOR_TRAN = 255,
+
+ //主界面背景颜色
+ //主界面字体颜色
+
+ SUB_STYLE_COLOR_RED = 245,
+ SUB_STYLE_COLOR_GREEN = 243,
+ SUB_STYLE_COLOR_BLUE = 251,
+ SUB_STYLE_COLOR_TRAN = 255,
+
+ DIALOG_SCREEN_BG_COLOR = 0xFFFFFF, //0x929292,
+ DIALOG_SCREEN_BG_TRAN = 200,
+
+ //同一风格按键背景颜色
+ //同一风格按键字体颜色
+
+ //弹窗背景颜色
+ //弹窗字体颜色
+ //弹窗确认按键背景颜色
+ //弹窗确认按键字体颜色
+ //弹窗取消按键背景颜色
+ //弹窗取消按键字体颜色
+
+ //键盘背景颜色
+ //键盘按键颜色
+ //键盘字体颜色
+
+ //人脸库管理每页显示人数
+ LOCAL_FACE_QUANTITY_EACH_PAGE = 20,
+
+ //设置界面item条目高度
+ SETTING_PAGE_ITEM_HEIGHT = 41,
+ //设置界面到边框距离
+ SETTING_PAGE_WIDGET_TO_FRAME = 30,
+
+ //识别界面鼠标点击进入设置界面两次点击间最长间隔,单位:毫秒
+ MOUSE_CLICK_INTERVAL_MAX = 1000,
+ }UiConfig_E;
+
+ ~UiConfig();
+ static UiConfig* GetInstance();
+ void setUiConfig(const ScreenSize_E config);
+ void setUiFaceFrameSize(const FaceFrameSize_E config);
+
+ int getUiWidth() const;
+ int getUiHeight() const;
+ const QString& getWelcome() const;
+ #if 0
+ bool is7inch() const;
+ bool is8inch() const;
+ bool is5inch() const;
+ #endif
+ bool is8inchA038HaimanFaceFrame() const;
+ bool is8inchA038JinggongFaceFrame() const;
+
+ int getScreenConfigIndex() const;
+ int getGlobalFontSize() const;
+ int setLanguageType(const int);
+ int getLanguageType() const;
+
+ int getQRCodeAreaCoordinateX() const;
+ int getQRCodeAreaCoordinateY() const;
+ int getQRCodeAreaWidth() const;
+ int getQRCodeAreaHeight() const;
+
+ #ifdef CUSTOM_QRCODE_AREA //自定义扫描框
+ void setQRCodeAreaCoordinateX(const int);
+ void setQRCodeAreaCoordinateY(const int);
+ #endif
+
+ void setHardwareTesting(bool sw);
+ bool getHardwareTesting() const;
+
+ void showFaceFrameByTempExist(bool set);
+ bool isFaceFrameShowByTempExist() const;
+
+ void setTpAvailable(bool available);
+ bool isTpAvailable() const;
+
+ void setfuncNotSupport(Func_E func);
+ bool isFuncNotSupport(Func_E func) const;
+
+ void setRecoUiStyle(int style);
+ bool isRecoUiStyleClassical() const;
+ bool isRecoUiStyleStandard() const;
+ bool isRecoUiStyleColor() const;
+ bool isRecoUiStyleAd() const;
+ bool isRecoUiStyleScene() const;
+
+#if 0
+ void setRecoUiFontSizeScale(int sizeType);
+ float recoUiFontSizeScale() const;
+#endif
+
+ void setRecoUiFontSize(unsigned index, int size);
+ int recoUiFontSize(unsigned index) const;
+
+ bool isRkDevice() const;
+ int setRecoUITextCfg(RecoUiTextCfg::enTextType type, RecoUiTextCfg::enDisMode mode, const char* cusText, RecoUiTextCfg::enFontSize fontSize);
+ float recoUiTextCfgFontSize(RecoUiTextCfg::enTextType type);
+
+ void setDefaultScreensaver(int index);
+ int defaultScreensaver() const;
+
+ void setDevTestStatus(bool test);
+ bool isDevTesting() const;
+
+ void setFastCfgStatus(bool cfg);
+ bool isFastCfging() const;
+
+private:
+ static UiConfig* m_instance;
+
+ ScreenSize_E m_screenSize;
+ int m_screenWidth;
+ int m_screenHeight;
+ int m_languageType;
+
+ FaceFrameSize_E m_faceFrameSize = FaceFrameSize_8inchJinggong_B020;
+ bool m_bShowFaceFrame = false;
+ bool m_bTpAvailable = true;
+ unsigned long long m_ullfuncNotSupp = 0;
+
+ #ifdef CUSTOM_QRCODE_AREA //自定义扫描框
+ int m_QRCodeAreaX;
+ int m_QRCodeAreaY;
+ #endif
+
+ bool m_bIsHardwareTesting = false; //do not enter setting if testing touch screen
+ int m_recoUiFontSizeType = 0;
+ int m_recoUiTunningFontSize[RecoUiTextCfg::TextCfgMax];
+ int m_recoUiStyle = 0;
+
+ int m_defaultScreensaver = 0;
+
+ bool m_isDevTesting = false;
+ bool m_isFastCfging = false;
+
+ UiConfig();
+
+};
+
+#endif // UICONFIG_H
diff --git a/Linguist/mainUi/debug.h b/Linguist/mainUi/debug.h
new file mode 100644
index 0000000..31d0db2
--- /dev/null
+++ b/Linguist/mainUi/debug.h
@@ -0,0 +1,24 @@
+#ifndef DEBUG_H
+#define DEBUG_H
+
+
+
+
+//#define x86
+
+//#define DEBUG_MODE
+
+
+
+#ifdef x86
+
+#define GATE_FACE_PRJ
+
+#define LANGUAGE_TYPE 2 //繁体:1 英文:2
+#define LANGUAGE_DIR_PATH "Z:\\a038\\source\\GateFaceHisi\\View\\build-qt-a038-Desktop_Qt_5_12_3_MinGW_64_bit-Debug\\debug"
+
+#endif
+
+
+
+#endif // DEBUG_H
diff --git a/Linguist/mainUi/mainUi.cpp b/Linguist/mainUi/mainUi.cpp
new file mode 100644
index 0000000..0dd5c58
--- /dev/null
+++ b/Linguist/mainUi/mainUi.cpp
@@ -0,0 +1,826 @@
+#include "mainUi.h"
+#include
+#include
+#include
+#include
+#include "UiTools.h"
+#include "UiConfig.h"
+#include
+
+
+SplashScreenWithMsg::SplashScreenWithMsg(const int languageType)
+{
+ m_label_msg = new QLabel(this);
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::WindowText,QColor(0x0e, 0xbc, 0xf8, 0xFF));
+
+ QFont ft;
+ //need to adjust font size
+ m_label_msg->setText(tr("人脸识别终端"));
+ int fontSize = 10;
+ if(UiConfig::SUPPORT_LANGUAGE_QUANTITY > languageType)
+ {
+ fontSize = UiConfig::DEV_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][languageType];
+ }
+ ft.setPointSize(fontSize);
+ m_label_msg->setFont(ft);
+ m_label_msg->setPalette(palette);
+ m_label_msg->setAlignment(Qt::AlignCenter);
+ m_label_msg->setFixedWidth(UiConfig::GetInstance()->getUiWidth());
+ m_label_msg->move(0, UiConfig::GetInstance()->getUiHeight() / 4);
+
+ setPixmap(QPixmap(UiConfig::GetInstance()->getWelcome()));
+ show();
+}
+
+SplashScreenWithMsg::~SplashScreenWithMsg()
+{
+
+}
+
+mainUi::mainUi(const int languageType, bool needSetupWizard)
+ : m_reTryTimes(0), pwdAcceptDelay(false), m_isPasswordDialogShowed(false), m_settingUi(nullptr)
+{
+ qDebug() << "mainUi()";
+
+#if 0
+ setCursor(QCursor(Qt::BlankCursor));
+#endif
+
+ UiConfig::GetInstance()->setLanguageType(languageType);
+ setFixedSize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
+
+ //this->setWindowOpacity(1);
+ //this->setAttribute(Qt::WA_TranslucentBackground);
+ QPalette pal = palette();
+ pal.setColor(QPalette::Background, Qt::transparent);
+ setPalette(pal);
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::WindowText,Qt::black);
+
+ m_stackWidget_mainUi = new QStackedWidget(this);
+ //m_splash_startPage = new SplashScreenWithMsg(languageType);
+ m_splash_startPage = nullptr;
+
+ //计算启动时间
+ m_time_startupCost = new QTime();
+ m_time_startupCost->start();
+
+ if(needSetupWizard){
+ m_setupUi = new SetupUi(this);
+ connect(m_setupUi, SIGNAL(signalSetupDone()), this, SLOT(slotSetupDone()));
+ m_stackWidget_mainUi->addWidget(m_setupUi);
+ }
+
+ m_recoUi = new recoUi(this);
+ m_stackWidget_mainUi->addWidget(m_recoUi);
+
+ connect(m_recoUi, SIGNAL(signalShowSettingPage()), this, SLOT(slotShowSettingPage()));
+ connect(this, SIGNAL(signalShowRecoUiPage(int)), m_recoUi, SLOT(slotShowRecoUiPage(int)));
+ connect(this, SIGNAL(signalNoSuccessPage(int)), m_recoUi, SLOT(slotNoSuccessPage(int)));
+ connect(this, SIGNAL(signalSuccessPage(const int, const QString&)), \
+ m_recoUi, SIGNAL(signalSuccessPage(const int, const QString&)));
+ connect(this, SIGNAL(signalUpdatePlatformConnectionStatus(const int)), m_recoUi, SLOT(slotUpdatePlatformConnectionStatus(const int)));
+
+ connect(this, SIGNAL(signalShowUserCandidate(const QString&, const QStringList&)), this,
+ SLOT(slotShowUserCandidate(const QString&, const QStringList&)));
+ connect(this, SIGNAL(signalRecoUiswitchToType(int)), m_recoUi, SLOT(slotRecoUiswitchToType(int)));
+ connect(this, SIGNAL(signalCreateAndShowDevTestPage(const QString&)), this, SLOT(slotCreateAndShowDevTestPage(const QString&)));
+ connect(this, SIGNAL(signalDelayResetRecoUi()), this, SLOT(slotDelayResetRecoUi()));
+ connect(this, SIGNAL(signalShowAntiDismantleDetect(bool)), this, SLOT(slotShowAntiDismantleDetect(bool)));
+ connect(this, SIGNAL(signalShowCallDialPage()), m_recoUi, SLOT(slotShowCallDialPage()));
+ connect(this, SIGNAL(signalSetCallConsoleStatus(int, const QString&)), m_recoUi, SLOT(slotSetCallConsoleStatus(int, const QString&)));
+ connect(this, SIGNAL(signalShowUserItemChoose(const QStringList&)), this, SLOT(slotShowUserItemChoose(const QStringList&)));
+#if 0
+ m_settingUi = new settingUi(this); //nullptr; //
+ m_stackWidget_mainUi->addWidget(m_settingUi);
+ connect(m_settingUi, SIGNAL(signalShowRecoPage()), this, SLOT(slotShowRecoPage()));
+ connect(m_settingUi, SIGNAL(signalChangeRecoUiMode()), m_recoUi, SIGNAL(signalChangeRecoUiMode()));
+ connect(m_settingUi, SIGNAL(signalUpdateRecoUiIpDisplay(bool)), m_recoUi, SIGNAL(signalUpdateRecoUiIpDisplay(bool)));
+#endif
+
+ QVBoxLayout* vbLayout = new QVBoxLayout();
+ vbLayout->addWidget(m_stackWidget_mainUi);
+ vbLayout->setMargin(0);
+ setLayout(vbLayout);
+
+ m_timer = new QTimer(this);
+ connect( m_timer, SIGNAL(timeout()), this, SLOT(slotPwdAcceptDelayUpdate()) );
+
+ //int startPageShowTime = (START_SCREEN_TIMEOUT - m_time_startupCost->elapsed() > 0 ? START_SCREEN_TIMEOUT - m_time_startupCost->elapsed() : 1);
+ //QTimer::singleShot(startPageShowTime, this, SLOT(slotCloseStartPage()) );
+ slotCloseStartPage();
+}
+
+mainUi::~mainUi()
+{
+ qDebug() << "~mainUi()";
+ if(nullptr != m_splash_startPage)
+ {
+ delete m_splash_startPage;
+ m_splash_startPage = nullptr;
+ }
+}
+
+void mainUi::createSettingUi()
+{
+ if(m_settingUi){
+ return;
+ }
+ qDebug() << "create setting Ui";
+ m_settingUi = new settingUi(this);
+ m_stackWidget_mainUi->addWidget(m_settingUi);
+ connect(m_settingUi, SIGNAL(signalShowRecoPage()), this, SLOT(slotShowRecoPage()));
+ connect(m_settingUi, SIGNAL(signalChangeRecoUiMode()), m_recoUi, SIGNAL(signalChangeRecoUiMode()));
+ connect(m_settingUi, SIGNAL(signalUpdateRecoUiIpDisplay(bool)), m_recoUi, SIGNAL(signalUpdateRecoUiIpDisplay(bool)));
+ connect(this, SIGNAL(signalShowDevTestPage()), m_settingUi, SLOT(slotShowDevTestPage()));
+ qDebug() << "setting ui setBackstageUiinterface before ...";
+ m_settingUi->setBackstageUiinterface(m_backstageIf);
+ qDebug() << "setting ui setBackstageUiinterface after ...";
+}
+
+void mainUi::setBackstageUiinterface(BackstageInterfaceForUi* interface)
+{
+ m_backstageIf = interface;
+ if(m_setupUi){
+ m_setupUi->setBackstageUiinterface(interface);
+ }
+ m_recoUi->setBackstageUiinterface(interface);
+
+#if 0
+ m_settingUi->setBackstageUiinterface(interface);
+#endif
+
+ updateAllOption();
+}
+
+void mainUi::slotCloseStartPage()
+{
+ if(m_splash_startPage)
+ {
+ m_splash_startPage->finish(this);
+ delete m_splash_startPage;
+ m_splash_startPage = nullptr;
+ }
+
+ if(m_time_startupCost)
+ {
+ delete m_time_startupCost;
+ m_time_startupCost = nullptr;
+ }
+
+ show();
+ QTimer::singleShot(100, this, SLOT(slotShowRecoPage()));
+}
+
+void mainUi::slotShowRecoPage()
+{
+ m_stackWidget_mainUi->setCurrentIndex(MAIN_UI_PAGE_RECOGNIZE);
+
+ m_recoUi->updateVideoWind();
+
+ if(!m_setupUi){
+ qDebug() << "m_backstageIf->startIdentyState()";
+ m_backstageIf->startIdentyState();
+ }
+ keyboard::preLoad();
+}
+
+int mainUi::settingPageAuthentication(const QString& dialogTitle, const QString& okBtn, const QString& cancelBtn, bool overtimeClose)
+{
+ if(pwdAcceptDelay){
+ InfoDialog(tr("由于之前多次密码验证错误,请稍后再重试!"), m_settingUi, tr("知道了"), 30000).exec();
+ return -1;
+ }
+
+ if(m_isPasswordDialogShowed){
+ qDebug() << "isPasswordDialogShowed";
+ return -1;
+ }
+ m_isPasswordDialogShowed = true;
+
+ m_backstageIf->stopIdentyState();
+
+ QString userInput;
+ QString devId(tr("设备编码:"));
+ char buf[64] = {'\0'};
+ if(0 == m_backstageIf->getDeviceId(buf, sizeof(buf))){
+ devId += buf;
+ }
+
+ do{
+ PasswordDialog pwd_check(dialogTitle, tr("admin"), overtimeClose ? UiConfig::NO_OPERATION_OVERTIME_RETURN * 1000 : 0,
+ m_settingUi, userInput, devId, okBtn, cancelBtn);
+ //connect(&pwd_check, SIGNAL(signalRestoreFactory()), m_settingUi, SLOT(slotRestoreFactory()));
+ int ret = pwd_check.exec();
+ if(QDialog::Rejected == ret){
+ slotShowRecoPage();
+ m_isPasswordDialogShowed = false;
+ return -1;
+ }
+
+ userInput = pwd_check.getPwd();
+#if 0
+ if(0 == userInput.compare(SPECIAL_PWD_1))
+ {
+ emit signalShowLogoChooseDialogBySpecialPwd();
+ emit signalResetRecoUi();
+ reOpen = false;
+ }
+ else{
+#endif
+ if(0 == m_backstageIf->verifyFactorySettingPwd(userInput.toStdString().c_str())){
+ emit signalResetRecoUi();
+ m_isPasswordDialogShowed = false;
+ return 0;
+ }else {
+ InfoDialog(tr("密码错误,请重试"), m_settingUi).exec();
+ if(overtimeClose && ++m_reTryTimes >= RETRY_TIMES_MAX_PER_GROUP){
+ m_reTryTimes = 0;
+ pwdAcceptDelay = true;
+ m_timer->start(PWD_ACCEPT_DELAY_TIME);
+ slotShowRecoPage();
+ m_isPasswordDialogShowed = false;
+ return -1;
+ }
+ }
+
+ }while(true);
+ return -1;
+}
+
+void mainUi::slotShowSettingPage()
+{
+ if(m_backstageIf->isDevSettingDisable()){
+ #if 0
+ m_backstageIf->stopIdentyState();
+ InfoDialog(tr("设备设置页面已被禁用!"), m_settingUi, tr("知道了"), 30000).exec();
+ m_backstageIf->startIdentyState();
+ #endif
+ return;
+ }
+
+ if(0 == settingPageAuthentication(tr("请输入密码"), tr("确定"), tr("取消"), true)){
+ //m_settingUi->reset();
+ m_stackWidget_mainUi->setCurrentIndex(MAIN_UI_PAGE_SETTING);
+ }
+}
+
+void mainUi::slotPwdAcceptDelayUpdate()
+{
+ pwdAcceptDelay = false;
+}
+
+void mainUi::slotUpdateIp()
+{
+ if(m_settingUi){
+ m_settingUi->update_IpBar();
+ }
+
+ if(m_recoUi){
+ m_recoUi->update_IpBar();
+ }
+}
+
+//设置接口后刷新页面
+void mainUi::updateAllOption()
+{
+
+}
+
+
+//ui接口
+long long mainUi::getUiVersion()
+{
+ return UiConfig::UI_VERSION;
+}
+
+//switch from standby to reco
+void mainUi::showRecoMsgReco()
+{
+ //qDebug()<<"void mainUi::showRecoMsgReco()";
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_IN);
+}
+
+void mainUi::showRecoMsgRetry()
+{
+ //qDebug()<<"void mainUi::showRecoMsgRetry()";
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_CHECK);
+}
+
+void mainUi::showRecoMsgFail(int failType)
+{
+ //qDebug()<<"void mainUi::showRecoMsgFail()" << failType;
+ GLOBAL_RECO_STATE state = (GLOBAL_RECO_STATE)(GLOBAL_RECO_END_NO + failType);
+ if(state >= GLOBAL_RECO_END_NO && failType <= GLOBAL_RECO_SHOW_QRCODE)
+ {
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(state);
+ }
+}
+
+void mainUi::notifyFaceInfo(const bool faceAvailable)
+{
+ //qDebug()<<"void mainUi::notifyFaceInfo():" << faceAvailable;
+ if(!faceAvailable){ //不绘制扫描线,只处理人脸离开复位情况
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalDrawScanner(GLOBAL_RECO_IN_SCANNER, faceAvailable);
+ }
+}
+
+void mainUi::showRecoSuccess(const char* name)
+{
+ //qDebug()<<"void mainUi::showRecoSuccess()";
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ if (name){
+ emit signalSuccessPage(GLOBAL_RECO_END_OK, QString(name));
+ }
+}
+
+void mainUi::showRecoMsgIDFail()
+{
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_ID_FAILED);
+}
+
+void mainUi::showUnauthorizedPage()
+{
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_BEGIN_AUTH);
+}
+
+void mainUi::showScreenSaverPage()
+{
+ emit signalShowRecoUiPage(RECO_UI_PAGE_SCREENSAVER);
+}
+
+int mainUi::showFaceImg(const unsigned char *imgData, const int imgLen)
+{
+ //qDebug()<<"void mainUi::showFaceImg()";
+ if(imgData == nullptr)
+ return -1;
+ emit signalShowAddFaceImg(imgData, imgLen);
+ return 0;
+}
+
+void mainUi::updatePlatformConnectionStatus(const PLATFORM_CONNECTION_STATUS_E status)
+{
+ emit signalUpdatePlatformConnectionStatus(static_cast(status));
+}
+
+void mainUi::showRecoMsgMoveForehead()
+{
+ //qDebug() << "showRecoMsgMoveForehead()";
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_TEMP_REQ);
+}
+
+void mainUi::showRecoMsgForeheadNormalTemp(const float temp, const bool isC) //显示正常温度
+{
+ //qDebug() << "showRecoMsg Normal Temp";
+ emit signalShowForeheadNormalTemp(temp, isC);
+}
+
+void mainUi::showRecoMsgForeheadAbnormalTemp(const float temp, const bool isHigh, const bool isC) //显示异常温度
+{
+ //qDebug() << "showRecoMsg Abnormal Temp:" << isHigh;
+ emit signalShowForeheadAbnormalTemp(temp, isHigh, isC);
+}
+
+void mainUi::showRecoMsgReadTempFailed() //体温检测失败
+{
+ //qDebug() << "showRecoMsgRead Temp Failed";
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_READ_TEMP_FAILED);
+}
+
+void mainUi::showRecoMsgNoMaskWarn() //请戴口罩
+{
+ //qDebug() << "showRecoMsgNoMaskWarn";
+ //emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_MASK_REQ);
+}
+
+void mainUi::showRecoMsgMaskOk()
+{
+ //qDebug() << "showRecoMsgMaskOk";
+ //emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_MASK_OK);
+}
+
+void mainUi::showRecoMsgMaskWarn()
+{
+ emit signalNoSuccessPage(GLOBAL_RECO_TAKE_OFF_MASK);
+}
+
+void mainUi::showRecoMsgNoEntry(const bool noEntry)
+{
+ //qDebug() << "showRecoMsgNoEntry";
+ //emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ if(noEntry)
+ emit signalNoSuccessPage(GLOBAL_RECO_NO_ENTRY);
+ else {
+ emit signalNoSuccessPage(GLOBAL_RECO_CLEAR_NO_ENTRY);
+ }
+ //测试QRcode
+ /*
+ static int i = 0;
+ emit signalShowQRCodeMsg(i);
+ i++;
+ if(i > 5) i = 0;
+ */
+}
+
+void mainUi::turnOffScanLine()
+{
+ //qDebug() << "turnOffScanLine";
+ //emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_CLOSE_SCANLINE);
+}
+
+void mainUi::clearLocalFacePage()
+{
+ emit signalClearLocalFacePage();
+}
+
+void mainUi::updateLogo(const enLogo option)
+{
+ emit signalUpdateLogo(static_cast(option));//切换ui时logo没有显示,没有信号更新---------------------------------------------------------------------------------------------------------------
+}
+
+void mainUi::showQRCodeMsg(const QRCode_Msg_E msg)
+{
+ emit signalShowQRCodeMsg(static_cast(msg));
+}
+
+void mainUi::showQRCodeReco()
+{
+ //qDebug() << "showQRCodeReco";
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_SHOW_QRCODE_RECO);
+}
+
+void mainUi::showFaceReco()
+{
+ //qDebug() << "showFaceReco";
+ emit signalShowRecoUiPage(RECO_UI_PAGE_RECOGNIZE);
+ emit signalNoSuccessPage(GLOBAL_RECO_SHOW_FACE_RECO);
+}
+
+void mainUi::updateRecoUiIp()
+{
+ m_recoUi->update_IpBar();
+}
+
+void mainUi::showFeatureUpdateProgress(const unsigned current, const unsigned all)
+{
+ emit signalShowFeatureUpdateProgress(current, all);
+}
+
+void mainUi::closeFeatureUpdateProgress()
+{
+ emit signalCloseFeatureUpdateProgress();
+}
+
+void mainUi::showRecoUiMask(int maskType)
+{
+ int type = 0;
+ if(0 == maskType){ //normal
+ //if(UiConfig::GetInstance()->isFaceFrameShowByTempExist()){
+ type = 1; // bg
+ //}
+ }else if(1 == maskType){ //TempCalibra
+ type = 2; //TempCalibra
+ }else if(2 == maskType){ //day mode
+ //if(UiConfig::GetInstance()->isFaceFrameShowByTempExist()){
+ type = 1; //bg
+ //}
+ }else if(3 == maskType){ //night mode
+ type = 3; //night mode
+ }
+ emit signalShowRecoUiMask(type);
+}
+
+void mainUi::showNotiMsg(const char *msg, int color)
+{
+ //qDebug()<<"void mainUi::showRecoSuccess()";
+ if (msg)
+ {
+ emit signalNotiMsg(GLOBAL_RECO_SHOW_NOTI_MSG, QString(msg), color);
+ }
+}
+
+void mainUi::updateScreenSaver()
+{
+ m_stackWidget_mainUi->setCurrentIndex(MAIN_UI_PAGE_RECOGNIZE);
+ QCoreApplication::processEvents();
+ emit signalUpdateScreenSaver();
+}
+
+int mainUi::grabScreen(const QString& picName, int rotate)
+{
+ if(UiConfig::GetInstance()->isRkDevice()){
+ QMatrix matrix;
+ matrix.rotate(rotate);
+ QPixmap pixmap = grab(QRect(0, 0, UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight()));
+ pixmap.transformed(matrix, Qt::SmoothTransformation).save(picName, "jpg");
+ }
+ else{
+ GrabFullScreen(picName, rotate); //A038选择角度问题
+ }
+ return 0;
+}
+
+int mainUi::switchToRecoUi()
+{
+ emit signalShowRecoUiPage(RECO_UI_PAGE_WORK_MODE);
+ return 0;
+}
+
+int mainUi::showCenterMsg(const char* msg, int type)
+{
+ if(msg){
+ emit signalCenterMsg(GLOBAL_RECO_SHOW_CENTER_MSG + type, QString(msg));
+ }
+
+ if(strlen(msg)){
+ emit signalDelayResetRecoUi();
+
+}
+ QCoreApplication::processEvents();
+ return 0;
+}
+
+void mainUi::showDrawPage()
+{
+ emit signalShowRecoUiPage(RECO_UI_PAGE_DRAW);
+}
+
+
+void mainUi::showCursorSwitch(bool sw)
+{
+ QApplication::setOverrideCursor(sw ? Qt::ArrowCursor : Qt::BlankCursor);
+}
+
+int mainUi::showUserPwd(const char* name)
+{
+ emit signalShowUserPwd(QString(name));
+ return 0;
+}
+
+void mainUi::setPwdButton(bool visible)
+{
+ emit signalSetUserPwdButton(visible);
+}
+
+void mainUi::showPwdUiPersonName(const char* name)
+{
+ emit signalShowPwdUiPersonName(name);
+}
+
+void mainUi::showUserPwdError(int type, int color)
+{
+ emit signalShowUserPwdError(type, color);
+}
+
+void mainUi::showUserCandidate(const char* title, const char** opns, int opnsNum)
+{
+ if(nullptr == title || nullptr == opns || opnsNum <= 0){
+ return;
+ }
+ QStringList options;
+ for(int i=0; ipauseDataFlow();
+
+ StyleItemChooseDialog dlg(title, opns, m_backstageIf);
+ int ret = dlg.exec();
+ if(QDialog::Accepted == ret){
+ m_backstageIf->resetDecisionCenterTimer();
+ const int userChoose = dlg.getChoosedIndex();
+ //qDebug() << "user choose:" << userChoose;
+ m_backstageIf->candidateChoosedInPopupWindow(userChoose);
+ }
+ else if(QDialog::Rejected == ret){
+ m_backstageIf->candidateChoosedInPopupWindow(-1);
+ }
+
+ //m_backstageIf->resumeDataFlow();
+}
+
+void mainUi::slotShowSettingUi()
+{
+ m_stackWidget_mainUi->setCurrentIndex(MAIN_UI_PAGE_SETTING);
+}
+
+void mainUi::slotSetupDone()
+{
+ m_stackWidget_mainUi->removeWidget(m_setupUi);
+ delete m_setupUi;
+ m_setupUi = nullptr;
+ m_backstageIf->startIdentyState();
+}
+
+void mainUi::slotScreenTouch()
+{
+ createSettingUi();
+}
+
+void mainUi::slotCreateAndShowDevTestPage(const QString& devCfgMsg)
+{
+ MsgDialog msgdlg(tr("正在加载测试页面,请稍候..."));
+ msgdlg.show();
+ QCoreApplication::processEvents();
+ createSettingUi();
+ emit signalShowDevTestPage();
+ emit signalDevTestConfigInfo(devCfgMsg);
+}
+
+
+void mainUi::slotDelayResetRecoUi()
+{
+ QTimer::singleShot(200, this, [this]{notifyFaceInfo(false);});
+}
+
+void mainUi::slotShowAntiDismantleDetect(bool upload)
+{
+ qDebug() << "slotShowAntiDismantleDetect";
+ m_backstageIf->setAntiDemolitionAvail(true, upload);
+ if(0 == settingPageAuthentication(tr("检测到强拆设备"), tr("解除锁定"), "", false)){
+ m_backstageIf->startIdentyState();
+ m_backstageIf->setAntiDemolitionAvail(false, false);
+ }
+}
+
+void mainUi::recoUiswitchToType(int type)
+{
+ emit signalRecoUiswitchToType(type);
+}
+
+void mainUi::qrcodeFastCfgResult(bool isSuccessed)
+{
+ emit signalQrcodeFastCfgResult(isSuccessed);
+}
+
+void mainUi::icCardResult(const char *icCardNum)
+{
+ emit signalIcCardResult(QString(icCardNum));
+}
+
+bool mainUi::isInSettingUi()
+{
+ return (m_stackWidget_mainUi->currentIndex() == MAIN_UI_PAGE_SETTING);
+}
+
+void mainUi::updateAdScreen()
+{
+ emit signalUpdateAdWidget();
+}
+
+void mainUi::showHealthMsg(int type, float temp, const char * msg, bool pass,
+ const unsigned char* jpgDate, int jpgLen, const char* tripCity, const char* failReason, int bgColor, int displayTime)
+{
+ emit signalShowHealthMsg(type, temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor, displayTime);
+ if(type > 0){
+ emit signalDelayResetRecoUi();
+ }
+ QCoreApplication::processEvents();
+}
+
+void mainUi::showHealthCodeAuthStatus(int status)
+{
+ emit signalShowHealthCodeAuthStatus(status);
+}
+
+void mainUi::showAntiDismantleDetect(bool upload)
+{
+ if(m_backstageIf->getAntiDemolitionSw()){
+ emit signalShowAntiDismantleDetect(upload);
+ }
+}
+
+void mainUi::showSceneResult(int result, const char* resultText, const char* businessInfo, int displayTime)
+{
+ if(!UiConfig::GetInstance()->isRecoUiStyleScene()){
+ return;
+ }
+ emit signalShowSceneResult(result, resultText, businessInfo, displayTime);
+ QCoreApplication::processEvents();
+}
+
+void mainUi::updatePersonNumAccessed(int personAccess, int personAll)
+{
+ emit signalUpdatePersonNumAccessed(personAccess, personAll);
+}
+
+bool mainUi::isScenePassing()
+{
+ return m_recoUi->isScenePassing();
+}
+
+void mainUi::setSceneUiPersonCountType(int type)
+{
+ emit signalSetSceneUiPersonCountType(type);
+}
+
+void mainUi::updateSceneUiPersonCount(int count)
+{
+ emit signalUpdateSceneUiPersonCount(count);
+}
+
+void mainUi::showCallDialPage()
+{
+ emit signalShowCallDialPage();
+}
+
+void mainUi::setCallConsoleStatus(int status, const char* tip)
+{
+ emit signalSetCallConsoleStatus(status, tip);
+}
+
+void mainUi::setDndMode(bool enabled, const std::chrono::system_clock::time_point &time) {
+ m_recoUi->setDndMode(enabled,time);
+}
+
+void mainUi::showRecoUiDevIdAndVer(bool show)
+{
+ emit signalShowRecoUiDevIdAndVer(show);
+}
+
+void mainUi::showUserItemChoose(const std::vector& items)
+{
+ QStringList options;
+ for(const auto& i : items){
+ options << QString(i.c_str());
+ }
+ emit signalShowUserItemChoose(options);
+}
+
+void mainUi::slotShowUserItemChoose(const QStringList& opns)
+{
+ m_backstageIf->stopIdentyState();
+
+ StyleItemChooseDialog dlg("请选择", opns, m_backstageIf);
+ int ret = dlg.exec();
+ if(QDialog::Accepted == ret){
+ m_backstageIf->resetDecisionCenterTimer();
+ const int userChoose = dlg.getChoosedIndex();
+ //qDebug() << "user choose:" << userChoose;
+ m_backstageIf->startIdentyState();
+ m_backstageIf->userItemChoose(userChoose);
+ }else if(QDialog::Rejected == ret){
+ m_backstageIf->startIdentyState();
+ m_backstageIf->userItemChoose(-1);
+ }
+}
+
+
diff --git a/Linguist/mainUi/mainUi.h b/Linguist/mainUi/mainUi.h
new file mode 100644
index 0000000..b19da0e
--- /dev/null
+++ b/Linguist/mainUi/mainUi.h
@@ -0,0 +1,255 @@
+#ifndef MAINUI_H
+#define MAINUI_H
+
+#include
+#include
+#include
+#include
+#include
+
+#include "UiInterfaceForBackstage.h"
+#include "settingUi.h"
+#include "recoUi.h"
+#include "BackstageInterfaceForUi.h"
+#include "UiCommon.h"
+#include "UiConfig.h"
+#include "SetupUi.h"
+
+
+
+class SplashScreenWithMsg : public QSplashScreen
+{
+ Q_OBJECT //多语言
+
+public:
+ explicit SplashScreenWithMsg(const int languageType);
+ ~SplashScreenWithMsg();
+
+private:
+ QLabel* m_label_msg;
+
+};
+
+class mainUi : public UiInterfaceForBackstage
+{
+ Q_OBJECT
+public:
+ static const int START_SCREEN_TIMEOUT = UiConfig::START_SCREEN_TIMEOUT;
+ static const int PWD_ACCEPT_DELAY_TIME = UiConfig::PWD_ACCEPT_DELAY_TIME * 60 * 1000; //min to ms
+ static const int RETRY_TIMES_MAX_PER_GROUP = UiConfig::RETRY_TIMES_MAX_PER_GROUP;
+
+ explicit mainUi(const int languageType, bool needSetupWizard);
+ ~mainUi();
+
+ void createSettingUi();
+ virtual void setBackstageUiinterface(BackstageInterfaceForUi* interface);
+
+ //UI提供给后台的接口
+ virtual long long getUiVersion();
+ virtual void showUnauthorizedPage();
+ virtual void showScreenSaverPage();
+
+ virtual void showRecoMsgReco();
+ virtual void showRecoMsgRetry();
+ virtual void showRecoMsgFail(int failType);
+ virtual void notifyFaceInfo(const bool faceAvailable);
+ virtual void showRecoSuccess(const char* name);
+ virtual void showRecoMsgIDFail();
+
+ virtual int showFaceImg(const unsigned char *imgData, const int imgLen);
+ virtual void updatePlatformConnectionStatus(const PLATFORM_CONNECTION_STATUS_E);
+
+ virtual void showRecoMsgMoveForehead(); //移动到额头区
+ virtual void showRecoMsgForeheadNormalTemp(const float temp, const bool isC); //显示正常温度
+ virtual void showRecoMsgForeheadAbnormalTemp(const float temp, const bool isHigh, const bool isC); //显示异常温度
+
+ virtual void showRecoMsgReadTempFailed(); //体温检测失败
+ virtual void showRecoMsgNoMaskWarn(); //请戴口罩
+ virtual void showRecoMsgMaskOk(); //口罩检测通过
+ virtual void showRecoMsgMaskWarn();
+
+ virtual void showRecoMsgNoEntry(const bool); //显示禁止通行
+
+ virtual void turnOffScanLine();
+ virtual void clearLocalFacePage();
+ virtual void updateLogo(const enLogo);
+ virtual void showQRCodeMsg(const QRCode_Msg_E);
+ virtual void showQRCodeReco();
+ virtual void showFaceReco();
+ virtual void updateRecoUiIp();
+
+ virtual void showFeatureUpdateProgress(const unsigned current, const unsigned all);
+ virtual void closeFeatureUpdateProgress();
+
+ virtual void showRecoUiMask(int maskType);
+ virtual void showNotiMsg(const char *msg, int color);
+
+ virtual void updateScreenSaver();
+ virtual int grabScreen(const QString& picName, int rotate = 0);
+ virtual int switchToRecoUi();
+
+ virtual int showCenterMsg(const char* msg, int type);
+ virtual int showUserPwd(const char* name);
+
+ void showDrawPage();
+
+ void showCursorSwitch(bool sw);
+ void setPwdButton(bool visible);
+ void showPwdUiPersonName(const char* name);
+ void showUserPwdError(int type, int color);
+ void showUserCandidate(const char* title, const char** opns, int opnsNum);
+ void showDevTestPage(const char* devCfgMsg);
+ void setDevTestMesAddrAndProdNoText(const char* text);
+ void setDevTestPcbSeqText(const char* text);
+ void setDevTestConfigInfo(const char* text);
+
+ void showOrHideFaceFrame(bool show);
+ void showPassResult(bool pass);
+
+ void showRecoUiColorFaceSnapshot(const char* path);
+ void showRecoUiColorFaceSnapshot(const unsigned char* jpgDate, int len);
+ void recoUiswitchToType(int type);
+ void qrcodeFastCfgResult(bool isSuccessed);
+
+ void icCardResult(const char* icCardNum);
+ bool isInSettingUi();
+ void updateAdScreen();
+ void showHealthMsg(int type, float temp, const char * msg, bool pass, const unsigned char* jpgDate,
+ int jpgLen, const char* tripCity, const char* failReason, int bgColor, int displayTime);
+ void showHealthCodeAuthStatus(int status);
+ void showAntiDismantleDetect(bool upload);
+ void showSceneResult(int result, const char* resultText, const char* businessInfo, int displayTime);
+ void updatePersonNumAccessed(int personAccess, int personAll);
+ bool isScenePassing();
+ void setSceneUiPersonCountType(int type);
+ void updateSceneUiPersonCount(int count);
+ void showCallDialPage();
+ void setCallConsoleStatus(int status, const char* tip);
+ void setDndMode(bool enabled, const std::chrono::system_clock::time_point &time) final;
+ void showRecoUiDevIdAndVer(bool show);
+ void showUserItemChoose(const std::vector& items);
+
+signals:
+ void signalShowRecoUiPage(const int);
+ void signalShowRecoState(const int);
+ void signalNoSuccessPage(const int);
+ void signalSuccessPage(const int nPage, const QString& name);
+ void signalDrawScanner(const int nPage, const bool faceAvailable);
+ void signalShowAddFaceImg(const unsigned char* imgData, int len);
+ void signalUpdatePlatformConnectionStatus(const int);
+
+ void signalInteraction(const INTERACION_OPTION& interaction, int nSelectRes); //后面去掉
+
+ void signalShowForeheadNormalTemp(const float temp, const bool isC);
+ void signalShowForeheadAbnormalTemp(const float temp, const bool isHigh, const bool isC);
+
+ void signalClearLocalFacePage();
+
+ void signalShowLogoChooseDialogBySpecialPwd();
+ void signalUpdateLogo(const int);
+ void signalShowQRCodeMsg(const int);
+
+ void signalResetRecoUi(); //在识别界面进入设置界面时复位识别界面,否则可能导致扫描线定时器一直在被调用
+
+ void signalShowFeatureUpdateProgress(const unsigned current, const unsigned all);
+ void signalCloseFeatureUpdateProgress();
+
+ void signalShowRecoUiMask(int maskType);
+
+ void signalNotiMsg(const int nPage, const QString& msg, int color);
+
+ void signalUpdateScreenSaver();
+
+ void signalCenterMsg(const int nPage, const QString& msg);
+
+ void signalShowUserPwd(const QString& name);
+ void signalShowUserPwdButton();
+ void signalSetUserPwdButton(bool visible);
+ void signalShowPwdUiPersonName(const QString& name);
+ void signalShowUserPwdError(int type, int color);
+
+ void signalShowUserCandidate(const QString& title, const QStringList& opns);
+
+ void signalCreateAndShowDevTestPage(const QString& devCfgMsg);
+ void signalDevTestMesAddrAndProdNoText(const QString& text);
+ void signalDevTestPcbSeqText(const QString& text);
+ void signalDevTestConfigInfo(const QString& text);
+
+ void signalShowOrHideFaceFrame(bool show);
+ void signalShowFinalResult(bool pass);
+ void signalShowDevTestPage();
+
+ void signalShowRecoUiColorFaceSnapshot(const QString& path);
+ void signalShowRecoUiColorFaceSnapshot(const unsigned char* jpgDate, int len);
+ void signalRecoUiswitchToType(int type);
+ void signalQrcodeFastCfgResult(bool isSuccessed);
+
+ void signalIcCardResult(const QString& icCard);
+ void signalUpdateAdWidget();
+
+ void signalShowHealthMsg(int type, float temp, const QString& msg, bool pass, const unsigned char* jpgDate,
+ int jpgLen, const QString& tripCity, const QString& failReason, int bgColor, int displayTime);
+ void signalShowHealthCodeAuthStatus(int status);
+ void signalDelayResetRecoUi();
+ void signalShowAntiDismantleDetect(bool);
+ void signalShowSceneResult(int result, const QString& resultText, const QString& businessInfo, int displayTime);
+ void signalUpdatePersonNumAccessed(int personAccess, int personAll);
+ void signalSetSceneUiPersonCountType(int type);
+ void signalUpdateSceneUiPersonCount(int count);
+ void signalShowCallDialPage();
+ void signalSetCallConsoleStatus(int status, const QString& text);
+ void signalShowCallBtn(bool callButton, bool videoButton);
+ void signalShowRecoUiDevIdAndVer(bool);
+ void signalShowUserItemChoose(const QStringList& opns);
+
+public slots:
+ void slotCloseStartPage();
+ void slotShowRecoPage();
+ void slotShowSettingPage();
+ void slotPwdAcceptDelayUpdate();
+
+ void slotUpdateIp(); //刷新识别界面的IP,设置界面没有IP显示了,后面去掉
+
+ void slotShowUserCandidate(const QString& title, const QStringList& opns);
+ void slotShowSettingUi();
+ void slotSetupDone();
+ void slotScreenTouch();
+ void slotCreateAndShowDevTestPage(const QString& devCfgMsg);
+ void slotDelayResetRecoUi();
+ void slotShowAntiDismantleDetect(bool);
+ void slotShowUserItemChoose(const QStringList& opns);
+
+private:
+ typedef enum
+ {
+ MAIN_UI_PAGE_RECOGNIZE,
+ MAIN_UI_PAGE_SETTING
+ }MAIN_UI_PAGE_E;
+
+ QStackedWidget* m_stackWidget_mainUi;
+
+ //QSplashScreen *m_splash_startPage;
+ SplashScreenWithMsg *m_splash_startPage;
+ QTime* m_time_startupCost;
+
+ SetupUi* m_setupUi = nullptr;
+ settingUi* m_settingUi = nullptr;;
+ recoUi* m_recoUi;
+
+ QTranslator *m_translatorEnglish;
+
+ //密码多次输错处理
+ QTimer *m_timer;
+ int m_reTryTimes;
+ bool pwdAcceptDelay;
+
+ bool m_isPasswordDialogShowed;
+
+ void updateAllOption();
+ int settingPageAuthentication(const QString& dialogTitle, const QString& okBtn, const QString& cancelBtn, bool overtimeClose);
+
+ //void getBackImgPath(QString& imgPath);
+ //void getSaverPath(QString &imgPath);
+};
+
+#endif // MAINUI_H
diff --git a/Linguist/recoUi/recoUi.cpp b/Linguist/recoUi/recoUi.cpp
new file mode 100644
index 0000000..35e126e
--- /dev/null
+++ b/Linguist/recoUi/recoUi.cpp
@@ -0,0 +1,607 @@
+#include "recoUi.h"
+#include
+#include
+#include
+#include "UiTools.h"
+#include "UiInterfaceForBackstage.h"
+#include "mainUi.h"
+
+statusbarUi::statusbarUi(QWidget *parent) : MyWidgetWithMainStyleColor(parent)
+{
+ qDebug() << "statusbarUi()";
+
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::WindowText,Qt::white);
+
+ m_label_ip = new QLabel(this);
+ //m_label_ip->setText("192.168.10.106");
+ m_label_ip->setPalette(palette);
+ m_label_ip->installEventFilter(this);
+
+ m_label_platform = new QLabel(this);
+ QPixmap pm(":/res/image/disconnect.png");
+ pm = pm.scaled(20, 20, Qt::KeepAspectRatio);
+ m_label_platform->setPixmap(pm);
+
+// m_label_wifi = new QLabel(this);
+// pm.load(":/res/image/Wifi.png");
+// pm = pm.scaled(20, 20, Qt::KeepAspectRatio);
+// m_label_wifi->setPixmap(pm);
+
+// m_label_4g = new QLabel(this);
+// pm.load(":/res/image/4G.png");
+// pm = pm.scaled(20, 20, Qt::KeepAspectRatio);
+// m_label_4g->setPixmap(pm);
+
+ m_label_time = new QLabel(this);
+// m_label_time->setText("12:34");
+ m_label_time->setPalette(palette);
+ qDebug()<<"recoUi _labelTime = "<installEventFilter(this);
+
+ QHBoxLayout* hbLayout = new QHBoxLayout();
+ hbLayout->addWidget(m_label_ip, 20, Qt::AlignLeft);
+ hbLayout->addWidget(m_label_platform, 1, Qt::AlignRight);
+// hbLayout->addWidget(m_label_wifi, 1, Qt::AlignRight);
+// hbLayout->addWidget(m_label_4g, 1, Qt::AlignRight);
+ hbLayout->addWidget(m_label_time, 1, Qt::AlignRight);
+ setLayout(hbLayout);
+}
+
+statusbarUi:: ~statusbarUi()
+{
+ if(nullptr != _timerUpdate)
+ {
+ delete _timerUpdate;
+ }
+
+ qDebug() << "~statusbarUi()";
+}
+
+void statusbarUi::updatePlatformConnectionStatus(const int status)
+{
+ QPixmap pm;
+ switch(status)
+ {
+ case UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_DISCONNECTED:
+ pm.load(":/res/image/disconnect.png");
+ break;
+ case UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_CONNECTED:
+ pm.load(":/res/image/display.png");
+ break;
+ case UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_LOGGED:
+ pm.load(":/res/image/display.png");
+ break;
+ default:
+ break;
+ }
+ m_label_platform->setPixmap(pm.scaled(20, 20, Qt::KeepAspectRatio));
+}
+
+void statusbarUi::updateIpLabel(QString &ipStr)
+{
+ if(m_label_ip)
+ {
+ m_label_ip->setText(ipStr);
+ }
+}
+
+//bool statusbarUi::eventFilter(QObject *watched, QEvent *event)
+//{
+// if( ( m_label_ip == watched ) && (event->type() == QEvent::MouseButtonPress) )
+// {
+// emit signalChangeRecoPage();
+// }
+// if( ( m_label_time == watched ) && (event->type() == QEvent::MouseButtonPress) )
+// {
+// emit signalTestChangePage();
+// }
+//}
+
+recoUi::recoUi(QWidget *parent) : WidgetWithBackstageInterface(parent)
+{
+ qDebug() << "recoUi()";
+
+ m_stack_recoPage = new QStackedWidget(this);
+ // m_statusbar = new statusbarUi(this);
+
+ if(UiConfig::GetInstance()->isRecoUiStyleColor()){
+ m_recoPageColor = new recoUiRecognizeTypeColor(false, false, false, this);
+ m_stack_recoPage->addWidget(m_recoPageColor);
+ }else if (UiConfig::GetInstance()->isRecoUiStyleAd()){
+ m_recoPageAd = new recoUiRecognizeTypeAd(false, false, false, this);
+ m_stack_recoPage->addWidget(m_recoPageAd);
+ }
+ #if 0
+ else if(UiConfig::GetInstance()->isRecoUiStyleScene()){
+ m_recoPageScene = new recoUiRecognizeScene(false, false, this);
+ m_stack_recoPage->addWidget(m_recoPageScene);
+ }
+ #endif
+ else {
+ m_recoPage = new recoUiRecognize(false, false, false, this);
+ m_stack_recoPage->addWidget(m_recoPage);
+ }
+
+ m_ssPage = new recoUiScreensaver(0, this);
+ m_stack_recoPage->addWidget(m_ssPage);
+
+ m_pwdPage = new recoUiPassword(this);
+ m_stack_recoPage->addWidget(m_pwdPage);
+
+ m_healthMsgPage = new recoUiHealthCode(this);
+ m_stack_recoPage->addWidget(m_healthMsgPage);
+
+ m_sceneResult = new recoUiSceneResult(this);
+ m_stack_recoPage->addWidget(m_sceneResult);
+
+ m_callDialPage = new recoUiCallDial(this);
+ m_stack_recoPage->addWidget(m_callDialPage);
+
+ m_callConsolePage = new recoUiCallConsole(this);
+ m_stack_recoPage->addWidget(m_callConsolePage);
+
+ if(UiConfig::GetInstance()->isRkDevice()){
+ DrawPage* draw = new DrawPage(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight(), this);
+ m_stack_recoPage->addWidget(draw);
+ }
+
+ m_timer = new QTimer(this);
+ connect(m_timer, SIGNAL(timeout()), this, SLOT(slotTimer()));
+
+ QVBoxLayout* vbLayout = new QVBoxLayout();
+ vbLayout->addWidget(m_stack_recoPage, 90);
+ //vbLayout->addWidget(m_statusbar, 1);
+ vbLayout->setMargin(0);
+ vbLayout->setSpacing(0);
+ setLayout(vbLayout);
+
+ connect(parent, SIGNAL(signalUpdateScreenSaver()), m_ssPage, SLOT(slotUpdateScreenSaver()));
+ connect(parent, SIGNAL(signalShowUserPwd(const QString&)), this, SLOT(slotShowPasswordPage(const QString&)));
+ connect(m_pwdPage, SIGNAL(signalShowRecognizePage()), this, SLOT(slotShowRecognizePage()));
+ connect(parent, SIGNAL(signalShowPwdUiPersonName(const QString&)), m_pwdPage, SLOT(slotShowPwdUiPersonName(const QString&)));
+ connect(parent, SIGNAL(signalShowUserPwdError(int, int)), m_pwdPage, SLOT(slotShowUserPwdError(int, int)));
+ connect(parent, SIGNAL(signalSetUserPwdButton(bool)), this, SLOT(slotSaveRecoUiPwdBtnStatus(bool)));
+ connect(parent, SIGNAL(signalShowRecoUiMask(int)), this, SLOT(slotSaveRecoUiNightModeStatus(int)));
+ connect(parent, SIGNAL(signalUpdateAdWidget()), this, SLOT(slotUpdateAdScreen()));
+ connect(parent, SIGNAL(signalShowHealthMsg(int, float, const QString&, bool, const unsigned char*, int, const QString&, const QString&, int, int)),
+ this, SLOT(slotShowHealthMsg(int, float, const QString&, bool, const unsigned char*, int, const QString&, const QString&, int, int)));
+ connect(parent, SIGNAL(signalShowSceneResult(int, const QString&, const QString&, int)),
+ this, SLOT(slotShowSceneResult(int, const QString&, const QString&, int)));
+ connect(parent, SIGNAL(signalUpdatePersonNumAccessed(int, int)), this, SLOT(slotUpdatePersonNumAccessed(int, int)));
+ connect(parent, SIGNAL(signalSetSceneUiPersonCountType(int)), this, SLOT(slotSetSceneUiPersonCountType(int)));
+ connect(parent, SIGNAL(signalUpdateSceneUiPersonCount(int)), this, SLOT(slotUpdateSceneUiPersonCount(int)));
+ connect(m_callDialPage, SIGNAL(signalShowRecognizePage()), this, SLOT(slotShowRecognizePage()));
+ connect(m_callConsolePage, SIGNAL(signalShowRecognizePage()), this, SLOT(slotShowRecognizePage()));
+ connect(m_callDialPage, SIGNAL(signalCallBtnPressed(const QString&)), this, SLOT(slotShowCallConsolePage(const QString&)));
+ connect(m_callConsolePage, SIGNAL(signalCallAgain()), m_callDialPage, SLOT(slotCall()));
+
+ auto p = dynamic_cast(parent);
+ if (p != nullptr) {
+ connect(p, &mainUi::signalShowCallBtn, this, &recoUi::slotShowCallBtn);
+ }
+}
+
+recoUi::~recoUi()
+{
+ qDebug() << "~recoUi()";
+}
+
+void recoUi::setBackstageUiinterface(BackstageInterfaceForUi* interface)
+{
+ m_backstageIf = interface;
+ if(m_recoPage){
+ m_recoPage->setBackstageUiinterface(m_backstageIf);
+ connectRecoPage(m_recoPage);
+ m_recoPage->setStyle(UiConfig::GetInstance()->isRecoUiStyleScene() ? 4 : 0);
+ }else if(m_recoPageColor){
+ m_recoPageColor->setBackstageUiinterface(m_backstageIf);
+ connectRecoPage(m_recoPageColor);
+ }else if(m_recoPageAd){
+ m_recoPageAd->setBackstageUiinterface(m_backstageIf);
+ connectRecoPage(m_recoPageAd);
+ QTimer::singleShot(1000, this, [this]{m_recoPageAd->setCamVideoWind();});
+ }
+ if (m_sceneResult != nullptr && m_backstageIf != nullptr) { // 初始化检票人数
+ m_sceneResult->setPersonCountType(m_backstageIf->getTicketModePeopleCountType());
+ m_sceneResult->setTicketCheckCount(-1, m_backstageIf->getTicketCheckCountToday());
+ }
+#if 0
+ else if(m_recoPageScene){
+ connectRecoPage(m_recoPageScene);
+ m_recoPageScene->setBackstageUiinterface(m_backstageIf);
+ }
+ #endif
+ m_ssPage->setBackstageUiinterface(m_backstageIf);
+ m_pwdPage->setBackstageUiinterface(m_backstageIf);
+ m_healthMsgPage->setBackstageUiinterface(m_backstageIf);
+ m_callDialPage->setBackstageUiinterface(m_backstageIf);
+ m_callConsolePage->setBackstageUiinterface(m_backstageIf);
+ update_IpBar();
+}
+
+//statusbarUi *recoUi::getStatusInstance()
+//{
+// return m_statusbar;
+//}
+
+void recoUi::slotShowSettingPage()
+{
+ emit signalShowSettingPage();
+}
+
+void recoUi::slotShowRecoUiPage(const int nPage)
+{
+ int index = m_stack_recoPage->currentIndex();
+ if(nPage == RECO_UI_PAGE_WORK_MODE){
+ if(index == RECO_UI_PAGE_SCREENSAVER){
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_RECOGNIZE);
+ }
+ return;
+ }else if(index == RECO_UI_PAGE_HEALTHCODE || index == RECO_UI_PAGE_SCENERESULT || index == RECO_UI_PAGE_CALL_DIAL || index == RECO_UI_PAGE_CALL_CONSOLE){
+ return;
+ }
+ m_stack_recoPage->setCurrentIndex(nPage);
+}
+
+void recoUi::slotUpdatePlatformConnectionStatus(int status) {
+ m_isPlatformConnected = (status == UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_LOGGED);
+ if (m_callDialPage != nullptr) {
+ m_callDialPage->setPlatformConnected(status == UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_LOGGED);
+ }
+}
+
+void recoUi::slotShowPasswordPage(const QString& name)
+{
+ m_pwdPage->reset(name);
+ slotShowRecoUiPage(RECO_UI_PAGE_PASSWORD);
+}
+
+void recoUi::slotShowRecognizePage()
+{
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_RECOGNIZE);
+ m_backstageIf->startIdentyState();
+}
+
+void recoUi::update_IpBar()
+{
+ if(nullptr == m_backstageIf)
+ {
+ return ;
+ }
+
+#if 0
+ const int nSize = 128;
+ char buf[nSize] = "";
+ m_backstageIf->getIP(buf, nSize);
+ QString ipStr = buf;
+ m_statusbar->updateIpLabel(ipStr);
+#endif
+ if(m_backstageIf){
+ emit signalUpdateRecoUiIpDisplay(m_backstageIf->getIpShowSw());
+ }
+}
+
+void recoUi::updateVideoWind()
+{
+ QWidget *curWidget = m_stack_recoPage->currentWidget();
+
+ if(curWidget == m_recoPage){
+ m_recoPage->setCamVideoWind();
+ }else if(curWidget == m_recoPageColor){
+ m_recoPageColor->setCamVideoWind();
+ }else if(curWidget == m_recoPageAd){
+ m_recoPageAd->setCamVideoWind();
+ }
+ #if 0
+ else if(curWidget == m_recoPageScene){
+ m_recoPageScene->setCamVideoWind();
+ }
+ #endif
+}
+
+bool recoUi::isScenePassing()
+{
+ return m_stack_recoPage->currentIndex() == RECO_UI_PAGE_SCENERESULT;//m_sceneResult->isPassing();
+}
+
+
+void recoUi::connectRecoPage(const QObject* recoPage)
+{
+ connect(recoPage, SIGNAL(signalChangePage()), this, SLOT(slotShowSettingPage()));
+
+ connect(this, SIGNAL(signalNoSuccessPage(const int)), recoPage, SLOT(slotsNoSuccessPage(const int)));
+ connect(this, SIGNAL(signalSuccessPage(const int, const QString&)), recoPage, SLOT(slotsSuccessPage(const int, const QString&)));
+ connect(parent()->parent(), SIGNAL(signalDrawScanner(const int, const bool)), recoPage, SLOT(slotsDrawScanner(const int, const bool)));
+ connect(parent()->parent(), SIGNAL(signalInteraction(const INTERACION_OPTION& , int )),
+ recoPage, SLOT(slotsInteractionChange(const INTERACION_OPTION& , int )));
+ connect(parent()->parent(), SIGNAL(signalShowForeheadNormalTemp(const float, const bool)), recoPage, SLOT(slotShowNormalTemp(const float, const bool)));
+ connect(parent()->parent(), SIGNAL(signalShowForeheadAbnormalTemp(const float, const bool, const bool)), recoPage, SLOT(slotShowAbnormalTemp(const float, const bool, const bool)));
+ connect(parent()->parent(), SIGNAL(signalUpdateLogo(const int)), recoPage, SLOT(slotUpdateLogo(const int)));
+ connect(parent()->parent(), SIGNAL(signalUpdatePlatformConnectionStatus(const int)), recoPage, SLOT(slotUpdatePlatformConnectionStatus(const int)));
+ connect(parent()->parent(), SIGNAL(signalResetRecoUi()), recoPage, SLOT(slotsResetRecoUi()));
+ connect(parent()->parent(), SIGNAL(signalShowQRCodeMsg(int)), recoPage, SLOT(slotShowQRCodeMsg(int)));
+ connect(this, SIGNAL(signalChangeRecoUiMode()), recoPage, SLOT(slotChangeRecoUiMode()));
+ connect(this, SIGNAL(signalUpdateRecoUiIpDisplay(bool)), recoPage, SLOT(slotUpdateRecoUiIpDisplay(bool)));
+ connect(parent()->parent(), SIGNAL(signalShowFeatureUpdateProgress(const unsigned, const unsigned)), recoPage, SLOT(slotShowFeatureUpdateProgress(const unsigned, const unsigned)));
+ connect(parent()->parent(), SIGNAL(signalCloseFeatureUpdateProgress()), recoPage, SLOT(slotCloseFeatureUpdateProgress()));
+ connect(parent()->parent(), SIGNAL(signalShowRecoUiMask(int)), recoPage, SLOT(slotShowRecoUiMask(int)));
+ connect(parent()->parent(), SIGNAL(signalNotiMsg(const int, const QString&, int)), recoPage, SLOT(slotNotiMsg(const int, const QString&, int)));
+ connect(parent()->parent(), SIGNAL(signalCenterMsg(const int, const QString&)), recoPage, SLOT(slotCenterMsg(const int, const QString&)));
+ connect(recoPage, SIGNAL(signalShowPwdPage(const QString&)), this, SLOT(slotShowPasswordPage(const QString&)));
+ connect(parent()->parent(), SIGNAL(signalSetUserPwdButton(bool)), recoPage, SLOT(slotSetUserPwdButton(bool)));
+ connect(parent()->parent(), SIGNAL(signalShowOrHideFaceFrame(bool)), recoPage, SLOT(slotShowOrHideFaceFrame(bool)));
+ connect(parent()->parent(), SIGNAL(signalShowFinalResult(bool)), recoPage, SLOT(slotShowFinalResult(bool)));
+
+ connect(parent()->parent(), SIGNAL(signalShowRecoUiColorFaceSnapshot(const QString&)), recoPage, SLOT(slotShowRecoUiColorFaceSnapshot(const QString&)));
+ connect(parent()->parent(), SIGNAL(signalShowRecoUiColorFaceSnapshot(const unsigned char*, int)), recoPage, SLOT(slotShowRecoUiColorFaceSnapshot(const unsigned char*, int)));
+ connect(parent()->parent(), SIGNAL(signalUpdateScreenSaver()), recoPage, SIGNAL(signalUpdateScreenSaver()));
+ connect(recoPage, SIGNAL(signalScreenTouch()), parent()->parent(), SLOT(slotScreenTouch()));
+ connect(parent()->parent(), SIGNAL(signalShowHealthCodeAuthStatus(int)), recoPage, SLOT(slotShowHealthCodeAuthStatus(int)));
+ connect(parent()->parent(), SIGNAL(signalShowRecoUiDevIdAndVer(bool)), recoPage, SLOT(slotShowRecoUiDevIdAndVer(bool)));
+ if ((m_recoPage != nullptr) && (dynamic_cast(recoPage) == m_recoPage)) {
+ connect(m_recoPage, &recoUiRecognize::callDialButtonClicked, this, &recoUi::slotShowCallDialPage);
+ connect(m_recoPage, &recoUiRecognize::callPlatformButtonClicked, this, &recoUi::slotShowCallConsolePage);
+ } else if ((m_recoPageColor != nullptr) && (dynamic_cast(recoPage) == m_recoPageColor)) {
+ connect(m_recoPageColor, &recoUiRecognizeTypeColor::callDialButtonClicked, this, &recoUi::slotShowCallDialPage);
+ connect(m_recoPageColor, &recoUiRecognizeTypeColor::callPlatformButtonClicked, this, &recoUi::slotShowCallConsolePage);
+ } else if ((m_recoPageAd != nullptr) && (dynamic_cast(recoPage) == m_recoPageAd)) {
+ connect(m_recoPageAd, &recoUiRecognizeTypeAd::callDialButtonClicked, this, &recoUi::slotShowCallDialPage);
+ connect(m_recoPageAd, &recoUiRecognizeTypeAd::callPlatformButtonClicked, this, &recoUi::slotShowCallConsolePage);
+ }
+}
+
+void recoUi::slotRecoUiswitchToType(int type)
+{
+ if( (0 == type && UiConfig::GetInstance()->isRecoUiStyleClassical()) ||
+ (1 == type && UiConfig::GetInstance()->isRecoUiStyleStandard()) ||
+ (2 == type && UiConfig::GetInstance()->isRecoUiStyleColor()) ||
+ (3 == type && UiConfig::GetInstance()->isRecoUiStyleAd()) ||
+ (4 == type && UiConfig::GetInstance()->isRecoUiStyleScene()) ){
+ return;
+ }
+
+ if( ( (0 == type || 4 == type) && !UiConfig::GetInstance()->isRecoUiStyleStandard()) ||
+ ( (1 == type || 4 == type) && !UiConfig::GetInstance()->isRecoUiStyleClassical()) ||
+ ( (0 == type || 1 == type) && !UiConfig::GetInstance()->isRecoUiStyleScene()) ){
+ if(!m_recoPage){
+ m_recoPage = new recoUiRecognize(m_isNightMode, m_showPwdBtn, m_showCallBtn, this);
+ connectRecoPage(m_recoPage);
+ m_recoPage->setBackstageUiinterface(m_backstageIf);
+ }
+ m_stack_recoPage->insertWidget(0, m_recoPage);
+ m_recoPage->setCamVideoWind();
+ }else if(2 == type){
+ if(!m_recoPageColor){
+ m_recoPageColor = new recoUiRecognizeTypeColor(m_isNightMode, m_showPwdBtn, m_showCallBtn, this);
+ connectRecoPage(m_recoPageColor);
+ m_recoPageColor->setBackstageUiinterface(m_backstageIf);
+ }
+ m_stack_recoPage->insertWidget(0, m_recoPageColor);
+ m_recoPageColor->setCamVideoWind();
+ }else if(3 == type){
+ if(!m_recoPageAd){
+ m_recoPageAd = new recoUiRecognizeTypeAd(m_isNightMode, m_showPwdBtn, m_showCallBtn, this);
+ connectRecoPage(m_recoPageAd);
+ m_recoPageAd->setBackstageUiinterface(m_backstageIf);
+ }
+ m_stack_recoPage->insertWidget(0, m_recoPageAd);
+ m_recoPageAd->setCamVideoWind();
+ }
+ #if 0
+ else if(4 == type){
+ if(!m_recoPageScene){
+ m_recoPageScene = new recoUiRecognizeScene(m_isNightMode, m_showPwdBtn, m_showCallBtn, this);
+ connectRecoPage(m_recoPageScene);
+ m_recoPageScene->setBackstageUiinterface(m_backstageIf);
+ }
+ m_stack_recoPage->insertWidget(0, m_recoPageScene);
+ m_recoPageScene->setCamVideoWind();
+ }
+ #endif
+
+ if( (1 != type && 4 != type && UiConfig::GetInstance()->isRecoUiStyleClassical()) ||
+ (0 != type && 4 != type && UiConfig::GetInstance()->isRecoUiStyleStandard()) ||
+ (0 != type && 1 != type && UiConfig::GetInstance()->isRecoUiStyleScene()) ){
+ m_stack_recoPage->removeWidget(m_recoPage);
+ }else if(2 != type && UiConfig::GetInstance()->isRecoUiStyleColor()){
+ m_stack_recoPage->removeWidget(m_recoPageColor);
+ }else if(3 != type && UiConfig::GetInstance()->isRecoUiStyleAd()){
+ m_stack_recoPage->removeWidget(m_recoPageAd);
+ }
+ #if 0
+ else if(4 != type && UiConfig::GetInstance()->isRecoUiStyleScene()){
+ m_stack_recoPage->removeWidget(m_recoPageScene);
+ }
+ #endif
+
+ m_stack_recoPage->setCurrentIndex(0);
+ UiConfig::GetInstance()->setRecoUiStyle(type);
+ if( m_recoPage && (0 == type || 1 == type || 4 == type) ){
+ m_recoPage->setStyle(type);
+ }
+}
+
+void recoUi::slotSaveRecoUiPwdBtnStatus(bool status)
+{
+ qDebug() << "slotSaveRecoUiPwdBtnStatus:" << status;
+ m_showPwdBtn = status;
+}
+
+void recoUi::slotSaveRecoUiNightModeStatus(int type)
+{
+ //qDebug() << "slotSaveRecoUiNightModeStatus:" << type;
+ m_isNightMode = (3 == type);
+}
+
+void recoUi::slotUpdateAdScreen()
+{
+ if(m_recoPageAd){
+ m_recoPageAd->updateAdWidget();
+ }
+}
+
+void recoUi::slotTimer()
+{
+ m_timer->stop();
+ m_recoPage->slotsResetRecoUi(); // 这里直接调用 reset, 否则RECO_UI_PAGE_RECOGNIZE可能会出现中间态
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_RECOGNIZE);
+ if(UiConfig::GetInstance()->isRecoUiStyleScene()){
+ m_sceneResult->resetPersonCount();
+ }
+}
+
+void recoUi::slotShowHealthMsg(int type, float temp, const QString& msg, bool pass, const unsigned char* jpgDate,
+ int jpgLen, const QString& tripCity, const QString& failReason, int bgColor, int displayTime)
+{
+ if(type < 0){
+ m_timer->stop();
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_RECOGNIZE);
+ return;
+ }
+
+ m_healthMsgPage->showHealthMsg(type, temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_HEALTHCODE);
+ m_timer->start(displayTime * 1000);
+}
+
+void recoUi::slotShowSceneResult(int result, const QString& resultText, const QString& businessInfo, int displayTime)
+{
+ if(result < 0){
+ if(-1 == result){ //超时
+ m_sceneResult->resetPersonCount();
+ m_recoPage->setSceneUiReco(false);
+ }else{
+ m_recoPage->setSceneUiReco(true);
+ }
+ m_timer->stop();
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_RECOGNIZE);
+ return;
+ }
+ if(result > 0){//通过才更新
+ int count = m_backstageIf->getTicketCheckCountToday();
+ m_sceneResult->setTicketCheckCount(0, count);
+ m_recoPage->setTicketCheckCount(0, count);
+
+ #if 0
+ m_recoPageScene->setTicketCheckCount(count);
+ #endif
+ }
+ m_sceneResult->showResult(result, resultText, businessInfo);
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_SCENERESULT);
+ m_timer->start(displayTime);
+}
+
+void recoUi::slotUpdatePersonNumAccessed(int personAccess, int personAll)
+{
+ if(m_stack_recoPage->currentIndex() != RECO_UI_PAGE_SCENERESULT){
+ return;
+ }
+ if(m_sceneResult->updatePersonNumAccessed(personAccess, personAll)){
+ m_timer->start(1000);
+ }
+}
+
+void recoUi::slotNoSuccessPage(int result)
+{
+ if(UiConfig::GetInstance()->isRecoUiStyleScene()){
+ if(m_stack_recoPage->currentIndex() == RECO_UI_PAGE_SCENERESULT){
+ if(GLOBAL_RECO_FACE_CAMERA == result){
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_RECOGNIZE);//请正视镜头可以打断场景结果,需要切换页面
+ }else{
+ return;
+ }
+ }
+ if(result != GLOBAL_RECO_NO_ENTRY && result != GLOBAL_RECO_CLEAR_NO_ENTRY){
+ m_recoPage->setSceneUiReco(true);
+ }
+ }
+ emit signalNoSuccessPage(result);
+}
+
+void recoUi::slotSetSceneUiPersonCountType(int type)
+{
+ m_sceneResult->setPersonCountType(type);
+ m_recoPage->setScenePersonCountType(type);
+}
+
+void recoUi::slotUpdateSceneUiPersonCount(int count)
+{
+ m_sceneResult->setTicketCheckCount(1, count);
+ m_recoPage->setTicketCheckCount(1, count);
+}
+
+void recoUi::slotShowCallDialPage() {
+ if (m_isPlatformConnected) {
+ m_callDialPage->reset();
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_CALL_DIAL);
+ m_backstageIf->getCallDevList();
+ } else {
+ if (m_recoPage != nullptr) {
+ emit m_recoPage->slotCenterMsg(64, "当前设备离线,请稍后重试");
+ QTimer::singleShot(1500, this, [this]() { emit m_recoPage->slotCenterMsg(64, ""); });
+ }
+ if (m_recoPageColor != nullptr) {
+ emit m_recoPageColor->slotCenterMsg(64, "当前设备离线,请稍后重试");
+ QTimer::singleShot(1500, this, [this]() { emit m_recoPageColor->slotCenterMsg(64, ""); });
+ }
+ if (m_recoPageAd != nullptr) {
+ emit m_recoPageAd->slotCenterMsg(64, "当前设备离线,请稍后重试");
+ QTimer::singleShot(1500, this, [this]() { emit m_recoPageAd->slotCenterMsg(64, ""); });
+ }
+ }
+}
+
+void recoUi::slotShowCallConsolePage(const QString &contactName) {
+ if (m_isPlatformConnected) {
+ m_callConsolePage->reset(contactName);
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_CALL_CONSOLE);
+ if (contactName == "管理处") {
+ m_backstageIf->callDev("", 2);
+ }
+ } else {
+ if (m_recoPage != nullptr) {
+ emit m_recoPage->slotCenterMsg(64, "当前设备离线,请稍后重试");
+ QTimer::singleShot(1500, this, [this]() { emit m_recoPage->slotCenterMsg(64, ""); });
+ }
+ if (m_recoPageColor != nullptr) {
+ emit m_recoPageColor->slotCenterMsg(64, "当前设备离线,请稍后重试");
+ QTimer::singleShot(1500, this, [this]() { emit m_recoPageColor->slotCenterMsg(64, ""); });
+ }
+ if (m_recoPageAd != nullptr) {
+ emit m_recoPageAd->slotCenterMsg(64, "当前设备离线,请稍后重试");
+ QTimer::singleShot(1500, this, [this]() { emit m_recoPageAd->slotCenterMsg(64, ""); });
+ }
+ }
+}
+
+void recoUi::slotSetCallConsoleStatus(int status, const QString& text)
+{
+ m_callConsolePage->setStatus(status, text);
+ if(status < 100){
+ m_stack_recoPage->setCurrentIndex(RECO_UI_PAGE_CALL_CONSOLE);
+ }
+}
+
+void recoUi::slotShowCallBtn(bool callButton, bool videoButton) {
+ m_showCallBtn = callButton;
+ if (m_recoPage != nullptr) {
+ m_recoPage->slotShowCallBtn(m_showCallBtn);
+ }
+ if (m_recoPageColor != nullptr) {
+ m_recoPageColor->slotShowCallBtn(m_showCallBtn);
+ }
+ if (m_recoPageAd != nullptr) {
+ m_recoPageAd->slotShowCallBtn(m_showCallBtn);
+ }
+ if (m_callConsolePage != nullptr) {
+ m_callConsolePage->setVideoButtonVisible(videoButton);
+ }
+}
+
+void recoUi::setDndMode(bool enabled, const std::chrono::system_clock::time_point &time) {
+ if (m_recoPageAd) {
+ m_recoPageAd->setDndMode(enabled, time);
+ }
+}
diff --git a/Linguist/recoUi/recoUi.h b/Linguist/recoUi/recoUi.h
new file mode 100644
index 0000000..84f7a6f
--- /dev/null
+++ b/Linguist/recoUi/recoUi.h
@@ -0,0 +1,130 @@
+#ifndef RECOUI_H
+#define RECOUI_H
+
+#include
+#include
+#include "recoUiUnauthorized.h"
+#include "recoUiRecognize.h"
+#include "recoUiScreensaver.h"
+#include "recoUiPassword.h"
+#include "UiTools.h"
+#include "BackstageInterfaceForUi.h"
+#include "recoUiRecognizeTypeBase.h"
+#include "recoUiHealthCode.h"
+#include "recoUiRecognizeScene.h"
+#include "recoUiCallDial.h"
+#include "recoUiCallConsole.h"
+
+class statusbarUi : public MyWidgetWithMainStyleColor
+{
+ Q_OBJECT
+public:
+ explicit statusbarUi(QWidget *parent = nullptr);
+ ~statusbarUi();
+ void updatePlatformConnectionStatus(const int);
+ void updateIpLabel(QString& ipStr);
+
+signals:
+
+public slots:
+
+private:
+ QLabel* m_label_ip;
+ QLabel* m_label_platform;
+ //QLabel* m_label_wifi;
+ //QLabel* m_label_4g;
+ QLabel* m_label_time;
+
+ TimerUpdate* _timerUpdate;
+};
+
+typedef enum
+{
+ RECO_UI_PAGE_RECOGNIZE,
+ RECO_UI_PAGE_SCREENSAVER,
+ RECO_UI_PAGE_PASSWORD,
+ RECO_UI_PAGE_HEALTHCODE,
+ RECO_UI_PAGE_SCENERESULT,
+ RECO_UI_PAGE_CALL_DIAL,
+ RECO_UI_PAGE_CALL_CONSOLE,
+ RECO_UI_PAGE_DRAW,
+
+ RECO_UI_PAGE_MAX,
+ RECO_UI_PAGE_WORK_MODE
+}RECO_UI_PAGE_E;
+
+class recoUi : public WidgetWithBackstageInterface
+{
+ Q_OBJECT
+public:
+ explicit recoUi(QWidget *parent = nullptr);
+ ~recoUi();
+ void setBackstageUiinterface(BackstageInterfaceForUi* interface);
+
+ //statusbarUi* getStatusInstance();
+
+ void update_IpBar();
+ void updateVideoWind();
+ bool isScenePassing();
+ void setDndMode(bool enabled, const std::chrono::system_clock::time_point &time);
+
+signals:
+ void signalShowSettingPage();
+ void signalNoSuccessPage(int);
+ void signalSuccessPage(int nPage, const QString& name);
+// void signalDrawScanner(const int nPage, RWFaceInfo* pInfo, int sum);
+ void signalChangeRecoUiMode(); //底下的页面开关二维码模式信号
+ void signalUpdateRecoUiIpDisplay(const bool); //增加识别界面ip显示开关,更新信号
+
+public slots:
+ void slotShowSettingPage();
+ void slotShowRecoUiPage(int);
+ void slotUpdatePlatformConnectionStatus(int);
+ void slotShowPasswordPage(const QString& name);
+ void slotShowRecognizePage();
+ void slotRecoUiswitchToType(int type);
+ void slotSaveRecoUiPwdBtnStatus(bool status);
+ void slotSaveRecoUiNightModeStatus(int type);
+ void slotUpdateAdScreen();
+ void slotShowHealthMsg(int type, float temp, const QString& msg, bool pass, const unsigned char* jpgDate,
+ int jpgLen, const QString& tripCity, const QString& failReason, int bgColor, int displayTime);
+ void slotTimer();
+ void slotShowSceneResult(int result, const QString& resultText, const QString& businessInfo, int displayTime);
+ void slotUpdatePersonNumAccessed(int personAccess, int personAll);
+ void slotNoSuccessPage(int);
+ void slotSetSceneUiPersonCountType(int type);
+ void slotUpdateSceneUiPersonCount(int count);
+ void slotShowCallDialPage();
+ void slotShowCallConsolePage(const QString&);
+ void slotSetCallConsoleStatus(int status, const QString& text);
+ void slotShowCallBtn(bool callButton, bool videoButton);
+
+private:
+ QStackedWidget* m_stack_recoPage;
+
+ // statusbarUi* m_statusbar;
+
+ recoUiRecognize* m_recoPage = nullptr;
+ recoUiRecognizeTypeColor* m_recoPageColor = nullptr;
+ recoUiRecognizeTypeAd* m_recoPageAd = nullptr;
+ //recoUiRecognizeScene* m_recoPageScene = nullptr;
+
+ recoUiScreensaver* m_ssPage;
+ recoUiPassword* m_pwdPage;
+ recoUiHealthCode* m_healthMsgPage;
+ recoUiSceneResult* m_sceneResult;
+ recoUiCallDial* m_callDialPage = nullptr;
+ recoUiCallConsole* m_callConsolePage = nullptr;
+
+ bool m_showPwdBtn = false;
+ bool m_isNightMode = false;
+ bool m_showCallBtn = false;
+ bool m_isPlatformConnected = false;
+
+ QTimer* m_timer = nullptr;
+
+ void connectRecoPage(const QObject* recoPage);
+ void disconnectRecoPage(const QObject* recoPage);
+};
+
+#endif // RECOUI_H
diff --git a/Linguist/recoUi/recoUiCallConsole.cpp b/Linguist/recoUi/recoUiCallConsole.cpp
new file mode 100644
index 0000000..5eaf38f
--- /dev/null
+++ b/Linguist/recoUi/recoUiCallConsole.cpp
@@ -0,0 +1,288 @@
+#include "recoUiCallConsole.h"
+#include
+#include
+#include
+
+recoUiCallConsole::recoUiCallConsole(QWidget *parent) : WidgetWithBackstageInterface(parent)
+{
+ qDebug() << "recoUiCallConsole()";
+
+ resize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
+
+ QLabel* labelImg = new QLabel(this);
+ labelImg->setPixmap(QPixmap(":/res/image/reco_msg_face_pic_large.png"));
+
+ m_labelContactName = new QLabel(this);
+
+ m_labelTip = new QLabel("xxxxxx", this);
+
+ m_btnCancel = createButton(QPixmap(":/res/image/fail2_large.png"), tr("取消"));
+ m_btnHungUp = createButton(QPixmap(":/res/image/hung_up_large.png"), tr("结束通话"));
+ m_btnCallAgain = createButton(QPixmap(":/res/image/call_large.png"), tr("重拨"));
+
+ m_btnVideoCtrl = createButton(QPixmap(":/res/image/enable_video_large.png"), tr("启用摄像头"));
+
+ m_btnAccept = createButton(QPixmap(":/res/image/call_large.png"), tr("接听"));
+ m_btnReject = createButton(QPixmap(":/res/image/hung_up_large.png"), tr("拒绝"));
+
+ m_btnOpenDoor = createButton(QPixmap(":/res/image/key-large.png"),"开门");
+
+ QHBoxLayout* hlayBtns = new QHBoxLayout();
+ hlayBtns->addWidget(m_btnOpenDoor);
+ hlayBtns->addWidget(m_btnCancel);
+ hlayBtns->addWidget(m_btnVideoCtrl);
+ hlayBtns->addWidget(m_btnHungUp);
+ hlayBtns->addWidget(m_btnCallAgain);
+ hlayBtns->addWidget(m_btnReject);
+ hlayBtns->addWidget(m_btnAccept);
+
+ QVBoxLayout* vlay = new QVBoxLayout();
+ vlay->addWidget(labelImg, 1, Qt::AlignCenter | Qt::AlignTop);
+ vlay->addWidget(m_labelContactName, 1, Qt::AlignCenter | Qt::AlignTop);
+ vlay->addSpacing(UiConfig::GetInstance()->getUiHeight() / 15);
+ vlay->addWidget(m_labelTip, 1, Qt::AlignCenter | Qt::AlignTop);
+ vlay->addStretch(10);
+ vlay->addLayout(hlayBtns);
+ vlay->setContentsMargins(0, UiConfig::GetInstance()->getUiHeight() / 10, 0, UiConfig::GetInstance()->getUiHeight() / 10);
+ setLayout(vlay);
+
+ m_timer = new QTimer(this);
+ connect(m_timer, SIGNAL(timeout()), this, SLOT(slotTimeout()));
+ setBackgroundTransparent(false);
+ setVideoButtonVisible(false);
+}
+
+void recoUiCallConsole::setBackgroundTransparent(bool transparent) {
+ if (transparent) {
+ setAutoFillBackground(false);
+ } else {
+ setAutoFillBackground(true);
+ QPalette palette(this->palette());
+ palette.setBrush(QPalette::Window, Qt::darkGray);
+ palette.setColor(QPalette::WindowText, Qt::white);
+ palette.setColor(QPalette::Text, Qt::white);
+ setPalette(palette);
+ }
+}
+
+void recoUiCallConsole::setVideoButtonVisible(bool visible) {
+ m_videoButtonVisible = visible;
+ m_btnVideoCtrl->setVisible(visible);
+}
+
+void recoUiCallConsole::reset(const QString& contactName)
+{
+ m_labelContactName->setText(contactName);
+ setBackgroundTransparent(false);
+ setStatus(99);
+ m_timeCount = 0;
+ m_timer->start(TIMEOUT);
+ m_btnOpenDoor->hide();
+ m_initiatorDoorCfg = false;
+}
+
+void recoUiCallConsole::setStatus(int status, const QString& text)
+{
+ switch(status){
+ //发起者
+ case 0://通话接通,不允许开关视频
+ case 1://通话接通,允许开关视频
+ m_btnHungUp->show();
+ m_btnCancel->hide();
+ m_btnCallAgain->hide();
+ m_btnReject->hide();
+ m_btnAccept->hide();
+ videoCtrl(false);
+ m_labelTip->setText("00:00");
+ m_timeCount = 1;
+ m_timer->start(1000);
+ if(status - 0){
+ m_btnVideoCtrl->show();
+ }else{
+ m_btnVideoCtrl->hide();
+ }
+ break;
+ case ShowVideo: {
+ setBackgroundTransparent(true);
+ break;
+ }
+ case HideVideo: {
+ setBackgroundTransparent(false);
+ break;
+ }
+ //接收者
+ case 50://设备通话请求到达,不允许开关视频
+ case 51://设备通话请求到达,允许开关视频
+ setBackgroundTransparent(false);
+ m_btnHungUp->hide();
+ m_btnCancel->hide();
+ m_btnCallAgain->hide();
+ m_btnReject->show();
+ m_btnAccept->show();
+ m_btnVideoCtrl->hide();
+ m_labelContactName->setText(text);
+ m_labelTip->setText("");
+ videoCtrl(false);
+ m_initiatorVideoCfg = status - 50;
+ m_btnOpenDoor->hide();
+ m_initiatorDoorCfg = true;
+ m_backstageIf->stopIdentyState();
+ break;
+
+ case PlatformCallIn://平台通话请求到达,不允许开关视频
+ setBackgroundTransparent(false);
+ m_initiatorDoorCfg = false;
+ m_btnOpenDoor->hide(); // 平台没有开门需求
+ m_btnHungUp->hide();
+ m_btnCancel->hide();
+ m_btnCallAgain->hide();
+ m_btnReject->hide();
+ m_btnAccept->hide();
+ videoCtrl(false);
+ m_btnVideoCtrl->hide();
+ m_labelContactName->setText(text);
+ m_labelTip->setText("00:00");
+ m_timeCount = 1;
+ m_timer->start(1000);
+ m_backstageIf->stopIdentyState();
+ break;
+ case 100:
+ m_timer->stop();
+ emit signalShowRecognizePage();
+ break;
+
+ //内部处理
+ case 99://发起者呼叫中
+ m_btnCancel->show();
+ m_btnCallAgain->hide();
+ m_btnVideoCtrl->hide();
+ m_btnHungUp->hide();
+ m_btnReject->hide();
+ m_btnAccept->hide();
+ m_labelTip->setText(tr("呼叫中 ..."));
+ break;
+ case 98://发起者超时未接通
+ m_btnCancel->show();
+ m_btnCallAgain->show();
+ m_btnVideoCtrl->hide();
+ m_btnHungUp->hide();
+ m_btnReject->hide();
+ m_btnAccept->hide();
+ m_labelTip->setText(tr("对方长时间未接听"));
+ break;
+ case 97://接收者接通
+ m_btnCancel->hide();
+ m_btnCallAgain->hide();
+ m_btnHungUp->show();
+ m_btnReject->hide();
+ m_btnAccept->hide();
+ m_labelTip->setText("00:00");
+ m_timeCount = 1;
+ m_timer->start(1000);
+ if(m_initiatorVideoCfg){
+ m_btnVideoCtrl->show();
+ }else{
+ m_btnVideoCtrl->hide();
+ }
+ m_btnOpenDoor->setVisible(m_initiatorDoorCfg);
+ break;
+ default:break;
+ }
+}
+
+void recoUiCallConsole::slotBtnClicked()
+{
+ const QObject* send = sender();
+ if (send == m_btnCallAgain) {
+ emit signalCallAgain();
+ setStatus(99);
+ m_timeCount = 0;
+ m_timer->start(TIMEOUT);
+ }else if (send == m_btnHungUp) {
+ m_timer->stop();
+ m_backstageIf->callHangUp();
+ emit signalShowRecognizePage();
+ }else if (send == m_btnCancel) {
+ m_timer->stop();
+ m_backstageIf->callAbort();
+ emit signalShowRecognizePage();
+ }else if(send == m_btnVideoCtrl){
+ m_videoEnable = !m_videoEnable;
+ videoCtrl(m_videoEnable);
+ m_backstageIf->callSetVideoStream(m_videoEnable);
+ }else if(send == m_btnReject){
+ m_backstageIf->callReject();
+ emit signalShowRecognizePage();
+ }else if(send == m_btnAccept){
+ m_backstageIf->callAccept();
+ setStatus(97);
+ } else if (send == m_btnOpenDoor) {
+ m_backstageIf->openCallRemoteDoor();
+ }
+
+ if(UiConfig::GetInstance()->isRkDevice()){
+ update();
+ }
+}
+
+void recoUiCallConsole::slotTimeout()
+{
+ if(m_timeCount){
+ updateCallTime(m_timeCount++);
+ }else{
+ m_timer->stop();
+ m_backstageIf->callAbort();
+ setStatus(98);
+ }
+}
+
+void recoUiCallConsole::videoCtrl(bool enable)
+{
+ QLabel *icon = m_btnVideoCtrl->findChild("icon");
+ if (!icon) {
+ qDebug() << "video btn label not found";
+ return;
+ }
+ QLabel *text = m_btnVideoCtrl->findChild("text");
+ if (!icon) {
+ qDebug() << "video btn text not found";
+ return;
+ }
+ text->setText(enable ? tr("禁用摄像头") : tr("启用摄像头"));
+ QPixmap pm(enable ? ":/res/image/disable_video_large.png" : ":/res/image/enable_video_large.png");
+ pm = pm.scaled(120, 120, Qt::KeepAspectRatio);
+ icon->setPixmap(pm);
+ m_videoEnable = enable;
+}
+
+QPushButton* recoUiCallConsole::createButton(const QPixmap& icon, const QString& btnText)
+{
+ QPushButton* btn = new QPushButton(this);
+ btn->setFocusPolicy(Qt::NoFocus);
+ btn->setFixedSize(240, 240);
+ btn->setStyleSheet("background-color: transparent;");
+ connect(btn, SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
+
+ QLabel* labelIcon = new QLabel(btn);
+ labelIcon->setObjectName("icon");
+ QPixmap pm(icon);
+ pm = pm.scaled(120, 120, Qt::KeepAspectRatio);
+ labelIcon->setPixmap(pm);
+
+ QLabel *btnName = new QLabel(btnText, btn);
+ btnName->setObjectName("text");
+ btnName->setStyleSheet("color: white;");
+
+ QVBoxLayout* vlay = new QVBoxLayout(btn);
+ vlay->addWidget(labelIcon, 9, Qt::AlignCenter);
+ vlay->addWidget(btnName, 1, Qt::AlignCenter);
+ vlay->setAlignment(Qt::AlignCenter);
+
+ return btn;
+}
+
+void recoUiCallConsole::updateCallTime(int second)
+{
+ m_labelTip->setText(QString::number(second / 60).rightJustified(2, QChar('0')) + ":" + QString::number(second % 60).rightJustified(2, QChar('0')));
+}
+
diff --git a/Linguist/recoUi/recoUiCallConsole.h b/Linguist/recoUi/recoUiCallConsole.h
new file mode 100644
index 0000000..ae0f0a3
--- /dev/null
+++ b/Linguist/recoUi/recoUiCallConsole.h
@@ -0,0 +1,83 @@
+#ifndef RECOUICALLCONSOLE_H
+#define RECOUICALLCONSOLE_H
+
+#include "UiTools.h"
+#include "UiConfig.h"
+
+
+class recoUiCallConsole : public WidgetWithBackstageInterface
+{
+ Q_OBJECT
+public:
+ static const int PASSWORD_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int NUM_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int CONFIRM_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const QString PWD_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString CONFIRM_BTN_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString CONFIRM_BTN_DISABLE_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int CONFIRM_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int CONFIRM_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString BACK_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int BACK_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int BACK_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString DEL_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int DEL_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int DEL_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString NUM_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+
+ enum Status {
+ PlatformCallIn = 60, // 平台打过来
+ ShowVideo = 101, // 背景透明,显示对方视频
+ HideVideo = 102, // 背景不透明, 不显示对方视频
+ };
+
+ explicit recoUiCallConsole(QWidget *parent = nullptr);
+ void reset(const QString& contactName);
+ void setStatus(int status, const QString& text = QString());
+ void setVideoButtonVisible(bool visible);
+
+signals:
+ void signalShowRecognizePage();
+ void signalCallAgain();
+
+public slots:
+ void slotBtnClicked();
+ void slotTimeout();
+
+protected:
+ /**
+ * @brief 透明背景能够显示视频
+ *
+ * @param transparent
+ */
+ void setBackgroundTransparent(bool transparent);
+
+private:
+ enum{
+ TIMEOUT = 30000,
+ };
+
+ QLabel* m_labelContactName;
+ QLabel* m_labelTip;
+ QPushButton* m_btnCancel;
+ QPushButton* m_btnHungUp;
+ QPushButton* m_btnCallAgain;
+ QPushButton* m_btnVideoCtrl;
+ QPushButton* m_btnAccept;
+ QPushButton* m_btnReject;
+ QPushButton *m_btnOpenDoor = nullptr;
+
+ QTimer* m_timer;
+ bool m_videoButtonVisible = false;
+ bool m_videoEnable = false;
+ bool m_initiatorVideoCfg = false;
+ bool m_initiatorDoorCfg = false;
+ int m_timeCount = 0;
+
+ QPushButton* createButton(const QPixmap& icon, const QString& btnText);
+ void videoCtrl(bool enable);
+ void updateCallTime(int second);
+
+};
+
+#endif // RECOUICALLCONSOLE_H
diff --git a/Linguist/recoUi/recoUiCallDial.cpp b/Linguist/recoUi/recoUiCallDial.cpp
new file mode 100644
index 0000000..726135f
--- /dev/null
+++ b/Linguist/recoUi/recoUiCallDial.cpp
@@ -0,0 +1,370 @@
+#include "recoUiCallDial.h"
+#include
+#include
+#include "AsyncEvent.h"
+#include "recoUiRecognize.h"
+
+const int recoUiCallDial::DEV_CODE_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY] = {
+ {20, 20, 14, 15, 12, 15, 14, 13, 9, 12, 10, 13, 13, 9},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {14, 14, 11, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8},
+ {14, 14, 11, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8}
+};
+const int recoUiCallDial::NUM_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY] = {
+ {20, 20, 14, 15, 12, 15, 14, 13, 9, 12, 10, 13, 13, 9},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {16, 16, 11, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8},
+ {16, 16, 11, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8}
+};
+const int recoUiCallDial::CALL_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY] = {
+ {20, 20, 14, 15, 12, 15, 14, 13, 9, 12, 10, 13, 13, 9},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {14, 14, 10, 11, 9, 11, 10, 9, 7, 9, 8, 9, 9, 7},
+ {14, 14, 10, 11, 9, 11, 10, 9, 7, 9, 8, 9, 9, 7}
+};
+
+const QString recoUiCallDial::DIAL_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_bg_small.jpg",
+":/res/image/pwd_bg_large.jpg",
+":/res/image/pwd_bg_middle.jpg",
+":/res/image/pwd_bg_large.jpg",
+":/res/image/pwd_bg_middle.jpg"
+};
+
+const QString recoUiCallDial::CALL_BTN_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_confirm_small.png",
+":/res/image/pwd_confirm_large.png",
+":/res/image/pwd_confirm_middle.png",
+":/res/image/pwd_confirm_large.png",
+":/res/image/pwd_confirm_middle.png"
+};
+const QString recoUiCallDial::CALL_BTN_DISABLE_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_confirm_small_disable.png",
+":/res/image/pwd_confirm_large_disable.png",
+":/res/image/pwd_confirm_middle_disable.png",
+":/res/image/pwd_confirm_large_disable.png",
+":/res/image/pwd_confirm_middle_disable.png"
+};
+const int recoUiCallDial::CALL_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {344, 430, 430, 430, 430};
+const int recoUiCallDial::CALL_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {72, 90, 90, 90, 90};
+
+const QString recoUiCallDial::BACK_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_back_small.png",
+":/res/image/pwd_back_large.png",
+":/res/image/pwd_back_middle.png",
+":/res/image/pwd_back_large.png",
+":/res/image/pwd_back_middle.png"
+};
+const int recoUiCallDial::BACK_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {20, 24, 24, 24, 24};
+const int recoUiCallDial::BACK_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {35, 44, 44, 44, 44};
+
+const QString recoUiCallDial::DEL_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_del_small.png",
+":/res/image/pwd_del_large_black.png",
+":/res/image/pwd_del_middle.png",
+":/res/image/pwd_del_large_black.png",
+":/res/image/pwd_del_middle.png"
+};
+const int recoUiCallDial::DEL_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {344, 35, 35, 35, 35};
+const int recoUiCallDial::DEL_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {344, 24, 24, 24, 24};
+
+const QString recoUiCallDial::NUM_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/num_btn_small.png",
+":/res/image/num_btn_large.png",
+":/res/image/num_btn_middle.png",
+":/res/image/num_btn_large.png",
+":/res/image/num_btn_middle.png"
+};
+
+
+
+recoUiCallDial::recoUiCallDial(QWidget *parent) : WidgetWithBackstageInterface(parent)
+{
+ qDebug() << "recoUiCallDial()";
+
+ resize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
+
+ setAutoFillBackground(true);
+ QPalette palette(this->palette());
+ palette.setBrush(QPalette::Window,QBrush(QPixmap(DIAL_BG[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ //palette.setBrush(QPalette::Window, Qt::white);
+ setPalette(palette);
+
+ const int btnWidth = UiConfig::GetInstance()->getUiWidth() / 8;
+
+ m_btnBack = new QPushButton(this);
+ setButtonBackImage(m_btnBack, BACK_BTN[UiConfig::GetInstance()->getScreenConfigIndex()],
+ BACK_BTN_W[UiConfig::GetInstance()->getScreenConfigIndex()],
+ BACK_BTN_H[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ m_btnBack->setFixedSize(btnWidth, btnWidth);
+ //m_btnBack->setStyleSheet("QPushButton:focus{outline: none;}");
+ m_btnBack->setFocusPolicy(Qt::NoFocus);
+ connect(m_btnBack, SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
+
+ QFont ft;
+ ft.setWeight(ft.weight() * 2 > 99 ? 99 : ft.weight() * 2);//Weight must be between 0 and 99
+
+ m_editDevCode = new QLineEdit(this);
+ m_editDevCode->setFixedWidth(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.9));
+ m_editDevCode->setReadOnly(true);
+ QPalette lineEditPal;
+ lineEditPal.setColor(QPalette::Text,QColor(255, 255, 255, 255));
+ m_editDevCode->setPalette(lineEditPal);
+ ft.setPointSize(DEV_CODE_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_editDevCode->setFont(ft);
+ m_editDevCode->setStyleSheet("background:transparent;border-width:0;border-style:outset");
+ m_editDevCode->setAlignment(Qt::AlignCenter);
+ connect(m_editDevCode, SIGNAL(textChanged(const QString&)), this, SLOT(slotTextChanged(const QString&)));
+
+ QPalette btnPal;
+ btnPal.setColor(QPalette::ButtonText,QColor(255, 255, 255, 255));
+ QGridLayout* glayMid = new QGridLayout();
+ for(int i=0; isetText(QString::number(i));
+ m_btnsNum[i]->setPalette(btnPal);
+ ft.setPointSize(NUM_BTN_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_btnsNum[i]->setFont(ft);
+ m_btnsNum[i]->setFlat(true);
+ m_btnsNum[i]->setCursor(QCursor(Qt::PointingHandCursor));
+ m_btnsNum[i]->setFocusPolicy(Qt::NoFocus);
+ m_btnsNum[i]->setFixedSize(btnWidth, btnWidth);
+ m_btnsNum[i]->setStyleSheet("background-color:transparent;border-radius:0px;focus{outline: none;}");
+ connect(m_btnsNum[i], SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
+ if(!UiConfig::GetInstance()->isRkDevice()){
+ connect(m_btnsNum[i], SIGNAL(pressed()), this, SLOT(slotBtnPressed()));
+ connect(m_btnsNum[i], SIGNAL(released()), this, SLOT(slotBtnReleased()));
+ }
+ if(i > 0){
+ const int pos = i - 1;
+ glayMid->addWidget(m_btnsNum[i], pos / 3, pos % 3);
+ }
+ }
+ m_btnBackspace = new QPushButton(this);
+ setButtonBackImage(m_btnBackspace, DEL_BTN[UiConfig::GetInstance()->getScreenConfigIndex()],
+ DEL_BTN_W[UiConfig::GetInstance()->getScreenConfigIndex()],
+ DEL_BTN_H[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ m_btnBackspace->setFixedSize(btnWidth, btnWidth);
+ connect(m_btnBackspace, SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
+
+ glayMid->addWidget(m_btnsNum[0], 3, 1);
+ glayMid->addWidget(m_btnBackspace, 3, 2);
+
+ m_btnCall = new QPushButton(this);
+ m_btnCall->setText(tr("呼叫"));
+ m_btnCall->setPalette(btnPal);
+ m_btnCall->setFlat(true);
+ m_btnCall->setCursor(QCursor(Qt::PointingHandCursor));
+ m_btnCall->setFocusPolicy(Qt::NoFocus);
+ m_btnCall->setFixedSize(CALL_BTN_W[UiConfig::GetInstance()->getScreenConfigIndex()],
+ UiConfig::GetInstance()->isRkDevice() ?
+ (CALL_BTN_H[UiConfig::GetInstance()->getScreenConfigIndex()] >> 2 << 2) :
+ CALL_BTN_H[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ ft.setPointSize(CALL_BTN_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_btnCall->setFont(ft);
+ /*m_btnCall->setStyleSheet(QString("background-color:transparent;"
+ "color:white;"
+ "border-image: url(%1);"
+ ).arg(CALL_BTN_BG[UiConfig::GetInstance()->getScreenConfigIndex()]));*/
+ m_btnCall->setStyleSheet("QPushButton {"
+ "border: 0px;"
+ "border-radius:10px;"
+ "background-color:rgb(31, 164, 38);"
+ "focus{outline: none;}"
+ "}"
+ "QPushButton:pressed {"
+ "background-color:rgb(31, 255, 38);"
+ "focus{outline: none;}"
+ "}");
+ connect(m_btnCall, SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
+
+ QVBoxLayout* vlay = new QVBoxLayout();
+ vlay->addWidget(m_btnBack, 1, Qt::AlignLeft | Qt::AlignTop);
+ vlay->addWidget(m_editDevCode, 1, Qt::AlignCenter | Qt::AlignTop);
+ vlay->addSpacing(UiConfig::GetInstance()->getUiHeight() / 3);
+ vlay->addLayout(glayMid);
+ vlay->addStretch(100);
+ vlay->addWidget(m_btnCall, 1, Qt::AlignCenter | Qt::AlignBottom);
+ vlay->setContentsMargins(0, 10, 0, UiConfig::GetInstance()->getUiHeight() / 20);
+ setLayout(vlay);
+
+ m_timer = new QTimer(this);
+ connect(m_timer, SIGNAL(timeout()), this, SLOT(slotTimeout()));
+
+ m_tooltip = new CenterMsgWidget(this); // 不继承父组件样式
+ m_tooltip->hide();
+ m_tooltipTimer = new QTimer(this);
+ m_tooltipTimer->setSingleShot(true);
+ connect(m_tooltipTimer, &QTimer::timeout, this, &recoUiCallDial::onTooltipTimeout);
+
+}
+
+void recoUiCallDial::setToolip(const QString &message, int millisecondTimeout) {
+ if (m_tooltip != nullptr) {
+ m_tooltip->showMsg(message, 64);
+ m_tooltip->show();
+ m_tooltip->raise();
+ m_tooltipTimer->start(millisecondTimeout);
+ }
+}
+
+void recoUiCallDial::setPlatformConnected(bool connected) {
+ m_platformConnected = connected;
+}
+
+ void recoUiCallDial::onTooltipTimeout(){
+ m_tooltip->hide();
+ }
+
+void recoUiCallDial::reset()
+{
+ m_editDevCode->clear();
+ m_timer->start(TIMEOUT);
+ m_backstageIf->stopIdentyState();
+ if(m_candidate){
+ delete m_candidate;
+ m_candidate = nullptr;
+ }
+}
+
+void recoUiCallDial::slotBtnClicked()
+{
+ m_timer->start(TIMEOUT);
+ const QObject* send = sender();
+ if (send == m_btnCall) {
+ if (m_platformConnected) {
+ auto code = m_editDevCode->text();
+ if (code.isEmpty()) {
+ setToolip("号码不能为空", 1500);
+ } else {
+ auto iterator = std::find_if(m_devList.cbegin(), m_devList.cend(),
+ [&code](const stCallDev &device) { return device.code == code.toStdString(); });
+ if (iterator != m_devList.cend()) {
+ if (iterator->status == 0) {
+ setToolip("呼叫设备离线,请稍后重试", 1500);
+ } else {
+ m_timer->stop();
+ slotCall();
+ emit signalCallBtnPressed(QString::fromStdString(iterator->name));
+ }
+ } else {
+ setToolip("设备不存在", 1500);
+ }
+ }
+ } else {
+ setToolip("当前设备离线,请稍后重试", 1500);
+ }
+ }else if (send == m_btnBackspace) {
+ QString text = m_editDevCode->text();
+ if(text.size()){
+ m_editDevCode->setText(text.left(text.size() - 1));
+ }
+ }else if (send == m_btnBack) {
+ exit();
+ }else{
+ if(m_editDevCode->text().length() >= CODE_LEN_MAX){
+ return;
+ }
+ for(int i=0; isetText(m_editDevCode->text() + m_btnsNum[i]->text());
+ break;
+ }
+ }
+ }
+ if(UiConfig::GetInstance()->isRkDevice()){
+ update();
+ }
+}
+
+void recoUiCallDial::slotBtnPressed()
+{
+ dynamic_cast(sender())->setStyleSheet(QString("QPushButton {"
+ "border: 0px;"
+ "}"
+ "QPushButton:pressed {"
+ "border: 0px;"
+ "background:url(%1);"
+ "background-repeat:none;"
+ "background-position:center;"
+ "}")
+ .arg(NUM_BTN[UiConfig::GetInstance()->getScreenConfigIndex()]));
+}
+
+void recoUiCallDial::slotBtnReleased()
+{
+ dynamic_cast(sender())->setStyleSheet("background-color:transparent;border-radius:0px;focus{outline: none;}");
+}
+
+void recoUiCallDial::slotTimeout()
+{
+ exit();
+}
+
+void recoUiCallDial::slotItemChoosed(int index) {
+ if (index < m_devList.size()) {
+ auto event = new AsyncEvent([=]() {
+ m_timer->start(TIMEOUT);
+ m_editDevCode->setText(QString::fromStdString(m_devList.at(index).code));
+ if (UiConfig::GetInstance()->isRkDevice()) {
+ update();
+ }
+ });
+ QCoreApplication::postEvent(this, event);
+ }
+}
+
+void recoUiCallDial::slotTextChanged(const QString& text)
+{
+ m_devList.clear();
+ if(m_candidate){
+ delete m_candidate;
+ m_candidate = nullptr;
+ }
+ if(text.length() < CODE_LEN_MIN){
+ return;
+ }
+ m_backstageIf->queryCallDevList(text.toStdString(), m_devList);
+ QVector opns;
+ for(auto &item : m_devList){
+ QString dev{item.code.c_str()};
+ dev += "(";
+ dev += item.name.c_str();
+ if(item.status == 0){
+ dev += tr("-离线");
+ }
+ dev += ")";
+ opns.append(myListWidget::SetOpnCfg(dev));
+ }
+ showCandidate(opns);
+}
+
+void recoUiCallDial::slotCall() {
+ auto iterator = std::find_if(m_devList.cbegin(), m_devList.cend(),
+ [this](const stCallDev &device) { return device.code == m_editDevCode->text().toStdString(); });
+ if (iterator != m_devList.cend()) {
+ m_backstageIf->callDev(iterator->devTag, iterator->type);
+ }
+}
+
+void recoUiCallDial::showCandidate(const QVector& opns)
+{
+ if(opns.size() == 0){
+ return;
+ }
+ m_candidate = new SearchBarCandidate(opns, 0, this);
+ m_candidate->setFixedSize(m_editDevCode->width(), m_editDevCode->height() * 5);
+ m_candidate->move(m_editDevCode->x(), m_editDevCode->y() + m_editDevCode->height() + 20);
+ m_candidate->show();
+ connect(m_candidate, SIGNAL(signalItemChoosed(int)), this, SLOT(slotItemChoosed(int)));
+}
+
+void recoUiCallDial::exit()
+{
+ m_timer->stop();
+ emit signalShowRecognizePage();
+}
+
diff --git a/Linguist/recoUi/recoUiCallDial.h b/Linguist/recoUi/recoUiCallDial.h
new file mode 100644
index 0000000..992506e
--- /dev/null
+++ b/Linguist/recoUi/recoUiCallDial.h
@@ -0,0 +1,79 @@
+#ifndef RECOUICALLDIAL_H
+#define RECOUICALLDIAL_H
+
+#include "UiTools.h"
+#include "UiConfig.h"
+
+class CenterMsgWidget;
+
+class recoUiCallDial : public WidgetWithBackstageInterface
+{
+ Q_OBJECT
+public:
+ static const int DEV_CODE_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int NUM_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int CALL_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const QString DIAL_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString CALL_BTN_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString CALL_BTN_DISABLE_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int CALL_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int CALL_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString BACK_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int BACK_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int BACK_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString DEL_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int DEL_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int DEL_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString NUM_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+
+ explicit recoUiCallDial(QWidget *parent = nullptr);
+ void reset();
+ void setToolip(const QString &message, int millisecondTimeout);
+ void setPlatformConnected(bool connected);
+
+signals:
+ void signalShowRecognizePage();
+ void signalCallBtnPressed(const QString&);
+
+public slots:
+ void slotBtnClicked();
+ void slotBtnPressed();
+ void slotBtnReleased();
+
+ void slotTimeout();
+ void slotItemChoosed(int index);
+ void slotTextChanged(const QString& text);
+
+ void slotCall();
+
+protected:
+ void onTooltipTimeout();
+
+private:
+ enum{
+ NUM_BTNS_QTY = 10,
+ TIMEOUT = 30000,
+ CODE_LEN_MIN = 3,
+ CODE_LEN_MAX = 16,
+ };
+
+ QPushButton* m_btnBack;
+ QLineEdit* m_editDevCode;
+ QPushButton* m_btnsNum[NUM_BTNS_QTY];
+ QPushButton* m_btnBackspace;
+ QPushButton* m_btnCall;
+ SearchBarCandidate* m_candidate = nullptr;
+
+ CenterMsgWidget *m_tooltip = nullptr;
+ QTimer *m_tooltipTimer = nullptr;
+
+ QTimer* m_timer;
+
+ bool m_platformConnected = false;
+ std::vector m_devList;
+
+ void showCandidate(const QVector& opns);
+ void exit();
+};
+
+#endif // RECOUICALLDIAL_H
diff --git a/Linguist/recoUi/recoUiHealthCode.cpp b/Linguist/recoUi/recoUiHealthCode.cpp
new file mode 100644
index 0000000..7546310
--- /dev/null
+++ b/Linguist/recoUi/recoUiHealthCode.cpp
@@ -0,0 +1,1889 @@
+#include "recoUiHealthCode.h"
+#include
+#include
+#include
+#include
+
+#include "libcJSON.h"
+#include "rw_zlog.h"
+#include "common_utils.h"
+#include "file_utils.h"
+#include "ScopeGuard.h"
+
+
+static const QColor green(31, 164, 38); //166
+static const QColor yellow(232, 105, 20);
+static const QColor red(250, 59, 59);
+static const QColor purple(128, 0, 128);
+
+
+const int recoUiHealthCodePage::PIC_WIDGET_H_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {200, 200, 200, 201, 201};
+
+#if 1
+recoUiHealthCodePage::recoUiHealthCodePage(int type, QWidget *parent) : QWidget(parent)
+{
+ qDebug() << "recoUiHealthCodePage()";
+
+ resize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
+ setAutoFillBackground(true);
+
+ QPalette labelPal;
+ labelPal.setColor(QPalette::Background,QColor(0, 0, 0, 0));
+ QFont ft;
+
+ m_labelTitle = new QLabel(this);
+ m_labelTitle->setText(tr("健康码智能核验系统"));
+ labelPal.setColor(QPalette::WindowText, Qt::white);
+ m_labelTitle->setPalette(labelPal);
+ ft.setBold(true);
+ ft.setPointSize(12);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelTitle->setFont(ft);
+
+ QPalette pal = palette();
+ pal.setColor(QPalette::Background, QColor(255, 255, 255, 255));
+
+ RoundedWidget* healthMsg = new RoundedWidget(this);
+ healthMsg->setFixedSize(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.9),
+ static_cast(UiConfig::GetInstance()->getUiHeight() * 0.45));
+ healthMsg->setAutoFillBackground(true);
+ healthMsg->setPalette(pal);
+
+ m_labelTempTip = new QLabel(this);
+ m_labelTempTip->setText(tr("体温:"));
+ labelPal.setColor(QPalette::WindowText, Qt::black);
+ m_labelTempTip->setPalette(labelPal);
+ ft.setBold(true);
+ ft.setPointSize(14);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelTempTip->setFont(ft);
+
+ m_labelTemp = new QLabel("36.5℃", healthMsg);
+ m_labelTemp->setPalette(labelPal);
+ m_labelTemp->setFont(ft);
+
+ QLabel* labelCodePic = new QLabel(healthMsg);
+ //QLabel* labelCode = new QLabel(healthMsg);
+ //labelCode->setAutoFillBackground(true);
+ //labelCode->setAlignment(Qt::AlignCenter);
+ //labelCode->setFixedWidth(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.7));
+ if(0 == type){
+ labelCodePic->setPixmap(QPixmap(":/res/image/health_code_green_large.png").scaled(140, 140, Qt::KeepAspectRatio));
+ //labelCode->setText(tr("绿码"));
+ //pal.setColor(QPalette::WindowText, green);
+ //pal.setColor(QPalette::Background, QColor(200, 247, 200, 100));
+ }else if(1 == type){
+ labelCodePic->setPixmap(QPixmap(":/res/image/health_code_yellow_large.png").scaled(140, 140, Qt::KeepAspectRatio));
+ //labelCode->setText(tr("黄码"));
+ //pal.setColor(QPalette::WindowText, yellow);
+ //pal.setColor(QPalette::Background, QColor(232, 105, 20, 100));
+ }else if(2 == type){
+ labelCodePic->setPixmap(QPixmap(":/res/image/health_code_red_large.png").scaled(140, 140, Qt::KeepAspectRatio));
+ //labelCode->setText(tr("红码"));
+ //pal.setColor(QPalette::WindowText, red);
+ //pal.setColor(QPalette::Background, QColor(218, 59, 59, 100));
+ }
+ else if(3 == type){
+ labelCodePic->setPixmap(QPixmap(":/res/image/health_code_grey_large.png").scaled(140, 140, Qt::KeepAspectRatio));
+ //labelCode->setText(tr("红码"));
+ //pal.setColor(QPalette::WindowText, red);
+ //pal.setColor(QPalette::Background, QColor());
+ }
+ //labelCode->setPalette(pal);
+
+ QLabel* labelNameTip = new QLabel(healthMsg);
+ labelNameTip->setText(tr("姓名:"));
+ labelNameTip->setPalette(labelPal);
+ ft.setBold(false);
+ ft.setPointSize(8);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ labelNameTip->setFont(ft);
+ m_labelName = new QLabel("张**", healthMsg);
+ m_labelName->setPalette(labelPal);
+ m_labelName->setFont(ft);
+
+ QLabel* labelIdNoTip = new QLabel(healthMsg);
+ labelIdNoTip->setText(tr("身份证:"));
+ labelIdNoTip->setPalette(labelPal);
+ ft.setBold(false);
+ ft.setPointSize(8);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ labelIdNoTip->setFont(ft);
+ m_labelIdNo = new QLabel("**************5934", healthMsg);
+ m_labelIdNo->setPalette(labelPal);
+ m_labelIdNo->setFont(ft);
+
+ pal.setColor(QPalette::WindowText, Qt::white);
+ pal.setColor(QPalette::Background, QColor(245, 245, 245));
+ const int MSG_WGT_WIDTH = static_cast(UiConfig::GetInstance()->getUiWidth() * 0.4);
+ const int MSG_WGT_HEIGHT = static_cast(UiConfig::GetInstance()->getUiWidth() * 0.2);
+
+ m_covid19Testing = new RoundedWidget(healthMsg);
+ m_covid19Testing->setFixedSize(MSG_WGT_WIDTH, MSG_WGT_HEIGHT);
+ m_covid19Testing->setAutoFillBackground(true);
+ m_covid19Testing->setPalette(pal);
+
+ m_labelC19T = new QLabel(m_covid19Testing);
+ m_labelC19T->setPixmap(QPixmap(":/res/image/c19t_white_large.png"));
+
+ m_labelC19TTitle = new QLabel(m_covid19Testing);
+ m_labelC19TTitle->setText(tr("核酸检测"));
+ m_labelC19TTitle->setPalette(labelPal);
+ ft.setBold(false);
+ ft.setPointSize(8);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelC19TTitle->setFont(ft);
+
+ m_stackC19T = new QStackedWidget(m_covid19Testing);
+ m_stackC19T->setFixedSize(static_cast(MSG_WGT_WIDTH * 0.8), static_cast(MSG_WGT_HEIGHT * 0.4));
+ for(int i=0; i<3; i++){
+ QWidget* wgt = new QWidget(m_stackC19T);
+ QLabel* time = new QLabel(QString::number((i + 1) * 24), wgt);
+ time->setPalette(pal);
+ ft.setPointSize(16);
+ time->setFont(ft);
+ QLabel* tip = new QLabel("小时\n阴性", wgt);
+ tip->setPalette(pal);
+ ft.setPointSize(6);
+ tip->setFont(ft);
+ QHBoxLayout* hb = new QHBoxLayout();
+ hb->addStretch();
+ hb->addWidget(time);
+ hb->addWidget(tip);
+ //hb->setSpacing(0);
+ hb->setMargin(0);
+ hb->addStretch();
+ wgt->setLayout(hb);
+ m_stackC19T->addWidget(wgt);
+ }
+ ft.setBold(true);
+ ft.setPointSize(10);
+ QLabel* labelNegative = new QLabel("阴性", m_stackC19T);
+ labelNegative->setFont(ft);
+ labelNegative->setAlignment(Qt::AlignCenter);
+ m_stackC19T->addWidget(labelNegative);
+ QLabel* labelPositive = new QLabel("阳性", m_stackC19T);
+ labelPositive->setFont(ft);
+ labelPositive->setAlignment(Qt::AlignCenter);
+ m_stackC19T->addWidget(labelPositive);
+
+ pal.setColor(QPalette::WindowText, Qt::black);
+
+ QLabel* labelNodata = new QLabel("暂无数据", m_stackC19T);
+ labelNodata->setAlignment(Qt::AlignCenter);
+ labelNodata->setPalette(pal);
+ ft.setBold(true);
+ ft.setPointSize(10);
+ labelNodata->setFont(ft);
+ m_stackC19T->addWidget(labelNodata);
+ m_stackC19T->setCurrentIndex(5); //test.........................................................
+
+ m_labelC19TTime = new QLabel("2022-04-01", m_covid19Testing);
+ m_labelC19TTime->setPalette(labelPal);
+ ft.setBold(false);
+ ft.setPointSize(6);
+ //ft.setPointSize(WEL_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelC19TTime->setFont(ft);
+
+ RoundedWidget* antibodyTesting = new RoundedWidget(healthMsg);
+ antibodyTesting->setFixedSize(MSG_WGT_WIDTH, MSG_WGT_HEIGHT);
+ antibodyTesting->setAutoFillBackground(true);
+ antibodyTesting->setPalette(pal);
+
+ QLabel* labelAbT = new QLabel(antibodyTesting);
+ labelAbT->setPixmap(QPixmap(":/res/image/abt_large.png"));
+
+ m_labelABTTitle = new QLabel(antibodyTesting);
+ m_labelABTTitle->setText(tr("新冠疫苗"));
+ m_labelABTTitle->setPalette(labelPal);
+ m_labelABTTitle->setAlignment(Qt::AlignCenter);
+ ft.setBold(false);
+ ft.setPointSize(8);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelABTTitle->setFont(ft);
+
+ m_labelABTRes = new QLabel("已接种第3针", antibodyTesting);
+ m_labelABTRes->setAlignment(Qt::AlignCenter);
+ m_labelABTRes->setFixedSize(static_cast(MSG_WGT_WIDTH * 0.8), static_cast(MSG_WGT_HEIGHT * 0.4));
+ m_labelABTRes->setPalette(labelPal);
+ ft.setBold(true);
+ ft.setPointSize(10);
+ //ft.setPointSize(WEL_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelABTRes->setFont(ft);
+
+ m_labelABTTime = new QLabel("2022-4-2 15:33:34", antibodyTesting);
+ m_labelABTTime->setPalette(labelPal);
+ m_labelABTTime->setAlignment(Qt::AlignCenter);
+ ft.setBold(false);
+ ft.setPointSize(6);
+ //ft.setPointSize(WEL_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelABTTime->setFont(ft);
+
+ QHBoxLayout* hlayC19Title = new QHBoxLayout();
+ hlayC19Title->addStretch();
+ hlayC19Title->addWidget(m_labelC19T);
+ hlayC19Title->addWidget(m_labelC19TTitle);
+ hlayC19Title->addStretch();
+ QHBoxLayout* hlayAbtTitle = new QHBoxLayout();
+ hlayAbtTitle->addStretch();
+ hlayAbtTitle->addWidget(labelAbT);
+ hlayAbtTitle->addWidget(m_labelABTTitle);
+ hlayAbtTitle->addStretch();
+ QHBoxLayout* hlayTemp = new QHBoxLayout();
+ hlayTemp->addStretch();
+ hlayTemp->addWidget(m_labelTempTip);
+ hlayTemp->addWidget(m_labelTemp);
+ hlayTemp->addStretch();
+ hlayTemp->setSpacing(0);
+ QHBoxLayout* hlayName = new QHBoxLayout();
+ hlayName->addStretch();
+ hlayName->addWidget(labelNameTip);
+ hlayName->addWidget(m_labelName);
+ hlayName->addStretch();
+ QHBoxLayout* hlayIdNo = new QHBoxLayout();
+ hlayIdNo->addStretch();
+ hlayIdNo->addWidget(labelIdNoTip);
+ hlayIdNo->addWidget(m_labelIdNo);
+ hlayIdNo->addStretch();
+ QVBoxLayout* vlayIdMsg = new QVBoxLayout();
+ vlayIdMsg->addLayout(hlayName);
+ vlayIdMsg->addLayout(hlayIdNo);
+
+ QVBoxLayout* vlayCovid19Testing = new QVBoxLayout();
+ vlayCovid19Testing->addLayout(hlayC19Title);
+ //vlayCovid19Testing->addWidget(m_labelC19TTitle, 1, Qt::AlignCenter);
+ //vlayCovid19Testing->addWidget(m_labelC19TRes, 1, Qt::AlignCenter);
+ vlayCovid19Testing->addWidget(m_stackC19T, 1, Qt::AlignCenter);
+ vlayCovid19Testing->addWidget(m_labelC19TTime, 1, Qt::AlignCenter);
+ vlayCovid19Testing->setSpacing(0);
+ vlayCovid19Testing->setMargin(5);
+ m_covid19Testing->setLayout(vlayCovid19Testing);
+
+ QVBoxLayout* vlayAntibodyTesting = new QVBoxLayout();
+ vlayAntibodyTesting->addLayout(hlayAbtTitle);
+ //vlayAntibodyTesting->addWidget(m_labelABTTitle, 1, Qt::AlignCenter);
+ vlayAntibodyTesting->addWidget(m_labelABTRes, 1, Qt::AlignCenter);
+ vlayAntibodyTesting->addWidget(m_labelABTTime, 1, Qt::AlignCenter);
+ vlayAntibodyTesting->setSpacing(0);
+ vlayAntibodyTesting->setMargin(5);
+ antibodyTesting->setLayout(vlayAntibodyTesting);
+
+ QHBoxLayout* hlayTesting = new QHBoxLayout();
+ hlayTesting->addWidget(m_covid19Testing);
+ hlayTesting->addWidget(antibodyTesting);
+ hlayTesting->setSpacing(0);
+
+ QVBoxLayout* vlayHealth = new QVBoxLayout();
+ vlayHealth->addLayout(hlayTemp);
+ vlayHealth->addWidget(labelCodePic, 1, Qt::AlignCenter);
+ //vlayHealth->addWidget(labelCode, 1, Qt::AlignCenter);
+ vlayHealth->addLayout(vlayIdMsg);
+ vlayHealth->addLayout(hlayTesting);
+ healthMsg->setLayout(vlayHealth);
+
+
+// trip msg
+ RoundedWidget* tripMsg = new RoundedWidget(this);
+ tripMsg->setFixedSize(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.9),
+ static_cast(UiConfig::GetInstance()->getUiHeight() * 0.2));
+ pal.setColor(QPalette::Background, QColor(255, 255, 255, 255));
+ tripMsg->setAutoFillBackground(true);
+ tripMsg->setPalette(pal);
+
+ QLabel* m_labelTrip = new QLabel(tripMsg);
+ m_labelTrip->setPixmap(QPixmap(":/res/image/pass_large.png"));
+
+ m_labelTripRes = new QLabel("近14天途经中高风险地区", tripMsg);
+ m_labelTripRes->setWordWrap(true);
+ m_labelTripRes->setAlignment(Qt::AlignCenter);
+ ft.setPointSize(10);
+ m_labelTripRes->setFont(ft);
+ m_labelTripResTime = new QLabel("2022-04-20 10:12:13", tripMsg);
+ ft.setPointSize(6);
+ m_labelTripResTime->setFont(ft);
+ m_labelTripResTime->hide();
+
+ QHBoxLayout* hlayTrip = new QHBoxLayout();
+ hlayTrip->addWidget(m_labelTrip, 1);
+ hlayTrip->addWidget(m_labelTripRes, 9);
+ //hlayTrip->addStretch();
+ tripMsg->setLayout(hlayTrip);
+
+
+//access msg
+ RoundedWidget* accMsg = new RoundedWidget(this);
+ accMsg->setFixedSize(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.9),
+ static_cast(UiConfig::GetInstance()->getUiHeight() * 0.2));
+ pal.setColor(QPalette::Background, QColor(255, 255, 255, 255));
+ accMsg->setAutoFillBackground(true);
+ accMsg->setPalette(pal);
+
+ m_labelAcc = new QLabel(accMsg);
+ m_labelAcc->setPixmap(QPixmap(":/res/image/pass_large.png"));
+
+ m_labelAccRes = new QLabel("请通行", accMsg);
+ labelPal.setColor(QPalette::WindowText, Qt::white);
+ m_labelAccRes->setPalette(labelPal);
+ ft.setBold(true);
+ ft.setPointSize(16);
+ //ft.setPointSize(WEL_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelAccRes->setFont(ft);
+
+ m_failReason = new QLabel(accMsg);
+
+ m_labelFacePic = new QWidget(accMsg);
+ m_labelFacePic->setAutoFillBackground(true);
+
+ QVBoxLayout* vlayAcc = new QVBoxLayout();
+ vlayAcc->addWidget(m_labelAccRes, 99, Qt::AlignCenter);
+ vlayAcc->addWidget(m_failReason, 1, Qt::AlignCenter);
+ vlayAcc->setSpacing(5);
+ vlayAcc->setMargin(5);
+
+ QHBoxLayout* hlayAccRes = new QHBoxLayout();
+ hlayAccRes->addWidget(m_labelAcc, 1, Qt::AlignLeft);
+ hlayAccRes->addLayout(vlayAcc, 99);
+ //hlayAccRes->addStretch();
+ hlayAccRes->addWidget(m_labelFacePic, 1, Qt::AlignRight);
+ hlayAccRes->setSpacing(5);
+ accMsg->setLayout(hlayAccRes);
+
+ QVBoxLayout* vlay = new QVBoxLayout();
+ vlay->addWidget(m_labelTitle, 1, Qt::AlignCenter | Qt::AlignTop);
+ //vlay->addWidget(m_labelCurTime, 1, Qt::AlignCenter | Qt::AlignTop);//
+ vlay->addWidget(healthMsg, 7, Qt::AlignCenter | Qt::AlignTop);
+ vlay->addStretch();
+ vlay->addWidget(tripMsg, 1, Qt::AlignCenter | Qt::AlignBottom);
+ vlay->addWidget(accMsg, 1, Qt::AlignCenter | Qt::AlignBottom);
+ //vlay->setContentsMargins(0, 10, 0, (UiConfig::GetInstance()->getUiHeight() / 12) >> 1 << 1);
+ //vlay->setMargin(0);
+ setLayout(vlay);
+}
+#else
+recoUiHealthCodePage::recoUiHealthCodePage(int type, QWidget *parent) : QWidget(parent)
+{
+ qDebug() << "recoUiHealthCodePage()";
+
+ resize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
+ setAutoFillBackground(true);
+
+ QPalette labelPal;
+ labelPal.setColor(QPalette::Background,QColor(0, 0, 0, 0));
+
+ QFont ft;
+ //ft.setWeight(20);//Weight must be between 0 and 99
+
+ m_labelTitle = new QLabel(this);
+ m_labelTitle->setText(tr("健康码智能核验系统"));
+ m_labelTitle->setPalette(labelPal);
+ ft.setBold(true);
+ ft.setPointSize(12);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelTitle->setFont(ft);
+
+#if 0
+ m_labelCurTime = new QLabel("2022-4-2 15:33:34", this);
+ m_labelCurTime->setPalette(labelPal);
+ ft.setBold(false);
+ ft.setPointSize(8);
+ m_labelCurTime->setFont(ft);
+#endif
+
+ QPalette pal = palette();
+#if 0
+ if(0 == type){
+ pal.setColor(QPalette::Background, green);
+ }else if(1 == type){
+ pal.setColor(QPalette::Background, yellow);
+ }else if(2 == type){
+ pal.setColor(QPalette::Background, red);
+ }
+ setPalette(pal);
+#endif
+ pal.setColor(QPalette::Background, QColor(255, 255, 255, 255));
+
+ RoundedWidget* healthMsg = new RoundedWidget(this);
+ healthMsg->setFixedSize(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.9),
+ static_cast(UiConfig::GetInstance()->getUiHeight() * 0.65));
+ healthMsg->setAutoFillBackground(true);
+ healthMsg->setPalette(pal);
+
+ m_labelTempTip = new QLabel(this);
+ m_labelTempTip->setText(tr("体温:"));
+ m_labelTempTip->setPalette(labelPal);
+ ft.setBold(true);
+ ft.setPointSize(14);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelTempTip->setFont(ft);
+
+ m_labelTemp = new QLabel("36.5℃", healthMsg);
+ m_labelTemp->setPalette(labelPal);
+ m_labelTemp->setFont(ft);
+
+ QLabel* labelCodePic = new QLabel(healthMsg);
+ QLabel* labelCode = new QLabel(healthMsg);
+ labelCode->setAutoFillBackground(true);
+ labelCode->setAlignment(Qt::AlignCenter);
+ labelCode->setFixedWidth(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.7));
+ if(0 == type){
+ labelCodePic->setPixmap(QPixmap(":/res/image/health_code_green_large.png"));
+ labelCode->setText(tr("绿码"));
+ pal.setColor(QPalette::WindowText, green);
+ QColor bg(green);
+ pal.setColor(QPalette::Background, QColor(200, 247, 200, 100));
+ }else if(1 == type){
+ labelCodePic->setPixmap(QPixmap(":/res/image/health_code_yellow_large.png"));
+ labelCode->setText(tr("黄码"));
+ pal.setColor(QPalette::WindowText, yellow);
+ pal.setColor(QPalette::Background, QColor(232, 105, 20, 100));
+ }else if(2 == type){
+ labelCodePic->setPixmap(QPixmap(":/res/image/health_code_red_large.png"));
+ labelCode->setText(tr("红码"));
+ pal.setColor(QPalette::WindowText, red);
+ pal.setColor(QPalette::Background, QColor(218, 59, 59, 100));
+ }
+ labelCode->setPalette(pal);
+
+ QLabel* labelNameTip = new QLabel(healthMsg);
+ labelNameTip->setText(tr("姓名:"));
+ labelNameTip->setPalette(labelPal);
+ ft.setBold(false);
+ ft.setPointSize(8);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ labelNameTip->setFont(ft);
+ m_labelName = new QLabel("张**", healthMsg);
+ m_labelName->setPalette(labelPal);
+ m_labelName->setFont(ft);
+
+ QLabel* labelIdNoTip = new QLabel(healthMsg);
+ labelIdNoTip->setText(tr("身份证:"));
+ labelIdNoTip->setPalette(labelPal);
+ ft.setBold(false);
+ ft.setPointSize(8);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ labelIdNoTip->setFont(ft);
+ m_labelIdNo = new QLabel("**************5934", healthMsg);
+ m_labelIdNo->setPalette(labelPal);
+ m_labelIdNo->setFont(ft);
+
+
+ pal.setColor(QPalette::WindowText, Qt::white);
+ pal.setColor(QPalette::Background, QColor(245, 245, 245));
+ const int MSG_WGT_WIDTH = static_cast(UiConfig::GetInstance()->getUiWidth() * 0.4);
+ const int MSG_WGT_HEIGHT = static_cast(UiConfig::GetInstance()->getUiWidth() * 0.25);
+
+ m_covid19Testing = new RoundedWidget(healthMsg);
+ m_covid19Testing->setFixedSize(MSG_WGT_WIDTH, MSG_WGT_HEIGHT);
+ m_covid19Testing->setAutoFillBackground(true);
+ m_covid19Testing->setPalette(pal);
+
+ m_labelC19TTitle = new QLabel(m_covid19Testing);
+ m_labelC19TTitle->setText(tr("核酸检测"));
+ m_labelC19TTitle->setPalette(labelPal);
+ ft.setBold(false);
+ ft.setPointSize(8);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelC19TTitle->setFont(ft);
+
+ #if 0
+ m_labelC19TRes = new QLabel("24小时阴性", m_covid19Testing);
+ m_labelC19TRes->setPalette(labelPal);
+ ft.setBold(true);
+ ft.setPointSize(8);
+ //ft.setPointSize(WEL_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelC19TRes->setFont(ft);
+ #endif
+
+ m_stackC19T = new QStackedWidget(m_covid19Testing);
+ m_stackC19T->setFixedSize(static_cast(MSG_WGT_WIDTH * 0.8), static_cast(MSG_WGT_HEIGHT * 0.4));
+ for(int i=0; i<3; i++){
+ QWidget* wgt = new QWidget(m_stackC19T);
+ QLabel* time = new QLabel(QString::number((i + 1) * 24), wgt);
+ time->setPalette(pal);
+ ft.setPointSize(16);
+ time->setFont(ft);
+ QLabel* tip = new QLabel("小时\n阴性", wgt);
+ tip->setPalette(pal);
+ ft.setPointSize(6);
+ tip->setFont(ft);
+ QHBoxLayout* hb = new QHBoxLayout();
+ hb->addStretch();
+ hb->addWidget(time);
+ hb->addWidget(tip);
+ //hb->setSpacing(0);
+ hb->setMargin(0);
+ hb->addStretch();
+ wgt->setLayout(hb);
+ m_stackC19T->addWidget(wgt);
+ }
+ ft.setBold(true);
+ ft.setPointSize(10);
+ QLabel* labelNegative = new QLabel("阴性", m_stackC19T);
+ labelNegative->setFont(ft);
+ labelNegative->setAlignment(Qt::AlignCenter);
+ m_stackC19T->addWidget(labelNegative);
+ QLabel* labelPositive = new QLabel("阳性", m_stackC19T);
+ labelPositive->setFont(ft);
+ labelPositive->setAlignment(Qt::AlignCenter);
+ m_stackC19T->addWidget(labelPositive);
+
+ pal.setColor(QPalette::WindowText, Qt::black);
+
+ QLabel* labelNodata = new QLabel("暂无数据", m_stackC19T);
+ labelNodata->setAlignment(Qt::AlignCenter);
+ labelNodata->setPalette(pal);
+ ft.setBold(true);
+ ft.setPointSize(10);
+ labelNodata->setFont(ft);
+ m_stackC19T->addWidget(labelNodata);
+ m_stackC19T->setCurrentIndex(5); //test.........................................................
+
+ m_labelC19TTime = new QLabel("2022-04-01", m_covid19Testing);
+ m_labelC19TTime->setPalette(labelPal);
+ ft.setBold(false);
+ ft.setPointSize(6);
+ //ft.setPointSize(WEL_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelC19TTime->setFont(ft);
+
+ RoundedWidget* antibodyTesting = new RoundedWidget(healthMsg);
+ antibodyTesting->setFixedSize(MSG_WGT_WIDTH, MSG_WGT_HEIGHT);
+ antibodyTesting->setAutoFillBackground(true);
+ antibodyTesting->setPalette(pal);
+
+ m_labelABTTitle = new QLabel(antibodyTesting);
+ m_labelABTTitle->setText(tr("新冠疫苗"));
+ m_labelABTTitle->setPalette(labelPal);
+ m_labelABTTitle->setAlignment(Qt::AlignCenter);
+ ft.setBold(false);
+ ft.setPointSize(8);
+ //ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelABTTitle->setFont(ft);
+
+ m_labelABTRes = new QLabel("已接种第3针", antibodyTesting);
+ m_labelABTRes->setAlignment(Qt::AlignCenter);
+ m_labelABTRes->setFixedSize(static_cast(MSG_WGT_WIDTH * 0.8), static_cast(MSG_WGT_HEIGHT * 0.4));
+ m_labelABTRes->setPalette(labelPal);
+ ft.setBold(true);
+ ft.setPointSize(10);
+ //ft.setPointSize(WEL_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelABTRes->setFont(ft);
+
+ m_labelABTTime = new QLabel("2022-4-2 15:33:34", antibodyTesting);
+ m_labelABTTime->setPalette(labelPal);
+ m_labelABTTime->setAlignment(Qt::AlignCenter);
+ ft.setBold(false);
+ ft.setPointSize(6);
+ //ft.setPointSize(WEL_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelABTTime->setFont(ft);
+
+
+ m_labelAccRes = new QLabel("请通行", this);
+ labelPal.setColor(QPalette::WindowText, Qt::white);
+ m_labelAccRes->setPalette(labelPal);
+ ft.setBold(true);
+ ft.setPointSize(16);
+ //ft.setPointSize(WEL_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelAccRes->setFont(ft);
+
+
+ QHBoxLayout* hlayTemp = new QHBoxLayout();
+ hlayTemp->addStretch();
+ hlayTemp->addWidget(m_labelTempTip);
+ hlayTemp->addWidget(m_labelTemp);
+ hlayTemp->addStretch();
+ hlayTemp->setSpacing(0);
+ QHBoxLayout* hlayName = new QHBoxLayout();
+ hlayName->addStretch();
+ hlayName->addWidget(labelNameTip);
+ hlayName->addWidget(m_labelName);
+ hlayName->addStretch();
+ QHBoxLayout* hlayIdNo = new QHBoxLayout();
+ hlayIdNo->addStretch();
+ hlayIdNo->addWidget(labelIdNoTip);
+ hlayIdNo->addWidget(m_labelIdNo);
+ hlayIdNo->addStretch();
+ QVBoxLayout* vlayIdMsg = new QVBoxLayout();
+ vlayIdMsg->addLayout(hlayName);
+ vlayIdMsg->addLayout(hlayIdNo);
+
+ QVBoxLayout* vlayCovid19Testing = new QVBoxLayout();
+ vlayCovid19Testing->addWidget(m_labelC19TTitle, 1, Qt::AlignCenter);
+ //vlayCovid19Testing->addWidget(m_labelC19TRes, 1, Qt::AlignCenter);
+ vlayCovid19Testing->addWidget(m_stackC19T, 1, Qt::AlignCenter);
+ vlayCovid19Testing->addWidget(m_labelC19TTime, 1, Qt::AlignCenter);
+ vlayCovid19Testing->setSpacing(0);
+ m_covid19Testing->setLayout(vlayCovid19Testing);
+
+ QVBoxLayout* vlayAntibodyTesting = new QVBoxLayout();
+ vlayAntibodyTesting->addWidget(m_labelABTTitle, 1, Qt::AlignCenter);
+ vlayAntibodyTesting->addWidget(m_labelABTRes, 1, Qt::AlignCenter);
+ vlayAntibodyTesting->addWidget(m_labelABTTime, 1, Qt::AlignCenter);
+ vlayAntibodyTesting->setSpacing(0);
+ antibodyTesting->setLayout(vlayAntibodyTesting);
+
+ QHBoxLayout* hlayTesting = new QHBoxLayout();
+ hlayTesting->addWidget(m_covid19Testing);
+ hlayTesting->addWidget(antibodyTesting);
+ hlayTesting->setSpacing(0);
+
+ QVBoxLayout* vlayHealth = new QVBoxLayout();
+ vlayHealth->addLayout(hlayTemp);
+ vlayHealth->addWidget(labelCodePic, 1, Qt::AlignCenter);
+ vlayHealth->addLayout(vlayIdMsg);
+ vlayHealth->addWidget(labelCode, 1, Qt::AlignCenter);
+ vlayHealth->addLayout(hlayTesting);
+ healthMsg->setLayout(vlayHealth);
+
+
+// acc msg
+ RoundedWidget* accMsg = new RoundedWidget(this);
+ accMsg->setFixedSize(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.9),
+ static_cast(UiConfig::GetInstance()->getUiHeight() * 0.2));
+ pal.setColor(QPalette::Background, QColor(255, 255, 255, 255));
+ accMsg->setAutoFillBackground(true);
+ accMsg->setPalette(pal);
+
+ m_labelAcc = new QLabel(accMsg);
+ if(0 == type){
+ m_labelAcc->setPixmap(QPixmap(":/res/image/pass_large.png"));
+ }else{
+ m_labelAcc->setPixmap(QPixmap(":/res/image/no_entry_large.png"));
+ }
+
+ m_labelTripRes = new QLabel("近14天途经中高风险地区", accMsg);
+ m_labelTripRes->setWordWrap(true);
+ m_labelTripRes->setAlignment(Qt::AlignCenter);
+ ft.setPointSize(10);
+ m_labelTripRes->setFont(ft);
+ m_labelTripResTime = new QLabel("2022-04-20 10:12:13", accMsg);
+ ft.setPointSize(6);
+ m_labelTripResTime->setFont(ft);
+ m_labelTripResTime->hide();
+
+ m_labelFacePic = new QWidget(accMsg);
+ m_labelFacePic->setAutoFillBackground(true);
+
+ QHBoxLayout* hlayAccRes = new QHBoxLayout();
+ hlayAccRes->addStretch();
+ hlayAccRes->addWidget(m_labelAcc);
+ hlayAccRes->addWidget(m_labelAccRes);
+ hlayAccRes->addStretch();
+ hlayAccRes->setSpacing(5);
+
+ QVBoxLayout* vlayTrip = new QVBoxLayout();
+ //vlayTrip->addWidget(m_labelAccRes, 1, Qt::AlignCenter);
+ vlayTrip->addLayout(hlayAccRes);
+ vlayTrip->addWidget(m_labelTripRes, 99, Qt::AlignCenter);
+ vlayTrip->addWidget(m_labelTripResTime, 1, Qt::AlignCenter);
+ vlayTrip->setSpacing(5);
+ vlayTrip->setMargin(5);
+ QHBoxLayout* hlayAcc = new QHBoxLayout();
+ //hlayAcc->addWidget(m_labelAcc);
+ hlayAcc->addLayout(vlayTrip);
+ hlayAcc->addWidget(m_labelFacePic);
+ hlayAcc->setSpacing(5);
+ hlayAcc->setMargin(5);
+ accMsg->setLayout(hlayAcc);
+
+ QVBoxLayout* vlay = new QVBoxLayout();
+ vlay->addWidget(m_labelTitle, 1, Qt::AlignCenter | Qt::AlignTop);
+ //vlay->addWidget(m_labelCurTime, 1, Qt::AlignCenter | Qt::AlignTop);//
+ vlay->addWidget(healthMsg, 6, Qt::AlignCenter | Qt::AlignTop);
+ vlay->addStretch();
+ vlay->addWidget(accMsg, 1, Qt::AlignCenter | Qt::AlignBottom);
+ //vlay->setContentsMargins(0, 10, 0, (UiConfig::GetInstance()->getUiHeight() / 12) >> 1 << 1);
+ //vlay->setMargin(0);
+ setLayout(vlay);
+}
+#endif
+
+void recoUiHealthCodePage::showTemp(float temp)
+{
+ if(temp > 2.0f){
+ QString strTemp;
+ strTemp.setNum(temp, 'f', 1);
+ strTemp += "℃";
+ m_labelTemp->setText(strTemp);
+ m_labelTemp->show();
+ m_labelTempTip->show();
+ }else{
+ m_labelTempTip->hide();
+ m_labelTemp->hide();
+ }
+}
+
+void recoUiHealthCodePage::showPersonMsg(const QString& name, const QString& idNum, const unsigned char* jpgDate, int len)
+{
+ m_labelName->setText(name.contains("*") ? name : QString(utils::hideStrMidSeg(name.toStdString()).c_str()));
+ m_labelIdNo->setText(idNum.contains("*") ? idNum : idNum.left(4) + QString(idNum.size() - 8, QChar('*')) + idNum.right(4));
+ //m_labelCurTime->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
+
+ if(jpgDate == nullptr || len <= 0){
+ qDebug() << "face img data error";
+ m_labelFacePic->hide();
+ return;
+ }
+ QImage faceImg;
+ faceImg.loadFromData(jpgDate, len, "JPG");
+ if(faceImg.isNull()){
+ qDebug() << "load face img failed!";
+ return;
+ }
+
+ QPalette pal(m_labelFacePic->palette());
+ QImage img(ScaleImage(faceImg,
+ QSize(PIC_WIDGET_H_W[UiConfig::GetInstance()->getScreenConfigIndex()],
+ PIC_WIDGET_H_W[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ m_labelFacePic->setFixedSize(img.width(), img.height());
+ pal.setBrush(QPalette::Background, QBrush(img));
+ m_labelFacePic->setPalette(pal);
+ m_labelFacePic->show();
+}
+
+void recoUiHealthCodePage::showAntibodyTestingMsg(int num, const QString& testingTime)
+{
+ QPalette pal(m_labelABTRes->palette());
+ if(num > 0){
+ m_labelABTRes->setText(QString("已接种第%1针").arg(num));
+ pal.setColor(QPalette::WindowText, green);
+ m_labelABTTime->setText(testingTime);
+ m_labelABTTime->show();
+ }else{
+ m_labelABTRes->setText(tr("暂无数据"));
+ pal.setColor(QPalette::WindowText, Qt::black);
+ m_labelABTTime->hide();
+ }
+ m_labelABTRes->setPalette(pal);
+}
+
+void recoUiHealthCodePage::showCovid19TestingMsg(int res, const QString& testingTime)
+{
+ QPalette palTitle(m_labelC19TTitle->palette());
+ QPalette pal(m_covid19Testing->palette());
+ if(res > 0){
+ if(1 == res){
+ qint64 interval = QDateTime::fromString(testingTime, "yyyy-MM-dd hh:mm:ss").secsTo(QDateTime::currentDateTime());
+
+ if(interval <= 24 * 3600){m_stackC19T->setCurrentIndex(0);pal.setColor(QPalette::Background, QColor(6, 118, 244));}
+ else if(interval <= 48 * 3600){m_stackC19T->setCurrentIndex(1);pal.setColor(QPalette::Background, QColor(131, 107, 231));}
+ else if(interval <= 72 * 3600){m_stackC19T->setCurrentIndex(2);pal.setColor(QPalette::Background, QColor(47, 191, 186));}
+ else{m_stackC19T->setCurrentIndex(3);pal.setColor(QPalette::Background, QColor(47, 191, 186));}
+ }else{
+ m_stackC19T->setCurrentIndex(4); //阳性
+ pal.setColor(QPalette::Background, QColor(218, 59, 59));
+ }
+ m_labelC19TTime->setText(testingTime);
+ m_labelC19TTime->show();
+ palTitle.setColor(QPalette::WindowText, Qt::white);
+ m_labelC19T->setPixmap(QPixmap(":/res/image/c19t_white_large.png"));
+ }else{
+ m_stackC19T->setCurrentIndex(5);
+ m_labelC19TTime->hide();
+ pal.setColor(QPalette::Background, QColor(245, 245, 245));
+ palTitle.setColor(QPalette::WindowText, Qt::black);
+ m_labelC19T->setPixmap(QPixmap(":/res/image/c19t_grey_large.png"));
+ }
+ m_covid19Testing->setPalette(pal);
+ m_labelC19TTitle->setPalette(palTitle);
+}
+
+void recoUiHealthCodePage::showAntiGenTestingMsg(int res, const QString& testingTime)
+{
+ QPalette pal(m_labelABTRes->palette());
+ if(res > 0){
+ if(1 == res){
+ m_labelABTRes->setText("阴性");
+ pal.setColor(QPalette::WindowText, green);
+ }else if(2 == res){
+ m_labelABTRes->setText("阳性");
+ pal.setColor(QPalette::WindowText, red);
+ }
+ m_labelABTTime->setText(testingTime);
+ m_labelABTTime->show();
+ }else{
+ m_labelABTRes->setText(tr("暂无数据"));
+ pal.setColor(QPalette::WindowText, Qt::black);
+ m_labelABTTime->hide();
+ }
+ m_labelABTRes->setPalette(pal);
+}
+
+
+void recoUiHealthCodePage::showTripMsg(int res, const QString& tripCity)
+{
+ QPalette pal(m_labelTripRes->palette());
+ if(tripCity.isEmpty()){
+ if(res > 0){
+ m_labelTripRes->setText(1 == res ? "近7日未途经中高风险地区" : "近7日途经中高风险地区");
+ pal.setColor(QPalette::WindowText, 1 == res ? green : red);
+ }else{
+ m_labelTripRes->setText("7天内经过: ");
+ pal.setColor(QPalette::WindowText, Qt::black);
+ }
+ m_labelTripRes->setPalette(pal);
+ }else{
+ do{
+ cJSON *root = cJSON_Parse(tripCity.toStdString().c_str());
+ if(!root){m_labelTripRes->setText("行程数据异常");break;}
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+ cJSON* jsonTmp = cJSON_GetObjectItem(root, "code");
+ if(!jsonTmp){m_labelTripRes->setText("行程数据异常");break;}
+ if(jsonTmp->valueint != 0){break;}
+ jsonTmp = cJSON_GetObjectItem(root, "data");
+ if(!jsonTmp){m_labelTripRes->setText("行程数据异常");break;}
+ cJSON* item = cJSON_GetObjectItem(jsonTmp, "riskLevel");
+ if(!item){m_labelTripRes->setText("行程数据异常");break;}
+ if(6 == item->valueint){
+ item = cJSON_GetObjectItem(jsonTmp, "status");
+ if(!item){m_labelTripRes->setText("行程数据异常");break;}
+ if(0 == item->valueint){m_labelTripRes->setText("行程卡识别失败,请重试");}
+ pal.setColor(QPalette::WindowText, Qt::black);
+ m_labelTripRes->setPalette(pal);
+ break;
+ }else if(1 == item->valueint || 2 == item->valueint){ //低风险、无风险
+ m_labelTripRes->setText("近7日未途经中高风险地区");
+ pal.setColor(QPalette::WindowText, Qt::green);
+ m_labelTripRes->setPalette(pal);
+ break;
+ }
+
+ QString showRes;
+ item = cJSON_GetObjectItem(jsonTmp, "keyAreas");
+ if(item){
+ int cnt = cJSON_GetArraySize(item);
+ LOGI("array size:%d", cnt);
+ QString citys;
+ for(int i=0; ivaluestring;}
+ }
+ if(cnt){
+ showRes += QString("%1").arg("近7日途经重点风险地区
");
+ showRes += QString("%1").arg(citys);
+ }
+ }
+
+ item = cJSON_GetObjectItem(jsonTmp, "highRiskAreas");
+ if(item){
+ int cnt = cJSON_GetArraySize(item);
+ LOGI("array size:%d", cnt);
+ QString citys;
+ for(int i=0; ivaluestring;}
+ }
+ if(cnt){
+ if(showRes.isEmpty()){showRes += QString("%1").arg("近7日途经高风险地区
");}
+ else{showRes += ",";}
+ showRes += QString("%1").arg(citys);
+ }
+ }
+
+ item = cJSON_GetObjectItem(jsonTmp, "middleRiskAreas");
+ if(item){
+ int cnt = cJSON_GetArraySize(item);
+ LOGI("array size:%d", cnt);
+ QString citys;
+ for(int i=0; ivaluestring;}
+ }
+ if(cnt){
+ if(showRes.isEmpty()){showRes += QString("%1").arg("近7日途经中风险地区
");}
+ else{showRes += ",";}
+ showRes += QString("%1").arg(citys);
+ }
+ }
+ m_labelTripRes->setText(showRes);
+ }while(0);
+ }
+}
+
+void recoUiHealthCodePage::showAccResult(bool pass, const QString& failReason, int bgColor)
+{
+ m_labelAccRes->setText(pass ? tr("请通行") : tr("禁止通行"));
+ QPalette pal(m_labelAccRes->palette());
+ pal.setColor(QPalette::WindowText, pass ? green : red);
+ m_labelAccRes->setPalette(pal);
+ m_labelAcc->setPixmap(pass ? QPixmap(":/res/image/ok_large.png") : QPixmap(":/res/image/fail2_large.png"));
+ m_failReason->setText(failReason);
+
+ if(bgColor >= 0 && bgColor <= 3){
+ QPalette pal2 = palette();
+ const QColor colors[] = {green, yellow, red, purple};
+ pal2.setColor(QPalette::Background, colors[bgColor]);
+ setPalette(pal2);
+ }
+}
+
+void recoUiHealthCodePage::setResultShowType(int type)
+{
+ switch(type){
+ case 1:
+ m_labelTitle->setText(tr("CA数字哨兵"));
+ m_labelABTTitle->setText(tr("抗原检测"));
+ break;
+ case 2:
+ m_labelTitle->setText(tr("智能防疫核验系统"));
+ break;
+ default:
+ break;
+ }
+}
+
+#if 0
+void recoUiHealthCodePage::setBgColorByResult(int codeColor, int c19t, int trip, bool pass)
+{
+ QColor color{green};
+ if(c19t == 2 || trip == 3){//核酸阳性、到过重点地区
+ color = purple;
+ }else if(trip == 4){//行程卡核验失败
+ color = yellow;
+ }else if(!pass){
+ color = red;
+ }
+
+ QPalette pal = palette();
+ pal.setColor(QPalette::Background, color);
+ setPalette(pal);
+}
+#endif
+
+recoUiHealthCode::recoUiHealthCode(QWidget *parent) : WidgetWithBackstageInterface(parent)
+{
+ qDebug() << "recoUiHealthCode()";
+
+ m_stackPages = new QStackedWidget(this);
+
+ m_pageGreen = new recoUiHealthCodePage(0, this);
+ m_stackPages->addWidget(m_pageGreen);
+ m_pageYellow = new recoUiHealthCodePage(1, this);
+ m_stackPages->addWidget(m_pageYellow);
+ m_pageRed = new recoUiHealthCodePage(2, this);
+ m_stackPages->addWidget(m_pageRed);
+ m_pageGrey = new recoUiHealthCodePage(3, this);
+ m_stackPages->addWidget(m_pageGrey);
+
+ QVBoxLayout* vlay = new QVBoxLayout();
+ vlay->addWidget(m_stackPages);
+ vlay->setMargin(0);
+ setLayout(vlay);
+}
+
+void recoUiHealthCode::showHealthMsg(int type, float temp, const QString& msg, bool pass,
+ const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor)
+{
+ LOGI("_x_watch_point_, showHealthMsg type %d, msg %s", type, msg.toStdString().c_str());
+ //m_backstageIf->stopIdentyState();//需要外设输入如身份证终止展示
+ switch(type){
+ case 0:_showType0HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ case 1:_showType1HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ case 2:_showType2HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ case 3:_showType3HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ case 4:_showType4HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ case 5:_showType5HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ case 6:_showType6HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ case 7:_showType7HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ case 8:_showType8HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ case 9:_showType9HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ case 101:_showType101HealthData(temp, msg, pass, jpgDate, jpgLen, tripCity, failReason, bgColor);break;
+ default:LOGE("unknow health data type:%d", type);
+ }
+}
+
+void recoUiHealthCode::setResultShowType(int type)
+{
+ m_pageGreen->setResultShowType(type);
+ m_pageYellow->setResultShowType(type);
+ m_pageRed->setResultShowType(type);
+ m_pageGrey->setResultShowType(type);
+}
+
+void recoUiHealthCode::_showType0HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor)
+{
+ QJsonParseError jsonError;
+ const QJsonDocument cfgDoc = QJsonDocument::fromJson(QByteArray(msg.toStdString().c_str()), &jsonError);
+ if (cfgDoc.isNull() || (jsonError.error != QJsonParseError::NoError)) {
+ qDebug() << "json data error:" << jsonError.error;
+ return;
+ }
+ const QJsonObject obj = cfgDoc.object();
+ if (!obj.contains("data")){
+ return;
+ }
+
+ const QJsonObject& resObj = obj.value("data").toObject();
+
+ recoUiHealthCodePage* page = m_pageGreen;
+ int pageIndex = 0;
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ int tripRes = 0;
+
+ const QString& colorCode = resObj.value("jkmStatus").toString();
+ if(colorCode == "yellow"){page = m_pageYellow;pageIndex = 1;}
+ else if(colorCode == "red"){page = m_pageRed;pageIndex = 2;}
+
+ name = resObj.value("idCardName").toString(),
+ idNum = resObj.value("idCardNo").toString();
+ if(resObj.contains("hsjcSearchStatus") && 1 == resObj.value("hsjcSearchStatus").toInt()){
+ c19tRes = resObj.value("hsjcStatus").toString() == "阴性" ? 1 : 2;
+ c19tTime = resObj.value("hsjcQuestTime").toString();
+ }
+ if(resObj.contains("ymjzSearchStatus") && 1 == resObj.value("ymjzSearchStatus").toInt()){
+ abtRes = resObj.value("ymjzStatus").toInt();
+ abtTime = resObj.value("ymjzQuestTime").toString();
+ }
+ if(resObj.contains("xcmSearchStatus") && 1 == resObj.value("xcmSearchStatus").toInt()){
+ tripRes = ("1" == resObj.value("xcmStatus").toString() ? 1 : 2);//行程码返回数据为字符串
+ }
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showType1HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor)
+{
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if(!root){
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ recoUiHealthCodePage* page = m_pageGrey;
+ int pageIndex = 3;
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ int tripRes = 0;
+
+ int cnt = cJSON_GetArraySize(root);
+ qDebug() << "cnt:" << cnt;
+ for(int i=0; ivaluestring};
+ if(!c19t.isEmpty()){c19tRes = (c19t == "阴性" ? 1 : 2);}
+ }
+ jsTmp = cJSON_GetObjectItem(hsRes, "jc_rq");// 检测时间
+ if(jsTmp){c19tTime = jsTmp->valuestring;}
+ }
+ continue;
+ }
+ cJSON * ykmRes = cJSON_GetObjectItem(arrayItem, "ykm_result");
+ if(ykmRes){
+ ykmRes = cJSON_GetObjectItem(ykmRes, "data");
+ if(ykmRes){ykmRes = cJSON_GetObjectItem(ykmRes, "data");}
+ if(ykmRes){ykmRes = cJSON_GetArrayItem(ykmRes, 0);}
+ if(ykmRes){ykmRes = cJSON_GetObjectItem(ykmRes, "JKMYS");}
+ if(ykmRes){
+ if(QString(ykmRes->valuestring) == "绿"){page = m_pageGreen;pageIndex = 0;}
+ else if(QString(ykmRes->valuestring) == "黄"){page = m_pageYellow;pageIndex = 1;}
+ else if(QString(ykmRes->valuestring) == "红"){page = m_pageRed;pageIndex = 2;}
+ }
+ continue;
+ }
+ cJSON * idMsg = cJSON_GetObjectItem(arrayItem, "sqfydsry_result");
+ if(idMsg){
+ cJSON * jsTmp = cJSON_GetObjectItem(idMsg, "identityNum");
+ if(jsTmp){idNum = jsTmp->valuestring;}
+ jsTmp = cJSON_GetObjectItem(idMsg, "name");
+ if(jsTmp){name = jsTmp->valuestring;}
+ continue;
+ }
+ cJSON * ymRes = cJSON_GetObjectItem(arrayItem, "ym_result");
+ if(ymRes){
+ ymRes = cJSON_GetObjectItem(ymRes, "data");
+ if(ymRes){ymRes = cJSON_GetObjectItem(ymRes, "data");}
+ if(ymRes){
+ int needleTimes = cJSON_GetArraySize(ymRes);
+ qDebug() << "needleTimes" << needleTimes;
+ QString nt{"0"};
+ for(int j=0; jvaluestring) > nt){
+ nt = jsTmp->valuestring;
+ jsTmp = cJSON_GetObjectItem(jsArrayItem, "inoculationdate");
+ if(jsTmp){abtTime = jsTmp->valuestring;}
+ }
+ }
+ }
+ }
+ abtRes = nt.toInt();
+ }
+ continue;
+ }
+ }
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showType2HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor)
+{
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if(!root){
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ recoUiHealthCodePage* page = m_pageGreen;
+ int pageIndex = 0;
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ int tripRes = 0;
+
+ cJSON* jsonTmp = cJSON_GetObjectItem(root, "retCode");
+ if(!jsonTmp){return;}
+ if(0 != jsonTmp->valueint){return;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "idCard");
+ if(jsonTmp){idNum = jsonTmp->valuestring;}
+ jsonTmp = cJSON_GetObjectItem(root, "name");
+ if(jsonTmp){name = jsonTmp->valuestring;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "healthStatus");
+ if(jsonTmp){
+ const std::string status{jsonTmp->valuestring};
+ if(status == "中风险"){page = m_pageYellow;pageIndex = 1;}
+ else if(status == "高风险"){page = m_pageRed;pageIndex = 2;}
+ }
+
+ jsonTmp = cJSON_GetObjectItem(root, "covid19Testing");
+ if(jsonTmp){
+ cJSON * jsTmp = cJSON_GetObjectItem(jsonTmp, "result");
+ if(jsTmp){
+ const QString c19t{jsTmp->valuestring};
+ if(!c19t.isEmpty()){c19tRes = (c19t == "阴性" ? 1 : 2);}
+ }
+ jsTmp = cJSON_GetObjectItem(jsonTmp, "testingTime");
+ if(jsTmp){c19tTime = jsTmp->valuestring;}
+ }
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showType3HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor)
+{
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if(!root){
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ recoUiHealthCodePage* page = m_pageGreen;
+ int pageIndex = 0;
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ int tripRes = 0;
+
+ //TODO
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showType4HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor)
+{
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if(!root){
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ recoUiHealthCodePage* page = m_pageGreen;
+ int pageIndex = 0;
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ int tripRes = 0;
+
+ cJSON* jsonTmp = cJSON_GetObjectItem(root, "health");
+ if(jsonTmp){
+ cJSON* jsTmp = cJSON_GetObjectItem(jsonTmp, "color");
+ if(jsTmp){
+ std::string colorCode{jsTmp->valuestring};
+ if("yellow" == colorCode){page = m_pageYellow;pageIndex = 1;}
+ else if("red" == colorCode){page = m_pageRed;pageIndex = 2;}
+ }
+ }
+
+ jsonTmp = cJSON_GetObjectItem(root, "nucleicAcid");
+ if(jsonTmp){
+ cJSON * jsTmp = cJSON_GetObjectItem(jsonTmp, "colorText");
+ if(jsTmp){
+ std::string c19t{jsTmp->valuestring};
+ if("阴性" == c19t){c19tRes = 1;}
+ else if("阳性" == c19t){c19tRes = 2;}
+ }
+ jsTmp = cJSON_GetObjectItem(jsonTmp, "datetime");
+ if(jsTmp){c19tTime = jsTmp->valuestring;}
+ }
+
+ jsonTmp = cJSON_GetObjectItem(root, "vaccine");
+ if(jsonTmp){
+ cJSON * jsTmp = cJSON_GetObjectItem(jsonTmp, "count");
+ if(jsTmp){abtRes = jsTmp->valueint;}
+ jsTmp = cJSON_GetObjectItem(jsonTmp, "date");
+ if(jsTmp){abtTime = jsTmp->valuestring;}
+ }
+
+ jsonTmp = cJSON_GetObjectItem(root, "user");
+ if(jsonTmp){
+ cJSON * jsTmp = cJSON_GetObjectItem(jsonTmp, "name");
+ if(jsTmp){name = jsTmp->valuestring;}
+ jsTmp = cJSON_GetObjectItem(jsonTmp, "idNo");
+ if(jsTmp){idNum = jsTmp->valuestring;}
+ }
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showType5HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor)
+{
+ if(m_resultType != 1){
+ m_resultType = 1;
+ setResultShowType(m_resultType);
+ }
+
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if(!root){
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ recoUiHealthCodePage* page = m_pageGrey;
+ int pageIndex = 3;
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ int tripRes = 0;
+
+ cJSON* jsonTmp = cJSON_GetObjectItem(root, "code");
+ if(!jsonTmp){return;}
+ if(0 != jsonTmp->valueint){return;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "result");
+ if(!jsonTmp){return;}
+
+ cJSON* item = cJSON_GetObjectItem(jsonTmp, "name");
+ if(item){name = item->valuestring;}
+ item = cJSON_GetObjectItem(jsonTmp, "paper_no");
+ if(item){idNum = item->valuestring;}
+
+ item = cJSON_GetObjectItem(jsonTmp, "health_code");
+ if(item){
+ std::string colorCode{item->valuestring};
+ if("00" == colorCode){page = m_pageGreen;pageIndex = 0;}
+ else if("01" == colorCode){page = m_pageYellow;pageIndex = 1;}
+ else if("10" == colorCode){page = m_pageRed;pageIndex = 2;}
+ }
+
+ item = cJSON_GetObjectItem(jsonTmp, "nucleic_info");
+ int cnt = cJSON_GetArraySize(item);
+ LOGI("array size:%d", cnt);
+ //for(int i=0; ivaluestring};
+ if(c19t.find("阴性") != std::string::npos){c19tRes = 1;}
+ else if(c19t.find("阳性") != std::string::npos){c19tRes = 2;}
+ }
+ jsTmp = cJSON_GetObjectItem(arrayItem, "nat_time");// 检测时间
+ if(jsTmp){c19tTime = jsTmp->valuestring;}
+ }
+#if 0
+ item = cJSON_GetObjectItem(jsonTmp, "vaccine_info");
+ if(item){
+ cJSON * jsTmp = cJSON_GetObjectItem(item, "count");
+ if(jsTmp){abtRes = jsTmp->valueint;}
+ jsTmp = cJSON_GetObjectItem(item, "last_vac_time");
+ if(jsTmp){abtTime = jsTmp->valuestring;}
+ }
+#else
+ item = cJSON_GetObjectItem(jsonTmp, "antigen_info");
+ if(item){
+ cJSON * jsTmp = cJSON_GetObjectItem(item, "antigen_code");
+ if(jsTmp){
+ std::string antiGen{jsTmp->valuestring};
+ if(antiGen == "-1"){abtRes = 1;}
+ else if(antiGen == "1"){abtRes = 2;}
+ }
+ jsTmp = cJSON_GetObjectItem(item, "report_time");
+ if(jsTmp){abtTime = jsTmp->valuestring;}
+ }
+#endif
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ //page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showAntiGenTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showTypexHealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor)
+{
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if(!root){
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ recoUiHealthCodePage* page = m_pageGreen;
+ int pageIndex = 0;
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ int tripRes = 0;
+
+ cJSON* jsonTmp = cJSON_GetObjectItem(root, "code");
+ if(!jsonTmp){return;}
+ if(std::string(jsonTmp->valuestring) != "0000"){return;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "data");
+ if(!jsonTmp){return;}
+
+ cJSON* item = cJSON_GetObjectItem(jsonTmp, "queryStatus");
+ if(!item){return;}
+ if(std::string(jsonTmp->valuestring) != "0"){return;}
+
+ item = cJSON_GetObjectItem(jsonTmp, "name");
+ if(item){name = item->valuestring;}
+ item = cJSON_GetObjectItem(jsonTmp, "idcardNo");
+ if(item){idNum = item->valuestring;}
+
+ item = cJSON_GetObjectItem(jsonTmp, "level");
+ if(item){
+ std::string colorCode{item->valuestring};
+ if("YELLOW" == colorCode){page = m_pageYellow;pageIndex = 1;}
+ else if("RED" == colorCode){page = m_pageRed;pageIndex = 2;}
+ }
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showType101HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor)
+{
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if(!root){
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ recoUiHealthCodePage* page = m_pageGreen;
+ int pageIndex = 0;
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ int tripRes = 0;
+
+ cJSON* jsonTmp = cJSON_GetObjectItem(root, "errcode");
+ if(!jsonTmp){return;}
+ if(jsonTmp->valueint != 0){return;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "data");
+ if(!jsonTmp){return;}
+
+ cJSON* item = cJSON_GetObjectItem(jsonTmp, "color");
+ if(item){
+ std::string colorCode{item->valuestring};
+ if("Y" == colorCode){page = m_pageYellow;pageIndex = 1;}
+ else if("R" == colorCode){page = m_pageRed;pageIndex = 2;}
+ }
+
+ item = cJSON_GetObjectItem(jsonTmp, "name");
+ if(item){name = item->valuestring;}
+ item = cJSON_GetObjectItem(jsonTmp, "cid");
+ if(item){idNum = item->valuestring;}
+
+ item = cJSON_GetObjectItem(jsonTmp, "ext");
+ if(item){
+ cJSON *r = cJSON_Parse(item->valuestring);
+ if(r){
+ ON_SCOPE_EXIT([&]{cJSON_Delete(r);});
+ item = cJSON_GetObjectItem(r, "nat");
+ if(item){
+ int cnt = cJSON_GetArraySize(item);
+ LOGI("array size:%d", cnt);
+ if(cnt){
+ cJSON * arrayItem = cJSON_GetArrayItem(item, 0);
+ if(arrayItem){
+ cJSON * jsTmp = cJSON_GetObjectItem(arrayItem, "result");
+ if(jsTmp){
+ std::string c19t{jsTmp->valuestring};
+ if("阴性" == c19t){c19tRes = 1;}
+ else if("阳性" == c19t){c19tRes = 2;}
+ }
+ jsTmp = cJSON_GetObjectItem(arrayItem, "dtime");
+ if(jsTmp){c19tTime = jsTmp->valuestring;}
+ }
+ }
+ }
+
+ item = cJSON_GetObjectItem(r, "vac");
+ if(item){
+ int cnt = cJSON_GetArraySize(item);
+ LOGI("array size:%d", cnt);
+ if(cnt){
+ cJSON * arrayItem = cJSON_GetArrayItem(item, 0);
+ if(arrayItem){
+ cJSON * jsTmp = cJSON_GetObjectItem(arrayItem, "needle_times");
+ if(jsTmp){abtRes = jsTmp->valueint;}
+ jsTmp = cJSON_GetObjectItem(arrayItem, "date");
+ if(jsTmp){abtTime = jsTmp->valuestring;}
+ }
+ }
+ }
+ }
+ }
+
+#if 0
+ jsonTmp = cJSON_GetObjectItem(root, "healthCode");
+ if(jsonTmp){
+ cJSON *r = cJSON_Parse(jsonTmp->valuestring);
+ if(r){
+ ON_SCOPE_EXIT([&]{cJSON_Delete(r);});
+ item = cJSON_GetObjectItem(r, "name");
+ if(item){name = item->valuestring;}
+ item = cJSON_GetObjectItem(r, "cid");
+ if(item){idNum = item->valuestring;}
+ }
+ }
+#endif
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showType6HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor)
+{
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if(!root){
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ recoUiHealthCodePage* page = m_pageGrey;
+ int pageIndex = 3;
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ int tripRes = 0;
+
+ cJSON* jsonTmp = cJSON_GetObjectItem(root, "code");
+ if(!jsonTmp){return;}
+ if(std::string(jsonTmp->valuestring) != "0000"){return;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "ID");
+ if(jsonTmp && jsonTmp->valuestring){idNum = jsonTmp->valuestring;}
+ jsonTmp = cJSON_GetObjectItem(root, "name");
+ if(jsonTmp && jsonTmp->valuestring){name = jsonTmp->valuestring;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "provinceRisklevel");
+ if(jsonTmp && jsonTmp->valuestring){
+ const std::string status{jsonTmp->valuestring};
+ if(status == "00"){page = m_pageGreen;pageIndex = 0;}
+ else if(status == "01"){page = m_pageYellow;pageIndex = 1;}
+ else if(status == "10"){page = m_pageRed;pageIndex = 2;}
+ }
+
+ jsonTmp = cJSON_GetObjectItem(root, "hsjcjg");
+ if(jsonTmp && jsonTmp->valuestring){
+ std::string c19t{jsonTmp->valuestring};
+ if("阴性" == c19t){c19tRes = 1;}
+ else if("阳性" == c19t){c19tRes = 2;}
+ }
+ jsonTmp = cJSON_GetObjectItem(root, "hsjcsj");
+ if(jsonTmp && jsonTmp->valuestring){c19tTime = jsonTmp->valuestring;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "ymjzcs");
+ if(jsonTmp){abtRes = jsonTmp->valueint;}
+ jsonTmp = cJSON_GetObjectItem(root, "jzrq");
+ if(jsonTmp && jsonTmp->valuestring){abtTime = jsonTmp->valuestring;}
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showType7HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor){
+
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if(!root){
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ recoUiHealthCodePage* page = m_pageGrey;
+ int pageIndex = 3;
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ QString antiGentime;
+ int tripRes = 0;
+ // int antigenSts = 0;
+
+ cJSON* state = cJSON_GetObjectItem(root, "state");
+ if(!state && state->valueint != 1) return;
+
+ cJSON* data = cJSON_GetObjectItem(root, "data");
+ if(!data) return;
+
+
+ cJSON* jsonTmp = cJSON_GetObjectItem(data, "health_status");
+ if(jsonTmp){
+ //FJQRJKM 健康码颜色 "1":红码; "2":黄码; "3":绿码
+ if(strcmp(jsonTmp->valuestring, "3") == 0){page = m_pageGreen;pageIndex = 0;}
+ else if(strcmp(jsonTmp->valuestring, "2") == 0){page = m_pageYellow;pageIndex = 1;}
+ else if(strcmp(jsonTmp->valuestring, "1") == 0){page = m_pageRed;pageIndex = 2;}
+ }
+
+ jsonTmp = cJSON_GetObjectItem(data, "vaccines_num");
+ if(jsonTmp){
+ //疫苗接种次数
+ abtRes = atoi(jsonTmp->valuestring);
+ }
+
+ jsonTmp = cJSON_GetObjectItem(data, "caid_status");
+ if(jsonTmp){
+ //FJQRJKM 核酸检测结果 "-1":异常; "0":无 核酸; "2":阴性; "1":阳性
+ c19tRes = 0;
+ if(strcmp(jsonTmp->valuestring, "2") == 0){
+ c19tRes = 1;
+ }else if(strcmp(jsonTmp->valuestring, "1") == 0){
+ c19tRes = 2;
+ }
+ }
+
+ jsonTmp = cJSON_GetObjectItem(data, "newest_sampling_time");
+ // if(jsonTmp) {c19tTime = QString::fromStdString(FileUtils::getTimeString(atol(jsonTmp->valuestring)));}
+ if(jsonTmp && std::string(jsonTmp->valuestring) != ""){
+ int newestSamplingTimeStp = atol(jsonTmp->valuestring);
+ if(newestSamplingTimeStp > 0){
+ c19tTime = QString::fromStdString(FileUtils::getTimeString(newestSamplingTimeStp));
+ }
+ }
+
+ if(c19tTime.isEmpty() && c19tRes > 0){
+ LOGI("c19 time invalid!!!");
+ c19tRes = 0;
+ }
+
+ jsonTmp = cJSON_GetObjectItem(data, "user_name");
+ if(jsonTmp) {name = jsonTmp->valuestring;}
+
+ jsonTmp = cJSON_GetObjectItem(data, "cid");
+ if(jsonTmp) {idNum = jsonTmp->valuestring;}
+
+ //停留中高风险地区状态 0-去过,1-未去过,2-信息不全
+ jsonTmp = cJSON_GetObjectItem(data, "stay_risk_area_status");
+ if(jsonTmp){
+ #if 0
+ if(strcmp(jsonTmp->valuestring, "0") == 0){
+ tripRes = 2;
+ }else if(strcmp(jsonTmp->valuestring, "1") == 0){
+ tripRes = 1;
+ }
+ #else
+ //0:7天内途经省内中高风险地区且无省外旅居史,1:7天内未途经省内中高风险地区且无省外旅居史,2:7天内有省外旅居史
+ if(std::string(jsonTmp->valuestring) == "0"){tripRes = 2;}
+ else if(std::string(jsonTmp->valuestring) == "1"){tripRes = 1;}
+ else if(std::string(jsonTmp->valuestring) == "2"){tripRes = 2;}
+ #endif
+ }
+
+ //抗原检测结果 -1:异常; 0:无抗原检测; 2:阴性; 1:阳性 目前不作展示
+ // jsonTmp = cJSON_GetObjectItem(data, "antigen_status");
+ // if(jsonTmp != nullptr){
+ // if(strcmp(jsonTmp->valuestring, "2") == 0){
+ // antigenSts = 1;
+ // }else if(strcmp(jsonTmp->valuestring, "1") == 0){
+ // antigenSts = 2;
+ // }
+ // }
+
+ // jsonTmp = cJSON_GetObjectItem(data, "newest_antigen_time");
+ // if(jsonTmp != nullptr){
+ // antiGentime = QString::fromStdString(FileUtils::getTimeString(atol(jsonTmp->valuestring)));
+ // }
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, (c19tRes > 0)&&(!c19tTime.toStdString().empty()) ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, (abtRes > 0) && (!abtTime.toStdString().empty()) ? abtTime : "");
+ // page->showAntiGenTestingMsg(antigenSts, (antigenSts > 0) && (!antiGentime.toStdString().empty()) ? antiGentime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showType8HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor){
+ if(m_resultType != 2){
+ m_resultType = 2;
+ setResultShowType(m_resultType);
+ }
+
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if (!root) {
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ QString name;
+ QString idNum;
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ QString antiGentime;
+ int tripRes = 0;
+ // int antigenSts = 0;
+ recoUiHealthCodePage* page = m_pageGrey;
+ int pageIndex = 3;
+
+ cJSON* state = cJSON_GetObjectItem(root, "code");
+ if(!state && std::string(state->valuestring) != "0") return;
+
+ cJSON* jsonTmp = cJSON_GetObjectItem(root, "idNum");
+ if(jsonTmp) {idNum = jsonTmp->valuestring;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "name");
+ if(jsonTmp) {name = jsonTmp->valuestring;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "healthSts");
+ if(jsonTmp){
+ //颜色:"0":绿码; "1":黄码; "2":红码;
+ if(strcmp(jsonTmp->valuestring, "0") == 0){page = m_pageGreen;pageIndex = 0;}
+ else if(strcmp(jsonTmp->valuestring, "1") == 0){page = m_pageYellow;pageIndex = 1;}
+ else if(strcmp(jsonTmp->valuestring, "2") == 0){page = m_pageRed;pageIndex = 2;}
+ }
+
+ jsonTmp = cJSON_GetObjectItem(root, "caidSts");
+ if(jsonTmp){
+ //核酸检测结果 "-1":无结果; "0":阴性; "1":阳性
+ if(std::string(jsonTmp->valuestring) == "0"){
+ c19tRes = 1;
+ }if(std::string(jsonTmp->valuestring) == "1"){
+ c19tRes = 2;
+ }
+ }
+
+ jsonTmp = cJSON_GetObjectItem(root, "caidNewstSampleTime");
+ if(jsonTmp) {c19tTime = jsonTmp->valuestring;}
+
+ if(c19tTime.isEmpty() && c19tRes > 0){
+ LOGI("c19 time invalid!!!");
+ c19tRes = 0;
+ }
+
+
+ jsonTmp = cJSON_GetObjectItem(root, "vaccinesNum");
+ if(jsonTmp) {abtRes = jsonTmp->valueint;}
+ jsonTmp = cJSON_GetObjectItem(root, "vaccinesNewstTime");
+ if(jsonTmp) {abtTime = jsonTmp->valuestring;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "stayRiskAreaSts");
+ if(jsonTmp){
+ #if 0
+ if(std::string(jsonTmp->valuestring) == "0"){tripRes = 1;}
+ else if(std::string(jsonTmp->valuestring) == "1"){tripRes = 2;}
+ #else
+ //0:7天内途经省内中高风险地区且无省外旅居史,1:7天内未途经省内中高风险地区且无省外旅居史,2:7天内有省外旅居史
+ if(std::string(jsonTmp->valuestring) == "0"){tripRes = 2;}
+ else if(std::string(jsonTmp->valuestring) == "1"){tripRes = 1;}
+ else if(std::string(jsonTmp->valuestring) == "2"){tripRes = 2;}
+ #endif
+ }
+
+ //抗原检测结果 -1:异常; 0:无抗原检测; 2:阴性; 1:阳性 目前不作展示
+ // jsonTmp = cJSON_GetObjectItem(data, "antigen_status");
+ // if(jsonTmp != nullptr){
+ // if(strcmp(jsonTmp->valuestring, "2") == 0){
+ // antigenSts = 1;
+ // }else if(strcmp(jsonTmp->valuestring, "1") == 0){
+ // antigenSts = 2;
+ // }
+ // }
+
+ // jsonTmp = cJSON_GetObjectItem(data, "newest_antigen_time");
+ // if(jsonTmp != nullptr){
+ // antiGentime = QString::fromStdString(FileUtils::getTimeString(atol(jsonTmp->valuestring)));
+ // }
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+void recoUiHealthCode::_showType9HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor){
+ cJSON *root = cJSON_Parse(msg.toStdString().c_str());
+ if(!root){
+ qDebug() << "json data error";
+ return;
+ }
+ ON_SCOPE_EXIT([&]{cJSON_Delete(root);});
+
+ recoUiHealthCodePage* page = m_pageGrey;
+ int pageIndex = 3;
+
+ QString name;
+ QString idNum{"******************"};
+ int c19tRes = 0;
+ QString c19tTime;
+ int abtRes = 0;
+ QString abtTime;
+ int tripRes = 0;
+
+ cJSON* jsonTmp = cJSON_GetObjectItem(root, "errcode");
+ if(!jsonTmp){return;}
+ QString errCode{jsonTmp->valuestring};
+ if( errCode != "000000" && (errCode < "100303" || errCode > "100306") ){return;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "colourstatus");
+ if(jsonTmp){
+ //健康码颜色 "1":红码; "2":黄码; "0":绿码
+ if(strcmp(jsonTmp->valuestring, "0") == 0){page = m_pageGreen;pageIndex = 0;;}
+ else if(strcmp(jsonTmp->valuestring, "1") == 0){page = m_pageRed;pageIndex = 2;}
+ else if(strcmp(jsonTmp->valuestring, "2") == 0){page = m_pageYellow;pageIndex = 1;}
+ }
+
+ jsonTmp = cJSON_GetObjectItem(root, "hsstatus");
+ if(jsonTmp){//核酸检测结果,0阴性,1阳性
+ c19tRes = 0;
+ if(strcmp(jsonTmp->valuestring, "0") == 0){c19tRes = 1;}
+ else if(strcmp(jsonTmp->valuestring, "1") == 0){c19tRes = 2;}
+ }
+ jsonTmp = cJSON_GetObjectItem(root, "hsjcsj"); //检测时间, hscysj采样时间
+ if(jsonTmp){c19tTime = jsonTmp->valuestring;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "name");
+ if(jsonTmp){name = jsonTmp->valuestring;}
+
+ jsonTmp = cJSON_GetObjectItem(root, "ymtimes");
+ if(jsonTmp){abtRes = atoi(jsonTmp->valuestring);}
+ jsonTmp = cJSON_GetObjectItem(root, "ymzssj");
+ if(jsonTmp){abtTime = jsonTmp->valuestring;}
+
+ page->showTemp(temp);
+ page->showPersonMsg(name, idNum, jpgDate, jpgLen);
+ page->showCovid19TestingMsg(c19tRes, c19tRes > 0 ? c19tTime : "");
+ page->showAntibodyTestingMsg(abtRes, abtRes > 0 ? abtTime : "");
+ page->showTripMsg(tripRes, tripCity);
+ page->showAccResult(pass, failReason, bgColor);
+ m_stackPages->setCurrentIndex(pageIndex);
+}
+
+
diff --git a/Linguist/recoUi/recoUiHealthCode.h b/Linguist/recoUi/recoUiHealthCode.h
new file mode 100644
index 0000000..28ddf7f
--- /dev/null
+++ b/Linguist/recoUi/recoUiHealthCode.h
@@ -0,0 +1,114 @@
+#ifndef RECOUIHEALTHCODE_H
+#define RECOUIHEALTHCODE_H
+
+#include "UiTools.h"
+#include "UiConfig.h"
+
+
+class recoUiHealthCodePage : public QWidget
+{
+ Q_OBJECT
+public:
+#if 0
+ static const int PERSON_NAME_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int WEL_MSG_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int PASSWORD_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int NUM_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int CONFIRM_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const QString PWD_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString CONFIRM_BTN_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString CONFIRM_BTN_DISABLE_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int CONFIRM_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int CONFIRM_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString BACK_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int BACK_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int BACK_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString DEL_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int DEL_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int DEL_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString NUM_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+#endif
+ static const int PIC_WIDGET_H_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+
+ explicit recoUiHealthCodePage(int type, QWidget *parent = nullptr);
+ void showTemp(float temp);
+ void showPersonMsg(const QString& name, const QString& idNum, const unsigned char* jpgDate, int len);
+ void showAntibodyTestingMsg(int num, const QString& testingTime);
+ void showCovid19TestingMsg(int res, const QString& testingTime);
+ void showAntiGenTestingMsg(int res, const QString& testingTime);
+ void showTripMsg(int res, const QString& tripCity);
+ void showAccResult(bool pass, const QString& failReason, int bgColor);
+ void setResultShowType(int type);
+ //void setBgColorByResult(int codeColor, int c19t, int trip, bool pass);
+
+signals:
+
+public slots:
+
+private:
+ QLabel* m_labelTitle;
+
+ QLabel* m_labelCurTime;
+ QLabel* m_labelTempTip;
+ QLabel* m_labelTemp;
+ QWidget* m_labelFacePic;
+ QLabel* m_labelName;
+ QLabel* m_labelIdNo;
+
+ QLabel* m_labelABTTitle;
+ QLabel* m_labelABTRes;
+ QLabel* m_labelABTTime;
+
+ QLabel* m_labelC19T;
+ QLabel* m_labelC19TTitle;
+ RoundedWidget* m_covid19Testing;
+ QStackedWidget* m_stackC19T;
+ QLabel* m_labelC19TTime;
+
+ QLabel* m_labelAccRes;
+ QLabel* m_labelTripRes;
+ QLabel* m_labelTripResTime;
+ QLabel* m_labelAcc;
+
+ QLabel* m_failReason;
+
+};
+
+class recoUiHealthCode : public WidgetWithBackstageInterface
+{
+ Q_OBJECT
+public:
+ explicit recoUiHealthCode(QWidget *parent = nullptr);
+ void showHealthMsg(int type, float temp, const QString& msg, bool pass,
+ const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void setResultShowType(int type);
+
+signals:
+
+public slots:
+
+private:
+ QStackedWidget* m_stackPages;
+ recoUiHealthCodePage* m_pageGreen;
+ recoUiHealthCodePage* m_pageYellow;
+ recoUiHealthCodePage* m_pageRed;
+ recoUiHealthCodePage* m_pageGrey;
+
+ int m_resultType = 0;
+
+ void _showType0HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showType1HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showType2HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showType3HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showType4HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showType5HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showTypexHealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showType101HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showType6HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showType7HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showType8HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+ void _showType9HealthData(float temp, const QString& msg, bool pass, const unsigned char* jpgDate, int jpgLen, const QString& tripCity, const QString& failReason, int bgColor);
+};
+
+
+#endif // RECOUIPASSWORD_H
diff --git a/Linguist/recoUi/recoUiPassword.cpp b/Linguist/recoUi/recoUiPassword.cpp
new file mode 100644
index 0000000..865c244
--- /dev/null
+++ b/Linguist/recoUi/recoUiPassword.cpp
@@ -0,0 +1,422 @@
+#include "recoUiPassword.h"
+#include
+#include
+
+
+const int recoUiPassword::PERSON_NAME_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY] = {
+ {24, 20, 14, 15, 12, 15, 14, 13, 9, 12, 10, 13, 13, 9},
+ {48, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {48, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {16, 16, 10, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8},
+ {16, 16, 10, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8}
+};
+const int recoUiPassword::WEL_MSG_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY] = {
+ {16, 20, 14, 15, 12, 15, 14, 13, 9, 12, 10, 13, 13, 9},
+ {32, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {32, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {12, 12, 11, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8},
+ {12, 12, 11, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8}
+};
+const int recoUiPassword::PASSWORD_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY] = {
+ {20, 20, 14, 15, 12, 15, 14, 13, 9, 12, 10, 13, 13, 9},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {14, 14, 11, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8},
+ {14, 14, 11, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8}
+};
+const int recoUiPassword::NUM_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY] = {
+ {20, 20, 14, 15, 12, 15, 14, 13, 9, 12, 10, 13, 13, 9},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {16, 16, 11, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8},
+ {16, 16, 11, 12, 10, 12, 11, 10, 8, 10, 9, 10, 10, 8}
+};
+const int recoUiPassword::CONFIRM_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY] = {
+ {20, 20, 14, 15, 12, 15, 14, 13, 9, 12, 10, 13, 13, 9},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {40, 40, 28, 30, 24, 30, 28, 26, 19, 26, 22, 26, 26, 19},
+ {14, 14, 10, 11, 9, 11, 10, 9, 7, 9, 8, 9, 9, 7},
+ {14, 14, 10, 11, 9, 11, 10, 9, 7, 9, 8, 9, 9, 7}
+};
+
+const QString recoUiPassword::PWD_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_bg_small.jpg",
+":/res/image/pwd_bg_large.jpg",
+":/res/image/pwd_bg_middle.jpg",
+":/res/image/pwd_bg_large.jpg",
+":/res/image/pwd_bg_middle.jpg"
+};
+
+const QString recoUiPassword::CONFIRM_BTN_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_confirm_small.png",
+":/res/image/pwd_confirm_large.png",
+":/res/image/pwd_confirm_middle.png",
+":/res/image/pwd_confirm_large.png",
+":/res/image/pwd_confirm_middle.png"
+};
+const QString recoUiPassword::CONFIRM_BTN_DISABLE_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_confirm_small_disable.png",
+":/res/image/pwd_confirm_large_disable.png",
+":/res/image/pwd_confirm_middle_disable.png",
+":/res/image/pwd_confirm_large_disable.png",
+":/res/image/pwd_confirm_middle_disable.png"
+};
+const int recoUiPassword::CONFIRM_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {344, 430, 430, 430, 430};
+const int recoUiPassword::CONFIRM_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {72, 90, 90, 90, 90};
+
+const QString recoUiPassword::BACK_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_back_small.png",
+":/res/image/pwd_back_large.png",
+":/res/image/pwd_back_middle.png",
+":/res/image/pwd_back_large.png",
+":/res/image/pwd_back_middle.png"
+};
+const int recoUiPassword::BACK_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {20, 24, 24, 24, 24};
+const int recoUiPassword::BACK_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {35, 44, 44, 44, 44};
+
+const QString recoUiPassword::DEL_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_del_small.png",
+":/res/image/pwd_del_large_black.png",
+":/res/image/pwd_del_middle.png",
+":/res/image/pwd_del_large_black.png",
+":/res/image/pwd_del_middle.png"
+};
+const int recoUiPassword::DEL_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {344, 35, 35, 35, 35};
+const int recoUiPassword::DEL_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {344, 24, 24, 24, 24};
+
+const QString recoUiPassword::NUM_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/num_btn_small.png",
+":/res/image/num_btn_large.png",
+":/res/image/num_btn_middle.png",
+":/res/image/num_btn_large.png",
+":/res/image/num_btn_middle.png"
+};
+
+
+
+recoUiPassword::recoUiPassword(QWidget *parent) : WidgetWithBackstageInterface(parent)
+{
+ qDebug() << "recoUiPassword()";
+
+ resize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
+
+ setAutoFillBackground(true);
+ QPalette palette(this->palette());
+ palette.setBrush(QPalette::Window,QBrush(QPixmap(PWD_BG[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ setPalette(palette);
+
+ const int btnWidth = UiConfig::GetInstance()->getUiWidth() / 5;
+
+ m_btnBack = new QPushButton(this);
+ setButtonBackImage(m_btnBack, BACK_BTN[UiConfig::GetInstance()->getScreenConfigIndex()],
+ BACK_BTN_W[UiConfig::GetInstance()->getScreenConfigIndex()],
+ BACK_BTN_H[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ m_btnBack->setFixedSize(btnWidth, btnWidth);
+ //m_btnBack->setStyleSheet("QPushButton:focus{outline: none;}");
+ m_btnBack->setFocusPolicy(Qt::NoFocus);
+ connect(m_btnBack, SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
+
+ QPalette labelPal;
+ labelPal.setColor(QPalette::Background,QColor(0, 0, 0, 0));
+
+ QFont ft;
+ ft.setWeight(ft.weight() * 2 > 99 ? 99 : ft.weight() * 2);//Weight must be between 0 and 99
+ //ft.setBold(true);
+ m_labelName = new QLabel(this);
+ //m_labelName->setText(tr("某某某"));
+ m_labelName->setPalette(labelPal);
+ ft.setPointSize(PERSON_NAME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelName->setFont(ft);
+ m_labelName->hide();
+
+ m_labelWelStr = new QLabel(this);
+ m_labelWelStr->setText(tr("欢迎光临"));
+ labelPal.setColor(QPalette::WindowText,QColor(203, 242, 252));
+ m_labelWelStr->setPalette(labelPal);
+ ft.setPointSize(WEL_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_labelWelStr->setFont(ft);
+ m_labelWelStr->hide();
+
+ if(UiConfig::GetInstance()->isRkDevice()){
+ m_editPwd = new QPasswordLineEdit(this, ".");
+ }
+ else{
+ m_editPwd = new QPasswordLineEdit(this);
+ }
+ m_editPwd->setReadOnly(true);
+ QPalette lineEditPal;
+ lineEditPal.setColor(QPalette::Text,QColor(255, 255, 255, 255));
+ m_editPwd->setPalette(lineEditPal);
+ ft.setPointSize(PASSWORD_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_editPwd->setFont(ft);
+ m_editPwd->setStyleSheet("background:transparent;border-width:0;border-style:outset");
+ m_editPwd->setAlignment(Qt::AlignCenter);
+
+ QPalette btnPal;
+ btnPal.setColor(QPalette::ButtonText,QColor(255, 255, 255, 255));
+ QGridLayout* glayMid = new QGridLayout();
+ for(int i=0; isetText(QString::number(i));
+ m_btnsNum[i]->setPalette(btnPal);
+ ft.setPointSize(NUM_BTN_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_btnsNum[i]->setFont(ft);
+ m_btnsNum[i]->setFlat(true);
+ m_btnsNum[i]->setCursor(QCursor(Qt::PointingHandCursor));
+ m_btnsNum[i]->setFocusPolicy(Qt::NoFocus);
+ m_btnsNum[i]->setFixedSize(btnWidth, btnWidth);
+ m_btnsNum[i]->setStyleSheet("background-color:transparent;border-radius:0px;focus{outline: none;}");
+ /*const QString numBtnStyle = QString("QPushButton {"
+ "border: 0px;"
+ "background-color:transparent;"
+ "background:url(%1);"
+ "}"
+ "QPushButton:hover { "
+ "border: 0px;"
+ "background:url(%2);"
+ "background-repeat:none;"
+ "background-position:center;"
+ "}"
+ "QPushButton:pressed {"
+ "border: 0px;"
+ "background:url(%3);"
+ "background-repeat:none;"
+ "background-position:center;"
+ //"background-origin: content;" // 设置背景图片基于content,默认是基于border的
+ //"padding-left: 8px;" //设置content相对于border的偏移,如果此属性要对背景图片生效的话,需要设置上面的属性
+ "}")
+ .arg(":/res/image/num_btn_large.png")
+ .arg(":/res/image/num_btn_large.png")
+ .arg(":/res/image/num_btn_large.png");
+ m_btnsNum[i]->setStyleSheet(numBtnStyle);
+ m_btnsNum[i]->setStyleSheet("QPushButton {"
+ "font-size:100px;"
+ "color:yellow; "
+ "border-radius:150px;" //圆角大小,因为矩形的一半为150,所以圆角大小 设置为150以后,将会成为一个原型,小于150,就是圆角矩形了。
+ "background-color:rgba(0,255,0,200);" //设置按钮背景为绿色
+ "}"
+ "QPushButton:hover { "
+ "font-size:100px;"
+ "color:green;"
+ "border-radius:150px;"
+ "background-color:rgba(255,255,0,200);" //设置按钮背景为黄色 = 红+绿
+ "}"
+ "QPushButton:pressed {"
+ "color:orange; "
+ "border-width:3;"
+ "border-radius:150px;"
+ "border-color:orange;"
+ "border-style:solid;"
+ "background-color:cyan;"
+ "}");
+ */
+ connect(m_btnsNum[i], SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
+ if(!UiConfig::GetInstance()->isRkDevice()){
+ connect(m_btnsNum[i], SIGNAL(pressed()), this, SLOT(slotBtnPressed()));
+ connect(m_btnsNum[i], SIGNAL(released()), this, SLOT(slotBtnReleased()));
+ }
+ if(i > 0){
+ const int pos = i - 1;
+ glayMid->addWidget(m_btnsNum[i], pos / 3, pos % 3);
+ }
+ }
+ m_btnBackspace = new QPushButton(this);
+ setButtonBackImage(m_btnBackspace, DEL_BTN[UiConfig::GetInstance()->getScreenConfigIndex()],
+ DEL_BTN_W[UiConfig::GetInstance()->getScreenConfigIndex()],
+ DEL_BTN_H[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ m_btnBackspace->setFixedSize(btnWidth, btnWidth);
+ connect(m_btnBackspace, SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
+ //m_btnClear = new QPushButton(this);
+ //m_btnClear->setText(tr("清空"));
+ //connect(m_btnClear, SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
+ //glayMid->addWidget(m_btnClear, 3, 0);
+ glayMid->addWidget(m_btnsNum[0], 3, 1);
+ glayMid->addWidget(m_btnBackspace, 3, 2);
+
+ m_btnConfirm = new QPushButton(this);
+ m_btnConfirm->setText(tr("确认"));
+ m_btnConfirm->setPalette(btnPal);
+ m_btnConfirm->setFlat(true);
+ m_btnConfirm->setCursor(QCursor(Qt::PointingHandCursor));
+ m_btnConfirm->setFocusPolicy(Qt::NoFocus);
+ m_btnConfirm->setFixedSize(CONFIRM_BTN_W[UiConfig::GetInstance()->getScreenConfigIndex()],
+ UiConfig::GetInstance()->isRkDevice() ?
+ (CONFIRM_BTN_H[UiConfig::GetInstance()->getScreenConfigIndex()] >> 2 << 2) :
+ CONFIRM_BTN_H[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ ft.setWeight(ft.weight() * 2 > 99 ? 99 : ft.weight() * 2);//Weight must be between 0 and 99
+ ft.setPointSize(CONFIRM_BTN_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()]);
+ m_btnConfirm->setFont(ft);
+ #if 1
+ const QString confirmBtnStyle = QString("background-color:transparent;"
+ "color:white;"
+ "border-image: url(%1);"
+ )
+ .arg(CONFIRM_BTN_BG[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ #else
+ QString confirmBtnStyle = QString("QPushButton{background:url(%1); background-color:transparent;border: none; }" //正常
+ "QPushButton:hover{background:url(%2); background-color:transparent; }" //滑过
+ "QPushButton:pressed{background:url(%3); background-color:transparent; }") //按下
+ .arg(CONFIRM_BTN_BG[UiConfig::GetInstance()->getScreenConfigIndex()])
+ .arg(CONFIRM_BTN_DISABLE_BG[UiConfig::GetInstance()->getScreenConfigIndex()])
+ .arg(CONFIRM_BTN_DISABLE_BG[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ #endif
+ //qDebug() << "confirmBtnStyle:" << confirmBtnStyle;
+ m_btnConfirm->setStyleSheet(confirmBtnStyle);
+ connect(m_btnConfirm, SIGNAL(clicked()), this, SLOT(slotBtnClicked()));
+
+ QVBoxLayout* vlay = new QVBoxLayout();
+ vlay->addWidget(m_btnBack, 1, Qt::AlignLeft | Qt::AlignTop);
+ vlay->addWidget(m_labelName, 1, Qt::AlignCenter | Qt::AlignTop);
+ vlay->addWidget(m_labelWelStr, 1, Qt::AlignCenter | Qt::AlignTop);
+ vlay->addWidget(m_editPwd, 80, Qt::AlignCenter | Qt::AlignBottom);
+ vlay->addLayout(glayMid);
+ vlay->addWidget(m_btnConfirm, 1, Qt::AlignCenter | Qt::AlignTop);
+ vlay->setContentsMargins(0, 10, 0, (UiConfig::GetInstance()->getUiHeight() / 12) >> 1 << 1);
+ //vlay->setMargin(0);
+ setLayout(vlay);
+
+ m_timer = new QTimer(this);
+ connect(m_timer, SIGNAL(timeout()), this, SLOT(slotTimeout()));
+}
+
+void recoUiPassword::reset(const QString& name)
+{
+ m_editPwd->clear();
+ m_pwd.clear();
+ m_timeCnt = 0;
+ m_tryTime = 0;
+ m_timer->start(TIMEOUT);
+ m_btnConfirm->setEnabled(false);
+ slotShowPwdUiPersonName(name);
+ //m_backstageIf->pauseDataFlow();
+ m_backstageIf->stopIdentyState();
+ m_need2ResetDecisionCenterTimer = !name.isEmpty();
+}
+
+void recoUiPassword::slotBtnClicked()
+{
+ qDebug() << "slotBtnClicked";
+ const QObject* send = sender();
+ if (send == m_btnConfirm) {
+ m_timeCnt = 0;
+ qDebug() << "password:" << m_pwd;
+ m_backstageIf->sendPassword(m_pwd.toStdString().c_str());
+ m_editPwd->clear();
+ m_pwd.clear();
+ m_btnConfirm->setEnabled(false);
+ m_timer->stop();
+ m_tryTime++;
+ if(m_tryTime >= TRY_TIME){
+ emit signalShowRecognizePage();
+ //m_backstageIf->resumeDataFlow();
+ }
+ }
+ else if (send == m_btnBackspace) {
+ m_timeCnt = 0;
+ QString text = m_editPwd->text();
+ if(text.size()){
+ m_pwd = m_pwd.left(m_pwd.size() - 1);
+ m_editPwd->setText(text.left(text.size() - 1));
+ m_btnConfirm->setEnabled(m_editPwd->text().length() >= PWD_LEN_MIN);
+ }
+ }
+ //else if (send == m_btnClear) {
+ //m_editPwd->clear();
+ //}
+ else if (send == m_btnBack) {
+ emit signalShowRecognizePage();
+ m_timer->stop();
+ //m_backstageIf->resumeDataFlow();
+ m_backstageIf->verifyAbort();
+ }
+ else{
+ m_timeCnt = 0;
+ if(m_editPwd->text().length() >= PWD_LEN_MAX){
+ return;
+ }
+ for(int i=0; ihide();
+ m_labelWelStr->hide();
+ }
+ m_pwd += m_btnsNum[i]->text();
+ m_editPwd->setText(m_editPwd->text() + m_btnsNum[i]->text());
+ m_btnConfirm->setEnabled(m_editPwd->text().length() >= PWD_LEN_MIN);
+ break;
+ }
+ }
+ }
+ if(UiConfig::GetInstance()->isRkDevice()){
+ update();
+ }
+}
+
+void recoUiPassword::slotBtnPressed()
+{
+ const QString numBtnStyle = QString("QPushButton {"
+ "border: 0px;"//"background-color:transparent;"
+ "}"
+ "QPushButton:pressed {"
+ "border: 0px;"
+ "background:url(%1);"
+ "background-repeat:none;"
+ "background-position:center;"
+ "}")
+ .arg(NUM_BTN[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ dynamic_cast(sender())->setStyleSheet(numBtnStyle);
+}
+
+void recoUiPassword::slotBtnReleased()
+{
+ qDebug() << "slotBtnReleased";
+ dynamic_cast(sender())->setStyleSheet("background-color:transparent;border-radius:0px;focus{outline: none;}");
+}
+
+
+void recoUiPassword::slotTimeout()
+{
+ m_timeCnt++;
+ qDebug() << "slotTimeout:" << m_timeCnt;
+ if(m_need2ResetDecisionCenterTimer && m_timeCnt < (PROC_OVERTIME - BACKSTAGE_PROC_OVERTIME) ){
+ m_backstageIf->resetDecisionCenterTimer();
+ }
+ else if(m_timeCnt >= PROC_OVERTIME){
+ m_timer->stop();
+ emit signalShowRecognizePage();
+ //m_backstageIf->resumeDataFlow();
+ }
+}
+
+void recoUiPassword::slotShowPwdUiPersonName(const QString& name)
+{
+ if(name.isEmpty()){
+ m_labelName->hide();
+ m_labelWelStr->hide();
+ }
+ else{
+ m_labelName->setText(name);
+ m_labelName->setStyleSheet("color:#CBF2FC;");
+ m_labelName->show();
+ m_labelWelStr->show();
+ }
+}
+
+void recoUiPassword::slotShowUserPwdError(int type, int color)
+{
+ m_timer->start();
+ switch(type){
+ case 0:
+ m_labelName->setText(tr("密码错误"));
+ if(0 == color){
+ m_labelName->setStyleSheet("color:#DB1624;");
+ }
+ m_labelWelStr->hide();
+ m_labelName->show();
+ break;
+ default:
+ break;
+ }
+}
+
+
diff --git a/Linguist/recoUi/recoUiPassword.h b/Linguist/recoUi/recoUiPassword.h
new file mode 100644
index 0000000..eaeab61
--- /dev/null
+++ b/Linguist/recoUi/recoUiPassword.h
@@ -0,0 +1,71 @@
+#ifndef RECOUIPASSWORD_H
+#define RECOUIPASSWORD_H
+
+#include "UiTools.h"
+#include "UiConfig.h"
+
+
+class recoUiPassword : public WidgetWithBackstageInterface
+{
+ Q_OBJECT
+public:
+ static const int PERSON_NAME_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int WEL_MSG_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int PASSWORD_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int NUM_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const int CONFIRM_BTN_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY][UiConfig::SUPPORT_LANGUAGE_QUANTITY];
+ static const QString PWD_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString CONFIRM_BTN_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString CONFIRM_BTN_DISABLE_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int CONFIRM_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int CONFIRM_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString BACK_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int BACK_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int BACK_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString DEL_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int DEL_BTN_W[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const int DEL_BTN_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+ static const QString NUM_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY];
+
+ explicit recoUiPassword(QWidget *parent = nullptr);
+ void reset(const QString& name);
+
+signals:
+ void signalShowRecognizePage();
+
+public slots:
+ void slotBtnClicked();
+ void slotBtnPressed();
+ void slotBtnReleased();
+
+ void slotTimeout();
+ void slotShowPwdUiPersonName(const QString& name);
+ void slotShowUserPwdError(int type, int color);
+
+private:
+ enum{
+ NUM_BTNS_QTY = 10,
+ TIMEOUT = 1000,
+ BACKSTAGE_PROC_OVERTIME = 5, //BACKSTAGE_PROC_OVERTIME * TIMEOUT
+ PROC_OVERTIME = 10, //PROC_OVERTIME * TIMEOUT
+ PWD_LEN_MIN = 4,
+ PWD_LEN_MAX = 16,
+ TRY_TIME = 5
+ };
+ QPushButton* m_btnBack;
+ QLabel* m_labelName;
+ QLabel* m_labelWelStr;
+ QPasswordLineEdit* m_editPwd;
+ QPushButton* m_btnsNum[NUM_BTNS_QTY];
+ //QPushButton* m_btnClear;
+ QPushButton* m_btnBackspace;
+ QPushButton* m_btnConfirm;
+
+ QString m_pwd;
+ QTimer* m_timer;
+ int m_timeCnt = 0;
+ int m_tryTime = 0;
+ bool m_need2ResetDecisionCenterTimer = false;
+};
+
+#endif // RECOUIPASSWORD_H
diff --git a/Linguist/recoUi/recoUiRecognize.cpp b/Linguist/recoUi/recoUiRecognize.cpp
new file mode 100644
index 0000000..0f3f171
--- /dev/null
+++ b/Linguist/recoUi/recoUiRecognize.cpp
@@ -0,0 +1,2789 @@
+#include "recoUiRecognize.h"
+#include
+#include "UiConfig.h"
+#include
+#include
+#include
+#include
+#include "UiInterfaceForBackstage.h"
+#include
+
+const int SceneMsgWidget::DATE_TIME_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {28, 26, 26, 10, 10};
+SceneMsgWidget::SceneMsgWidget(QWidget *parent) : QWidget(parent)
+{
+ setAutoFillBackground(true);
+
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::WindowText,Qt::black);
+ palette.setColor(QPalette::Background, QColor(Qt::white));
+ setPalette(palette);
+ setFixedSize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight() / 10);
+
+ m_wgtDateTime = new DateTimeWidgetClassical(DATE_TIME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()], this);
+ connect(m_wgtDateTime, SIGNAL(signalNewDay()), this, SLOT(slotNewDay()));
+ m_labelPersonNum = new QLabel(this);
+ QFont ft;
+ ft.setPointSize(DATE_TIME_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ m_labelPersonNum->setFont(ft);
+
+ QHBoxLayout* hlay = new QHBoxLayout();
+ hlay->addWidget(m_wgtDateTime);
+ hlay->addStretch();
+ hlay->addWidget(m_labelPersonNum);
+ hlay->setMargin(20);
+ setLayout(hlay);
+}
+
+int SceneMsgWidget::setType(int type)
+{
+ qDebug() << "type:" << type << "m_type:" << m_type;
+
+ if(type < 0 || type > 2 || m_type == type){
+ return -1;
+ }
+ m_type = type;
+ if(2 == m_type){
+ m_labelPersonNum->setText("");
+ }else if(m_type >= 0){
+ setPersonNum(-1, 0);
+ }
+ return 0;
+}
+
+void SceneMsgWidget::setPersonNum(int source, int personNum)
+{
+ qDebug() << "type:" << m_type << "source:" << source;
+ if(m_type == 2 || (source >=0 && source != m_type)){
+ return;
+ }
+ const QVector items{tr("今日检票:"), tr("今日通行:")};
+ if (m_type < items.size()) {
+ m_labelPersonNum->setText(items.at(m_type) + QString::number(personNum) + tr("人"));
+ }
+}
+
+void SceneMsgWidget::setBgTransparent(bool set)
+{
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::Background, set ? QColor(0, 0, 0, 0) : QColor(Qt::white));
+ setPalette(palette);
+}
+
+void SceneMsgWidget::slotNewDay()
+{
+ setPersonNum(-1, 0);
+}
+
+
+const QString TmprWidget::TEMP_BG_GREEN_TOP_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/green-top-small.png",
+":/res/image/green-top-middle.png",
+":/res/image/green-top-middle.png",
+":/res/image/green-top-middle-rk.png",
+":/res/image/green-top-middle-rk.png"
+};
+
+const QString TmprWidget::TEMP_BG_RED_TOP_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/red-top-small.png",
+":/res/image/red-top-middle.png",
+":/res/image/red-top-middle.png",
+":/res/image/red-top-middle-rk.png",
+":/res/image/red-top-middle-rk.png"
+};
+
+const int TmprWidget::TMPR_WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {174, 192, 192, 193, 193};
+const int TmprWidget::TMPR_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {25, 40, 40, 14, 14};
+
+
+const QString MsgWidget::NO_NETWORK_RES_FILE[STYLE_QUANTITY][UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+{":/res/image/no-network-smallB.png",
+":/res/image/no-network-middleB.png",
+":/res/image/no-network-middleB.png",
+":/res/image/no-network-middleB.png",
+":/res/image/no-network-middleB.png"},
+{":/res/image/no-network-small.png",
+":/res/image/no-network-middle.png",
+":/res/image/no-network-middle.png",
+":/res/image/no-network-middle.png",
+":/res/image/no-network-middle.png"},
+};
+
+const QString MsgWidget::NETWORK_CONNECTED_RES_FILE[STYLE_QUANTITY][UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+{":/res/image/network-connected-smallB.png",
+":/res/image/network-connected-middleB.png",
+":/res/image/network-connected-middleB.png",
+":/res/image/network-connected-middleB.png",
+":/res/image/network-connected-middleB.png"},
+{":/res/image/network-connected-small.png",
+":/res/image/network-connected-middle.png",
+":/res/image/network-connected-middle.png",
+":/res/image/network-connected-middle.png",
+":/res/image/network-connected-middle.png"},
+};
+
+const QString MsgWidget::NETWORK_LOGGED_RES_FILE[STYLE_QUANTITY][UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+{":/res/image/network-cloud-smallB.png",
+":/res/image/network-cloud-middleB.png",
+":/res/image/network-cloud-middleB.png",
+":/res/image/network-cloud-middleB.png",
+":/res/image/network-cloud-middleB.png"},
+{":/res/image/network-cloud-small.png",
+":/res/image/network-cloud-middle.png",
+":/res/image/network-cloud-middle.png",
+":/res/image/network-cloud-middle.png",
+":/res/image/network-cloud-middle.png"},
+};
+
+const QString MsgWidget::NET_ETH_IP_RES_FILE[STYLE_QUANTITY][UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+{":/res/image/network-smallB.png",
+":/res/image/network-middleB.png",
+":/res/image/network-middleB.png",
+":/res/image/network-middleB.png",
+":/res/image/network-middleB.png"},
+{":/res/image/network-small.png",
+":/res/image/network-middle.png",
+":/res/image/network-middle.png",
+":/res/image/network-middle.png",
+":/res/image/network-middle.png"},
+};
+
+const QString MsgWidget::NET_WIFI_IP_RES_FILE[STYLE_QUANTITY][UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+{":/res/image/wifi-smallB.png",
+":/res/image/wifi-middleB.png",
+":/res/image/wifi-middleB.png",
+":/res/image/wifi-middleB.png",
+":/res/image/wifi-middleB.png"},
+{":/res/image/wifi-small.png",
+":/res/image/wifi-middle.png",
+":/res/image/wifi-middle.png",
+":/res/image/wifi-middle.png",
+":/res/image/wifi-middle.png"},
+};
+
+const QString MsgWidget::NET_4G_IP_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/4G-small.png",
+":/res/image/4G-middle.png",
+":/res/image/4G-middle.png",
+":/res/image/4G-middle.png",
+":/res/image/4G-middle.png"
+};
+
+const QString MsgWidget::BG_BLUE_BOM_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/blue-bom-small.png",
+":/res/image/blue-bom-middle.png",
+":/res/image/blue-bom-middle.png",
+":/res/image/blue-bom-middle.png",
+":/res/image/blue-bom-middle.png"
+};
+
+const QString MsgWidget::BG_GREEN_BOM_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/green-bom-small.png",
+":/res/image/green-bom-middle.png",
+":/res/image/green-bom-middle.png",
+":/res/image/green-bom-middle.png",
+":/res/image/green-bom-middle.png"
+};
+
+const QString MsgWidget::BG_RED_BOM_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/red-bom-small.png",
+":/res/image/red-bom-middle.png",
+":/res/image/red-bom-middle.png",
+":/res/image/red-bom-middle.png",
+":/res/image/red-bom-middle.png"
+};
+
+const int MsgWidget::TIME_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {8, 24, 22, 8, 7};
+const int MsgWidget::MSG_WORD_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {12, 24, 24, 8, 8};
+const int MsgWidget::NOTI_MSG_WORD_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {8, 16, 15, 6, 5};
+
+
+//const int DetectResultWidget::DETECT_RESULT_WIDGET_WIDTH[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {389, 492, 492, 492, 492};
+//const int DetectResultWidget::DETECT_RESULT_WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {108, 134, 134, 136, 136};
+const int DetectResultWidget::DETECT_RESULT_WIDGET_WIDTH[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {389, 490, 490, 490, 490};
+const int DetectResultWidget::DETECT_RESULT_WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {108, 128, 128, 129, 129};
+const int DetectResultWidget::MASK_LOGO_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {50, 80, 80, 64, 64};
+const QString DetectResultWidget::BG_BLUE_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/msg_box_bg_blue.png",
+":/res/image/msg_box_bg_type1_blue_large.png",
+":/res/image/msg_box_bg_type1_blue_large.png",
+":/res/image/msg_box_bg_type1_blue_large.png", //msg_box_bg_blue_middle
+":/res/image/msg_box_bg_type1_blue_large.png"
+};
+
+const QString DetectResultWidget::BG_RED_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/msg_box_bg_red.png",
+":/res/image/msg_box_bg_type1_red_large.png",
+":/res/image/msg_box_bg_type1_red_large.png",
+":/res/image/msg_box_bg_type1_red_large.png", //msg_box_bg_red_middle
+":/res/image/msg_box_bg_type1_red_large.png"
+};
+
+
+ const QString recoUiRecognize::BG_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/face-small.png",
+":/res/image/jinggong-face-middle.png",
+":/res/image/face_720_1280.png",
+":/res/image/jinggong-face-middle.png",
+":/res/image/face_720_1280.png"
+};
+
+const QString recoUiRecognize::DARK_FILL_LIGHT_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+"",
+":/res/image/dark_fill_light_8inch.png",
+":/res/image/dark_fill_light_5inch.png",
+":/res/image/dark_fill_light_8inch.png",
+":/res/image/dark_fill_light_5inch.png"
+};
+
+
+//7 inch: 600 * 0.1
+//8 inch: 800 * 0.12
+//5 inch: 720 * 0.12
+const int recoUiRecognize::MSG_WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {60, 96, 86, 97, 97};
+
+const QString recoUiRecognize::SCANLINE_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/scan-line-small.png",
+":/res/image/scan-line-middle.png",
+":/res/image/scan-line-middle.png",
+":/res/image/scan-line-middle.png",
+":/res/image/scan-line-middle.png"
+};
+
+const QString recoUiRecognize::LOGO_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/logo_small.png",
+":/res/image/logo2.png",
+":/res/image/logo2.png",
+":/res/image/logo2.png",
+":/res/image/logo2.png"
+};
+
+const QString recoUiRecognize::TEMP_CALIBOX_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/calibration_box_small.png",
+":/res/image/calibration_box_middle.png",
+":/res/image/calibration_box_middle.png",
+":/res/image/calibration_box_middle.png",
+":/res/image/calibration_box_middle.png"
+};
+
+const int CenterMsgWidget::WIDGET_WIDTH[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {459, 566, 509, 566, 509};
+const int CenterMsgWidget::WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {253, 313, 282, 313, 282};
+const int CenterMsgWidget::FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {14, 22, 22, 8, 8};
+const QString CenterMsgWidget::BG_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/center_msg_600_1024.png",
+":/res/image/center_msg_800_1280.png",
+":/res/image/center_msg_720_1280.png",
+":/res/image/center_msg_800_1280.png",
+":/res/image/center_msg_720_1280.png"
+};
+
+const QString recoUiRecognize::PWD_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_small.png",
+":/res/image/pwd_large.png",
+":/res/image/pwd_middle.png",
+":/res/image/pwd_large.png",
+":/res/image/pwd_middle.png"
+};
+const QString recoUiRecognize::PWD_BTN_PRESSED[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/pwd_small_pressed.png",
+":/res/image/pwd_large_pressed.png",
+":/res/image/pwd_middle_pressed.png",
+":/res/image/pwd_large_pressed.png",
+":/res/image/pwd_middle_pressed.png"
+};
+const int recoUiRecognize::PWD_BTN_W_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {61, 92, 76, 93, 77};
+
+const QString FinalResultWidget::FINAL_RESULT_OK_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/ok_small.png",
+":/res/image/ok_large.png",
+":/res/image/ok_middle.png",
+":/res/image/ok_large.png",
+":/res/image/ok_middle.png"
+};
+const QString FinalResultWidget::FINAL_RESULT_FAIL_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/fail_small.png",
+":/res/image/fail_large.png",
+":/res/image/fail_middle.png",
+":/res/image/fail_large.png",
+":/res/image/fail_middle.png"
+};
+const int FinalResultWidget::FINAL_RESULT_WIDGET_W_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {130, 173, 160, 173, 160};
+
+const int recoUiRecognize::SWIP_CARD_WIDGET_WIDTH[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {400, 598, 598, 598, 598};
+const int recoUiRecognize::SWIP_CARD_WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {70, 131, 131, 132, 132};
+const QString recoUiRecognize::SWIP_CARD_DAY_MODE_WIDGET_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/swipe_card_day_mode_type0_large.png",
+":/res/image/swipe_card_day_mode_type0_large.png",
+":/res/image/swipe_card_day_mode_type0_large.png",
+":/res/image/swipe_card_day_mode_type0_large.png",
+":/res/image/swipe_card_day_mode_type0_large.png"
+};
+const QString recoUiRecognize::SWIP_CARD_NIGHT_MODE_WIDGET_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/swipe_card_night_mode_type0_large.png",
+":/res/image/swipe_card_night_mode_type0_large.png",
+":/res/image/swipe_card_night_mode_type0_large.png",
+":/res/image/swipe_card_night_mode_type0_large.png",
+":/res/image/swipe_card_night_mode_type0_large.png"
+};
+const QString recoUiRecognize::CALL_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
+":/res/image/voice_video_call_large.png",
+":/res/image/voice_video_call_large.png",
+":/res/image/voice_video_call_large.png",
+":/res/image/voice_video_call_large.png",
+":/res/image/voice_video_call_large.png"
+};
+
+
+TmprWidget::TmprWidget(QWidget *parent) : QWidget (parent), m_ForeheadTmpr(0)
+{
+ m_label_tem = new QLabel(this);
+ //m_label_tem->setText("--℃");
+
+ //m_label_msg = new QLabel(this);
+ //m_label_msg->setText(tr("体温正常"));
+
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::WindowText,Qt::white);
+ palette.setColor(QPalette::Background,QColor(0, 0, 0, 0));
+ setAutoFillBackground(true);
+ setPalette(palette);
+
+ QFont ft;
+ ft.setPointSize(static_cast(TMPR_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()] *
+ UiConfig::GetInstance()->recoUiTextCfgFontSize(RecoUiTextCfg::TextTemp)));
+ m_label_tem->setFont(ft);
+ //m_label_msg->setFont(ft);
+
+ QVBoxLayout* vLayout = new QVBoxLayout();
+ vLayout->addWidget(m_label_tem, 1, Qt::AlignTop | Qt::AlignCenter);
+ //vLayout->addWidget(m_label_msg, 1, Qt::AlignCenter);
+
+ setLayout(vLayout);
+}
+
+TmprWidget::~TmprWidget()
+{
+}
+
+void TmprWidget::showNormalTemp(const QString& msg, float temp, bool isC)
+{
+ //if(isHidden() || fabs(m_ForeheadTmpr - temp) > 0.1f)
+ {
+ QString strTem = msg;
+ QString tmpr;
+ const float min = (isC ? recoUiRecognize::LOW_TEMP_VALUE : recoUiRecognize::LOW_TEMP_VALUE * 1.8 + 32.0);
+ const float max = (isC ? recoUiRecognize::HIGH_TEMP_VALUE : recoUiRecognize::HIGH_TEMP_VALUE * 1.8 + 32.0);
+ if(temp < min){
+ strTem += "<" + tmpr.setNum(min, 'f', 1); //为了不增加新的翻译项,小于号单独加
+ }
+ else if(temp > max){
+ strTem += ">" + tmpr.setNum(max, 'f', 1); //为了不增加新的翻译项,大于号单独加
+ }
+ else {
+ strTem += tmpr.setNum(temp, 'f', 1);
+ }
+ strTem += (isC ? "℃" : "℉");
+ if(temp < 0.0f){
+ strTem = "";
+ }
+ QFont ft;
+ ft.setPointSize(UiConfig::GetInstance()->recoUiFontSize(RecoUiTextCfg::TextTemp) ?
+ UiConfig::GetInstance()->recoUiFontSize(RecoUiTextCfg::TextTemp) :
+ static_cast(TMPR_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()] *
+ UiConfig::GetInstance()->recoUiTextCfgFontSize(RecoUiTextCfg::TextTemp)));
+ m_label_tem->setFont(ft);
+ m_label_tem->setText(strTem);
+ #if 0
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::Background,QColor(79, 129, 223, 200)); //蓝色正常体温
+ setPalette(palette);
+ show();
+ #endif
+ m_ForeheadTmpr = temp;
+ }
+}
+
+void TmprWidget::showAbnormalTemp(const QString& msg, float temp, bool isHigh, bool isC)
+{
+ //qDebug() << "showAbnormalTemp:" << temp << "-" << isHigh;
+ //if(isHidden() || fabs(m_ForeheadTmpr - temp) > 0.1f)
+ {
+ const float min = (isC ? recoUiRecognize::LOW_TEMP_VALUE : recoUiRecognize::LOW_TEMP_VALUE * 1.8 + 32.0);
+ const float max = (isC ? recoUiRecognize::HIGH_TEMP_VALUE : recoUiRecognize::HIGH_TEMP_VALUE * 1.8 + 32.0);
+ QString strTem = msg;
+ //QPalette palette(this->palette());
+ /*
+ if( temp > static_cast(-(1e-6)) && temp < static_cast(1e-6) )
+ {
+ //strTem = "---℃";
+ //m_label_msg->setText(tr("体温测量中..."));
+ //palette.setColor(QPalette::Background,QColor(144, 158, 195, 200));
+ }
+ else*/
+ {
+ QString tmpr;
+ //if(isHigh){
+ if(temp < min){
+ strTem += "<" + tmpr.setNum(min, 'f', 1); //为了不增加新的翻译项,小于号单独加
+ }
+ else if(temp > max){
+ strTem += ">" + tmpr.setNum(max, 'f', 1); //为了不增加新的翻译项,大于号单独加
+ }
+ else {
+ strTem += tmpr.setNum(temp, 'f', 1);
+ }
+ //}
+ strTem += (isC ? "℃" : "℉");
+ //if(isHigh)
+ // m_label_msg->setText(tr("疑似高温"));
+ //else
+ // m_label_msg->setText(tr("低温异常"));
+
+ //palette.setColor(QPalette::Background,QColor(200, 77, 79, 200));//红色异常体温
+ }
+ if(temp < 0.0f){
+ strTem = "";
+ }
+ QFont ft;
+ ft.setPointSize(UiConfig::GetInstance()->recoUiFontSize(RecoUiTextCfg::TextTemp) ?
+ UiConfig::GetInstance()->recoUiFontSize(RecoUiTextCfg::TextTemp) :
+ static_cast(TMPR_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()] *
+ UiConfig::GetInstance()->recoUiTextCfgFontSize(RecoUiTextCfg::TextTemp)));
+ m_label_tem->setFont(ft);
+ m_label_tem->setText(strTem);
+ //setPalette(palette);
+ //show();
+
+ m_ForeheadTmpr = temp;
+ }
+}
+
+void TmprWidget::setBackgroundColor(WIDGET_BG_COLOR_E color)
+{
+ QPalette pal(palette());
+ if(WIDGET_BG_COLOR_GREEN == color){
+ pal.setBrush(QPalette::Background, QBrush(QPixmap(TEMP_BG_GREEN_TOP_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ }
+ else if(WIDGET_BG_COLOR_RED == color){
+ pal.setBrush(QPalette::Background, QBrush(QPixmap(TEMP_BG_RED_TOP_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ }
+
+ pal.setColor(QPalette::WindowText,Qt::white);
+ setPalette(pal);
+ if(UiConfig::GetInstance()->isRkDevice()){
+ dynamic_cast(parent())->update();
+ }
+}
+
+
+MsgWidget::MsgWidget(int timeType, int iconType, const QColor& textColor, QWidget *parent) : QWidget(parent), m_style(iconType)
+{
+ qDebug() << "MsgWidget()";
+
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::WindowText, textColor);
+ palette.setColor(QPalette::Background, QColor(0, 0, 0, 0));
+ setPalette(palette);
+
+ setAutoFillBackground(true);
+
+ QFont ft;
+ //m_label_msgTop = new QLabel(this);
+ //m_label_msgTop->setText(tr("请刷脸通行"));
+ //ft.setPointSize(recoUiRecognize::MSG_WORD_SIZE);
+ //m_label_msgTop->setFont(ft);
+
+ m_label_Icon = new QLabel(this);
+ //m_label_Icon->setFixedSize(recoUiRecognize::LOGO_SIZE, recoUiRecognize::LOGO_SIZE);
+ //QPixmap pm(":/res/image/logo.png");
+ //m_label_Icon->setPixmap(pm.scaled(recoUiRecognize::LOGO_SIZE, recoUiRecognize::LOGO_SIZE, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ m_label_Icon->setAutoFillBackground(true);
+ setLogo("");
+
+ m_label_msgBtm = new QLabel(this);
+ ft.setPointSize(MSG_WORD_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ m_label_msgBtm->setFont(ft);
+
+ m_label_msgNoti = new QLabel(this);
+ ft.setPointSize(NOTI_MSG_WORD_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ m_label_msgNoti->setFont(ft);
+ //m_label_msgNoti->setText("正在同步云端人员信息(99/100)");//for test
+
+ m_label_networkStatus = new QLabel(this);
+ QPixmap pm;
+ pm.load(NO_NETWORK_RES_FILE[m_style][UiConfig::GetInstance()->getScreenConfigIndex()]);
+ //pm = pm.scaled(20, 20, Qt::KeepAspectRatio);
+ m_label_networkStatus->setPixmap(pm);
+
+ m_label_time = new QLabel(this);
+ m_label_time->setText("12:34");
+ ft.setPointSize(TIME_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ m_label_time->setFont(ft);
+ _timerUpdate = new TimerUpdate(m_label_time, this);
+ if(0 == timeType){
+ m_label_time->hide();
+ }
+
+ m_label_ip = new QLabel(this);
+ m_label_ip->setText("xxx.xxx.xxx.xxx");
+ ft.setPointSize(static_cast(TIME_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()] * 0.8));
+ m_label_ip->setFont(ft);
+
+ m_label_ipType = new QLabel(this);
+ pm.load(NET_ETH_IP_RES_FILE[m_style][UiConfig::GetInstance()->getScreenConfigIndex()]);
+ //pm = pm.scaled(20, 20, Qt::KeepAspectRatio);
+ m_label_ipType->setPixmap(pm);
+
+
+ //ft.setPointSize(static_cast(TIME_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()] * 0.8));
+ m_labelDevId = new QLabel(this);
+ m_labelDevId->setFont(ft);
+ m_labelVer = new QLabel(this);
+ m_labelVer->setFont(ft);
+ QVBoxLayout* vLayoutInfo = new QVBoxLayout();
+ vLayoutInfo->addStretch();
+ vLayoutInfo->addWidget(m_labelDevId);
+ vLayoutInfo->addWidget(m_labelVer);
+ vLayoutInfo->setSpacing(0);
+ vLayoutInfo->setContentsMargins(10, 0, 0, 15);//setMargin(15);//
+
+ QHBoxLayout* hLayoutIcon = new QHBoxLayout();
+ hLayoutIcon->addWidget(m_label_Icon);
+ hLayoutIcon->setSpacing(0);
+ hLayoutIcon->setMargin(10);
+
+ QHBoxLayout* hLayoutRight = new QHBoxLayout();
+ hLayoutRight->addWidget(m_label_networkStatus, 8, Qt::AlignRight);
+ if(m_label_time){
+ hLayoutRight->addWidget(m_label_time, 1, Qt::AlignRight);
+ }
+ hLayoutRight->setSpacing(5);
+ hLayoutRight->setMargin(5);
+
+ QHBoxLayout* hLayoutIp = new QHBoxLayout();
+ hLayoutIp->addWidget(m_label_ipType, 8, Qt::AlignRight);
+ hLayoutIp->addWidget(m_label_ip, 1, Qt::AlignRight);
+ hLayoutIp->setSpacing(5);
+ hLayoutIp->setMargin(5);
+
+ QVBoxLayout* vLayout = new QVBoxLayout();
+ vLayout->addLayout(hLayoutRight, 50);
+ vLayout->addLayout(hLayoutIp, 2);
+ vLayout->setSpacing(0);
+ vLayout->setMargin(10);
+
+ //by x 20210317
+ QVBoxLayout* vLayoutMsg = new QVBoxLayout();
+ vLayoutMsg->addWidget(m_label_msgBtm);
+ vLayoutMsg->addWidget(m_label_msgNoti);
+ vLayoutMsg->setSpacing(0);
+ vLayoutMsg->setMargin(0);
+
+ QHBoxLayout* hLayout = new QHBoxLayout();
+ hLayout->addWidget(m_label_Icon);//, 1, Qt::AlignLeft
+ hLayout->addLayout(vLayoutInfo);//, 1
+ //hLayout->addStretch();
+ //hLayout->addWidget(m_label_msgBtm, 6, Qt::AlignCenter); //布局管理在其他组件消失时会位置偏移
+ //hLayout->addWidget(m_label_networkStatus, 1, Qt::AlignRight);
+ //hLayout->addWidget(m_label_time, 1, Qt::AlignRight);
+ //hLayout->addLayout(hLayoutIcon, 1);
+ //hLayout->addLayout(vLayoutMsg, 80); //by x 20210317
+ hLayout->addLayout(vLayout, 99);
+ hLayout->setContentsMargins(UiConfig::GetInstance()->getUiWidth() / 50, 0, 0, 0);
+ hLayout->setSpacing(0);
+
+ //QVBoxLayout* vLayout = new QVBoxLayout();
+ //vLayout->addLayout(hLayoutTop);
+ //vLayout->addLayout(hLayout);
+ //vLayout->setSpacing(20);
+
+ setLayout(hLayout);
+}
+
+MsgWidget::~MsgWidget()
+{
+ qDebug() << "~MsgWidget()";
+}
+
+/*
+void MsgWidget::setMsgTop(const QString& msg)
+{
+ m_label_msgTop->setText(msg);
+}
+*/
+
+void MsgWidget::setMsgBtm(const QString& msg, const bool setRedColor)
+{
+ if(msg != ""){
+ m_label_msgBtm->setText(msg);
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::Background,QColor(0, 0, 0, 0));
+ if(setRedColor){
+ palette.setColor(QPalette::WindowText,Qt::red);
+ }
+ else{
+ palette.setColor(QPalette::WindowText,Qt::white);
+ }
+ m_label_msgBtm->setPalette(palette);
+ m_label_msgBtm->setAlignment(Qt::AlignCenter);
+ QFont ft;
+ ft.setPointSize(static_cast(MSG_WORD_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()] *
+ UiConfig::GetInstance()->recoUiTextCfgFontSize(RecoUiTextCfg::TextNoEntry)));
+ m_label_msgBtm->setFont(ft);
+ //by x 20210317
+ m_label_msgBtm->setFixedSize(UiConfig::GetInstance()->getUiWidth() * 0.7, height() / 2);
+ m_label_msgBtm->move((UiConfig::GetInstance()->getUiWidth() - m_label_msgBtm->width()) / 2, 0); //(height() - m_label_msgBtm->height()) / 2);
+ m_label_msgBtm->show();
+ }
+ else{
+ m_label_msgBtm->hide();
+ }
+}
+
+void MsgWidget::setMsgNoti(const QString& msg, int color)
+{
+ if(msg != ""){
+ m_label_msgNoti->setText(msg);
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::Background,QColor(0, 0, 0, 0));
+ switch(color)
+ {
+ case 0:
+ palette.setColor(QPalette::WindowText,Qt::white);
+ break;
+ case 1:
+ palette.setColor(QPalette::WindowText,Qt::red);
+ break;
+ case 2:
+ palette.setColor(QPalette::WindowText,Qt::yellow);
+ break;
+ case 3:
+ break;
+ default:
+ break;
+ }
+ m_label_msgNoti->setPalette(palette);
+ m_label_msgNoti->setAlignment(Qt::AlignCenter);
+
+ //by x 20210317
+ m_label_msgNoti->setFixedSize(UiConfig::GetInstance()->getUiWidth() * 0.5, height() / 2);
+ m_label_msgNoti->move((UiConfig::GetInstance()->getUiWidth() - m_label_msgNoti->width()) / 2, height() / 2); //(height() - m_label_msgNoti->height()) / 2);
+ m_label_msgNoti->show();
+
+ if(UiConfig::GetInstance()->isRkDevice()){
+ dynamic_cast(parent())->update();
+ }
+ }
+ else{
+ m_label_msgNoti->hide();
+ }
+}
+
+
+void MsgWidget::setLogo(const QString& pic, const bool scale)
+{
+ if(!pic.isEmpty()){
+ QPixmap pm(pic);
+ if(scale){
+ m_label_Icon->setFixedSize(height(), height());
+ m_label_Icon->setPixmap(ScalePixmap2Label(pm, *m_label_Icon));
+ }
+ else {
+ m_label_Icon->setPixmap(pm);
+ }
+ m_label_Icon->show();
+ }
+ else{
+ #if 0
+ //使用颜色填充替代隐藏,隐藏后会导致其他组件位置变化
+ m_label_Icon->clear();
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::Background,QColor(0, 0, 0, 0));
+ m_label_Icon->setPalette(palette);
+ #else
+ m_label_Icon->hide();
+ #endif
+ }
+}
+
+bool MsgWidget::hasNoMsg()
+{
+ return (m_label_msgBtm->text() == "");
+}
+
+void MsgWidget::setNetworkStatus(const int status)
+{
+ QPixmap pm;
+ switch(status)
+ {
+ case UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_DISCONNECTED:
+ pm.load(NO_NETWORK_RES_FILE[m_style][UiConfig::GetInstance()->getScreenConfigIndex()]);
+ break;
+ case UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_CONNECTED:
+ pm.load(NETWORK_CONNECTED_RES_FILE[m_style][UiConfig::GetInstance()->getScreenConfigIndex()]);
+ break;
+ case UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_LOGGED:
+ pm.load(NETWORK_LOGGED_RES_FILE[m_style][UiConfig::GetInstance()->getScreenConfigIndex()]);
+ break;
+ default:
+ break;
+ }
+ //m_label_networkStatus->setPixmap(pm.scaled(20, 20, Qt::KeepAspectRatio));
+ m_label_networkStatus->setPixmap(pm);
+}
+
+void MsgWidget::setBackgroundColor(const WIDGET_BG_COLOR_E color)
+{
+ QPalette pal(palette());
+ if(WIDGET_BG_COLOR_BLUE == color){
+ pal.setBrush(QPalette::Background,QBrush(QPixmap(BG_BLUE_BOM_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ }
+ else if(WIDGET_BG_COLOR_GREEN == color){
+ pal.setBrush(QPalette::Background,QBrush(QPixmap(BG_GREEN_BOM_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ }
+ else if(WIDGET_BG_COLOR_RED == color){
+ pal.setBrush(QPalette::Background,QBrush(QPixmap(BG_RED_BOM_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ }
+ setPalette(pal);
+}
+
+void MsgWidget::updateIp(const QString& ip, int type)
+{
+ if(ip != "" && type >= 0){
+ m_label_ip->setText(ip);
+ m_label_ip->show();
+
+ QPixmap icon;
+ switch(type){
+ case 0:icon.load(NET_ETH_IP_RES_FILE[m_style][UiConfig::GetInstance()->getScreenConfigIndex()]);break;
+ case 1:icon.load(NET_WIFI_IP_RES_FILE[m_style][UiConfig::GetInstance()->getScreenConfigIndex()]);break;
+ #if 0
+ case 2:icon.load(":/res/image/4g_1.png");break;
+ case 3:icon.load(":/res/image/4g_2.png");break;
+ case 4:icon.load(":/res/image/4g_3.png");break;
+ case 5:icon.load(":/res/image/4g_4.png");break;
+ case 6:icon.load(":/res/image/4g_5.png");break;
+ case 7:icon.load(":/res/image/4g_0.png");break;
+ #else
+ case 2 ... 7:
+ icon.load(QString(":/res/image/4g_%1%2.png").arg(type <= 6 ? type - 1 : 0).arg(1 == m_style ? "B" : ""));break;
+ #endif
+ default:break;
+ }
+ m_label_ipType->setPixmap(icon);
+ m_label_ipType->show();
+ }
+ else {
+ m_label_ip->hide();
+ m_label_ipType->hide();
+ }
+ if(UiConfig::GetInstance()->isRkDevice()){
+ dynamic_cast(parent())->update();
+ }
+}
+
+void MsgWidget::showDevInfo(const QString& devId, const QString& ver)
+{
+ m_labelDevId->setText("ID:" + devId);
+ m_labelVer->setText("VER:" + ver.mid(8));
+}
+
+void MsgWidget::setStyle(int timeType, int iconType, const QColor& textColor)
+{
+ if(0 == timeType){
+ m_label_time->hide();
+ }else{
+ m_label_time->show();
+ }
+ m_style = iconType;
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::WindowText, textColor);
+ setPalette(palette);
+}
+
+void MsgWidget::showRecoUiDevIdAndVer(bool show)
+{
+ m_labelDevId->setVisible(show);
+ m_labelVer->setVisible(show);
+}
+
+
+DetectResultWidget::DetectResultWidget(QWidget *parent) : QWidget(parent)
+{
+ qDebug() << "DetectResultWidget()";
+
+ QPalette palette;
+ palette.setColor(QPalette::WindowText,Qt::white);
+ //palette.setColor(QPalette::Background,QColor(0, 0, 0, 0));
+ setPalette(palette);
+
+ m_label_Icon = new QLabel(this);
+ m_label_msg = new QLabel(this);
+ m_label_msg->setPalette(palette);
+
+ QHBoxLayout* hLayout = new QHBoxLayout();
+ hLayout->addWidget(m_label_Icon, 1, Qt::AlignCenter);
+ hLayout->addWidget(m_label_msg, 4, Qt::AlignCenter);
+ hLayout->setMargin(0);
+ //hLayout->setSpacing(10);
+ setLayout(hLayout);
+ setFixedSize(DETECT_RESULT_WIDGET_WIDTH[UiConfig::GetInstance()->getScreenConfigIndex()],
+ DETECT_RESULT_WIDGET_HEIGHT[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ setAutoFillBackground(true);
+
+ //hide();
+}
+
+DetectResultWidget::~DetectResultWidget()
+{
+ qDebug() << "~DetectResultWidget()";
+}
+
+void DetectResultWidget::showMsg(const QString& msg, int msgSize, BG_COLOR_E color, const QPixmap* icon)
+{
+ if("" == msg){
+ hide();
+ return;
+ }
+
+ if(icon){
+ m_label_Icon->setPixmap(*icon);
+ }
+ else {
+ m_label_Icon->hide();
+ }
+
+ QFont ft;
+ ft.setPointSize(msgSize);
+ m_label_msg->setFont(ft);
+ m_label_msg->setText(msg);
+
+ QPalette pal(palette());
+ if(BG_COLOR_BLUE == color){
+ //setStyleSheet("border-image:url(:/res/image/SmartGate_scanFail.png);");
+ pal.setBrush(QPalette::Background,QBrush(QPixmap(BG_BLUE_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ }
+ else if(BG_COLOR_RED == color){
+ pal.setBrush(QPalette::Background,QBrush(QPixmap(BG_RED_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ }
+ if(BG_COLOR_GREEN == color){
+ pal.setBrush(QPalette::Background,QBrush(QPixmap(":/res/image/msg_box_bg_green.png")));
+ }
+ else if(BG_COLOR_YELLOW == color){
+ pal.setBrush(QPalette::Background,QBrush(QPixmap(":/res/image/msg_box_bg_yellow.png")));
+ }
+ else if(BG_COLOR_TRAN == color){
+ m_label_msg->clear();
+ pal.setColor(QPalette::Background,QColor(0, 0, 0, 0));
+ m_label_msg->setPalette(pal);
+ }
+
+ pal.setColor(QPalette::WindowText,Qt::white);
+ setPalette(pal);
+}
+
+#if 1
+
+void DetectResultWidget::updateMsg(const QString& msg)
+{
+ m_label_msg->setText(msg);
+}
+
+MaskWidget_o::MaskWidget_o(QWidget *parent) : DetectResultWidget(parent), m_lastMaskOk(true)
+{
+ qDebug() << "MaskWidget()";
+ m_iconMaskOk.load(":/res/image/green_mask.png");
+ m_iconMaskOk = m_iconMaskOk.scaled(MASK_LOGO_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()],
+ MASK_LOGO_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()],
+ Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ m_iconMaskNull.load(":/res/image/red_mask.png");
+ m_iconMaskNull = m_iconMaskNull.scaled(MASK_LOGO_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()],
+ MASK_LOGO_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()],
+ Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+}
+
+void MaskWidget_o::setMaskMsg(bool maskOk, const QString& msg)
+{
+ //qDebug() << "setMaskMsg" << maskOk;
+ // if(isHidden() || m_lastMaskOk != maskOk) //by x 20220323
+ {
+ //qDebug() << "m_lastMaskOk != maskOk";
+ //need to adjust font size
+ int fontSize = UiConfig::GetInstance()->recoUiFontSize(maskOk ? RecoUiTextCfg::TextMaskOk : RecoUiTextCfg::TextNOMask) ?
+ UiConfig::GetInstance()->recoUiFontSize(maskOk ? RecoUiTextCfg::TextMaskOk : RecoUiTextCfg::TextNOMask) :
+ static_cast(UiConfig::MASK_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()] *
+ UiConfig::GetInstance()->recoUiTextCfgFontSize(maskOk ? RecoUiTextCfg::TextMaskOk : RecoUiTextCfg::TextNOMask));
+ if(maskOk){
+ showMsg(msg, fontSize, BG_COLOR_BLUE, &m_iconMaskOk);
+ }
+ else {
+ showMsg(msg, fontSize, BG_COLOR_RED, &m_iconMaskNull);
+ }
+ m_lastMaskOk = maskOk;
+ show();
+ if(UiConfig::GetInstance()->isRkDevice()){
+ dynamic_cast(parent())->update();
+ }
+ }
+}
+
+void MaskWidget_o::showQRCodeMsg(UiInterfaceForBackstage::QRCode_Msg_E msg)
+{
+ QString str;
+ BG_COLOR_E color = BG_COLOR_TRAN;
+ int fontSize = UiConfig::GetInstance()->recoUiFontSize(2) ? UiConfig::GetInstance()->recoUiFontSize(2) :
+ static_cast(UiConfig::PERSON_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()] *
+ 1);
+ switch (msg) {
+ case UiInterfaceForBackstage::QRCode_Msg_Standby:
+ str = tr("请出示个人平安码");
+ break;
+ case UiInterfaceForBackstage::QRCode_Msg_Verifying:
+ str = tr("正在验证...");
+ break;
+ case UiInterfaceForBackstage::QRCode_Msg_Error:
+ str = tr("验证错误请重试");
+ break;
+ case UiInterfaceForBackstage::QRCode_Msg_RedCode:
+ str = tr("请走人工通道"); //红码
+ color = BG_COLOR_RED;
+ break;
+ case UiInterfaceForBackstage::QRCode_Msg_GreenCode:
+ str = tr("请通行"); //绿码
+ color = BG_COLOR_GREEN;
+ break;
+ case UiInterfaceForBackstage::QRCode_Msg_YellowCode:
+ str = tr("请走人工通道"); //黄码
+ color = BG_COLOR_YELLOW;
+ break;
+ case UiInterfaceForBackstage::QRCode_Msg_OtherCode:
+ str = tr("无效平安码");
+ break;
+ case UiInterfaceForBackstage::QRCode_Msg_Overtime:
+ str = tr("扫码超时");
+ break;
+ default:
+ break;
+ }
+ showMsg(str, fontSize, color);
+}
+
+QString MaskWidget_o::curMsg() const
+{
+ return m_label_msg->text();
+}
+
+PersonWidget_o::PersonWidget_o(QWidget *parent) : DetectResultWidget(parent), isShowingResultMsg(false)
+{
+ qDebug() << "PersonWidget()";
+ if(UiConfig::GetInstance()->isRkDevice()){
+ m_label_msg->setAlignment(Qt::AlignCenter);
+ m_label_msg->setFixedSize(static_cast(DETECT_RESULT_WIDGET_WIDTH[UiConfig::GetInstance()->getScreenConfigIndex()] * 0.98),
+ 64);//static_cast(DETECT_RESULT_WIDGET_HEIGHT[UiConfig::GetInstance()->getScreenConfigIndex()] * 0.5) >> 2 << 2 );
+ }
+}
+
+void PersonWidget_o::setPersonMsg(RecoUiTextCfg::enTextType type, const QString& msg, const BG_COLOR_E color, const bool isResultMsg)
+{
+ //need to adjust font size
+ int fontSize = 0;
+ if(UiConfig::SUPPORT_LANGUAGE_QUANTITY > UiConfig::GetInstance()->getLanguageType()){
+ fontSize = UiConfig::GetInstance()->recoUiFontSize(type) ? UiConfig::GetInstance()->recoUiFontSize(type) :
+ static_cast(UiConfig::PERSON_MSG_FONT_SIZE[UiConfig::GetInstance()->getScreenConfigIndex()][UiConfig::GetInstance()->getLanguageType()] *
+ UiConfig::GetInstance()->recoUiTextCfgFontSize(type));
+ }
+ showMsg(msg, fontSize, color);
+ //QCoreApplication::processEvents();
+ isShowingResultMsg = isResultMsg;
+ if(UiConfig::GetInstance()->isRkDevice()){
+ dynamic_cast(parent())->update();
+ }
+}
+
+bool PersonWidget_o::allowToShow()
+{
+ return (!isHidden() && isShowingResultMsg);
+}
+
+
+MaskWidget::MaskWidget(QWidget *parent) : QWidget(parent), m_lastMaskOk(true)
+{
+ qDebug() << "MaskWidget()";
+ m_wgts = new QStackedWidget(this);
+ m_wgts->setFixedSize(DetectResultWidget::DETECT_RESULT_WIDGET_WIDTH[UiConfig::GetInstance()->getScreenConfigIndex()],
+ DetectResultWidget::DETECT_RESULT_WIDGET_HEIGHT[UiConfig::GetInstance()->getScreenConfigIndex()]);
+
+ MaskWidget_o* w = new MaskWidget_o(this);
+ w->setMaskMsg(true, "口罩检测通过");
+ m_wgts->addWidget(w);
+
+ w = new MaskWidget_o(this);
+ w->setMaskMsg(false, "未佩戴口罩");
+ m_wgts->addWidget(w);
+
+ m_wgts->addWidget(new QLabel(this));
+
+ QVBoxLayout* vlay = new QVBoxLayout();
+ vlay->addWidget(m_wgts);
+ vlay->setMargin(0);
+ setLayout(vlay);
+ show();
+}
+
+void MaskWidget::setMaskMsg(bool maskOk, const QString& msg)
+{
+ MaskWidget_o* w = dynamic_cast(m_wgts->widget(maskOk ? 0 : 1));
+ if(w && msg != w->curMsg()){
+ qDebug() << "-----------------------curMsg:" << w->curMsg() << ", set msg:" << msg;
+ w->updateMsg(msg);
+ }
+ m_wgts->setCurrentIndex(maskOk ? 0 : 1);
+}
+
+void MaskWidget::showQRCodeMsg(UiInterfaceForBackstage::QRCode_Msg_E msg)
+{
+
+}
+
+void MaskWidget::hideSelf()
+{
+ m_wgts->setCurrentIndex(2);
+}
+
+
+PersonWidget::PersonWidget(QWidget *parent) : QWidget(parent), isShowingResultMsg(false)
+{
+ qDebug() << "MaskWidget()";
+
+ m_wgts = new QStackedWidget(this);
+
+ PersonWidget_o* w = new PersonWidget_o(this);
+ w->setPersonMsg(RecoUiTextCfg::TextFacePass, "111", DetectResultWidget::BG_COLOR_BLUE, false);
+ m_wgts->addWidget(w);
+
+ w = new PersonWidget_o(this);
+ w->setPersonMsg(RecoUiTextCfg::TextAuthFailed, "222", DetectResultWidget::BG_COLOR_RED, false);
+ m_wgts->addWidget(w);
+
+ m_wgts->addWidget(new QLabel(this));
+
+ QVBoxLayout* vlay = new QVBoxLayout();
+ vlay->addWidget(m_wgts);
+ setLayout(vlay);
+
+ m_wgts->setFixedSize(DetectResultWidget::DETECT_RESULT_WIDGET_WIDTH[UiConfig::GetInstance()->getScreenConfigIndex()],
+ DetectResultWidget::DETECT_RESULT_WIDGET_HEIGHT[UiConfig::GetInstance()->getScreenConfigIndex()]);
+}
+
+void PersonWidget::setPersonMsg(RecoUiTextCfg::enTextType type, const QString& msg, const BG_COLOR_E color, const bool isResultMsg)
+{
+ if(msg.isEmpty()){
+ m_wgts->setCurrentIndex(2);
+ return;
+ }
+
+ if(BG_COLOR_BLUE == color){
+ m_wgts->setCurrentIndex(0);
+ PersonWidget_o* w = dynamic_cast(m_wgts->widget(0));
+ if(w){
+ w->updateMsg(msg);
+ }
+ }else if(BG_COLOR_TRAN == color){
+ m_wgts->setCurrentIndex(2);
+ }else{
+ m_wgts->setCurrentIndex(1);
+ PersonWidget_o* w = dynamic_cast(m_wgts->widget(1));
+ if(w){
+ w->updateMsg(msg);
+ }
+ }
+
+ isShowingResultMsg = isResultMsg;
+ if(UiConfig::GetInstance()->isRkDevice()){
+ dynamic_cast(parent())->update();
+ }
+ QCoreApplication::processEvents();
+}
+
+bool PersonWidget::allowToShow()
+{
+ return (!isHidden() && isShowingResultMsg);
+}
+
+#endif
+
+
+recoUiRecognize::recoUiRecognize(bool isNightMode, bool hasPwdBtn, bool hasCallBtn, QWidget *parent) : PageAcceptMouseAndTouch(parent),
+ m_clickCount(0), m_currentBackColor(MSG_BG_COLOR_BOM_NULL),
+ m_tempRefresh(-1), m_maskRefresh(-1), m_personRefresh(-1), m_NotiMsgRefresh(-1), m_msgShowed(false),m_faceAivaliable(false), m_showGreenColor(0),
+ m_showRedColor(0), runScanLine(false), timerTimeoutOperation(0), m_widget_progress(nullptr)
+{
+ qDebug() << "recoUiRecognize()";
+
+ //setAttribute(Qt::WA_AcceptTouchEvents);
+ //installEventFilter(this);//screen click event
+ QString backImg = BG_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()];
+ int msg_widget_height = MSG_WIDGET_HEIGHT[UiConfig::GetInstance()->getScreenConfigIndex()];
+ m_label_back = new QLabel(this);
+ m_label_back->setFixedSize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
+
+ if(!UiConfig::GetInstance()->isFuncNotSupport(FuncCardReaderUnderScreen)){
+ m_wgtCardUnderScreen = new QWidget(this);
+ m_wgtCardUnderScreen->setAutoFillBackground(true);
+ m_wgtCardUnderScreen->setFixedSize(SWIP_CARD_WIDGET_WIDTH[UiConfig::GetInstance()->getScreenConfigIndex()],
+ SWIP_CARD_WIDGET_HEIGHT[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ m_wgtCardUnderScreen->move((UiConfig::GetInstance()->getUiWidth() - SWIP_CARD_WIDGET_WIDTH[UiConfig::GetInstance()->getScreenConfigIndex()]) / 2,
+ static_cast(UiConfig::GetInstance()->getUiHeight() * 0.73));
+ }
+ else{
+ m_wgtCardUnderScreen = nullptr;
+ }
+
+ slotShowRecoUiMask(isNightMode ? 3 : 1); //for show below person wgt
+
+ int tmprWidgetHeight = TmprWidget::TMPR_WIDGET_HEIGHT[UiConfig::GetInstance()->getScreenConfigIndex()];
+ m_widget_tmpr = new TmprWidget(this);
+ m_widget_tmpr->setFixedSize(UiConfig::GetInstance()->getUiWidth(), tmprWidgetHeight);
+ //m_widget_tmpr->hide();
+ m_widget_tmpr->move(0, UiConfig::GetInstance()->getUiHeight());
+
+ const int maskWidgetWidth = DetectResultWidget::DETECT_RESULT_WIDGET_WIDTH[UiConfig::GetInstance()->getScreenConfigIndex()];
+ const int maskWgtx = (UiConfig::GetInstance()->getUiWidth() - maskWidgetWidth) / 2;
+ const int maskWgty = static_cast(UiConfig::GetInstance()->getUiHeight() * 0.1);
+ m_widget_mask = new MaskWidget(this);
+ m_widget_mask->move(maskWgtx, maskWgty);
+#if 0
+ m_widget_mask->hide();//by x 20220322
+#endif
+
+ m_widget_cMsg = new CenterMsgWidget(); //不继承父组件样式
+ //m_widget_cMsg->move((UiConfig::GetInstance()->getUiWidth() - CenterMsgWidget::WIDGET_WIDTH[UiConfig::GetInstance()->getScreenConfigIndex()]) / 2,
+ // static_cast(UiConfig::GetInstance()->getUiHeight() * 0.3));
+ m_widget_cMsg->hide();
+
+ m_widget_person = new PersonWidget(this);
+ m_widget_person->setPersonMsg(RecoUiTextCfg::TextFacePass, recoUiTextCfg(RecoUiTextCfg::TextFacePass), PersonWidget::BG_COLOR_BLUE, false);//tr("请刷脸通行")
+
+ //const int m_widget_msg_height = 100;
+ m_widget_msg = new MsgWidget(1, 1, Qt::white, this);
+ m_widget_msg->setFixedSize(UiConfig::GetInstance()->getUiWidth(), msg_widget_height);
+ //m_widget_msg->move(0, UiConfig::SCREEN_HIGHT - m_widget_msg_height);
+
+ _moveScanner = new QLabel(this);
+ _moveScanner->setAutoFillBackground(true);
+ _moveScanner->setPixmap(SCANLINE_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ _moveScanner->setFixedSize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight() / 25);
+ _moveScanner->hide();
+
+ #if 0
+ _ScanCurorAnimation = new QPropertyAnimation(_moveScanner, "geometry");
+ _ScanCurorAnimation->setDuration(SCAN_LINE_RUN_TIME);
+ _ScanCurorAnimation->setStartValue(QRect(0, -SCAN_LINE_HEIGHT, _moveScanner->width(), _moveScanner->height())); //从顶端平滑出现
+ _ScanCurorAnimation->setEndValue(QRect(0, UiConfig::GetInstance()->getUiHeight() - SCAN_LINE_HEIGHT, _moveScanner->width(), _moveScanner->height()));
+ //_ScanCurorAnimation->setLoopCount(-1); //一直循环
+ //_ScanCurorAnimation->start();
+ #endif
+
+ _pShowResTimer = new QTimer(this);
+ connect(_pShowResTimer, SIGNAL(timeout()), this, SLOT(handleRecoResShowTime()));
+
+ //_timerId = startTimer(3000);//scaner timer
+
+ //scan line
+ m_timer_QRCodeScanLine = new QTimer(this);
+ connect(m_timer_QRCodeScanLine, SIGNAL(timeout()), this, SLOT(slotTimerQRCodeScanline()));
+
+ m_label_QRCodeScanLine = new QLabel(this);
+ m_label_QRCodeScanLine->setAutoFillBackground(true);
+ m_label_QRCodeScanLine->setPixmap(QPixmap(":/res/image/scan-line-small.png"));
+ m_label_QRCodeScanLine->setFixedSize(UiConfig::GetInstance()->getQRCodeAreaWidth(), UiConfig::GetInstance()->getUiHeight() / 40);
+ m_label_QRCodeScanLine->hide();
+
+ m_QRCodeAnimation = new QPropertyAnimation(m_label_QRCodeScanLine, "geometry");
+ m_QRCodeAnimation->setDuration(QRCODE_SCAN_LINE_RUN_TIME);
+ m_QRCodeAnimation->setStartValue(QRect(UiConfig::GetInstance()->getQRCodeAreaCoordinateX(), UiConfig::GetInstance()->getQRCodeAreaCoordinateY(),
+ m_label_QRCodeScanLine->width(), m_label_QRCodeScanLine->height())); //从顶端平滑出现
+ m_QRCodeAnimation->setEndValue(QRect(UiConfig::GetInstance()->getQRCodeAreaCoordinateX(),
+ UiConfig::GetInstance()->getQRCodeAreaCoordinateY() + UiConfig::GetInstance()->getQRCodeAreaHeight() - m_label_QRCodeScanLine->height(),
+ m_label_QRCodeScanLine->width(), m_label_QRCodeScanLine->height()));
+ m_QRCodeTimer = new QTimer(this);
+ connect(m_QRCodeTimer, SIGNAL(timeout()), this, SLOT(slotQRCodeSwitchToStandbyStatusFromOvertimeStatus()));
+
+ /*
+ movie = new QMovie("/nfsroot/a038/source/GateFaceHisi/build/4.gif");
+ m_label_back = new QLabel(this);
+ m_label_back->setFixedSize(600, 1024);
+ m_label_back->setMovie(movie);
+ movie->start();
+ */
+
+ m_btnPwd = new QWidget(this);
+ m_btnPwd->setAutoFillBackground(true);
+ m_btnPwd->setFixedSize(PWD_BTN_W_H[UiConfig::GetInstance()->getScreenConfigIndex()],
+ PWD_BTN_W_H[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ const int pwdBtnX = maskWgtx + maskWidgetWidth + (maskWgtx - PWD_BTN_W_H[UiConfig::GetInstance()->getScreenConfigIndex()]) / 2;
+ const int pwdBtnY = maskWgty + (DetectResultWidget::DETECT_RESULT_WIDGET_HEIGHT[UiConfig::GetInstance()->getScreenConfigIndex()] -
+ PWD_BTN_W_H[UiConfig::GetInstance()->getScreenConfigIndex()]) / 2;
+ m_btnPwd->move(pwdBtnX, pwdBtnY);
+ QPalette pwdPal(m_btnPwd->palette());
+ pwdPal.setBrush(QPalette::Background,QBrush(QPixmap(recoUiRecognize::PWD_BTN[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ m_btnPwd->setPalette(pwdPal);
+ /*QString m_btnPwd = QString("QPushButton{background:url(%1); background-color:transparent;border: none; }" //正常
+ "QPushButton:hover{background:url(%2); background-color:transparent; }" //滑过
+ "QPushButton:pressed{background:url(%3); background-color:transparent; }") //按下
+ .arg(PWD_BTN[UiConfig::GetInstance()->getScreenConfigIndex()])
+ .arg(PWD_BTN_PRESSED[UiConfig::GetInstance()->getScreenConfigIndex()])
+ .arg(PWD_BTN_PRESSED[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ m_btnPwd->setStyleSheet(styleSheet);
+ */
+ if(!hasPwdBtn){
+ m_btnPwd->hide();
+ }
+
+ QPalette dialPal;
+ dialPal.setBrush(QPalette::Background,QBrush(QPixmap(":/res/image/grey_bg_large.png")));
+ const int callWgtWidth = 400;
+ const int callWgtHeight = 128;
+ const int callWgtPosY = static_cast(UiConfig::GetInstance()->getUiHeight() * 0.6);
+ const int callWgtDevPosX = static_cast(UiConfig::GetInstance()->getUiWidth() * 0.55);
+ const int callWgtMngCenterPosX = -(callWgtDevPosX + callWgtWidth - UiConfig::GetInstance()->getUiWidth());
+ QFont ft;
+
+ m_wgtCallDialDev = new RoundedWidget(this);
+#if 0
+ dialPal.setColor(QPalette::WindowText, QColor(18, 165, 127));
+#else
+ dialPal.setColor(QPalette::WindowText,Qt::darkGray);
+ m_wgtCallDialDev->setDisabled(true);
+#endif
+ m_wgtCallDialDev->setPalette(dialPal);
+ m_wgtCallDialDev->setAutoFillBackground(true);
+ m_wgtCallDialDev->setFixedSize(callWgtWidth, callWgtHeight);
+ m_wgtCallDialDev->move(callWgtDevPosX, callWgtPosY);
+#if 0
+ m_wgtCallDialDev->setFixedSize(PWD_BTN_W_H[UiConfig::GetInstance()->getScreenConfigIndex()],
+ PWD_BTN_W_H[UiConfig::GetInstance()->getScreenConfigIndex()]);
+ dialPal.setBrush(QPalette::Background,QBrush(QPixmap(recoUiRecognize::CALL_BTN[UiConfig::GetInstance()->getScreenConfigIndex()])));
+ m_wgtCallDialDev->move(pwdBtnX - PWD_BTN_W_H[UiConfig::GetInstance()->getScreenConfigIndex()] - 20, pwdBtnY);
+#endif
+ QLabel* labelCallDevIcon = new QLabel(m_wgtCallDialDev);
+ labelCallDevIcon->setPixmap(QPixmap(":/res/image/call1_large.png"));
+ QLabel* labelCallDevText = new QLabel(tr("呼叫设备"), m_wgtCallDialDev);
+ labelCallDevText->setAlignment(Qt::AlignCenter);
+ ft.setPointSize(12);
+ labelCallDevText->setFont(ft);
+
+ QHBoxLayout* hlayCallDev = new QHBoxLayout();
+ hlayCallDev->setMargin(30);
+ hlayCallDev->addSpacing(10);
+ hlayCallDev->addWidget(labelCallDevIcon);
+ hlayCallDev->addWidget(labelCallDevText);
+ hlayCallDev->addStretch();
+ m_wgtCallDialDev->setLayout(hlayCallDev);
+ if(!hasCallBtn){
+ m_wgtCallDialDev->hide();
+ }
+
+ m_wgtCallMngCenter = new RoundedWidget(this);
+ dialPal.setColor(QPalette::WindowText, QColor(18, 150, 219));
+ m_wgtCallMngCenter->setPalette(dialPal);
+ m_wgtCallMngCenter->setAutoFillBackground(true);
+ m_wgtCallMngCenter->setFixedSize(callWgtWidth, callWgtHeight);
+ m_wgtCallMngCenter->move(callWgtMngCenterPosX, callWgtPosY);
+
+ QLabel* MngCenter = new QLabel(m_wgtCallMngCenter);
+ MngCenter->setPixmap(QPixmap(":/res/image/customer_service_large.png"));
+ QLabel* labelCallMngCenterText = new QLabel(tr("呼叫管理处"), m_wgtCallMngCenter);
+ labelCallMngCenterText->setFont(ft);
+ labelCallMngCenterText->setAlignment(Qt::AlignCenter);
+ QHBoxLayout* hlayCallMngCenter = new QHBoxLayout();
+ hlayCallMngCenter->setMargin(30);
+ hlayCallMngCenter->addStretch();
+ hlayCallMngCenter->addWidget(MngCenter);
+ hlayCallMngCenter->addWidget(labelCallMngCenterText);
+ //hlayCallMngCenter->addStretch();
+ m_wgtCallMngCenter->setLayout(hlayCallMngCenter);
+ if(!hasCallBtn){
+ m_wgtCallMngCenter->hide();
+ }
+
+ m_resWgt = new FinalResultWidget(this);
+ m_resWgt->move((UiConfig::GetInstance()->getUiWidth() - FinalResultWidget::FINAL_RESULT_WIDGET_W_H[UiConfig::GetInstance()->getScreenConfigIndex()]) / 2,
+ static_cast(UiConfig::GetInstance()->getUiHeight() * 0.65));
+ m_resWgt->hide();
+
+ m_healthCodeAuthstatus = new QLabel("未授权", this);
+ QPalette authPal(m_healthCodeAuthstatus->palette());
+ authPal.setColor(QPalette::WindowText,Qt::white);
+ m_healthCodeAuthstatus->setPalette(authPal);
+ m_healthCodeAuthstatus->setAlignment(Qt::AlignRight);
+ m_healthCodeAuthstatus->setFixedSize(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.2),
+ static_cast(UiConfig::GetInstance()->getUiHeight() * 0.05));
+ m_healthCodeAuthstatus->hide();
+ m_healthCodeAuthstatus->move(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.8),
+ static_cast(UiConfig::GetInstance()->getUiHeight() * 0.9));
+
+ m_wgtSceneMsg = new SceneMsgWidget(this);
+ m_wgtSceneMsg->setVisible(false); // BUG B045-182: 防止其他模式刚上电时会看到这个组件
+
+ QVBoxLayout* vLayout = new QVBoxLayout();
+ //vLayout->addWidget(m_widget_tmpr, 1, Qt::AlignTop | Qt::AlignCenter); //温度不加如布局管理器,因为使用move方式控制show 和 hide
+ //vLayout->addWidget(m_widget_mask, 50, Qt::AlignTop | Qt::AlignCenter); //口罩不加到布局管理器,因为温度不一定显示,如果加入,温度不显示时口罩会跳到顶端
+#if 1
+ vLayout->addWidget(m_widget_person, 50, Qt::AlignBottom | Qt::AlignCenter);
+#else
+ QHBoxLayout* hlayPerWgtPwdBtn = new QHBoxLayout();
+ hlayPerWgtPwdBtn->addSpacing((UiConfig::GetInstance()->getUiWidth() - m_widget_person->width()) / 2);
+ hlayPerWgtPwdBtn->addWidget(m_widget_mask);
+ hlayPerWgtPwdBtn->addStretch();
+ hlayPerWgtPwdBtn->addWidget(m_btnPwd, 1, Qt::AlignRight);
+ hlayPerWgtPwdBtn->setContentsMargins(0, 0, UiConfig::GetInstance()->getUiWidth() * 0.03, 0);
+ vLayout->addStretch(50);
+ vLayout->addLayout(hlayPerWgtPwdBtn);
+#endif
+ vLayout->addWidget(m_widget_msg, 1, Qt::AlignBottom | Qt::AlignCenter);
+ vLayout->setMargin(0);
+ setLayout(vLayout);
+
+ m_widget_mask->hideSelf();
+}
+
+recoUiRecognize::~recoUiRecognize()
+{
+ qDebug() << "~recoUiRecognize()";
+ if(m_widget_cMsg){
+ delete m_widget_cMsg;
+ }
+}
+
+bool recoUiRecognize::eventFilter(QObject *watched, QEvent *event)
+{
+ if( watched == this){
+ if(event->type() == QEvent::MouseButtonPress){
+ qDebug() << "MouseButtonPress";
+ emit signalScreenTouch();
+ if(multiPressToSettingPage()){
+ QPoint pos;
+ pos.setX(UiConfig::GetInstance()->getUiWidth() / 2);
+ pos.setY(UiConfig::GetInstance()->getUiHeight() / 2);
+ QCursor::setPos(pos);
+ }
+ }
+ else{
+ return false;
+ }
+ }
+ else{
+ return QWidget::eventFilter(watched, event);
+ }
+
+ return false;
+}
+
+void recoUiRecognize::setBackstageUiinterface(BackstageInterfaceForUi *interface)
+{
+ m_backstageIf = interface;
+
+#if VERSION_XIAMEN_GONGAN == 0
+ if(m_backstageIf){
+ if(m_backstageIf->getQRCodeSwitch()){
+ m_widget_person->hide();
+
+ m_widget_mask->showQRCodeMsg(UiInterfaceForBackstage::QRCode_Msg_Standby);
+
+ setBackgroundColor(MSG_BG_COLOR_QRCODE);
+
+ runQRCodeScanLine();
+ }
+
+ char buf[64] = {'\0'};
+ m_backstageIf->getDeviceId(buf, sizeof(buf));
+ QString devId{buf};
+ memset(buf, 0, sizeof(buf));
+ m_backstageIf->getAppVersion(buf, sizeof(buf));
+ QString ver{buf};
+ m_widget_msg->showDevInfo(devId, ver);
+ m_widget_msg->showRecoUiDevIdAndVer(m_backstageIf->getShowIdAndVerSw());
+ m_wgtSceneMsg->setType(m_backstageIf->getTicketModePeopleCountType());
+ setTicketCheckCount(-1, m_backstageIf->getTicketCheckCountToday());
+ }
+#endif
+}
+
+void recoUiRecognize::timerEvent(QTimerEvent *event)
+{
+#if 0
+ if(_timerId == event->timerId())
+ {
+ qDebug() << "timerEvent()";
+ _ScanCurorAnimation->start();
+ }
+#endif
+}
+
+void recoUiRecognize::slotsNoSuccessPage(const int nPage)
+{
+ //qDebug() << "slotsNoSuccessPage";
+ closeRecoResTime();
+ if(nPage >= GLOBAL_RECO_END_NO && nPage <= GLOBAL_RECO_SHOW_QRCODE)
+ {
+ showRecoFail((GLOBAL_RECO_STATE)nPage);
+ }
+ else if(GLOBAL_RECO_ID_FAILED == nPage)
+ {
+ showRecoIDFail();
+ }
+ else if(GLOBAL_RECO_IN == nPage)
+ {
+ //qDebug() << "slotsNoSuccessPageshowRecoNoScanner";
+
+ //if(!m_widget_tmpr->isHidden()){
+ if(0 == m_widget_tmpr->pos().y()){
+ //qDebug() << "cancle scanner, hide temp window";
+ //m_widget_tmpr->hide(); //没有人脸,转到人脸识别系统显示,此时隐藏温度提示
+ m_widget_tmpr->move(0, UiConfig::GetInstance()->getUiHeight());
+ m_widget_msg->setMsgBtm(tr(""));
+ }
+ }
+ else if(GLOBAL_RECO_CHECK == nPage)
+ {
+ showRetry();
+ }
+ else if(GLOBAL_RECO_MASK_REQ == nPage)
+ {
+ showNoMaskWarn(); //请戴口罩
+ }
+ else if(GLOBAL_RECO_MASK_OK == nPage)
+ {
+ showMaskOk();
+ }
+ else if(GLOBAL_RECO_TAKE_OFF_MASK == nPage)
+ {
+ showMaskWarn();
+ }
+ else if(GLOBAL_RECO_NO_ENTRY == nPage)
+ {
+ showNoEntry();
+ }
+ else if(GLOBAL_RECO_CLEAR_NO_ENTRY == nPage)
+ {
+ clearNoEntry();
+ }
+ else if(GLOBAL_RECO_CLOSE_SCANLINE == nPage)
+ {
+ //qDebug() << "GLOBAL_RECO_CLOSE_SCANLINE == nPage";
+ setScannerState(SCAN_LINE_SWITCH_OFF);
+
+#if 0
+ //如果取消扫描线了,当前定时器在运行,立即调用槽函数
+ if(_pShowResTimer->isActive())
+ {
+ _pShowResTimer->stop();
+ _pShowResTimer->start(1);
+ }
+#endif
+ }
+ else if(GLOBAL_RECO_SHOW_QRCODE_RECO == nPage)
+ {
+ //显示识别二维码界面
+ //showQRCodeReco();
+ }
+ else if(GLOBAL_RECO_SHOW_FACE_RECO == nPage)
+ {
+ showFaceReco();
+ }
+ else
+ {
+ //NOP
+ }
+}
+
+//返回值:0 扫描线状态有变化
+//返回值:-1 扫描线状态没有变化
+int recoUiRecognize::setScannerState(const SCAN_LINE_SWITCH_E sw)
+{
+ int ret = -1;
+ //if(sw != m_currentScanLine)
+ {
+ if(SCAN_LINE_SWITCH_OFF == sw){
+ //qDebug() << "runScanLine = false";
+ _moveScanner->hide();
+ if(true == runScanLine){
+ runScanLine = false;
+ ret = 0;
+ }
+ }
+ else if(SCAN_LINE_SWITCH_BLUE == sw){
+ m_widget_person->hide(); //画扫描线时关闭人员信息
+ if(false == runScanLine){
+ runScanLine = true;
+ _pShowResTimer->start(SCAN_LINE_RUN_TIME * 30 / 1000);
+ int startPos = static_cast(UiConfig::GetInstance()->getUiHeight() * SCAN_LINE_START_POS_SCALE);
+ _moveScanner->move(0, startPos);
+ m_scanLinePos = startPos;
+ ret = 0;
+ }
+#if 0
+ if(false == runScanLine){
+ _ScanCurorAnimation->start();
+ _pShowResTimer->start(SCAN_LINE_RUN_TIME);
+ runScanLine = true;
+ _moveScanner->show();
+ timerTimeoutOperation = 0;
+ //qDebug() << "runScanLine = true";
+ }
+#endif
+ }
+ else if(SCAN_LINE_SWITCH_RED == sw){
+ m_widget_person->hide(); //画扫描线时关闭人员信息
+#if 0
+ if(false == runScanLine){
+ _pShowResTimer->start(SCAN_LINE_TIMER);
+ _ScanCurorAnimation->start();
+ _moveScanner->show();
+ runScanLine = true;
+ timerTimeoutOperation = 0;
+ }
+#endif
+ }
+ m_currentScanLine = sw;
+ }
+ return ret;
+}
+
+void recoUiRecognize::setBackgroundColor(const MSG_BG_COLOR_E index)
+{
+ QPixmap pm;
+ switch (index) {
+ case MSG_BG_COLOR_BOM_BLUE:
+ m_widget_tmpr->move(0, UiConfig::GetInstance()->getUiHeight());
+ m_widget_msg->setBackgroundColor(WIDGET_BG_COLOR_BLUE);
+ break;
+ case MSG_BG_COLOR_BOM_GREEN:
+ break;
+ case MSG_BG_COLOR_BOM_TOP_GREEN:
+ m_widget_tmpr->setBackgroundColor(WIDGET_BG_COLOR_GREEN);
+ m_widget_msg->setBackgroundColor(WIDGET_BG_COLOR_GREEN);
+ break;
+ case MSG_BG_COLOR_BOM_RED:
+ break;
+ case MSG_BG_COLOR_BOM_TOP_RED:
+ m_widget_tmpr->setBackgroundColor(WIDGET_BG_COLOR_RED);
+ m_widget_msg->setBackgroundColor(WIDGET_BG_COLOR_RED);
+ break;
+ case MSG_BG_COLOR_QRCODE:
+ //m_stackwig_back->setCurrentIndex(3);
+ break;
+ default:
+ break;
+ }
+ m_currentBackColor = index;
+}
+
+void recoUiRecognize::showRecoScanner()
+{
+ //qDebug() << "showRecoScanner";
+ if(0 == setScannerState(SCAN_LINE_SWITCH_BLUE)){
+ //m_widget_tmpr->hide();
+ m_widget_tmpr->move(0, UiConfig::GetInstance()->getUiHeight());
+#if 0
+ m_widget_mask->hide();//by x 20220322
+#else
+ m_widget_mask->hideSelf();
+#endif
+ //qDebug() << "setBackgroundColor(MSG_BG_COLOR_BOM_BLUE)";
+ setBackgroundColor(MSG_BG_COLOR_BOM_BLUE);
+ //最终结果区域情况,跟扫描线互斥
+ m_widget_msg->setMsgBtm(tr(""));
+ }
+}
+
+void recoUiRecognize::showRetry()
+{
+ //qDebug() << "showRetry";
+ //m_widget_msg->setMsgTop(tr("请靠近重试"));
+ // m_widget_msg->setMsgBtm(tr(""));
+ //setScannerState(SCAN_LINE_SWITCH_BLUE);//xxxxxxxxxxxxx
+ // setBackgroundColor(MSG_BG_COLOR_BOM_BLUE);
+}
+
+void recoUiRecognize::showNoMaskWarn() //请戴口罩
+{
+ //if(! || !m_widget_mask->isHidden()){ //不阻塞扫描线
+ m_maskRefresh = 2;
+ if(_moveScanner->isHidden()){ //阻塞扫描线
+ showMaskMsg();
+ }
+}
+
+void recoUiRecognize::showMaskWarn()
+{
+ m_maskRefresh = 3;
+ if(_moveScanner->isHidden()){ //阻塞扫描线
+ showMaskMsg();
+ }
+}
+
+void recoUiRecognize::showMaskOk() //口罩检测成功
+{
+ //qDebug() << "showMaskOk";
+ //如果当前正在画扫描线,显示内容,没有画扫描线说明已经没有人员在画面中了,下层会出现无人在画面的调用后再调显示人员信息,导致信息残留在画面一直不消失
+ //如果当前口罩在显示,那可以刷新口罩内容,例如人脸在画面中一直脱戴口罩的情况,但是没有画扫描线了,此时还能刷新口罩结果
+ //if(! || !m_widget_mask->isHidden()){ //不阻塞扫描线
+ m_maskRefresh = 1;
+ if(_moveScanner->isHidden()){ //阻塞扫描线
+ showMaskMsg();
+ }
+}
+
+void recoUiRecognize::showNoEntry()
+{
+ m_NoEntryRefresh = 1;
+ if(_moveScanner->isHidden()){
+ showNoEntryMsg();
+ }
+}
+
+void recoUiRecognize::clearNoEntry()
+{
+ m_NoEntryRefresh = 2;
+ if(_moveScanner->isHidden()){
+ showNoEntryMsg();
+ }
+}
+
+int recoUiRecognize::setCamVideoWind()
+{
+ return m_backstageIf->recoUiTypeSwitch(0, 0, UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
+}
+
+void recoUiRecognize::setStyle(int style)
+{
+ if(4 == style){
+ m_bgSceneIdle = QPixmap(":/res/image/reco_ui_scene_bg_medium.jpg");
+ m_label_back->setPixmap(m_bgSceneIdle);
+ if(m_wgtCardUnderScreen){m_wgtCardUnderScreen->hide();}
+ m_widget_msg->setStyle(0, 0, Qt::black);
+ m_wgtSceneMsg->show();
+ }else{
+ m_label_back->setPixmap(m_bgPm);
+ if(m_wgtCardUnderScreen){m_wgtCardUnderScreen->show();}
+ m_widget_msg->setStyle(1, 1, Qt::white);
+ m_wgtSceneMsg->hide();
+ }
+ m_widget_person->setPersonMsg(RecoUiTextCfg::TextFacePass, recoUiTextCfg(RecoUiTextCfg::TextFacePass), PersonWidget::BG_COLOR_BLUE, false);
+
+}
+
+void recoUiRecognize::setSceneUiReco(bool toReco)
+{
+ m_label_back->setPixmap(toReco ? m_bgPm : m_bgSceneIdle);
+}
+
+void recoUiRecognize::setTicketCheckCount(int source, int count)
+{
+ m_wgtSceneMsg->setPersonNum(source, count);
+}
+
+void recoUiRecognize::setScenePersonCountType(int type)
+{
+ m_wgtSceneMsg->setType(type);
+}
+
+void recoUiRecognize::slotShowOrHideFaceFrame(bool show)
+{
+ //设备连接测温模块启动后移除测温,web上设置人形框
+ if(UiConfig::GetInstance()->isFaceFrameShowByTempExist()){
+ UiConfig::GetInstance()->showFaceFrameByTempExist(false);
+ }
+ m_showFaceFrameByUser = show;
+ if(!m_isNightMode){
+ slotShowRecoUiMask(1);
+ }
+}
+
+void recoUiRecognize::slotShowFinalResult(bool pass)
+{
+ if(UiConfig::GetInstance()->isRecoUiStyleStandard()){
+ m_resWgt->showResult(pass);
+ }
+}
+
+void recoUiRecognize::slotShowHealthCodeAuthStatus(int status)
+{
+ switch(status){
+ case 0:m_healthCodeAuthstatus->hide();break;
+ case 1:m_healthCodeAuthstatus->show();break;
+ case 2:m_healthCodeAuthstatus->setText("未授权");break;
+ case 3:m_healthCodeAuthstatus->setText("已授权");break;
+ case 4:m_healthCodeAuthstatus->setText("授权不可用");break;
+ default:break;
+ }
+}
+
+void recoUiRecognize::slotShowCallBtn(bool show)
+{
+ m_wgtCallDialDev->setVisible(show);
+ m_wgtCallMngCenter->setVisible(show);
+}
+
+void recoUiRecognize::slotShowRecoUiDevIdAndVer(bool show)
+{
+ m_widget_msg->showRecoUiDevIdAndVer(show);
+}
+
+void recoUiRecognize::showRecoFail(GLOBAL_RECO_STATE failType)
+{
+ m_personRefresh = failType;
+ if(_moveScanner->isHidden()){ // m_widget_person->allowToShow()
+ showPersonWidgetMsg();
+ }
+}
+
+void recoUiRecognize::showRecoIDFail()
+{
+ m_personRefresh = GLOBAL_RECO_ID_FAILED;
+ if(_moveScanner->isHidden()){
+ showPersonWidgetMsg();
+ }
+}
+
+void recoUiRecognize::closeRecoResTime()
+{
+ //if(_pShowResTimer->isActive())
+ {
+ // _pShowResTimer->stop();
+ }
+}
+
+void recoUiRecognize::slotsSuccessPage(const int nPage, const QString& name)
+{
+ if( GLOBAL_RECO_END_OK != nPage)
+ {
+ return ;
+ }
+ closeRecoResTime();
+
+ m_personRefresh = GLOBAL_RECO_END_OK;
+ m_name = name;
+ if(_moveScanner->isHidden()){
+ showPersonWidgetMsg();
+ }
+}
+
+void recoUiRecognize::slotsDrawScanner(const int nPage, const bool faceAvailable)
+{
+ //qDebug()<<"slotsDrawScanner():" << nPage <<" face: " << faceAvailable;
+ if(!faceAvailable)
+ {
+ //qDebug() << "(sum <= 0) && (nullptr == pInfo showRecoNoScanner()";
+ m_currentBackColor = MSG_BG_COLOR_BOM_NULL;
+
+ setScannerState(SCAN_LINE_SWITCH_OFF);
+ //if(!m_widget_tmpr->isHidden())
+ if(0 == m_widget_tmpr->pos().y())
+ {
+ //m_widget_tmpr->hide(); //没有人脸,转到人脸识别系统显示,此时隐藏温度提示
+ m_widget_tmpr->move(0, UiConfig::GetInstance()->getUiHeight());
+ }
+ #if 0
+ if(!m_widget_mask->isHidden()){
+ m_widget_mask->hide();//by x 20220322
+ }
+ #else
+ m_widget_mask->hideSelf();
+ #endif
+
+ setBackgroundColor(MSG_BG_COLOR_BOM_BLUE);
+
+ m_widget_person->setPersonMsg(RecoUiTextCfg::TextFacePass, recoUiTextCfg(RecoUiTextCfg::TextFacePass), PersonWidget::BG_COLOR_BLUE, false);//tr("请刷脸通行")
+ m_widget_msg->setMsgBtm(tr(""));
+
+ if(UiConfig::GetInstance()->isRecoUiStyleStandard()){
+ m_resWgt->hide();
+ }else if(UiConfig::GetInstance()->isRecoUiStyleScene()){
+ m_label_back->setPixmap(m_bgSceneIdle);
+ }
+
+ m_msgShowed = false;
+ //qDebug() << "m_faceAivaliable set false";
+ m_faceAivaliable = false;
+
+ m_tempRefresh = -1;
+ m_maskRefresh = -1;
+ m_personRefresh = -1;
+ m_NotiMsgRefresh = -1;
+ m_NoEntryRefresh = 0;
+ m_showGreenColor = 0;
+ m_showRedColor = 0;
+ return ;
+ }
+
+ m_faceAivaliable = true;
+
+ if(GLOBAL_RECO_IN_SCANNER != nPage)
+ {
+ return ;
+ }
+
+ closeRecoResTime();
+ showRecoScanner();
+}
+
+void recoUiRecognize::slotShowNormalTemp(const float temp, const bool isC)
+{
+ m_widget_tmpr->showNormalTemp(recoUiTextCfg(RecoUiTextCfg::TextTemp), temp, isC);
+
+ #if 0
+ if(true == runScanLine){
+ m_tempRefresh = 1;
+ }
+ #endif
+
+ m_tempRefresh = 1;
+ if(_moveScanner->isHidden()){
+ showTempMsg();
+ }
+}
+
+void recoUiRecognize::slotShowAbnormalTemp(const float temp, const bool isHigh, const bool isC)
+{
+ m_widget_tmpr->showAbnormalTemp(recoUiTextCfg(RecoUiTextCfg::TextTemp), temp, isHigh, isC);
+
+ #if 0
+ if(true == runScanLine){
+ if(isHigh){
+ m_tempRefresh = 2;
+ }
+ else {
+ m_tempRefresh = 3;
+ }
+ }
+ #endif
+ if(isHigh){
+ m_tempRefresh = 2;
+ }
+ else {
+ m_tempRefresh = 3;
+ }
+ if(_moveScanner->isHidden()){
+ showTempMsg();
+ }
+}
+
+void recoUiRecognize::slotsInteractionChange(const INTERACION_OPTION &interaction, int nSelectRes)
+{
+ if(OPTION_LOGO == interaction){
+ QString logo;
+ if(0 == nSelectRes){
+ logo = LOGO_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()];
+ m_widget_msg->setLogo(logo);
+ }
+ else if(1 == nSelectRes){
+ logo = "";
+ m_widget_msg->setLogo(logo);
+ }
+ else if(2 == nSelectRes){ //自定义logo
+ if(m_backstageIf){
+ char logoPath[256] = {'\0'};
+ if(0 == m_backstageIf->getCustomLogo(logoPath, sizeof(logoPath))){
+ logo = QString(logoPath);
+ m_widget_msg->setLogo(logo, true);
+ }
+ }
+ }
+ }
+}
+
+void recoUiRecognize::slotUpdateLogo(const int option)
+{
+ slotsInteractionChange(OPTION_LOGO, option);
+}
+
+void recoUiRecognize::handleRecoResShowTime()
+{
+ if(m_scanLineInterval > 0 && true == runScanLine){
+ m_scanLineInterval -= (SCAN_LINE_RUN_TIME * 30 / 1000);
+ return;
+ }
+
+ int startPos = static_cast(UiConfig::GetInstance()->getUiHeight() * SCAN_LINE_START_POS_SCALE);
+ int distance = static_cast(UiConfig::GetInstance()->getUiHeight() * SCAN_LINE_RUN_DISTANCE_SCALE);
+ m_scanLinePos += (distance * 1000 / 30 / SCAN_LINE_RUN_TIME); //1000ms 30帧
+ if(m_scanLinePos >= (startPos + distance)){
+ m_scanLinePos = startPos;
+ m_scanLineInterval = SCAN_LINE_LOOP_INTERVAL;
+ _moveScanner->hide();
+ return;
+ }
+ _moveScanner->hide();
+ if(true == runScanLine){
+ _moveScanner->move(0, m_scanLinePos);
+ }
+ do{
+#if 0
+ if(showTempMsg()){
+ break;
+ }
+ if(showMaskMsg()){
+ break;
+ }
+ if(showPersonWidgetMsg()){
+ break;
+ }
+ if(showNoEntryMsg()){
+ break;
+ }
+ if(showNotiMsg()){
+ break;
+ }
+#else
+ if(showPersonWidgetMsg()){
+ break;
+ }
+ if(showMaskMsg()){
+ break;
+ }
+ if(showTempMsg()){
+ break;
+ }
+ if(showNoEntryMsg()){
+ break;
+ }
+ if(showNotiMsg()){
+ break;
+ }
+#endif
+ }while(0);
+
+ if(false == runScanLine && 0 == m_showGreenColor && 0 == m_showRedColor){
+ _pShowResTimer->stop();
+ _moveScanner->hide();
+ m_scanLineInterval = 0;
+ }
+ else {
+ if(true == runScanLine)
+ _moveScanner->show();
+ }
+}
+
+void recoUiRecognize::slotUpdatePlatformConnectionStatus(const int status)
+{
+ m_widget_msg->setNetworkStatus(status);
+}
+
+void recoUiRecognize::slotsResetRecoUi()
+{
+ //人脸识别 / 二维码 二选一
+ #if 0
+ if(m_backstageIf){
+ if(m_backstageIf->getQRCodeSwitch()){
+ //二维码扫描模式不复位到人脸识别界面,否则会出现人脸框叠加二维码扫描框
+ }
+ else {
+ slotsDrawScanner(0, nullptr, 0);
+ }
+ }
+ #endif
+ slotsDrawScanner(0, false);
+}
+
+void recoUiRecognize::slotShowQRCodeMsg(const int msg)
+{
+ m_widget_mask->showQRCodeMsg(static_cast(msg));
+ if(UiInterfaceForBackstage::QRCode_Msg_Error == static_cast