From 058e4b2f4678cac8a25043b84a7aa20b129a5997 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 2 Jun 2025 17:56:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=87=A0=E4=B8=AA=E6=8A=A5?= =?UTF-8?q?=E6=96=87=E7=9A=84=E6=89=8B=E5=8A=A8=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/MicroPhoto.cpp | 42 ++++++++++++++- .../com/xypower/mpapp/MicroPhotoService.java | 24 +++++++-- .../main/res/layout-land/activity_main.xml | 51 +++++++++++++++---- app/src/main/res/values/strings.xml | 3 ++ 4 files changed, 104 insertions(+), 16 deletions(-) diff --git a/app/src/main/cpp/MicroPhoto.cpp b/app/src/main/cpp/MicroPhoto.cpp index a95bbb52..56d070c8 100644 --- a/app/src/main/cpp/MicroPhoto.cpp +++ b/app/src/main/cpp/MicroPhoto.cpp @@ -533,7 +533,7 @@ extern "C" JNIEXPORT jboolean JNICALL Java_com_xypower_mpapp_MicroPhotoService_sendHeartbeat( JNIEnv* env, jobject pThis, - jlong handler, jint signalLevel) { + jlong handler, jint signalLevel, jboolean scheduled) { CTerminal* pTerminal = reinterpret_cast(handler); if (pTerminal == NULL) @@ -547,7 +547,7 @@ Java_com_xypower_mpapp_MicroPhotoService_sendHeartbeat( device->UpdateSignalLevel(signalLevel); } - pTerminal->SendHeartbeat(); + pTerminal->SendHeartbeat(scheduled != JNI_FALSE); #ifdef OUTPUT_DBG_INFO #if 0 @@ -1536,3 +1536,41 @@ Java_com_xypower_mpapp_MicroPhotoService_notifyTimeUpdated( }); t.detach(); } + +extern "C" +JNIEXPORT jboolean JNICALL +Java_com_xypower_mpapp_MicroPhotoService_sendBasicInfo(JNIEnv *env, jobject thiz, jlong handler) { + // TODO: implement sendBasicInfo() + CTerminal* pTerminal = reinterpret_cast(handler); + if (pTerminal == NULL) + { + return JNI_FALSE; + } + pTerminal->SendBasicInfo(); + return JNI_TRUE; +} +extern "C" +JNIEXPORT jboolean JNICALL +Java_com_xypower_mpapp_MicroPhotoService_sendWorkStatus(JNIEnv *env, jobject thiz, jlong handler) { + // TODO: implement sendWorkStatus() + CTerminal* pTerminal = reinterpret_cast(handler); + if (pTerminal == NULL) + { + return JNI_FALSE; + } + pTerminal->SendWorkStatus(); + return JNI_TRUE; +} +extern "C" +JNIEXPORT jboolean JNICALL +Java_com_xypower_mpapp_MicroPhotoService_sendFault(JNIEnv *env, jobject thiz, jlong handler, jstring faultCode, jstring faultInfo) { + // TODO: implement sendFault() + CTerminal* pTerminal = reinterpret_cast(handler); + if (pTerminal == NULL) + { + return JNI_FALSE; + } + std::string faultInfoStr = jstring2string(env, faultInfo); + pTerminal->SendFaultInfo(faultInfoStr); + return JNI_TRUE; +} \ No newline at end of file diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index 07108a17..bc160925 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -502,7 +502,7 @@ public class MicroPhotoService extends Service { infoLog("HB Timer Fired ACTION=" + action + " ExpTS=" + Long.toString(expectedHbTime)); Runnable runnable = new Runnable() { public void run() { - mService.sendHeartbeat(mService.mNativeHandle, mService.getSignalLevel()); + mService.sendHeartbeat(mService.mNativeHandle, mService.getSignalLevel(), true); } }; Thread th = new Thread(runnable); @@ -567,7 +567,7 @@ public class MicroPhotoService extends Service { infoLog("HB Timer Fired ACTION=" + action + " ExpTS=" + Long.toString(expectedHbTime)); Runnable runnable = new Runnable() { public void run() { - mService.sendHeartbeat(mService.mNativeHandle, mService.getSignalLevel()); + mService.sendHeartbeat(mService.mNativeHandle, mService.getSignalLevel(), true); } }; Thread th = new Thread(runnable); @@ -623,8 +623,19 @@ public class MicroPhotoService extends Service { } mService.updateCaptureSchedule(startTime + 1); } else if (TextUtils.equals(ACTION_HEARTBEAT_MANUALLY, action)) { - Log.i(TAG, "HB Timer Fired ACTION=" + action); - mService.sendHeartbeat(mService.mNativeHandle, mService.getSignalLevel()); + String actionType = intent.getStringExtra("type"); + if (TextUtils.isEmpty(actionType) || TextUtils.equals(actionType, "hb")) { + Log.i(TAG, "HB Timer Fired ACTION=" + action); + mService.sendHeartbeat(mService.mNativeHandle, mService.getSignalLevel(), false); + } else if (TextUtils.equals(actionType, "basicInfo")) { + mService.sendBasicInfo(mService.mNativeHandle); + } else if (TextUtils.equals(actionType, "workStatus")) { + mService.sendWorkStatus(mService.mNativeHandle); + } else if (TextUtils.equals(actionType, "fault")) { + String faultCode = intent.getStringExtra("faultCode"); + String faultInfo = intent.getStringExtra("faultInfo"); + mService.sendFault(mService.mNativeHandle, faultCode, faultInfo); + } } else if (TextUtils.equals(ACTION_TAKE_PHOTO_MANUALLY, action)) { int channel = intent.getIntExtra(EXTRA_PARAM_CHANNEL, 0); int preset = intent.getIntExtra(EXTRA_PARAM_PRESET, 0xFF); @@ -1962,7 +1973,10 @@ cellSignalStrengthGsm.getDbm(); protected native void notifyTimeUpdated(long handler); - protected native boolean sendHeartbeat(long handler, int signalLevel); + protected native boolean sendHeartbeat(long handler, int signalLevel, boolean scheduled); + protected native boolean sendBasicInfo(long handler); + protected native boolean sendWorkStatus(long handler); + protected native boolean sendFault(long handler, String faultCode, String faultInfo); protected native boolean reloadConfigs(long handler); protected native void updatePosition(long handler, double lon, double lat, double radius, long ts); protected native boolean updateEhernet(long handler, long nativeNetworkHandle, boolean available); diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 36b42e29..384045f7 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -205,13 +205,13 @@ app:layout_constraintTop_toTopOf="@+id/btnStartServ" />