From 188fbd747c00b8390f3f830bec01697e73776c6d Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 29 Apr 2024 16:58:00 +0800 Subject: [PATCH 01/36] Update version to 1.0.122 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 81e54c11..da310b17 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 121 +def AppBuildNumber = 122 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From cd35c7f05d58a9034e14ebaea6fcf79ed0576c3e Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 29 Apr 2024 22:13:19 +0800 Subject: [PATCH 02/36] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=BF=83=E8=B7=B3?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E6=8B=8D=E7=85=A7=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=AF=B9=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xypower/mpapp/MicroPhotoService.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index 8685eb9b..7a885606 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -383,11 +383,26 @@ public class MicroPhotoService extends Service { // Will be called fron native private void registerHeartbeatTimer(int duration, long nextPhotoTime) { int orgHeartbeatDuration = mHeartbeatDuration; - mHeartbeatDuration = duration; + if (orgHeartbeatDuration == 0) { - registerHeartbeatTimer(); + if (nextPhotoTime == 0) { + mHeartbeatDuration = duration; + registerHeartbeatTimer(); + } else { + long ts = System.currentTimeMillis(); + nextPhotoTime *= 1000; + if (nextPhotoTime > ts) { + mHeartbeatDuration = (int) ((nextPhotoTime - ts) % duration) + 999; + registerHeartbeatTimer(); + mHeartbeatDuration = duration; + } else { + mHeartbeatDuration = duration; + registerHeartbeatTimer(); + } + } + } else { + mHeartbeatDuration = duration; } - } private void registerHeartbeatTimer() { From 3ce27a25ce1fa67c550942e816758194807e61a7 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 29 Apr 2024 22:14:18 +0800 Subject: [PATCH 03/36] Update version to 1.0.123 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index da310b17..88824b6d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 122 +def AppBuildNumber = 123 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From f72a61e6036d594dc34c056508aa997f63ad8d11 Mon Sep 17 00:00:00 2001 From: Matthew Date: Tue, 30 Apr 2024 12:24:27 +0800 Subject: [PATCH 04/36] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=BF=90=E7=BB=B4?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xypower/common/ZipUtils.java | 2 +- .../java/com/xypower/mpmaster/AppMaster.java | 72 +++++++++++++++++++ .../com/xypower/mpmaster/MpMasterService.java | 8 +++ 3 files changed, 81 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/com/xypower/common/ZipUtils.java b/common/src/main/java/com/xypower/common/ZipUtils.java index d43fafba..701ac236 100644 --- a/common/src/main/java/com/xypower/common/ZipUtils.java +++ b/common/src/main/java/com/xypower/common/ZipUtils.java @@ -51,7 +51,7 @@ public class ZipUtils { } // for (int i = 0; i < fileList.length; i++) { - if (fileList[i].startsWith("specdata")) { + if (fileList[i].startsWith("specdata") || fileList[i].endsWith(".lck")) { continue; } ZipFiles(srcFileParentName + srcFileName + "/", fileList[i], zipOutputSteam); diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java index 84066053..ce8b7372 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java @@ -410,6 +410,7 @@ public class AppMaster { } else if (TextUtils.equals(cmd, CMD_UPLOAD_LOGS)) { String url = jsonObject.optString("url", null); uploadLogs(url); + uploadMasterLogs(url); } else if (TextUtils.equals(cmd, CMD_SET_CMA)) { String ip = jsonObject.optString("value_str", null); int port = jsonObject.optInt("value_int", 0); @@ -717,6 +718,77 @@ public class AppMaster { } } + private void uploadMasterLogs(String url) { + String appDir = mService.buildAppDir(); + + try { + + long ts = System.currentTimeMillis();//long now = android.os.SystemClock.uptimeMillis(); + SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); + Date dt = new Date(ts); + + final String fileName = mCmdid + "_mst_" + format.format(dt) + ".zip"; + final File file = File.createTempFile(fileName, null, new File(appDir)); + if (file == null) { + return; + } + + final String mpAppDir = MicroPhotoContext.buildMasterAppDir(mService.getApplicationContext()); + final File logDir = new File(mpAppDir + "logs" + File.separator); + if (!logDir.exists()) { + return; + } + + ZipUtils.ZipFolder(logDir, file); + + if (!file.exists()) { + return; + } + + FileUploader fileUploader = new FileUploader(url); + fileUploader.addFilePart("file", file, fileName, "application/x-zip-compressed"); + + String response = fileUploader.finish(); + if (response != null) { + + } + } catch (Exception ex) { + + } + } + + private void uploadLogs(String url, String tempPath, String path, String ext, String uploadFileName) { + + try { + + final File pathFile = new File(path); + if (!pathFile.exists()) { + return; + } + + final File file = File.createTempFile(uploadFileName, null, new File(tempPath)); + if (file == null) { + return; + } + + ZipUtils.ZipFolder(pathFile, file); + + if (!file.exists()) { + return; + } + + FileUploader fileUploader = new FileUploader(url); + fileUploader.addFilePart("file", file, uploadFileName, "application/x-zip-compressed"); + + String response = fileUploader.finish(); + if (response != null) { + + } + } catch (Exception ex) { + + } + } + private void uploadFiles(String url, List paths) { String appDir = mService.buildAppDir(); diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index c02ef15d..3b9927f4 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -155,6 +155,7 @@ public class MpMasterService extends Service { fileHandler = new FileHandler(logFile.getAbsolutePath(), true);//true表示日志内容在文件中追加 fileHandler.setLevel(Level.ALL);//级别为ALL,记录所有消息 + // fileHandler. fileHandler.setFormatter(logFormatter); logger.addHandler(fileHandler); @@ -237,6 +238,13 @@ public class MpMasterService extends Service { unregisterReceiver(mScreenaAtionReceiver); unregisterReceiver(mUpdateReceiver); + for (java.util.logging.Handler h : logger.getHandlers()) { + try { + h.close(); + } catch (Exception ex) { + } + } + super.onDestroy(); } From 1577e98ed07b4eee808a9e650ad9135d11a5971e Mon Sep 17 00:00:00 2001 From: Matthew Date: Tue, 30 Apr 2024 12:24:43 +0800 Subject: [PATCH 05/36] Update MpMaster version to 1.0.32 --- mpmaster/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mpmaster/build.gradle b/mpmaster/build.gradle index 58aff4e4..6409990b 100644 --- a/mpmaster/build.gradle +++ b/mpmaster/build.gradle @@ -4,7 +4,7 @@ plugins { def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 31 +def AppBuildNumber = 32 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From f5f6fff2018d93918996e3574ebf029a8ea2c0a1 Mon Sep 17 00:00:00 2001 From: Matthew Date: Tue, 30 Apr 2024 12:24:59 +0800 Subject: [PATCH 06/36] Update version to 1.0.124 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 88824b6d..a126f44c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 123 +def AppBuildNumber = 124 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From a2f420aba9882ad95487e38709387c3ccb805d4f Mon Sep 17 00:00:00 2001 From: Matthew Date: Tue, 30 Apr 2024 23:31:28 +0800 Subject: [PATCH 07/36] =?UTF-8?q?=E5=87=BA=E5=8E=82=E7=BC=96=E5=8F=B7?= =?UTF-8?q?=E5=8D=B3=E5=BA=8F=E5=88=97=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/PhoneDevice.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index f4f2bac8..527745bb 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -369,7 +369,7 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro __system_property_get("ro.build.date.utc", value); it->second = value; } - else if (it->first == PROP_SN) + else if (it->first == PROP_SN || it->first == PROP_BS_ID) { __system_property_get("ro.serialno", value); it->second = value; @@ -383,10 +383,6 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro { it->second = QueryCpuTemperature(); } - else if (it->first == PROP_BS_ID) - { - it->second = "SHXY"; - } else if (it->first == PROP_FREE_ROM) { fs::space_info si = fs::space("/data"); From 247d2817eec2c704408edc058081454858285d23 Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 2 May 2024 19:25:21 +0800 Subject: [PATCH 08/36] =?UTF-8?q?IMEI=E4=BF=A1=E6=81=AF=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=9A=84=E5=AE=9E=E7=8E=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/MicroPhoto.cpp | 1 + app/src/main/cpp/PhoneDevice.cpp | 16 ++++++++++++++-- app/src/main/cpp/PhoneDevice.h | 3 +++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/cpp/MicroPhoto.cpp b/app/src/main/cpp/MicroPhoto.cpp index 0f6c3b6e..5a307ab8 100644 --- a/app/src/main/cpp/MicroPhoto.cpp +++ b/app/src/main/cpp/MicroPhoto.cpp @@ -315,6 +315,7 @@ Java_com_xypower_mpapp_MicroPhotoService_init( CPhoneDevice* device = new CPhoneDevice(vm, pThis, appPathStr, NETID_UNSET, versionCode); device->SetListener(pTerminal); device->UpdateSignalLevel(signalLevel); + device->UpdateSimcard(simcardStr); pTerminal->InitServerInfo(appPathStr, cmdidStr, ipStr, port, udpOrTcp, encryptData); // pTerminal->SetPacketSize(1 * 1024); // 1K diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 527745bb..7b115eac 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -376,8 +376,15 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro } else if (it->first == PROP_IMEI) { - __system_property_get("phone.imei", value); - it->second = value; + if (m_simcard.empty()) + { + __system_property_get("phone.imei", value); + it->second = value; + } + else + { + it->second = m_simcard; + } } else if (it->first == PROP_OPERATION_TEMP) { @@ -1426,4 +1433,9 @@ void CPhoneDevice::UpdateSignalLevel(int signalLevel) { m_signalLevel = signalLevel; m_signalLevelUpdateTime = time(NULL); +} + +void CPhoneDevice::UpdateSimcard(const std::string& simcard) +{ + m_simcard = simcard; } \ No newline at end of file diff --git a/app/src/main/cpp/PhoneDevice.h b/app/src/main/cpp/PhoneDevice.h index b3b550e5..e05a10f2 100644 --- a/app/src/main/cpp/PhoneDevice.h +++ b/app/src/main/cpp/PhoneDevice.h @@ -202,6 +202,7 @@ public: void UpdatePosition(double lon, double lat, double radius, time_t ts); bool OnVideoReady(bool result, const char* path, unsigned int photoId); void UpdateSignalLevel(int signalLevel); + void UpdateSimcard(const std::string& simcard); protected: @@ -298,6 +299,8 @@ protected: int m_signalLevel; time_t m_signalLevelUpdateTime; + std::string m_simcard; + }; From c4a5c365af67ae9af9a1fd9a9c2ea671631d48b1 Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 2 May 2024 19:25:49 +0800 Subject: [PATCH 09/36] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xypower/mpapp/MicroPhotoService.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index 7a885606..7c2d87fc 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -79,17 +79,11 @@ public class MicroPhotoService extends Service { public static final int MSG_WHAT_LOG = 10; - public final static int MSG_WHAT_NETWORK_CHANGE = 20; - - public final static int MSG_WHAT_SERVICE_STATUS_CHANGE = 30; - public final static int MSG_WHAT_SENDING_HB = 40; public final static int MSG_WHAT_MAX = 1000; - private static final String ALARM_EVENT = "com.xinyingpower.mp.MicroPhotoService.AlarmReceiver"; public static final int NOTIFICATION_ID_FOREGROUND_SERVICE = 8466503; - // public static final int NOTIFICATION_ID_FOREGROUND_SERVICE = 0; public static final String ACTION_MSG_BROADCAST = "ACT_MSG_BROADCAST"; public static final String ACTION_START = "com.xypower.mpapp.ACT_START"; @@ -97,6 +91,7 @@ public class MicroPhotoService extends Service { public static final String ACTION_MAIN = "com.xypower.mpapp.ACT_MAIN"; private static final String ACTION_HEARTBEAT = MicroPhotoContext.ACTION_HEARTBEAT_MP; private static final String ACTION_TAKE_PHOTO = "com.xypower.mpapp.ACT_TP"; + private static final String ACTION_GPS_TIMEOUT = "com.xypower.mpapp.GPS_TIMEOUT"; private static final String ACTION_IMP_PUBKRY = "com.xypower.mpapp.ACT_IMP_PUBKEY"; @@ -111,12 +106,10 @@ public class MicroPhotoService extends Service { private static final String EXTRA_PARAM_SCHEDULE = "Schedule_"; private static final String EXTRA_PARAM_TAKING_TIME = "TakingTime"; private static final String EXTRA_PARAM_TIME = "Time"; - // private static String EXTRA_PARAM_FILENAME = "FileName"; - private static final String EXTRA_PARAM_TIMER_UID = "TimerUid"; - // private static String EXTRA_PARAM_TIMER_TYPE = "TimerType"; - private static final String EXTRA_PARAM_TIMEOUT = "Timeout"; - private static final String EXTRA_PARAM_TIMES = "Times"; - private static final String EXTRA_PARAM_ELASPED_TIMES = "ElapsedTimes"; + // private static final String EXTRA_PARAM_TIMER_UID = "TimerUid"; + // private static final String EXTRA_PARAM_TIMEOUT = "Timeout"; + // private static final String EXTRA_PARAM_TIMES = "Times"; + // private static final String EXTRA_PARAM_ELASPED_TIMES = "ElapsedTimes"; private static final String FOREGROUND_CHANNEL_ID = "foreground_channel_id"; public static class STATE_SERVICE { public static final int CONNECTED = 10; @@ -128,10 +121,9 @@ public class MicroPhotoService extends Service { private NotificationManager mNotificationManager; private final Map mWakeLocks = new HashMap<>(); private int mHeartbeatDuration = 0; // MUST BE 0!!! - private long mNextHeartbeatTime = 0; + // private long mNextHeartbeatTime = 0; - private PositionManager mPositionManager = null; - private final Map mTimers = new HashMap<>(); + // private final Map mTimers = new HashMap<>(); protected long mNativeHandle = 0; private AlarmReceiver mAlarmReceiver = null; @@ -139,6 +131,8 @@ public class MicroPhotoService extends Service { private ScreenActionReceiver mScreenaAtionReceiver = null; private NetworkChangedReceiver mNetworkChangedReceiver = null; + private PendingIntent mPreviousGpsTimer = null; + private ServiceHandler mHander = null; private Messenger mMessenger = null; @@ -182,6 +176,7 @@ public class MicroPhotoService extends Service { intentFilter.addAction(ACTION_UPDATE_CONFIGS); intentFilter.addAction(ACTION_IMP_PUBKRY); intentFilter.addAction(ACTION_TAKE_PHOTO_MANUALLY); + intentFilter.addAction(ACTION_GPS_TIMEOUT); // intentFilter.addAction(ACTION_HEARTBEAT_MANUALLY); // intentFilter.addAction(ACTION_MSG_BROADCAST); // intentFilter.addAction(ACTION_VIDEO_FINISHED); @@ -376,6 +371,10 @@ public class MicroPhotoService extends Service { } else if (TextUtils.equals(ACTION_IMP_PUBKRY, action)) { String path = intent.getStringExtra("path"); String md5 = intent.getStringExtra("md5"); + } else if (TextUtils.equals(ACTION_GPS_TIMEOUT, action)) { + mService.mPreviousGpsTimer = null; + mService.mLocationManager.removeUpdates(mService.mLocationListener); + mService.enableGps(false); } } } @@ -414,7 +413,7 @@ public class MicroPhotoService extends Service { AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + mHeartbeatDuration, pendingIntent); - mNextHeartbeatTime = System.currentTimeMillis() + mHeartbeatDuration; + // mNextHeartbeatTime = System.currentTimeMillis() + mHeartbeatDuration; // alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + timeout, pendingIntent); } @@ -1111,6 +1110,7 @@ cellSignalStrengthGsm.getDbm(); @Override public void onLocationChanged(Location location) { + if (mNativeHandle != 0) { updatePosition(mNativeHandle, location.getLongitude(), location.getLatitude(), location.getAccuracy(), location.getTime() / 1000); From f17d633adfd415ee4c2673f2f8b9ba6d5b546188 Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 2 May 2024 19:26:02 +0800 Subject: [PATCH 10/36] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index 3b9927f4..b17a4735 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -60,7 +60,6 @@ public class MpMasterService extends Service { public Logger logger; - public final static int MSG_WHAT_SENDING_HB = 40; public static final int NOTIFICATION_ID_FOREGROUND_SERVICE = 8466503; public static final String ACTION_MSG_BROADCAST = "ACT_MSG_BROADCAST"; From ae2ae98c1d752597406a7409edc2ca84d8fa59f0 Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 2 May 2024 19:26:24 +0800 Subject: [PATCH 11/36] Update version to 1.0.125 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index a126f44c..b9f22839 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 124 +def AppBuildNumber = 125 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From a54aaccc225ee0b510a276ee5fff1dc895868bab Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 2 May 2024 20:23:55 +0800 Subject: [PATCH 12/36] =?UTF-8?q?=E5=8E=8B=E7=BC=A9so?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 40112dff..f2000d40 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,7 @@ android:requestLegacyExternalStorage="true" android:supportsRtl="true" android:theme="@style/Theme.MicroPhoto" + android:extractNativeLibs="true" tools:targetApi="28"> Date: Fri, 3 May 2024 10:16:19 +0800 Subject: [PATCH 13/36] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9B=9D=E5=85=89?= =?UTF-8?q?=E8=A1=A5=E5=81=BF=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/PhoneDevice.cpp | 1 + app/src/main/cpp/camera2/ndkcamera.cpp | 53 ++++++++++++++++++++++++-- app/src/main/cpp/camera2/ndkcamera.h | 3 ++ 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 7b115eac..9b62eb8b 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -912,6 +912,7 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< params.focusTimeout = mPhotoInfo.focusTimeout * 1000; params.exposureTime = mPhotoInfo.exposureTime; params.sensibility = mPhotoInfo.sensibility; + params.compensation = mPhotoInfo.compensation; params.orientation = mPhotoInfo.orientation; params.zoom = mPhotoInfo.zoom; params.zoomRatio = mPhotoInfo.zoomRatio; diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 18b8419b..5436b9e3 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -282,9 +282,21 @@ int NdkCamera::open(const std::string& cameraId) { ACameraMetadata_const_entry e = {0}; status = ACameraMetadata_getConstEntry(camera_metadata,ACAMERA_CONTROL_AF_AVAILABLE_MODES, &e); // AASSERT(status == ACAMERA_OK, "ACameraMetadata_getConstEntry::ACAMERA_CONTROL_AF_AVAILABLE_MODES return error, %d", status); +#ifdef _DEBUG + for (int idx = 0; idx < e.count; idx++) + { + unsigned int m = e.data.u8[idx]; + XYLOG(XYLOG_SEVERITY_DEBUG, "Available AF Mode %u", m); + } +#endif afSupported = (status == ACAMERA_OK) && !(e.count == 0 || (e.count == 1 && e.data.u8[0] == ACAMERA_CONTROL_AF_MODE_OFF)); } + if (!afSupported) + { + XYLOG(XYLOG_SEVERITY_ERROR, "AF not Supported"); + } + { ACameraMetadata_const_entry val = {0}; status = ACameraMetadata_getConstEntry(camera_metadata,ACAMERA_SENSOR_INFO_EXPOSURE_TIME_RANGE, &val); @@ -343,6 +355,8 @@ int NdkCamera::open(const std::string& cameraId) { { aeCompensationRange.min_ = val.data.i32[0]; aeCompensationRange.max_ = val.data.i32[1]; + + XYLOG(XYLOG_SEVERITY_DEBUG, "AE_COMPENSATION_RANGE %d-%d", aeCompensationRange.min_, aeCompensationRange.max_); } else { @@ -351,6 +365,17 @@ int NdkCamera::open(const std::string& cameraId) { } } + { + ACameraMetadata_const_entry val = {0}; + status = ACameraMetadata_getConstEntry(camera_metadata, ACAMERA_CONTROL_AE_COMPENSATION_STEP, &val); + if (status == ACAMERA_OK) + { + aeCompensationStep = val.data.r[0]; + + XYLOG(XYLOG_SEVERITY_DEBUG, "AE_COMPENSATION_RANGE num=%d den=%d", aeCompensationStep.numerator, aeCompensationStep.denominator); + } + } + { ACameraMetadata_const_entry val = {0}; status = ACameraMetadata_getConstEntry(camera_metadata,ACAMERA_SENSOR_INFO_SENSITIVITY_RANGE, &val); @@ -421,7 +446,6 @@ int NdkCamera::open(const std::string& cameraId) { m_imagesCaptured = 0; - if (afSupported && m_params.autoFocus) { // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_VIDEO; uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE; @@ -459,6 +483,25 @@ int NdkCamera::open(const std::string& cameraId) { status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode); // ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity_); + if ((aeCompensationRange.min_ != 0 || aeCompensationRange.max_ != 0) && m_params.compensation != 0) + { + int32_t compensation = m_params.compensation; + if (compensation < aeCompensationRange.min_) + { + compensation = aeCompensationRange.min_; + } + if (compensation > aeCompensationRange.max_) + { + compensation = aeCompensationRange.max_; + } + // int32_t aeCompensation = aeCompensationRange.max_; + status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_EXPOSURE_COMPENSATION, 1, &compensation); + if (status != ACAMERA_OK) + { + int aa = 0; + } + } + uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); if (status == ACAMERA_OK) @@ -949,7 +992,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque if (afSupported && (m_params.autoFocus != 0)) { - if (mResult.afState == ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED) + if (mResult.afState == ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED || mResult.afState == ACAMERA_CONTROL_AF_STATE_PASSIVE_UNFOCUSED) { uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL; status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); @@ -960,7 +1003,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque return; } - ALOGD("onCaptureCompleted AFS=%u AES=%u", (unsigned int)mResult.afState, (unsigned int)mResult.aeState); + ALOGD("onCaptureCompleted 1 AFS=%u AES=%u", (unsigned int)mResult.afState, (unsigned int)mResult.aeState); if (mResult.afState == ACAMERA_CONTROL_AF_STATE_PASSIVE_FOCUSED || mResult.afState == ACAMERA_CONTROL_AF_STATE_FOCUSED_LOCKED) // if (afState != ACAMERA_CONTROL_AF_STATE_INACTIVE) { @@ -1014,11 +1057,13 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque mResult.zoomRatio = *val.data.f; } + /* val = { 0 }; status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val); mResult.afState = *(val.data.u8); + */ - ALOGD("onCaptureCompleted AFS=%u AES=%u", (unsigned int)mResult.afState, (unsigned int)mResult.aeState); + ALOGD("onCaptureCompleted 2 AFS=%u AES=%u", (unsigned int)mResult.afState, (unsigned int)mResult.aeState); val = {0}; status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_SENSITIVITY, &val); diff --git a/app/src/main/cpp/camera2/ndkcamera.h b/app/src/main/cpp/camera2/ndkcamera.h index 72fd6d33..0e89b4f8 100644 --- a/app/src/main/cpp/camera2/ndkcamera.h +++ b/app/src/main/cpp/camera2/ndkcamera.h @@ -78,6 +78,7 @@ public: unsigned int reserved : 7; unsigned int exposureTime; // ms unsigned int sensibility; + int compensation; float zoomRatio; }; @@ -91,6 +92,7 @@ public: int64_t exposureTime; float FocusDistance; int32_t sensitibity; + int32_t compensation; uint8_t sceneMode; float zoomRatio; @@ -146,6 +148,7 @@ protected: // int32_t sensitivity_; RangeValue sensitivityRange; RangeValue aeCompensationRange; + ACameraMetadata_rational aeCompensationStep; unsigned int m_imagesCaptured; From 59791d6ded657d2a3367a33fd163b5a20c1e24dc Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 3 May 2024 10:16:26 +0800 Subject: [PATCH 14/36] =?UTF-8?q?=E5=8E=8B=E7=BC=A9so?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mpmaster/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mpmaster/src/main/AndroidManifest.xml b/mpmaster/src/main/AndroidManifest.xml index 4889cf59..c2381cfb 100644 --- a/mpmaster/src/main/AndroidManifest.xml +++ b/mpmaster/src/main/AndroidManifest.xml @@ -77,6 +77,7 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" + android:extractNativeLibs="true" android:theme="@style/Theme.MpMaster" tools:targetApi="28"> Date: Fri, 3 May 2024 10:16:38 +0800 Subject: [PATCH 15/36] =?UTF-8?q?=E5=B7=A5=E7=A8=8B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/CMakeLists.txt | 14 +++++++++----- app/src/main/cpp/PhoneDevice2.cpp | 2 +- gradle.properties | 1 + 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/cpp/CMakeLists.txt b/app/src/main/cpp/CMakeLists.txt index 17da6f17..72dfad43 100644 --- a/app/src/main/cpp/CMakeLists.txt +++ b/app/src/main/cpp/CMakeLists.txt @@ -48,7 +48,9 @@ project("microphoto") # message(FATAL_ERROR "OpenCV ${OpenCV_DIR}") + find_package(OpenCV REQUIRED core imgproc highgui) +# find_package(OpenCV REQUIRED core imgproc) if(OpenCV_FOUND) include_directories(${OpenCV_INCLUDE_DIRS}) message(WARNING "OpenCV library status:") @@ -294,16 +296,16 @@ add_library( # Sets the name of the library. MicroPhoto.cpp TerminalDevice.cpp PhoneDevice.cpp - // PhoneDevice2.cpp - // Camera.cpp - // Camera2Reader.cpp - // TextPaint.cpp + # PhoneDevice2.cpp + Camera.cpp + Camera2Reader.cpp + # TextPaint.cpp CvText.cpp SerialPort.cpp ncnn/yolov5ncnn.cpp - // camera2/OpenCVFont.cpp + # camera2/OpenCVFont.cpp ${CAMERA2_SOURCES} @@ -363,6 +365,7 @@ find_library( # Sets the name of the path variable. # can link multiple libraries, such as libraries you define in this # build script, prebuilt third-party libraries, or system libraries. + target_link_libraries( # Specifies the target library. microphoto @@ -381,3 +384,4 @@ target_link_libraries( # Specifies the target library. ) +# set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE "-strip-all") diff --git a/app/src/main/cpp/PhoneDevice2.cpp b/app/src/main/cpp/PhoneDevice2.cpp index 9408115a..4dd6341e 100644 --- a/app/src/main/cpp/PhoneDevice2.cpp +++ b/app/src/main/cpp/PhoneDevice2.cpp @@ -26,7 +26,7 @@ // #include // #include -#include +// #include #include #include diff --git a/gradle.properties b/gradle.properties index b4d7f13a..eb8cc61f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,7 @@ android.useAndroidX=true android.enableJetifier=true opencvsdk=D:/Workspace/deps/opencv-mobile-4.9.0-android +# opencvsdk=D:/Workspace/deps/opencv-mobile-3.4.20-android coreroot=D:/Workspace/Github/xymp/xymp/Core # opencvsdk=D:/Workspace/deps/opencv-v5 asioroot=D:/Workspace/deps/asio-1.28.0 From 168419f08b2dc8b1732d80e25e614a03b9966134 Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 3 May 2024 11:33:20 +0800 Subject: [PATCH 16/36] =?UTF-8?q?=E9=80=9A=E9=81=93=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9B=9D=E5=85=89=E8=A1=A5=E5=81=BF=E7=9A=84?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xypower/mpapp/ChannelActivity.java | 11 ++++++++++ app/src/main/res/layout/activity_channel.xml | 21 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 33 insertions(+) diff --git a/app/src/main/java/com/xypower/mpapp/ChannelActivity.java b/app/src/main/java/com/xypower/mpapp/ChannelActivity.java index 448a06b5..91f19f46 100644 --- a/app/src/main/java/com/xypower/mpapp/ChannelActivity.java +++ b/app/src/main/java/com/xypower/mpapp/ChannelActivity.java @@ -164,6 +164,11 @@ public class ChannelActivity extends AppCompatActivity { binding.exposuretime.setText(Integer.toString(jsonObject.optInt("exposureTime", 0))); binding.sensitivity.setText(Integer.toString(jsonObject.optInt("sensibility", 0))); binding.btnZoom.setChecked(jsonObject.optInt("zoom", 0) == 1); + if (jsonObject.has("compensation")) { + binding.compensation.setText(Integer.toString(jsonObject.optInt("compensation", 0))); + } else { + binding.compensation.setText(""); + } NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(1); @@ -272,6 +277,12 @@ public class ChannelActivity extends AppCompatActivity { } else { jsonObject.put("zoomRatio", 0f); } + String text = binding.compensation.getText().toString(); + if (TextUtils.isEmpty(text)) { + jsonObject.remove("compensation"); + } else { + jsonObject.put("compensation", Integer.parseInt(text)); + } if (!TextUtils.isEmpty(binding.resolutionCX.getText().toString())) { jsonObject.put("resolutionCX", Integer.parseInt(binding.resolutionCX.getText().toString())); } else { diff --git a/app/src/main/res/layout/activity_channel.xml b/app/src/main/res/layout/activity_channel.xml index f5d1986c..07f79765 100644 --- a/app/src/main/res/layout/activity_channel.xml +++ b/app/src/main/res/layout/activity_channel.xml @@ -246,6 +246,27 @@ app:layout_constraintStart_toEndOf="@+id/btnZoom" app:layout_constraintTop_toTopOf="@+id/btnZoom" /> + + + + 压缩率(50-100) USB Camera 短视频时长(秒) + 曝光补偿 Hello blank fragment Record From b54ae3ff0ae70572cb1060b4141e52ab991c5331 Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 3 May 2024 11:33:51 +0800 Subject: [PATCH 17/36] Update version to 1.0.126 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index b9f22839..b4049c51 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 125 +def AppBuildNumber = 126 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From 69f7ff07f65a0bec8baf81527d036c5662868811 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 5 May 2024 09:53:52 +0800 Subject: [PATCH 18/36] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=B9=E7=84=A6?= =?UTF-8?q?=E7=9A=84=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/PhoneDevice.cpp | 4 +-- app/src/main/cpp/camera2/ndkcamera.cpp | 50 +++++++++++++++++--------- app/src/main/cpp/camera2/ndkcamera.h | 1 - 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 9b62eb8b..2dc682df 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -1208,8 +1208,8 @@ bool CPhoneDevice::OnImageReady(cv::Mat& mat) unsigned int extime = (captureResult.exposureTime >= 1000000) ? ((unsigned int)(captureResult.exposureTime / 1000000)) : ((unsigned int)(captureResult.exposureTime / 1000)); strcpy(extimeunit, (captureResult.exposureTime >= 1000000) ? "ms" : "ns"); char str[128] = { 0 }; - snprintf(str, sizeof(str), "AE=%u EXPS=%u%s ISO=%d AF=%u LDR=%d AFS=%u AES=%u SCENE=%d AWB=%u %0.1fx", captureResult.autoExposure, - extime, extimeunit, + snprintf(str, sizeof(str), "AE=%u EXPS=%u%s(%d) ISO=%d AF=%u LDR=%d AFS=%u AES=%u SCENE=%d AWB=%u %0.1fx", captureResult.autoExposure, + extime, extimeunit, captureResult.compensation, captureResult.sensitibity, captureResult.autoFocus, // isnan(captureResult.FocusDistance) ? 0 : captureResult.FocusDistance, diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 5436b9e3..5952383e 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -135,6 +135,8 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA capture_session_output = 0; capture_session = 0; captureSequenceId = 0; + + mResult = { 0 }; } NdkCamera::~NdkCamera() @@ -446,6 +448,17 @@ int NdkCamera::open(const std::string& cameraId) { m_imagesCaptured = 0; + // capture request + { + ACameraDevice_request_template templateId = ((afSupported && m_params.autoFocus) || + m_params.autoExposure) ? TEMPLATE_PREVIEW + : TEMPLATE_STILL_CAPTURE; + status = ACameraDevice_createCaptureRequest(camera_device, templateId, &capture_request); + + int32_t fpsRange[2] = {1,1}; + status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_TARGET_FPS_RANGE,2,fpsRange); + } + if (afSupported && m_params.autoFocus) { // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_VIDEO; uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE; @@ -470,14 +483,9 @@ int NdkCamera::open(const std::string& cameraId) { } // std::this_thread::sleep_for(std::chrono::milliseconds(128)); - // capture request - { - ACameraDevice_request_template templateId = ((afSupported && m_params.autoFocus) || m_params.autoExposure) ? TEMPLATE_PREVIEW : TEMPLATE_STILL_CAPTURE; - status = ACameraDevice_createCaptureRequest(camera_device, templateId, &capture_request); - int32_t fpsRange[2] = {1,1}; - status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_TARGET_FPS_RANGE,2,fpsRange); + { if (m_params.autoExposure) { uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_ON; status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode); @@ -511,15 +519,19 @@ int NdkCamera::open(const std::string& cameraId) { uint8_t aeLockOff = ACAMERA_CONTROL_AE_LOCK_OFF; // ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLockOff); - } else { + } + else + { uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_OFF; status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode); - if (m_params.sensibility > 0) { + if (m_params.sensibility > 0) + { int32_t sensitivity = m_params.sensibility; status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity); } - if (m_params.exposureTime > 0) { + if (m_params.exposureTime > 0) + { int64_t exposureTime = ((int64_t)m_params.exposureTime) * 1000000; status = ACaptureRequest_setEntry_i64(capture_request, ACAMERA_SENSOR_EXPOSURE_TIME, 1, &exposureTime); } @@ -530,7 +542,8 @@ int NdkCamera::open(const std::string& cameraId) { uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO; status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode); - if (m_params.sceneMode != 0) { + if (m_params.sceneMode != 0) + { uint8_t sceneMode = m_params.sceneMode; status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode); } @@ -992,14 +1005,15 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque if (afSupported && (m_params.autoFocus != 0)) { - if (mResult.afState == ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED || mResult.afState == ACAMERA_CONTROL_AF_STATE_PASSIVE_UNFOCUSED) + // if (mResult.afState == ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED || mResult.afState == ACAMERA_CONTROL_AF_STATE_PASSIVE_UNFOCUSED) + if (mResult.afState == ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED) { - uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL; - status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); + // uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL; + // status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); - aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; - status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); - XYLOG(XYLOG_SEVERITY_INFO, "onCaptureCompleted New Focus Trigger AFS=%u AES=%u Time=%u", (unsigned int)mResult.afState, (unsigned int)mResult.aeState); + // aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; + // status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); + // XYLOG(XYLOG_SEVERITY_INFO, "onCaptureCompleted New Focus Trigger AFS=%u AES=%u Time=%u", (unsigned int)mResult.afState, (unsigned int)mResult.aeState); return; } @@ -1077,6 +1091,10 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_MODE, &val); mResult.autoFocus = *(val.data.u8); + val = {0}; + status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AE_EXPOSURE_COMPENSATION, &val); + mResult.compensation = *(val.data.i32); + ALOGD("onCaptureCompleted EXPO=%lld, FD=%f camera id=%s, AE=%s AFS=%u AES=%u", exTime, focusDistance, mCameraId.c_str(), ((aeMode == 1) ? "ON" : "OFF"), mResult.afState, mResult.aeState); // __android_log_print(ANDROID_LOG_WARN, "NdkCamera", "onCaptureCompleted %p %p %p", session, request, result); diff --git a/app/src/main/cpp/camera2/ndkcamera.h b/app/src/main/cpp/camera2/ndkcamera.h index 0e89b4f8..246287b7 100644 --- a/app/src/main/cpp/camera2/ndkcamera.h +++ b/app/src/main/cpp/camera2/ndkcamera.h @@ -95,7 +95,6 @@ public: int32_t compensation; uint8_t sceneMode; float zoomRatio; - }; NdkCamera(int32_t width, int32_t height, const CAMERA_PARAMS& params); From 95cf38e3ae1b04559b663ebbc3c36b0b6945f08c Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 5 May 2024 09:55:16 +0800 Subject: [PATCH 19/36] Update version to 1.0.127 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index b4049c51..d1ba0b41 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 126 +def AppBuildNumber = 127 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From ac76a879e466b7f4df3b973562ea6c075a455df0 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 5 May 2024 10:22:34 +0800 Subject: [PATCH 20/36] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8B=8D=E7=85=A7?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/camera2/ndkcamera.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 5952383e..ca0ff101 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -467,8 +467,11 @@ int NdkCamera::open(const std::string& cameraId) { if (!m_params.zoom) { - uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_START; - status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); + uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_CANCEL; + // status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); + + trig = ACAMERA_CONTROL_AF_TRIGGER_START; + // status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); } if (status == ACAMERA_OK) { @@ -486,6 +489,12 @@ int NdkCamera::open(const std::string& cameraId) { { + if (m_params.sceneMode != 0) + { + uint8_t sceneMode = m_params.sceneMode; + status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode); + } + if (m_params.autoExposure) { uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_ON; status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode); @@ -542,12 +551,6 @@ int NdkCamera::open(const std::string& cameraId) { uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO; status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode); - if (m_params.sceneMode != 0) - { - uint8_t sceneMode = m_params.sceneMode; - status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode); - } - status = ACameraOutputTarget_create(image_reader_surface, &image_reader_target); status = ACaptureRequest_addTarget(capture_request, image_reader_target); } From a20847d9fcb851444c97d87fdbbe5344b95a2ed0 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 5 May 2024 10:23:02 +0800 Subject: [PATCH 21/36] Update version to 1.0.128 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index d1ba0b41..20fe4a1a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 127 +def AppBuildNumber = 128 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From 9124df988f37ab6a911aa810d47d943cf01019d5 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 5 May 2024 11:18:39 +0800 Subject: [PATCH 22/36] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=89=A9=E4=BD=99?= =?UTF-8?q?=E5=86=85=E5=AD=98=E5=92=8C=E5=89=A9=E4=BD=99=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E7=9A=84=E7=99=BE=E5=88=86=E6=AF=94=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/PhoneDevice.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 2dc682df..3ab9e626 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -395,6 +395,14 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro fs::space_info si = fs::space("/data"); it->second = std::to_string(si.available); // Unit: M } + else if (it->first == PROP_FREE_ROM_PERCENT) + { + fs::space_info si = fs::space("/data"); + double fr = ((double)si.available * 100.0f) / ((double)si.capacity); + char buf[12] = { 0 }; + snprintf(buf, sizeof(buf), "%d%%", (int)fr); + it->second = buf; + } else if (it->first == PROP_TOTAL_ROM) { fs::space_info si = fs::space("/data"); @@ -402,12 +410,19 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro } 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_FREE_MEMORY_PERCENT) + { + long fm = android_os_Process_getFreeMemory(); + long tm = android_os_Process_getTotalMemory(); + double fmp = ((double)fm * 100.0f) / ((double)tm); + char buf[12] = { 0 }; + snprintf(buf, sizeof(buf), "%d%%", (int)fmp); + it->second = buf; // 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)) From db94ad0a2cd38593433a33b5a3c475b9896e69ce Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 5 May 2024 12:41:40 +0800 Subject: [PATCH 23/36] Update version to 1.0.129 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 20fe4a1a..9b2bf1c6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 128 +def AppBuildNumber = 129 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From 49b8343e201ab7e4e47d5b94bf5f5b037473f951 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 11:39:32 +0800 Subject: [PATCH 24/36] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java index ce8b7372..fd7a6ce9 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java @@ -406,6 +406,7 @@ public class AppMaster { String cmd = jsonObject.optString("cmd", ""); if (TextUtils.equals(cmd, CMD_REBOOT_DEV)) { + mService.logger.warning("Recv Reset Cmd"); SysApi.reboot(mService.getApplicationContext()); } else if (TextUtils.equals(cmd, CMD_UPLOAD_LOGS)) { String url = jsonObject.optString("url", null); @@ -414,10 +415,12 @@ public class AppMaster { } else if (TextUtils.equals(cmd, CMD_SET_CMA)) { String ip = jsonObject.optString("value_str", null); int port = jsonObject.optInt("value_int", 0); + mService.logger.warning("Recv Set CMA Cmd: " + (TextUtils.isEmpty(ip) ? "" : ip) + " port=" + Integer.toString(port)); updateCma(ip, port); } else if (TextUtils.equals(cmd, CMD_SET_MNTN)) { String ip = jsonObject.optString("value_str", null); int port = jsonObject.optInt("value_int", 0); + mService.logger.warning("Recv Set Mntn Cmd: " + (TextUtils.isEmpty(ip) ? "" : ip) + " port=" + Integer.toString(port)); String newUrl = buildMntnServer(ip, port); if (newUrl != null) { mService.updateMntn(newUrl); @@ -659,6 +662,8 @@ public class AppMaster { private void upgradeApp(long cid, String action, String url) { + mService.logger.warning("Recv Upgrade Cmd: url=" + url); + FileDownloader dl = new FileDownloader(); File path = new File(MicroPhotoContext.buildAppDir(mService.getApplicationContext()), "packages"); if (!path.exists()) { From 95c0a9e814835467b1040d34bb650d80b8361b43 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 13:58:19 +0800 Subject: [PATCH 25/36] =?UTF-8?q?APP=E6=9B=B4=E6=96=B0=E4=B9=8B=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E9=87=8D=E5=90=AF=E5=89=8D=E5=85=88=E5=88=A4=E6=96=AD?= =?UTF-8?q?APP=E6=98=AF=E5=90=A6=E5=B7=B2=E7=BB=8F=E5=AD=98=E6=B4=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xypower/mpmaster/UpdateReceiver.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/UpdateReceiver.java b/mpmaster/src/main/java/com/xypower/mpmaster/UpdateReceiver.java index 96946481..0085a8e0 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/UpdateReceiver.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/UpdateReceiver.java @@ -3,7 +3,13 @@ package com.xypower.mpmaster; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.text.TextUtils; import android.util.Log; +import android.os.Handler; + +import com.xypower.common.MicroPhotoContext; + +import java.io.File; public class UpdateReceiver extends BroadcastReceiver { @@ -40,6 +46,41 @@ public class UpdateReceiver extends BroadcastReceiver { } } + private void packageChanged(Context context, String action, String packageName, String targetPackageName, String aliveFileName) { + if (action.equals(Intent.ACTION_PACKAGE_REPLACED)) { // Upgrade Broadcast + Log.e(TAG, "onReceive:Upgraded and Restart the App:" + targetPackageName); + MpMasterService.resetVersions(); + if (packageName.equals("package:" + targetPackageName)) { + // SysApi.enableApp(context, targetPackageName); + tryToRestartApp(context, targetPackageName); + } + } else if (action.equals(Intent.ACTION_PACKAGE_ADDED)) {// Install broadcast + Log.e(TAG, "onReceive:Installed and Start the App:" + targetPackageName); + MpMasterService.resetVersions(); + if (packageName.equals("package:" + targetPackageName)) { + /*SystemUtil.reBootDevice();*/ + // SysApi.enableApp(context, targetPackageName); + tryToRestartApp(context, targetPackageName); + } + } else if (action.equals(Intent.ACTION_PACKAGE_REMOVED)) { // Uninstall + // Logger.e(TAG, "onReceive:uninstall" + packageName); + } + } + + private void tryToRestartApp(final Context context, final String targetPackageName) { + Handler handler = new Handler(); + handler.postDelayed(new Runnable() { + @Override + public void run() { + if (TextUtils.equals(targetPackageName, APP_PACKAGE_MPAPP)) { + startMpApp(context); + } else { + restartAPP(context, targetPackageName); + } + } + }, 10000); + } + public static void restartAPP(Context context, String packageName) { Intent intent = context.getPackageManager() .getLaunchIntentForPackage(packageName); @@ -47,4 +88,29 @@ public class UpdateReceiver extends BroadcastReceiver { context.startActivity(intent); // ActManager.getAppManager().finishAllActivity(); } + + public void startMpApp(final Context context) { + try { + + if (MicroPhotoContext.isAppAlive(context, MicroPhotoContext.PACKAGE_NAME_MPAPP)) { + return; + } + + String appPath = MicroPhotoContext.buildMpAppDir(context); + long ts = System.currentTimeMillis(); + + File mpappDb = new File(appPath + "data/App.db"); + long modifiedTimeOfDb = 0; + if (mpappDb.exists()) { + modifiedTimeOfDb = mpappDb.lastModified(); + } + if ((ts - modifiedTimeOfDb) > 12 * 1000) { + // greater than 12 seconds + // logger.warning("Start MpAPP as it is NOT running"); + MicroPhotoContext.restartMpApp(context); + } + } catch (Exception ex) { + + } + } } \ No newline at end of file From 5dff91cfc917e43bbd2f9752fe7f17a4a487aaa4 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 13:58:35 +0800 Subject: [PATCH 26/36] =?UTF-8?q?=E5=AE=9A=E4=BD=8D=E5=A4=84=E7=90=86?= =?UTF-8?q?=E7=9A=84=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xypower/mpapp/MicroPhotoService.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index 7c2d87fc..51054c7b 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -678,6 +678,12 @@ public class MicroPhotoService extends Service { long startTime = (date.getTime() + 999) / 1000; service.updateCaptureSchedule(startTime); + if (mPreviousLocation != null) { + service.updatePosition(mNativeHandle, mPreviousLocation.getLongitude(), mPreviousLocation.getLatitude(), + mPreviousLocation.getAccuracy(), mPreviousLocation.getTime() / 1000); + } + + /* try { Location location = mLocationManager.getLastKnownLocation(mLocateType); if (location != null) { @@ -686,6 +692,8 @@ public class MicroPhotoService extends Service { } catch (Exception ex) { ex.printStackTrace(); } + + */ } } }; @@ -1104,6 +1112,7 @@ cellSignalStrengthGsm.getDbm(); ////////////////////////GPS//////////////////// // private static final String GPS_LOCATION_NAME = android.location.LocationManager.GPS_PROVIDER; private LocationManager mLocationManager; + private Location mPreviousLocation = null; private String mLocateType; private LocationListener mLocationListener = new LocationListener() { @@ -1113,11 +1122,12 @@ cellSignalStrengthGsm.getDbm(); if (mNativeHandle != 0) { updatePosition(mNativeHandle, location.getLongitude(), location.getLatitude(), location.getAccuracy(), location.getTime() / 1000); - - mLocationManager.removeUpdates(this); - // Close GPS - enableGps(false); + } else { + mPreviousLocation = location; } + mLocationManager.removeUpdates(this); + // Close GPS + enableGps(false); Log.i(TAG, "Time:" + location.getTime() + " Lon=" + location.getLongitude() + "Lat=" + location.getLatitude() + "Alt=" + location.getAltitude()); } From 6d0d43dd983a7ed79fdea074bdea7b8912da90b7 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 14:29:33 +0800 Subject: [PATCH 27/36] =?UTF-8?q?GPS=E6=89=93=E5=BC=80=E7=94=B5=E6=BA=90?= =?UTF-8?q?=E4=B9=8B=E5=90=8E=E8=AE=BE=E7=BD=AE1=E5=88=86=E9=92=9F?= =?UTF-8?q?=E7=9A=84=E8=B6=85=E6=97=B6=EF=BC=8C=E8=B6=85=E6=97=B6=E5=90=8E?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xypower/mpapp/MicroPhotoService.java | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index 51054c7b..264eab6f 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -131,6 +131,7 @@ public class MicroPhotoService extends Service { private ScreenActionReceiver mScreenaAtionReceiver = null; private NetworkChangedReceiver mNetworkChangedReceiver = null; + private long mGpsTimeout = 60000; // 1 minute private PendingIntent mPreviousGpsTimer = null; private ServiceHandler mHander = null; @@ -373,7 +374,11 @@ public class MicroPhotoService extends Service { String md5 = intent.getStringExtra("md5"); } else if (TextUtils.equals(ACTION_GPS_TIMEOUT, action)) { mService.mPreviousGpsTimer = null; - mService.mLocationManager.removeUpdates(mService.mLocationListener); + try { + mService.mLocationManager.removeUpdates(mService.mLocationListener); + } catch (Exception ex) { + ex.printStackTrace(); + } mService.enableGps(false); } } @@ -1076,6 +1081,35 @@ public class MicroPhotoService extends Service { */ } public void enableGps(boolean enabled) { + if (enabled) { + try { + AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); + if (mPreviousGpsTimer != null) { + alarmManager.cancel(mPreviousGpsTimer); + mPreviousGpsTimer = null; + } + + Intent intent = new Intent(); + intent.setAction(ACTION_GPS_TIMEOUT); + mPreviousGpsTimer = PendingIntent.getBroadcast(this, 0, intent, 0); + + alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + mGpsTimeout, mPreviousGpsTimer); + } catch (Exception ex) { + ex.printStackTrace(); + } + } else { + if (mPreviousGpsTimer != null) { + try { + AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); + alarmManager.cancel(mPreviousGpsTimer); + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + mPreviousGpsTimer = null; + } + } + } + SysApi.enableGps(getApplicationContext(), enabled); } From 31d7e9e9624b10b0ae0effeb079a91b68aa283d5 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 14:29:53 +0800 Subject: [PATCH 28/36] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- gradle.properties | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 9b2bf1c6..900306ee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,7 +24,7 @@ android { defaultConfig { applicationId "com.xypower.mpapp" - minSdk 25 + minSdk COMPILE_MIN_SDK_VERSION as int //noinspection ExpiredTargetSdkVersion targetSdk 28 versionCode AppVersionCode diff --git a/gradle.properties b/gradle.properties index eb8cc61f..70dee003 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,6 +18,11 @@ android.nonTransitiveRClass=true android.useAndroidX=true android.enableJetifier=true +BUILD_TOOLS_VERSION=33.0.3 +COMPILE_SDK_VERSION=33 +TARGET_SDK_VERSION=28 +COMPILE_MIN_SDK_VERSION=25 + opencvsdk=D:/Workspace/deps/opencv-mobile-4.9.0-android # opencvsdk=D:/Workspace/deps/opencv-mobile-3.4.20-android coreroot=D:/Workspace/Github/xymp/xymp/Core From 090cc98ba3321708196ba0024a5460acd08ee68b Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 14:58:23 +0800 Subject: [PATCH 29/36] Update version to 1.0.130 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 900306ee..095ae309 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 129 +def AppBuildNumber = 130 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From f081edac5234da8b5e4fdea7c82423cc06f9c327 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 15:20:20 +0800 Subject: [PATCH 30/36] =?UTF-8?q?=E6=94=B9IMEI=E4=B8=BAICCID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xypower/mpmaster/AppMaster.java | 4 +- .../com/xypower/mpmaster/MpMasterService.java | 40 ++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java index fd7a6ce9..00f58efe 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java @@ -209,9 +209,9 @@ public class AppMaster { postParams.add(new Pair("oid", mService.getSerialNo())); postParams.add(new Pair("maintainVersion", mService.getMasterAppVersion())); - postParams.add(new Pair("simcard1", getImei(1))); + postParams.add(new Pair("simcard1", mService.getIccid(1))); if (mService.isSeparateNetwork()) { - postParams.add(new Pair("simcard2", getImei(2))); + postParams.add(new Pair("simcard2", mService.getIccid(2))); } postParams.add(new Pair("freeROM", getFreeROM())); diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index b17a4735..b2ee237d 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -24,6 +24,8 @@ import android.os.Messenger; import android.os.PowerManager; import android.os.SystemClock; import android.telephony.SignalStrength; +import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.text.format.DateFormat; @@ -116,6 +118,9 @@ public class MpMasterService extends Service { private PendingIntent mPreviousHB = null; private long mPreviousHeartbeatTime = 0; + private String mIccid1 = null; + private String mIccid2 = null; + public MpMasterService() { } @Override @@ -129,7 +134,7 @@ public class MpMasterService extends Service { super.onCreate(); loadConfig(); - + loadIccid(); logger = Logger.getLogger("com.xypower.mpmaster.logger"); logger.setLevel(Level.ALL); // LogFormatter.installFormatter(logger); @@ -226,6 +231,14 @@ public class MpMasterService extends Service { registerHeartbeatTimer(); } + public String getIccid(int number) { + if (number == 1) { + return mIccid1 == null ? "" : mIccid1; + } else { + return mIccid2 == null ? "" : mIccid2; + } + } + @Override public void onDestroy() { @@ -273,6 +286,31 @@ public class MpMasterService extends Service { mTimeOfMpAppAlive = masterConfig.mpappMonitorTimeout; } + private void loadIccid() { + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) + { + try { + SubscriptionManager sm = SubscriptionManager.from(this); + List sis = sm.getActiveSubscriptionInfoList(); + if (sis.size() >= 1) { + SubscriptionInfo si1 = sis.get(0); + mIccid1 = si1.getIccId(); + // String phoneNum1 = si1.getNumber(); + } + if (sis.size() >= 2) { + SubscriptionInfo si2 = sis.get(1); + mIccid1 = si2.getIccId(); + // String phoneNum2 = si2.getNumber(); + } + // int count = sm.getActiveSubscriptionInfoCount();// real cards + // int max = sm.getActiveSubscriptionInfoCountMax();// Slot number + + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + // public boolean useSeparater public String getCmdid() { return mCmdid; From 85e9a8e6cf6759a027f76aef7badee9efaa897af Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 15:20:31 +0800 Subject: [PATCH 31/36] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/xypower/mpapp/MainActivity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/xypower/mpapp/MainActivity.java b/app/src/main/java/com/xypower/mpapp/MainActivity.java index 30da600c..12b1f125 100644 --- a/app/src/main/java/com/xypower/mpapp/MainActivity.java +++ b/app/src/main/java/com/xypower/mpapp/MainActivity.java @@ -119,7 +119,6 @@ public class MainActivity extends AppCompatActivity { // ViewUtils.hideSoftKeyboard(this); - ActionBar actionBar = getSupportActionBar(); // String buildTime = BuildConfig.BUILD_ From d8136da9a14a76730a5282a99581942411abae74 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 15:35:56 +0800 Subject: [PATCH 32/36] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E7=9A=84=E8=BF=90=E7=BB=B4=E8=AF=B7=E6=B1=82=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E9=92=88=E5=AF=B9=E4=B8=8D=E5=90=8C=E7=9A=84=E8=BF=90=E7=BB=B4?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E6=B7=BB=E5=8A=A0=E4=B8=8D=E5=90=8C=E7=9A=84?= =?UTF-8?q?=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/xypower/mpmaster/AppMaster.java | 11 ++++++++++- .../java/com/xypower/mpmaster/MpMasterService.java | 12 ++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java index 00f58efe..539568df 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java @@ -50,6 +50,7 @@ public class AppMaster { private MpMasterService mService; private String mMasterUrl; private String mCmdid; + private boolean mBundleWithMpApp; private PowerManager.WakeLock mWakelock; public static final String CMD_REBOOT_APP = "cmd_reboot_app"; @@ -70,13 +71,18 @@ public class AppMaster { public static final String CMD_IMPORT_PUB_KEY = "imp_pub_key"; - public AppMaster(MpMasterService service, String masterUrl, String cmdid) { + public AppMaster(MpMasterService service, String masterUrl, String cmdid, boolean bundleWithMpApp) { mService = service; mMasterUrl = masterUrl; mCmdid = cmdid; + mBundleWithMpApp = bundleWithMpApp; mWakelock = null; + if (!mBundleWithMpApp) { + int aa = 0; + } + try { PowerManager powerManager = (PowerManager) service.getSystemService(Context.POWER_SERVICE); mWakelock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "com.xypower.mpmaster:MpMaster"); @@ -204,6 +210,9 @@ public class AppMaster { List> postParams = new ArrayList<>(); postParams.add(new Pair("id", mCmdid)); postParams.add(new Pair("XyDev", "1")); + if (mBundleWithMpApp) { + postParams.add(new Pair("bundled", "1")); + } postParams.add(new Pair("bootTime", Long.toString(getBootTime()))); postParams.add(new Pair("i1Version", mService.getMpAppVersion())); postParams.add(new Pair("oid", mService.getSerialNo())); diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index b2ee237d..5c494dbe 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -225,7 +225,7 @@ public class MpMasterService extends Service { // AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); - startMaster(); + // startMaster(false); startMpApp(); registerHeartbeatTimer(); @@ -416,7 +416,7 @@ public class MpMasterService extends Service { } } - private void startMaster() { + private void startMaster(boolean bundleWithMpApp) { String masterUrl = MicroPhotoContext.DEFAULT_MASTER_URL; MicroPhotoContext.MasterConfig masterConfig = MicroPhotoContext.getMasterConfig(getApplicationContext()); @@ -429,7 +429,7 @@ public class MpMasterService extends Service { logger.warning("Start Mntn report:" + masterUrl); - AppMaster appMaster = new AppMaster(this, masterUrl, appConfig.cmdid); + AppMaster appMaster = new AppMaster(this, masterUrl, appConfig.cmdid, bundleWithMpApp); appMaster.start(); } @@ -448,7 +448,7 @@ public class MpMasterService extends Service { mService.registerHeartbeatTimer(); - mService.startMaster(); + mService.startMaster(false); mService.startMpApp(); } else if (TextUtils.equals(MicroPhotoContext.ACTION_HEARTBEAT_MP, action)) { @@ -457,7 +457,7 @@ public class MpMasterService extends Service { mService.registerHeartbeatTimer(mService.mPreviousHeartbeatTime + mService.mHeartbeatDuration * 1000); - mService.startMaster(); + mService.startMaster(true); mService.startMpApp(); } } else if (TextUtils.equals(ACTION_UPDATE_CONFIGS, action)) { @@ -533,7 +533,7 @@ public class MpMasterService extends Service { registerHeartbeatTimer(); - startMaster(); + startMaster(false); break; case ACTION_STOP: From fae787835cb1532af94bc5f127e04b2d0775f533 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 16:11:19 +0800 Subject: [PATCH 33/36] Update MpMaster version to 1.0.33 --- mpmaster/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mpmaster/build.gradle b/mpmaster/build.gradle index 6409990b..348364fc 100644 --- a/mpmaster/build.gradle +++ b/mpmaster/build.gradle @@ -4,7 +4,7 @@ plugins { def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 32 +def AppBuildNumber = 33 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber From 12ecd9cbd19e9d061a9e997f0cab09f25e396aee Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 17:16:45 +0800 Subject: [PATCH 34/36] =?UTF-8?q?=E5=AE=9E=E7=8E=B0OTA=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xypower/mpmaster/AppMaster.java | 32 ++++++++++++ .../com/xypower/mpmaster/MpMasterService.java | 52 ++++++++++++++++++- 2 files changed, 82 insertions(+), 2 deletions(-) diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java index 539568df..20898414 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java @@ -68,6 +68,7 @@ public class AppMaster { public static final String CMD_HOT_SPOT = "yw_cmd_hot_spot"; public static final String CMD_ENABLE_GPS = "yw_cmd_enable_gps"; public static final String CMD_ENABLE_OTG = "yw_cmd_enable_otg"; + public static final String CMD_UPD_OTA = "yw_upd_ota"; public static final String CMD_IMPORT_PUB_KEY = "imp_pub_key"; @@ -513,6 +514,13 @@ public class AppMaster { deleteFile(path); } else if (TextUtils.equals(cmd, CMD_IMPORT_PUB_KEY)) { + } else if (TextUtils.equals(cmd, CMD_UPD_OTA)) { + String url = jsonObject.optString("url", null); + String fileName = jsonObject.optString("fileName", null); + String md5 = jsonObject.optString("md5", null); + if (!TextUtils.isEmpty(url)) { + upgradeOta(cid, cmd, url, fileName, md5); + } } } @@ -693,6 +701,30 @@ public class AppMaster { } } + private void upgradeOta(long cid, String action, String url, String fileName, String md5) { + + mService.logger.warning("Recv Upgrade OTA: url=" + url); + + FileDownloader dl = new FileDownloader(); + File path = new File(MicroPhotoContext.buildAppDir(mService.getApplicationContext()), "ota"); + if (!path.exists()) { + path.mkdirs(); + } + + File file = new File(path, fileName == null ? "ota.zip" : fileName); + if (file.exists()) { + file.delete(); + } + String otaPath = file.getAbsolutePath(); + if (dl.download(url, otaPath)) { + sendResult(cid, 1, action, action + ":" + mCmdid); + Context context = mService.getApplicationContext(); + mService.logger.info("Upgrade OTA: " + url); + + SysApi.installOTA(context, context.getPackageName(), otaPath); + } + } + private void uploadLogs(String url) { String appDir = mService.buildAppDir(); diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index 5c494dbe..3ad6424c 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -69,7 +69,9 @@ public class MpMasterService extends Service { public static final String ACTION_STOP = "com.xypower.mpmaster.ACT_STOP"; public static final String ACTION_MAIN = "com.xypower.mpmaster.ACT_MAIN"; - public static final String ACTION_UPD_OTA = "com.xy.otaupdateresult"; + public static final String ACTION_UPD_OTA = SysApi.OTA_RESULT_ACTION; + public static final String ACTION_INSTALL_RESULT = SysApi.INSTALL_RESULT_ACTION; + public static final String ACTION_UNINSTALL_RESULT = SysApi.UNINSTALL_RESULT_ACTION; private static final String ACTION_UPDATE_CONFIGS = "com.xypower.mpmaster.ACT_UPD_CFG"; @@ -207,6 +209,8 @@ public class MpMasterService extends Service { intentFilter.addAction(ACTION_MSG_BROADCAST); intentFilter.addAction(ACTION_UPDATE_CONFIGS); intentFilter.addAction(ACTION_UPD_OTA); + intentFilter.addAction(ACTION_INSTALL_RESULT); + intentFilter.addAction(ACTION_UNINSTALL_RESULT); if (!mSeparateNetwork) { intentFilter.addAction(MicroPhotoContext.ACTION_HEARTBEAT_MP); } @@ -470,6 +474,48 @@ public class MpMasterService extends Service { } } else if (TextUtils.equals(ACTION_UPD_OTA, action)) { + String cmd = intent.getStringExtra("cmd"); + String msg = intent.getStringExtra("msg"); + // Log.e("_otg_","cmd="+cmd); + if("write".equals(cmd)) + { + // int progress = Integer.parseInt(msg); + } + else if("update".equals(cmd)) + { + // int progress = Integer.parseInt(msg); + } + else if("info".equals(cmd)) + { + + } + else if("error".equals(cmd)) + { + mService.logger.warning("UPD OTA Failed"); + } + else if("success".equals(cmd)) + { + //confirm to reboot device ?? + mService.logger.warning("UPD OTA Succeeded, will RESET dev"); + Handler handler = new Handler(); + handler.postDelayed(new Runnable() { + @Override + public void run() { + SysApi.reboot(context); + } + }, 1000); + } + } else if (TextUtils.equals(ACTION_INSTALL_RESULT, action)) { + boolean bSucc = intent.getBooleanExtra("succ", false); + String pkname = intent.getStringExtra("pkname"); + String msg = intent.getStringExtra("msg"); + // Log.e("_otg_","install result bsuc="+bSucc+",pkname="+pkname+",msg="+msg); + mService.logger.warning("INSTALL APP result =" + bSucc + ",pkname=" + pkname + ",msg=" + msg); + } else if (TextUtils.equals(ACTION_UNINSTALL_RESULT, action)) { + boolean bSucc = intent.getBooleanExtra("succ", false); + String pkname = intent.getStringExtra("pkname"); + String msg = intent.getStringExtra("msg"); + mService.logger.warning("UNINSTALL APP result =" + bSucc + ",pkname=" + pkname + ",msg=" + msg); } } } @@ -787,11 +833,12 @@ public class MpMasterService extends Service { @Override public void run() { if (rebootType == 0) { + logger.warning("Recv REBOOT MpMst APP cmd"); Context context = MpMasterService.this.getApplicationContext(); restartApp(context, context.getPackageName()); } else { - Log.w(TAG, "Recv REBOOT command"); + logger.warning("Recv RESET cmd"); SysApi.reboot(MpMasterService.this.getApplicationContext()); } } @@ -820,6 +867,7 @@ public class MpMasterService extends Service { } public void selectSimCard(int num) { + logger.warning("Select SimCard: " + Integer.toString(num)); SysApi.selectSimCard4Data(getApplicationContext(), num); } From 79558b70f2855966e6e9852479d267830241de1a Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 6 May 2024 17:41:52 +0800 Subject: [PATCH 35/36] =?UTF-8?q?=E4=BF=AE=E5=A4=8Diccid=E8=B5=8B=E5=80=BC?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java | 4 ++-- .../src/main/java/com/xypower/mpmaster/MpMasterService.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java index 20898414..75c12c38 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java @@ -220,9 +220,9 @@ public class AppMaster { postParams.add(new Pair("maintainVersion", mService.getMasterAppVersion())); postParams.add(new Pair("simcard1", mService.getIccid(1))); - if (mService.isSeparateNetwork()) { + // if (mService.isSeparateNetwork()) { postParams.add(new Pair("simcard2", mService.getIccid(2))); - } + // } postParams.add(new Pair("freeROM", getFreeROM())); buildStats(startTime, postParams); diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index 3ad6424c..1b6bd7c1 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -303,7 +303,7 @@ public class MpMasterService extends Service { } if (sis.size() >= 2) { SubscriptionInfo si2 = sis.get(1); - mIccid1 = si2.getIccId(); + mIccid2 = si2.getIccId(); // String phoneNum2 = si2.getNumber(); } // int count = sm.getActiveSubscriptionInfoCount();// real cards From a6e63f43f02803ee8530eb1401b92f78120a3238 Mon Sep 17 00:00:00 2001 From: Matthew Date: Tue, 7 May 2024 10:04:14 +0800 Subject: [PATCH 36/36] Update version to 1.0.131 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 095ae309..cc8107e1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 130 +def AppBuildNumber = 131 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber