Kaynağa Gözat

开发版本初始化功能

vothin 2 yıl önce
ebeveyn
işleme
04ee1e2322

+ 2 - 0
i18n/zh_CN.tr

@@ -22,6 +22,8 @@
     <string name="SettingServerIP">服务器设置</string>
     <string name="SettingNet">网络设置</string>
     <string name="SoftVersion">软件版本</string>
+    <string name="SoftInitialization">初始化版本</string>
+    <string name="SoftDown">下载</string>
     <string name="SoftVersionCheck">检查更新</string>
     <string name="SoftUpdateNow">立即升级</string>
     <string name="SipTest">切换成SIP</string>

+ 19 - 0
jni/activity/DeviceUpdateActivity.cpp

@@ -4,6 +4,11 @@
 #include "DeviceUpdateActivity.h"
 
 /*TAG:GlobalVariable全局变量*/
+static ZKButton* mFindBackButtonPtr;
+static ZKButton* mBackButtonPtr;
+static ZKListView* mDeviceTypeListViewPtr;
+static ZKWindow* mWindowInitPtr;
+static ZKButton* mButtonInitPtr;
 static ZKButton* msys_backPtr;
 static ZKWindow* mWindow1Ptr;
 static ZKTextView* mVersionNoNewPtr;
@@ -65,6 +70,9 @@ typedef struct {
 
 /*TAG:ButtonCallbackTab按键映射表*/
 static S_ButtonCallback sButtonCallbackTab[] = {
+    ID_DEVICEUPDATE_FindBackButton, onButtonClick_FindBackButton,
+    ID_DEVICEUPDATE_BackButton, onButtonClick_BackButton,
+    ID_DEVICEUPDATE_ButtonInit, onButtonClick_ButtonInit,
     ID_DEVICEUPDATE_sys_back, onButtonClick_sys_back,
     ID_DEVICEUPDATE_ButtonDialog1, onButtonClick_ButtonDialog1,
     ID_DEVICEUPDATE_ButtonInstantly, onButtonClick_ButtonInstantly,
@@ -94,6 +102,7 @@ typedef struct {
 }S_ListViewFunctionsCallback;
 /*TAG:ListViewFunctionsCallback*/
 static S_ListViewFunctionsCallback SListViewFunctionsCallbackTab[] = {
+    ID_DEVICEUPDATE_DeviceTypeListView, getListItemCount_DeviceTypeListView, obtainListItemData_DeviceTypeListView, onListItemClick_DeviceTypeListView,
 };
 
 
@@ -140,6 +149,11 @@ DeviceUpdateActivity::~DeviceUpdateActivity() {
     EASYUICONTEXT->unregisterGlobalTouchListener(this);
     onUI_quit();
     unregisterProtocolDataUpdateListener(onProtocolDataUpdate);
+    mFindBackButtonPtr = NULL;
+    mBackButtonPtr = NULL;
+    mDeviceTypeListViewPtr = NULL;
+    mWindowInitPtr = NULL;
+    mButtonInitPtr = NULL;
     msys_backPtr = NULL;
     mWindow1Ptr = NULL;
     mVersionNoNewPtr = NULL;
@@ -174,6 +188,11 @@ const char* DeviceUpdateActivity::getAppName() const{
 //TAG:onCreate
 void DeviceUpdateActivity::onCreate() {
 	Activity::onCreate();
+    mFindBackButtonPtr = (ZKButton*)findControlByID(ID_DEVICEUPDATE_FindBackButton);
+    mBackButtonPtr = (ZKButton*)findControlByID(ID_DEVICEUPDATE_BackButton);
+    mDeviceTypeListViewPtr = (ZKListView*)findControlByID(ID_DEVICEUPDATE_DeviceTypeListView);if(mDeviceTypeListViewPtr!= NULL){mDeviceTypeListViewPtr->setListAdapter(this);mDeviceTypeListViewPtr->setItemClickListener(this);}
+    mWindowInitPtr = (ZKWindow*)findControlByID(ID_DEVICEUPDATE_WindowInit);
+    mButtonInitPtr = (ZKButton*)findControlByID(ID_DEVICEUPDATE_ButtonInit);
     msys_backPtr = (ZKButton*)findControlByID(ID_DEVICEUPDATE_sys_back);
     mWindow1Ptr = (ZKWindow*)findControlByID(ID_DEVICEUPDATE_Window1);
     mVersionNoNewPtr = (ZKTextView*)findControlByID(ID_DEVICEUPDATE_VersionNoNew);

+ 7 - 0
jni/activity/DeviceUpdateActivity.h

@@ -26,6 +26,13 @@
 #include "window/ZKSlideWindow.h"
 
 /*TAG:Macro宏ID*/
+#define ID_DEVICEUPDATE_FindBackButton    20005
+#define ID_DEVICEUPDATE_BackButton    20004
+#define ID_DEVICEUPDATE_IntervalSubItem    24002
+#define ID_DEVICEUPDATE_DownSubItem    24001
+#define ID_DEVICEUPDATE_DeviceTypeListView    80001
+#define ID_DEVICEUPDATE_WindowInit    110005
+#define ID_DEVICEUPDATE_ButtonInit    20003
 #define ID_DEVICEUPDATE_sys_back   100
 #define ID_DEVICEUPDATE_Window1    110004
 #define ID_DEVICEUPDATE_VersionNoNew    50016

+ 116 - 0
jni/logic/DeviceUpdateLogic.cc

@@ -6,6 +6,7 @@
 #include "core/update_assistant.h"
 #include "edge/popup_service.h"
 #include "base/strings.hpp"
+#include "restclient-cpp/restclient.h"
 #include "base/http_client.h"
 #include "net/tcp_client.h"
 #include "os/UpgradeMonitor.h"
@@ -26,6 +27,31 @@ namespace {
 	int loading_index = 0;
 }
 
+Json::Value linuxVersionList;
+string updateUrl;
+static void getLinuxVersionList() {
+		std::string url = getHttpGateway() + "/util/get_linux_version_list";
+
+		LOGD("请求Linux设备初始化版本列表. url = %s", url.c_str());
+		//发起HTTP GET请求
+		RestClient::Response r = RestClient::get(url);
+		if (r.code != 200) {
+			LOGD("请求Linux设备初始化版本列表-> 错误代码: %d", r.code);
+			return;
+		}
+
+		LOGD("获得Linux设备初始化版本列表. result = %s", r.body.c_str());
+		//解析json
+		Json::Reader reader;
+		Json::Value root;
+
+		if(reader.parse(r.body, root, false)) {
+			linuxVersionList = root;
+			mDeviceTypeListViewPtr->refreshListView();
+		}
+	}
+
+
 void NavibarSetProgressWindowVisible(bool visible) {
 	mWindowProgressPtr->setVisible(visible);
 }
@@ -234,6 +260,7 @@ static bool onButtonClick_ButtonUpdate(ZKButton *pButton) {
 		if (!NETMANAGER->getEthernetManager()->isConnected()) {
 			std::string msg = LANGUAGEMANAGER->getValue("EthernetDisconnect");
 		  srv->SetMessage(msg);
+		  mWindow1Ptr->showWnd();
 		  return -1;
 		}
 		int ret = assistant.GetLatest("bed", &info);
@@ -274,3 +301,92 @@ static bool onButtonClick_ButtonDialog1(ZKButton *pButton) {
     LOGD(" ButtonClick ButtonDialog1 !!!\n");
     return false;
 }
+static bool onButtonClick_ButtonInit(ZKButton *pButton) {
+    LOGD(" ButtonClick ButtonInit !!!\n");
+	getLinuxVersionList();
+    mWindowInitPtr->showWnd();
+    return false;
+}
+static int getListItemCount_DeviceTypeListView(const ZKListView *pListView) {
+    //LOGD("getListItemCount_DeviceTypeListView !\n");
+	if (linuxVersionList.size() > 5) {
+		return linuxVersionList.size();
+	}
+    return 5;
+}
+
+static void obtainListItemData_DeviceTypeListView(ZKListView *pListView,ZKListView::ZKListItem *pListItem, int index) {
+    //LOGD(" obtainListItemData_ DeviceTypeListView  !!!\n");
+	ZKListView::ZKListSubItem* down = pListItem->findSubItemByID(ID_DEVICEUPDATE_DownSubItem);
+
+	string version = linuxVersionList[index]["type_name"].asString() + "         " + linuxVersionList[index]["version_code"].asString();
+	if (version != "         ") {
+		pListItem->setText(version);
+		down->setText(LANGUAGEMANAGER->getValue("SoftDown"));
+	}
+	else {
+		pListItem->setText("");
+		down->setText("");
+	}
+}
+
+static void onListItemClick_DeviceTypeListView(ZKListView *pListView, int index, int id) {
+    //LOGD(" onListItemClick_ DeviceTypeListView  !!!\n");
+
+	// 小于的时候,代表在linuxVersionList里面
+	if (linuxVersionList[index]["app_path"].asString() != "") {
+		mWindowProgressPtr->showWnd();
+		updateUrl = linuxVersionList[index]["app_path"].asString();
+
+		PopupService::Show([](PopupService* srv){
+
+			base::HttpClient client;
+			client.SetConnectionTimeout(5000);
+			client.SetTimeout(120 * 1000);
+
+			std::string url = getHttpGateway() + "/" + updateUrl;
+			LOGD("请求更新文件的url: %s", url.c_str());
+
+			base::HttpRequest req("GET", url, "");	// 去获取文件
+			const char* tmp_file = "/tmp/update.img";
+			base::HttpResponse response =
+				client.Do(req, tmp_file, [srv, info](int64_t dltotal,
+				int64_t dlnow, int64_t ultotal, int64_t ulnow){
+			  LOGD("downloading %lld/%lld", dlnow, dltotal);
+
+			  string msg = LANGUAGEMANAGER->getValue("Downloading") + " %.0f%%";
+			  srv->SetMessage(base::format(msg.c_str(),
+				  dltotal == 0 ? 0 : (dlnow * 1.0/dltotal * 100)));
+			  return 0;
+			});
+
+			if (response.StatusCode() != 200) {	// 下载失败
+				string msg = LANGUAGEMANAGER->getValue("DownloadFailed") + "%d";
+			  srv->SetMessage(base::format(msg.c_str(), response.ErrorCode()));
+			  mWindowProgressPtr->hideWnd();
+			  return -1;
+			}
+
+			// TODO: 应该去判断一下,下载的版本是否真的大于当前版本号
+			UpgradeMonitor::getInstance()->checkUpgradeFile("/mnt/extsd");
+			LOGD("img版本-> %s", "");
+
+			const char* msg = "-1";
+			TcpClient::instance()->sendMsg(msg);
+			system("touch /tmp/zkautoupgrade");
+			UPGRADEMONITOR->checkUpgradeFile("/tmp");
+			return 0;
+		});
+	}
+}
+
+static bool onButtonClick_BackButton(ZKButton *pButton) {
+    LOGD(" ButtonClick BackButton !!!\n");
+    mWindowInitPtr->hideWnd();
+    return false;
+}
+static bool onButtonClick_FindBackButton(ZKButton *pButton) {
+    LOGD(" ButtonClick FindBackButton !!!\n");
+    EASYUICONTEXT->goBack();
+    return false;
+}

+ 2 - 0
jni/logic/startLogic.cc

@@ -185,6 +185,8 @@ void handleMsg(byte* inBytes){
 					t->tm_hour + 8,t->tm_min,t->tm_sec);
 			LOGD("transfered time : %s", pDate);
 			TimeHelper::setDateTime(pDate);
+
+			dataRefresh();
 		}
 	} else if (tcpModel.type == TcpType::REINFORCE){
 		if (tcpModel.action == ReinforceAction::RESPONSED){

+ 8 - 5
jni/logic/ui3Logic.cc

@@ -402,11 +402,14 @@ static bool onButtonClick_BtnPwdConfirm(ZKButton *pButton) {
     LOGD(" ButtonClick BtnPwdConfirm !!!\n");
     string pwd = mEditTextPwdPtr->getText();
 
-    //密码为当前日时
-    struct tm *t = TimeHelper::getDateTime();
-    char cpwd[10];
-    sprintf(cpwd,"%02d%02d",t->tm_mday,t->tm_hour);
-    LOGD("cpwd is %s", cpwd);
+//    //密码为当前日时
+//    struct tm *t = TimeHelper::getDateTime();
+//    char cpwd[10];
+//    sprintf(cpwd,"%02d%02d",t->tm_mday,t->tm_hour);
+//    LOGD("cpwd is %s", cpwd);
+
+	// 密码为666
+	string cpwd = "666";
     if (pwd == cpwd){
     	mWindowPwdPtr->hideWnd();
 		mWindowServerIPPtr->showWnd();

BIN
libs/armeabi/libzkgui.so


BIN
obj/activity/DeviceUpdateActivity.o


BIN
obj/activity/startActivity.o


BIN
obj/activity/ui3Activity.o


BIN
obj/service/time.o


BIN
ui/DeviceUpdate.ftu


BIN
ui/ui3.ftu