diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index 330cbf67..cd9d9539 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -422,6 +422,7 @@ public class MicroPhotoService extends Service { // 创建延迟意图 Intent alarmIntent = new Intent(); alarmIntent.setAction(ACTION_HEARTBEAT); + alarmIntent.putExtra("HeartbeatDuration", mHeartbeatDuration); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); diff --git a/mpmaster/src/main/cpp/mpmaster.cpp b/mpmaster/src/main/cpp/mpmaster.cpp index 5485b576..7b9c71d8 100644 --- a/mpmaster/src/main/cpp/mpmaster.cpp +++ b/mpmaster/src/main/cpp/mpmaster.cpp @@ -57,6 +57,29 @@ Java_com_xypower_mpmaster_MpMasterService_getInt(JNIEnv* env, jclass cls, jint c return -1; } +extern "C" JNIEXPORT jint JNICALL +Java_com_xypower_mpmaster_MpMasterService_setInt(JNIEnv* env, jclass cls, jint cmd, jint val) { + int fd = open("/dev/mtkgpioctrl", O_RDONLY); + // LOGE("set_int fd=%d,cmd=%d,value=%d\r\n",fd, cmd, value); + if( fd > 0 ) + { + IOT_PARAM param; + param.cmd = cmd; + param.value = val; + int res = ioctl(fd, IOT_PARAM_WRITE, ¶m); + // LOGE("set_int22 cmd=%d,value=%d,result=%d\r\n",param.cmd, param.value, param.result); + close(fd); + return 0; + } + return -1; +} + +extern "C" JNIEXPORT void JNICALL +Java_com_xypower_mpmaster_MpMasterService_rebootDevice(JNIEnv* env, jclass cls) { + // setInt(CMD_SET_SYSTEM_RESET, 1); + Java_com_xypower_mpmaster_MpMasterService_setInt(env, cls, 202, 1); +} + extern "C" JNIEXPORT jintArray JNICALL Java_com_xypower_mpmaster_MpMasterService_getStats(JNIEnv* env, jclass cls, jlong ts) { std::string path = PATH_MPAPP_STATS; diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java index b1d0c3e5..c1086c90 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java @@ -27,6 +27,7 @@ import com.xypower.common.ZipUtils; import org.json.JSONArray; import org.json.JSONObject; +import org.w3c.dom.Text; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -652,10 +653,23 @@ public class AppMaster { private void startFrp(JSONObject jsonObject) { try { // SysApi.forceStopApp(context, packageName); + + String frp = jsonObject.optString("frpc", null); + if (TextUtils.isEmpty(frp)) { + mService.logger.warning("Empty frpc node"); + return; + } + + JSONObject jsonFrp = new JSONObject(frp); + String server = jsonFrp.optString("server_addr"); + int port = jsonFrp.optInt("server_port", 7000); + Context context = mService.getApplicationContext(); Intent intent = context.getPackageManager().getLaunchIntentForPackage("io.github.acedroidx.frp"); if (intent != null) { intent.putExtra("startFrp", 1); + intent.putExtra("server", server); + intent.putExtra("port", port); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(intent); } diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index 7c6e7e37..68f19808 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -93,6 +93,8 @@ public class MpMasterService extends Service { private static int mStateService = STATE_SERVICE.NOT_CONNECTED; + private int mMpHeartbeatDuration = 10; + private boolean mMntnMode = false; private boolean mQuickHbMode = false; private boolean mUsingAbsHbTime = false; @@ -495,6 +497,7 @@ public class MpMasterService extends Service { } else if (TextUtils.equals(MicroPhotoContext.ACTION_HEARTBEAT_MP, action)) { mService.mPreviousMpHbTime = System.currentTimeMillis(); + mService.mMpHeartbeatDuration = intent.getIntExtra("HeartbeatDuration", 10); if (!mService.mSeparateNetwork && (!mService.mMntnMode)) { mService.logger.info("Heartbeat Timer Fired By MpAPP ACTION=" + action); @@ -975,9 +978,10 @@ public class MpMasterService extends Service { } public native static int getInt(int cmd); + public native static int setInt(int cmd, int val); public native static int[] getStats(long ts); public native static String getSystemProperty(String key); - + public native static void rebootDevice(); ////////////////////////GPS//////////////////// diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsSendReceiver.java b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsSendReceiver.java index 466b01bf..2d091280 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsSendReceiver.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsSendReceiver.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.text.TextUtils; import com.dev.devapi.api.SysApi; +import com.xypower.mpmaster.MpMasterService; /** * 短信发送的监听广播 @@ -40,9 +41,9 @@ public class SmsSendReceiver extends BroadcastReceiver { public void processSms(final Context context, Intent intent, final String action, final String type) { if (type.contains(SmsTypeEnum.REBOOT1.value())) { - SysApi.reboot(context); + MpMasterService.rebootDevice(); } else if (type.contains(SmsTypeEnum.REBOOT2.value())) { - SysApi.reboot(context); + MpMasterService.rebootDevice(); } else if (type.contains(SmsTypeEnum.SET_YW_SCHEDULE.value())) { UpdateSysConfigUtil.restartMasterApp(context); } else if (type.contains(SmsTypeEnum.SET_OPERATE.value())) { diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/sms/UpdateSysConfigUtil.java b/mpmaster/src/main/java/com/xypower/mpmaster/sms/UpdateSysConfigUtil.java index c7c8741f..65f9a0f0 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/sms/UpdateSysConfigUtil.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/sms/UpdateSysConfigUtil.java @@ -347,7 +347,6 @@ public class UpdateSysConfigUtil { context.sendBroadcast(intent); } - public static void takePhotoOrVideo(Context context, long channel, long preset, boolean photoOrVideo) { List schedules = new ArrayList<>(); long ts = System.currentTimeMillis() / 1000;