functionLogic.cc 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543
  1. #pragma once
  2. #include "uart/ProtocolSender.h"
  3. #include "service/BusinessConfig.h"
  4. #include "voip/media_player.h"
  5. #include "manager/ConfigManager.h"
  6. #include <sys/reboot.h>
  7. /*
  8. *此文件由GUI工具生成
  9. *文件功能:用于处理用户的逻辑相应代码
  10. *功能说明:
  11. *========================onButtonClick_XXXX
  12. 当页面中的按键按下后系统会调用对应的函数,XXX代表GUI工具里面的[ID值]名称,
  13. 如Button1,当返回值为false的时候系统将不再处理这个按键,返回true的时候系统将会继续处理此按键。比如SYS_BACK.
  14. *========================onSlideWindowItemClick_XXXX(int index)
  15. 当页面中存在滑动窗口并且用户点击了滑动窗口的图标后系统会调用此函数,XXX代表GUI工具里面的[ID值]名称,
  16. 如slideWindow1;index 代表按下图标的偏移值
  17. *========================onSeekBarChange_XXXX(int progress)
  18. 当页面中存在滑动条并且用户改变了进度后系统会调用此函数,XXX代表GUI工具里面的[ID值]名称,
  19. 如SeekBar1;progress 代表当前的进度值
  20. *========================ogetListItemCount_XXXX()
  21. 当页面中存在滑动列表的时候,更新的时候系统会调用此接口获取列表的总数目,XXX代表GUI工具里面的[ID值]名称,
  22. 如List1;返回值为当前列表的总条数
  23. *========================oobtainListItemData_XXXX(ZKListView::ZKListItem *pListItem, int index)
  24. 当页面中存在滑动列表的时候,更新的时候系统会调用此接口获取列表当前条目下的内容信息,XXX代表GUI工具里面的[ID值]名称,
  25. 如List1;pListItem 是贴图中的单条目对象,index是列表总目的偏移量。具体见函数说明
  26. *========================常用接口===============
  27. *LOGD(...) 打印调试信息的接口
  28. *mTextXXXPtr->setText("****") 在控件TextXXX上显示文字****
  29. *mButton1Ptr->setSelected(true); 将控件mButton1设置为选中模式,图片会切换成选中图片,按钮文字会切换为选中后的颜色
  30. *mSeekBarPtr->setProgress(12) 在控件mSeekBar上将进度调整到12
  31. *mListView1Ptr->refreshListView() 让mListView1 重新刷新,当列表数据变化后调用
  32. *mDashbroadView1Ptr->setTargetAngle(120) 在控件mDashbroadView1上指针显示角度调整到120度
  33. *
  34. * 在Eclipse编辑器中 使用 “alt + /” 快捷键可以打开智能提示
  35. */
  36. Json::Value bedList;
  37. Json::Value chooseBed;
  38. int chooseId = 0;
  39. static string _functionWindows;
  40. static string _functionText;
  41. static string _nursingText;
  42. static string _warnText;
  43. static string _goActivity;
  44. static base::MediaPlayer mediaPlayer;
  45. #define FUNCTION_TIMER_HANDLE 3 // 增援的定时器id
  46. static void callBed() {
  47. Json::Value _frameRoom = getFrame();
  48. Json::Value _frameBedList = _frameRoom["frame_bed_list"];
  49. chooseId = 0;
  50. if (_frameBedList.size() > 0) {
  51. bedList.clear();
  52. for (int i = 0; i < _frameBedList.size(); i++) {
  53. if (_frameBedList[i]["customer_id"].asString() != "") {
  54. bedList.append(_frameBedList[i]);
  55. }
  56. }
  57. }
  58. else {
  59. bedList.clear();
  60. }
  61. mCallBedListViewPtr->refreshListView();
  62. mCallBedWindowPtr->showWnd();
  63. }
  64. static void help() {
  65. mIconPainterPtr->setBackgroundPic("icon/zengyuan2.png");
  66. mFunctionTextViewPtr->setText(LANGUAGEMANAGER->getValue("HelpInfo"));
  67. mStateTextViewPtr->setVisible(false);
  68. mFunctionButtonPtr->setButtonStatusPic(ZK_CONTROL_STATUS_NORMAL, "button/elliptic_bule2.png");
  69. mFunctionButtonPtr->setText(LANGUAGEMANAGER->getValue("Confirm"));
  70. mFunctionWindowPtr->showWnd();
  71. mActivityPtr->registerUserTimer(FUNCTION_TIMER_HANDLE, 30 * 1000); // 30秒
  72. }
  73. static void helpResopnse() {
  74. mIconPainterPtr->setBackgroundPic("icon/xiangy.png");
  75. mFunctionTextViewPtr->setText(LANGUAGEMANAGER->getValue("HelpResponse"));
  76. mStateTextViewPtr->setVisible(false);
  77. mFunctionButtonPtr->setButtonStatusPic(ZK_CONTROL_STATUS_NORMAL, "button/elliptic_yellow.png");
  78. mFunctionButtonPtr->setText(LANGUAGEMANAGER->getValue("Confirm"));
  79. mFunctionWindowPtr->showWnd();
  80. mActivityPtr->registerUserTimer(FUNCTION_TIMER_HANDLE, 30 * 1000); // 30秒
  81. }
  82. void toFunctionActivity(std::string data) {
  83. if (_functionWindows == "help") {
  84. helpResopnse();
  85. mediaPlayer.Play(CONFIGMANAGER->getResFilePath("response.wav"), "", 1000,
  86. base::MediaPlayer::PlayMode::Default);
  87. }
  88. }
  89. void warn(string warnText) {
  90. mWarnTextViewPtr->setText(warnText);
  91. mWarnWindowPtr->showWnd();
  92. }
  93. void position(string functionText) {
  94. mIconPainterPtr->setBackgroundPic("icon/chenggong_y.png");
  95. mFunctionTextViewPtr->setText(LANGUAGEMANAGER->getValue("PostitionedMsg") + functionText);
  96. mStateTextViewPtr->setVisible(false);
  97. mFunctionButtonPtr->setButtonStatusPic(ZK_CONTROL_STATUS_NORMAL, "button/elliptic_yellow.png");
  98. mFunctionButtonPtr->setText(LANGUAGEMANAGER->getValue("Confirm"));
  99. mFunctionWindowPtr->showWnd();
  100. mActivityPtr->registerUserTimer(FUNCTION_TIMER_HANDLE, 30 * 1000); // 30秒
  101. }
  102. void roomPatrol(string functionText) {
  103. mIconPainterPtr->setBackgroundPic("icon/xunfang.png");
  104. mFunctionTextViewPtr->setText(LANGUAGEMANAGER->getValue("RoomPatrolMsg") + functionText);
  105. mStateTextViewPtr->setVisible(false);
  106. mFunctionButtonPtr->setButtonStatusPic(ZK_CONTROL_STATUS_NORMAL, "button/elliptic_green.png");
  107. mFunctionButtonPtr->setText(LANGUAGEMANAGER->getValue("Confirm"));
  108. mFunctionWindowPtr->showWnd();
  109. mActivityPtr->registerUserTimer(FUNCTION_TIMER_HANDLE, 30 * 1000); // 30秒
  110. }
  111. void nursing(string functionText, string nursingText) {
  112. mIconPainterPtr->setBackgroundPic("icon/huli2.png");
  113. mFunctionTextViewPtr->setText(functionText);
  114. mStateTextViewPtr->setVisible(true);
  115. mStateTextViewPtr->setText(nursingText + " " + LANGUAGEMANAGER->getValue("SetNursingMsg"));
  116. mFunctionButtonPtr->setButtonStatusPic(ZK_CONTROL_STATUS_NORMAL, "button/elliptic_pink.png");
  117. mFunctionButtonPtr->setText(LANGUAGEMANAGER->getValue("Nursing"));
  118. mFunctionWindowPtr->showWnd();
  119. }
  120. void nursingEnd(string functionText) {
  121. mIconPainterPtr->setBackgroundPic("icon/huli2.png");
  122. mFunctionTextViewPtr->setText(functionText);
  123. mStateTextViewPtr->setVisible(true);
  124. mStateTextViewPtr->setText(LANGUAGEMANAGER->getValue("SetNursingEndMsg"));
  125. mFunctionButtonPtr->setButtonStatusPic(ZK_CONTROL_STATUS_NORMAL, "button/elliptic_pink.png");
  126. mFunctionButtonPtr->setText(LANGUAGEMANAGER->getValue("NursingEnd"));
  127. mFunctionWindowPtr->showWnd();
  128. }
  129. void pwdWindowInfo() {
  130. mPwdEditTextPtr->setText("");
  131. mPwdPromptTextViewPtr->setTextColor(0xFF000000);
  132. mPwdPromptTextViewPtr->setText(LANGUAGEMANAGER->getValue("PasswordTag"));
  133. mPwdWindowPtr->showWnd();
  134. mServerIpEditTextPtr->setText("");
  135. mServerPortEditTextPtr->setText("");
  136. mServerPromptTextViewPtr->setText(LANGUAGEMANAGER->getValue("ServerTag"));
  137. mPwdPromptTextViewPtr->setTextColor(0xFF000000);
  138. }
  139. /**
  140. * 注册定时器
  141. * 填充数组用于注册定时器
  142. * 注意:id不能重复
  143. */
  144. static S_ACTIVITY_TIMEER REGISTER_ACTIVITY_TIMER_TAB[] = {
  145. //{0, 6000}, //定时器id=0, 时间间隔6秒
  146. //{1, 1000},
  147. };
  148. /**
  149. * 当界面构造时触发
  150. */
  151. static void onUI_init(){
  152. //Tips :添加 UI初始化的显示代码到这里,如:mText1Ptr->setText("123");
  153. mFunctionPainterPtr->setAlpha(102);
  154. }
  155. /**
  156. * 当切换到该界面时触发
  157. */
  158. static void onUI_intent(const Intent *intentPtr) {
  159. if (intentPtr != NULL) {
  160. //TODO=
  161. // 键值解析
  162. _functionWindows = intentPtr->getExtra(functionWindows);
  163. LOGD("_functionWindows == %s", _functionWindows.c_str());
  164. if (_functionWindows == "callBed") {
  165. callBed();
  166. }
  167. else if (_functionWindows == "help") {
  168. help();
  169. mediaPlayer.Play(CONFIGMANAGER->getResFilePath("response.wav"), "", 1000,
  170. base::MediaPlayer::PlayMode::Default);
  171. }
  172. else if (_functionWindows == "helpResonse") {
  173. helpResopnse();
  174. mediaPlayer.Play(CONFIGMANAGER->getResFilePath("response.wav"), "", 1000,
  175. base::MediaPlayer::PlayMode::Default);
  176. }
  177. else if (_functionWindows == "warn") {
  178. _warnText = intentPtr->getExtra(warnText);
  179. warn(_warnText);
  180. }
  181. else if (_functionWindows == "logoutMedicalCare") {
  182. _goActivity = intentPtr->getExtra(goActivity);
  183. mLogoutWindowPtr->showWnd();
  184. }
  185. else if (_functionWindows == "position") {
  186. _functionText = intentPtr->getExtra(functionText);
  187. position(_functionText);
  188. mediaPlayer.Play(CONFIGMANAGER->getResFilePath("response.wav"), "", 1000,
  189. base::MediaPlayer::PlayMode::Default);
  190. }
  191. else if (_functionWindows == "roomPatrol") {
  192. _functionText = intentPtr->getExtra(functionText);
  193. roomPatrol(_functionText);
  194. mediaPlayer.Play(CONFIGMANAGER->getResFilePath("response.wav"), "", 1000,
  195. base::MediaPlayer::PlayMode::Default);
  196. }
  197. else if (_functionWindows == "nursing") {
  198. _functionText = intentPtr->getExtra(functionText);
  199. _nursingText = intentPtr->getExtra(nursingText);
  200. nursing(_functionText, _nursingText);
  201. }
  202. else if (_functionWindows == "nursingEnd") {
  203. _functionText = intentPtr->getExtra(functionText);
  204. nursingEnd(_functionText);
  205. }
  206. else if (_functionWindows == "serverChange" ||
  207. _functionWindows == "setting" ||
  208. _functionWindows == "init") {
  209. pwdWindowInfo();
  210. }
  211. }
  212. }
  213. /*
  214. * 当界面显示时触发
  215. */
  216. static void onUI_show() {
  217. EASYUICONTEXT->hideStatusBar();
  218. EASYUICONTEXT->hideNaviBar();
  219. }
  220. /*
  221. * 当界面隐藏时触发
  222. */
  223. static void onUI_hide() {
  224. }
  225. /*
  226. * 当界面完全退出时触发
  227. */
  228. static void onUI_quit() {
  229. mCallBedWindowPtr->hideWnd();
  230. mFunctionWindowPtr->hideWnd();
  231. mWarnWindowPtr->hideWnd();
  232. mLogoutWindowPtr->hideWnd();
  233. }
  234. /**
  235. * 串口数据回调接口
  236. */
  237. static void onProtocolDataUpdate(const SProtocolData &data) {
  238. }
  239. /**
  240. * 定时器触发函数
  241. * 不建议在此函数中写耗时操作,否则将影响UI刷新
  242. * 参数: id
  243. * 当前所触发定时器的id,与注册时的id相同
  244. * 返回值: true
  245. * 继续运行当前定时器
  246. * false
  247. * 停止运行当前定时器
  248. */
  249. static bool onUI_Timer(int id){
  250. switch (id) {
  251. case FUNCTION_TIMER_HANDLE:
  252. mFunctionWindowPtr->hideWnd();
  253. EASYUICONTEXT->closeActivity("functionActivity");
  254. return false;
  255. break;
  256. default:
  257. break;
  258. }
  259. return true;
  260. }
  261. /**
  262. * 有新的触摸事件时触发
  263. * 参数:ev
  264. * 新的触摸事件
  265. * 返回值:true
  266. * 表示该触摸事件在此被拦截,系统不再将此触摸事件传递到控件上
  267. * false
  268. * 触摸事件将继续传递到控件上
  269. */
  270. static bool onfunctionActivityTouchEvent(const MotionEvent &ev) {
  271. switch (ev.mActionStatus) {
  272. case MotionEvent::E_ACTION_DOWN://触摸按下
  273. //LOGD("时刻 = %ld 坐标 x = %d, y = %d", ev.mEventTime, ev.mX, ev.mY);
  274. break;
  275. case MotionEvent::E_ACTION_MOVE://触摸滑动
  276. break;
  277. case MotionEvent::E_ACTION_UP: //触摸抬起
  278. break;
  279. default:
  280. break;
  281. }
  282. return false;
  283. }
  284. static bool onButtonClick_sys_back(ZKButton *pButton) {
  285. LOGD(" ButtonClick sys_back !!!\n");
  286. return false;
  287. }
  288. static int getListItemCount_CallBedListView(const ZKListView *pListView) {
  289. //LOGD("getListItemCount_CallBedListView !\n");
  290. return bedList.size();
  291. }
  292. static void obtainListItemData_CallBedListView(ZKListView *pListView,ZKListView::ZKListItem *pListItem, int index) {
  293. //LOGD(" obtainListItemData_ CallBedListView !!!\n");
  294. if (bedList.size() > 0) {
  295. string frameBedName = bedList[index]["frame_bed"]["full_name"].asString();
  296. int nPos = frameBedName.find("-");
  297. if (nPos != -1) {
  298. frameBedName = frameBedName.substr(nPos + 1, frameBedName.length());
  299. }
  300. string customerName = bedList[index]["customer_name"].asString();
  301. pListItem->setText(frameBedName + " (" + customerName + ")");
  302. }
  303. if (index == chooseId) {
  304. pListItem->setSelected(true);
  305. chooseBed = bedList[index];
  306. }
  307. else {
  308. pListItem->setSelected(false);
  309. }
  310. }
  311. static void onListItemClick_CallBedListView(ZKListView *pListView, int index, int id) {
  312. //LOGD(" onListItemClick_ CallBedListView !!!\n");
  313. chooseId = index;
  314. }
  315. static bool onButtonClick_ConfirmCallButton(ZKButton *pButton) {
  316. LOGD(" ButtonClick ConfirmCallButton !!!\n");
  317. string toId = chooseBed["bed_device_id"].asString();
  318. if (toId == "") {
  319. mCallBedWindowPtr->hideWnd();
  320. mWarnTextViewPtr->setText(LANGUAGEMANAGER->getValue("NoBedDevice"));
  321. mWarnWindowPtr->showWnd();
  322. }
  323. else {
  324. Intent* intent = new Intent();
  325. intent->putExtra(isOutgoing, "true");
  326. intent->putExtra(audioOnly, "true");
  327. intent->putExtra(toIdStr, toId);
  328. intent->putExtra(callName, chooseBed["frame_bed"]["full_name"].asString() + " " + chooseBed["customer_name"].asString());
  329. EASYUICONTEXT->openActivity("callActivity", intent);
  330. EASYUICONTEXT->closeActivity("functionActivity");
  331. }
  332. return false;
  333. }
  334. static bool onButtonClick_CancelCallButton(ZKButton *pButton) {
  335. LOGD(" ButtonClick CancelCallButton !!!\n");
  336. mCallBedWindowPtr->hideWnd();
  337. EASYUICONTEXT->goBack();
  338. return false;
  339. }
  340. static bool onButtonClick_backButton(ZKButton *pButton) {
  341. LOGD(" ButtonClick backButton !!!\n");
  342. if (_functionWindows == "callBed") {
  343. mCallBedWindowPtr->showWnd();
  344. mWarnWindowPtr->hideWnd();
  345. }
  346. else {
  347. EASYUICONTEXT->goBack();
  348. }
  349. return false;
  350. }
  351. static bool onButtonClick_FunctionButton(ZKButton *pButton) {
  352. LOGD(" ButtonClick FunctionButton !!!\n");
  353. if (_functionWindows == "help" ||
  354. _functionWindows == "helpResonse" ||
  355. _functionWindows == "position" ||
  356. _functionWindows == "roomPatrol"
  357. ) {
  358. mActivityPtr->unregisterUserTimer(FUNCTION_TIMER_HANDLE);
  359. }
  360. else if (_functionWindows == "nursing") {
  361. setNursing(true);
  362. }
  363. else if (_functionWindows == "nursingEnd") {
  364. setNursing(false);
  365. }
  366. EASYUICONTEXT->closeActivity("functionActivity");
  367. return false;
  368. }
  369. static bool onButtonClick_ConfirmLogoutButton(ZKButton *pButton) {
  370. LOGD(" ButtonClick ConfirmLogoutButton !!!\n");
  371. logoutMedicalCare();
  372. EASYUICONTEXT->closeActivity("functionActivity");
  373. if (_goActivity == "home") {
  374. goHome();
  375. }
  376. else if (_goActivity == "more") {
  377. goMore();
  378. }
  379. return false;
  380. }
  381. static bool onButtonClick_CancelLogoutButton(ZKButton *pButton) {
  382. LOGD(" ButtonClick CancelLogoutButton !!!\n");
  383. EASYUICONTEXT->closeActivity("functionActivity");
  384. return false;
  385. }
  386. static void onEditTextChanged_PwdEditText(const std::string &text) {
  387. //LOGD(" onEditTextChanged_ PwdEditText %s !!!\n", text.c_str());
  388. }
  389. static bool onButtonClick_PwdConfirmButton(ZKButton *pButton) {
  390. LOGD(" ButtonClick PwdConfirmButton !!!\n");
  391. string pwd = mPwdEditTextPtr->getText();
  392. if (_functionWindows == "serverChange") {
  393. // 密码为666
  394. string cpwd = "666";
  395. if (pwd == cpwd){
  396. mPwdWindowPtr->hideWnd();
  397. mServerWindowPtr->showWnd();
  398. string serverIp = StoragePreferences::getString(STORE_GATEWAY, "172.28.100.100");
  399. int serverPort = StoragePreferences::getInt(STORE_HTTP_PORT, 8006);
  400. mServerIpEditTextPtr->setText(serverIp);
  401. mServerPortEditTextPtr->setText(to_string(serverPort));
  402. } else {
  403. mPwdPromptTextViewPtr->setTextTr("PasswordWrong");
  404. mPwdPromptTextViewPtr->setTextColor(0xFFFF0000);
  405. }
  406. }
  407. else if (_functionWindows == "setting") {
  408. // 密码为888
  409. string cpwd = "888";
  410. if (pwd == cpwd){
  411. // 关闭密码输入界面
  412. mPwdWindowPtr->hideWnd();
  413. EASYUICONTEXT->closeActivity("functionActivity");
  414. // 打开设置界面
  415. EASYUICONTEXT->openActivity("settingActivity");
  416. // EASYUICONTEXT->openActivity("sipTestActivity");
  417. EASYUICONTEXT->closeActivity("deviceInfoActivity");
  418. } else {
  419. mPwdPromptTextViewPtr->setTextTr("PasswordWrong");
  420. mPwdPromptTextViewPtr->setTextColor(0xFFFF0000);
  421. }
  422. }
  423. else if (_functionWindows == "init") {
  424. // 密码为888
  425. string cpwd = "888";
  426. if (pwd == cpwd){
  427. // 关闭密码输入界面
  428. mPwdWindowPtr->hideWnd();
  429. EASYUICONTEXT->closeActivity("functionActivity");
  430. // 打开初始化界面
  431. openInitWindow();
  432. } else {
  433. mPwdPromptTextViewPtr->setTextTr("PasswordWrong");
  434. mPwdPromptTextViewPtr->setTextColor(0xFFFF0000);
  435. }
  436. }
  437. return false;
  438. }
  439. static bool onButtonClick_PwdBackButton(ZKButton *pButton) {
  440. LOGD(" ButtonClick PwdBackButton !!!\n");
  441. // 关闭密码输入界面
  442. mPwdWindowPtr->hideWnd();
  443. EASYUICONTEXT->closeActivity("functionActivity");
  444. return false;
  445. }
  446. static void onEditTextChanged_ServerIpEditText(const std::string &text) {
  447. //LOGD(" onEditTextChanged_ ServerIpEditText %s !!!\n", text.c_str());
  448. }
  449. static void onEditTextChanged_ServerPortEditText(const std::string &text) {
  450. //LOGD(" onEditTextChanged_ ServerPortEditText %s !!!\n", text.c_str());
  451. }
  452. static bool onButtonClick_ServerConfirmButton(ZKButton *pButton) {
  453. LOGD(" ButtonClick ServerConfirmButton !!!\n");
  454. LOGD("设置服务器ip !!!\n");
  455. LOGD("服务器ip set to %s", mServerIpEditTextPtr->getText().c_str());
  456. LOGD("服务器port set to %s", mServerPortEditTextPtr->getText().c_str());
  457. if(false == checkAddr(mServerIpEditTextPtr->getText())){
  458. mServerPromptTextViewPtr->setTextTr("ServerIPWrong");
  459. mPwdPromptTextViewPtr->setTextColor(0xFFFF0000);
  460. return false;
  461. }
  462. StoragePreferences::putString(STORE_GATEWAY, mServerIpEditTextPtr->getText().c_str());
  463. StoragePreferences::putInt(STORE_HTTP_PORT, std::atoi(mServerPortEditTextPtr->getText().c_str()));
  464. const char* req = "-1";
  465. TcpClient::instance()->sendMsg(req);
  466. //重启
  467. sync();
  468. reboot(RB_AUTOBOOT);
  469. return false;
  470. }
  471. static bool onButtonClick_ServerCancelButton(ZKButton *pButton) {
  472. LOGD(" ButtonClick ServerCancelButton !!!\n");
  473. // 关闭密码输入界面
  474. mServerWindowPtr->hideWnd();
  475. EASYUICONTEXT->closeActivity("functionActivity");
  476. return false;
  477. }