diff --git a/app/src/main/cpp/MicroPhoto.cpp b/app/src/main/cpp/MicroPhoto.cpp index 84a1ff20..8d1e4b02 100644 --- a/app/src/main/cpp/MicroPhoto.cpp +++ b/app/src/main/cpp/MicroPhoto.cpp @@ -265,7 +265,9 @@ Java_com_xypower_mpapp_MainActivity_takePhoto( extern "C" JNIEXPORT jlong JNICALL Java_com_xypower_mpapp_MicroPhotoService_init( JNIEnv* env, - jobject pThis, jstring appPath, jstring ip, jint port, jstring cmdid, jint protocol, jint networkProtocol, jlong netHandle) { + jobject pThis, jstring appPath, + jstring ip, jint port, jstring cmdid, jint protocol, + jint networkProtocol, jlong netHandle, jint signalLevel) { /* google_breakpad::MinidumpDescriptor descriptor("."); @@ -305,6 +307,7 @@ Java_com_xypower_mpapp_MicroPhotoService_init( CPhoneDevice* device = new CPhoneDevice(vm, pThis, appPathStr, NETID_UNSET); device->SetListener(pTerminal); + device->UpdateSignalLevel(signalLevel); pTerminal->InitServerInfo(appPathStr, cmdidStr, ipStr, port, udpOrTcp); // pTerminal->SetPacketSize(1 * 1024); // 1K @@ -350,7 +353,7 @@ extern "C" JNIEXPORT jboolean JNICALL Java_com_xypower_mpapp_MicroPhotoService_sendHeartbeat( JNIEnv* env, jobject pThis, - jlong handler) { + jlong handler, jint signalLevel) { CTerminal* pTerminal = reinterpret_cast(handler); if (pTerminal == NULL) @@ -358,6 +361,12 @@ Java_com_xypower_mpapp_MicroPhotoService_sendHeartbeat( return JNI_FALSE; } + CPhoneDevice* device = (CPhoneDevice*)pTerminal->GetDevice(); + if (device != NULL) + { + device->UpdateSignalLevel(signalLevel); + } + pTerminal->SendHeartbeat(); return JNI_TRUE; diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index cfa41aa8..f15534df 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -165,6 +165,9 @@ CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service, const std::string& appPa mNetId = netId; + m_signalLevel = 0; + m_signalLevelUpdateTime = time(NULL); + m_sysApiClass = NULL; RegisterHandlerForSignal(SIGUSR2); @@ -375,12 +378,22 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro else if (it->first == PROP_FREE_ROM) { fs::space_info si = fs::space("/data"); - it->second = std::to_string(si.available); + it->second = std::to_string(si.available); // Unit: M } else if (it->first == PROP_TOTAL_ROM) { fs::space_info si = fs::space("/data"); - it->second = std::to_string(si.capacity); + it->second = std::to_string(si.capacity); // Unit: M + } + else if (it->first == PROP_FREE_MEMORY) + { + fs::space_info si = fs::space("/data"); + it->second = std::to_string(android_os_Process_getFreeMemory()); // Unit: M + } + else if (it->first == PROP_TOTAL_MEMORY) + { + fs::space_info si = fs::space("/data"); + it->second = std::to_string(android_os_Process_getTotalMemory()); // Unit: M } else if (it->first == (PROP_CHARGING_VOLTAGE)) { @@ -421,6 +434,10 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro { it->second = std::to_string(GpioControl::getBatteryBusVoltage()); } + else if ((it->first == (PROP_SIGNAL_4G)) || (it->first == (PROP_SIGNAL_2G))) + { + it->second = std::to_string(m_signalLevel); + } else if (startsWith(it->first, PROP_JAVA_PREFIX)) { if (powerInfo.empty()) @@ -1209,4 +1226,10 @@ void CPhoneDevice::TurnOffOtg(JNIEnv* env) } } m_devLocker.unlock(); +} + +void CPhoneDevice::UpdateSignalLevel(int signalLevel) +{ + m_signalLevel = signalLevel; + m_signalLevelUpdateTime = time(NULL); } \ No newline at end of file diff --git a/app/src/main/cpp/PhoneDevice.h b/app/src/main/cpp/PhoneDevice.h index f80bfc49..b6561530 100644 --- a/app/src/main/cpp/PhoneDevice.h +++ b/app/src/main/cpp/PhoneDevice.h @@ -198,6 +198,7 @@ public: void UpdatePosition(double lon, double lat, time_t ts); bool OnVideoReady(bool result, const char* path, unsigned int photoId); + void UpdateSignalLevel(int signalLevel); protected: @@ -292,6 +293,9 @@ protected: long mOtgCount; std::thread m_threadClose; + int m_signalLevel; + time_t m_signalLevelUpdateTime; + }; diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index 5f628a7e..e4a845e7 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -332,7 +332,7 @@ public class MicroPhotoService extends Service { String action = intent.getAction(); if (TextUtils.equals(ACTION_HEARTBEAT, action)) { Log.i(TAG, "HB Timer Fired ACTION=" + action); - mService.sendHeartbeat(mService.mNativeHandle); + mService.sendHeartbeat(mService.mNativeHandle, mService.getSignalLevel()); mService.registerHeartbeatTimer(); } else if (TextUtils.equals(ACTION_TAKE_PHOTO, action)) { @@ -357,7 +357,7 @@ public class MicroPhotoService extends Service { mService.updateCaptureSchedule(startTime); } else if (TextUtils.equals(ACTION_HEARTBEAT_MANUALLY, action)) { Log.i(TAG, "HB Timer Fired ACTION=" + action); - mService.sendHeartbeat(mService.mNativeHandle); + mService.sendHeartbeat(mService.mNativeHandle, mService.getSignalLevel()); } else if (TextUtils.equals(ACTION_TAKE_PHOTO_MANUALLY, action)) { int channel = intent.getIntExtra(EXTRA_PARAM_CHANNEL, 0); int preset = intent.getIntExtra(EXTRA_PARAM_PRESET, 0); @@ -373,7 +373,7 @@ public class MicroPhotoService extends Service { int data = intent.getIntExtra("data", 0); if (what == MSG_WHAT_SENDING_HB) { - mService.sendHeartbeat(mService.mNativeHandle); + mService.sendHeartbeat(mService.mNativeHandle, mService.getSignalLevel()); } } else if (TextUtils.equals(ACTION_VIDEO_FINISHED, action)) { boolean result = intent.getBooleanExtra("result", false); @@ -654,7 +654,7 @@ public class MicroPhotoService extends Service { MicroPhotoService service = MicroPhotoService.this; - service.mNativeHandle = init(appPath, server, port, cmdid, protocol, networkProtocol, 0); + service.mNativeHandle = init(appPath, server, port, cmdid, protocol, networkProtocol, 0, service.getSignalLevel()); if (service.mNativeHandle !=0) { isRunning = true; @@ -898,6 +898,18 @@ public class MicroPhotoService extends Service { th.start(); } + protected int getSignalLevel() { + try { + final TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); + SignalStrength ss = telephonyManager.getSignalStrength(); + if (ss != null) { + return ss.getLevel(); + } + } catch (Exception ex) { + } + return -1; + } + public String getSystemInfo() { boolean isXyPlatform = mModelName.startsWith("tb8788"); @@ -1022,13 +1034,13 @@ CellSignalStrengthGsm cellSignalStrengthGsm = cellInfoGsm.getCellSignalStrength( cellSignalStrengthGsm.getDbm(); */ - protected native long init(String appPath, String ip, int port, String cmdid, int protocol, int networkProtocl, long netHandle); + protected native long init(String appPath, String ip, int port, String cmdid, int protocol, int networkProtocl, long netHandle, int signalLevel); protected native long getHeartbeatDuration(long handler); protected native long[] getPhotoTimeData(long handler, long startTime); protected native long[] getPhotoTimeData2(long handler); // protected native long[] getNextScheduleItem(long handler); protected native boolean notifyToTakePhoto(long handler, int channel, int preset, long scheduleTime, boolean photoOrVideo); - protected native boolean sendHeartbeat(long handler); + protected native boolean sendHeartbeat(long handler, int signalLevel); protected native void updatePosition(long handler, double lon, double lat, long ts); protected native boolean uninit(long handler); protected native void recordingFinished(long handler, boolean result, String path, long videoId);