From f7a18ec4494b9c5c9ef3fd440bbf68ffc6425e18 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期四, 08 十二月 2022 15:40:56 +0800
Subject: [PATCH] 智慧驾培首次提交
---
lib/src/main/cpp/native-lib.cpp | 125 +++++++++++++++++++++++++++--------------
1 files changed, 83 insertions(+), 42 deletions(-)
diff --git a/lib/src/main/cpp/native-lib.cpp b/lib/src/main/cpp/native-lib.cpp
index 4d2fcdb..c3e60c6 100644
--- a/lib/src/main/cpp/native-lib.cpp
+++ b/lib/src/main/cpp/native-lib.cpp
@@ -1,6 +1,6 @@
#include <jni.h>
#include <string>
-#include <pthread.h>
+#include <mutex>
#include <unistd.h>
#include <cstdlib>
#include <map>
@@ -18,22 +18,26 @@
#include "master/comm_if.h"
#include "rtk_module/virtual_rtk.h"
#include "defs.h"
+#include "mcu/ada.h"
+#include "mcu/ahp.h"
#define DEBUG(fmt, args...) LOGD("<native-lib> <%s>: " fmt, __func__, ##args)
+#define LIBENC_ARRAY_ELEMS(a) (sizeof(a) / sizeof(a[0]))
+
static JavaVM *sg_jvm = NULL;
static jobject sg_obj = NULL;
+static JNIEnv *jenv;
+
const char *RTK_PLATFORM_IP = "47.93.80.84";
const int RTK_PLATFORM_PORT = 12125;
const uint8_t phone[] = {0x20,0x19,0x10,0x15,0x00,0x00,0x00,0x01};
-const char *VIRTUAL_RTK_IP = "192.168.43.76";
+const char *VIRTUAL_RTK_IP = "192.168.16.212";
const int VIRTUAL_RTK_PORT = 9002;
-static pthread_mutex_t tts_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-static int ttsSeq = 1;
+static std::mutex tts_mutex;
static std::map<int, void (*)(int)> TTSCallBack;
@@ -206,12 +210,10 @@
static int GetTtsSeq(void)
{
- int seq = 0;
+ static int seq = 0;
- pthread_mutex_lock(&tts_mutex);
- seq = ttsSeq++;
- pthread_mutex_unlock(&tts_mutex);
-
+ lock_guard<std::mutex> lock(tts_mutex);
+ seq++;
return seq;
}
@@ -414,35 +416,30 @@
}
}
-extern "C"
-JNIEXPORT void JNICALL
-Java_com_anyun_exam_lib_RemoteService_startNative(JNIEnv *env, jobject thiz, jboolean ayDevice) {
+static void startNative(JNIEnv *env, jobject thiz, jboolean ayDevice) {
// TODO: implement startNative()
// 淇濆瓨鍏ㄥ眬JVM浠ヤ究鍦ㄥ瓙绾跨▼涓娇鐢�
DEBUG("鍚姩Native");
- env->GetJavaVM(&sg_jvm);
// 涓嶈兘鐩存帴璧嬪��(g_obj = ojb)
sg_obj = env->NewGlobalRef(thiz);
srand(time(NULL));
- AppTimer_Init();
- ConfigMCU(ayDevice);
+ AppTimer_init();
+ ///////////////ConfigMCU(ayDevice);
+ InitAda();
+ InitAhp();
DriverTestInit();
- ConfigRTKModule(ayDevice);
+
MA_Init();
InitPlatform(ayDevice, phone, RTK_PLATFORM_IP, RTK_PLATFORM_PORT);
InitVirtualDevice(VIRTUAL_RTK_IP, VIRTUAL_RTK_PORT);
- pthread_mutex_init(&tts_mutex, NULL);
-
- MA_NdkStart();
+// MA_NdkStart();
}
-extern "C"
-JNIEXPORT void JNICALL
-Java_com_anyun_exam_lib_RemoteService_MainProcMsgEntry(JNIEnv *env, jobject thiz, jint cmd,
+static void MainProcMsgEntry(JNIEnv *env, jobject thiz, jint cmd,
jstring value) {
// TODO: implement MainProcMsgEntry()
union {
@@ -474,9 +471,7 @@
}
}
-extern "C"
-JNIEXPORT void JNICALL
-Java_com_anyun_exam_lib_RemoteService_MainProcBinMsgEntry(JNIEnv *env, jobject thiz, jint cmd,
+void MainProcBinMsgEntry(JNIEnv *env, jobject thiz, jint cmd,
jbyteArray data, jint length) {
// TODO: implement MainProcBinMsgEntry()
jbyte *c_dat = env->GetByteArrayElements(data, NULL);
@@ -487,11 +482,8 @@
env->ReleaseByteArrayElements(data, c_dat, NULL);
}
-extern "C"
-JNIEXPORT void JNICALL
-Java_com_anyun_exam_lib_RemoteService_TextSpeakEnd(JNIEnv *env, jobject thiz, jint id) {
+void TextSpeakEnd(JNIEnv *env, jobject thiz, jint id) {
// TODO: implement TextSpeakEnd()
-
auto it = TTSCallBack.find(id);
if (it != TTSCallBack.end()) {
@@ -506,9 +498,7 @@
}
}
-extern "C"
-JNIEXPORT void JNICALL
-Java_com_anyun_exam_lib_RemoteService_UpgradeMcu(JNIEnv *env, jobject thiz, jstring vercode,
+void UpgradeMcu(JNIEnv *env, jobject thiz, jstring vercode,
jbyteArray rom) {
// TODO: implement UpgradeMcu()
if (vercode != NULL && rom != NULL) {
@@ -523,9 +513,7 @@
}
}
-extern "C"
-JNIEXPORT void JNICALL
-Java_com_anyun_exam_lib_RemoteService_BluetoothDataComeIn(JNIEnv *env, jobject thiz,
+void BluetoothDataComeIn(JNIEnv *env, jobject thiz,
jbyteArray data, jint length) {
// TODO: implement BluetoothDataComeIn()
jbyte *c_dat = env->GetByteArrayElements(data, NULL);
@@ -535,9 +523,8 @@
env->ReleaseByteArrayElements(data, c_dat, NULL);
}
-extern "C"
-JNIEXPORT void JNICALL
-Java_com_anyun_exam_lib_RemoteService_BluetoothStatusChange(JNIEnv *env, jobject thiz,
+
+void BluetoothStatusChange(JNIEnv *env, jobject thiz,
jint status) {
// TODO: implement BluetoothStatusChange()
uint8_t sta = status;
@@ -545,9 +532,7 @@
PlatformStatusChanged(BLUETOOTH_STATUS_EVT, &sta, 1);
}
-extern "C"
-JNIEXPORT void JNICALL
-Java_com_anyun_exam_lib_RemoteService_BluetoothConnected(JNIEnv *env, jobject thiz, jstring name,
+void BluetoothConnected(JNIEnv *env, jobject thiz, jstring name,
jstring addr) {
// TODO: implement BluetoothConnected()
if (name != NULL && addr != NULL) {
@@ -576,3 +561,59 @@
PlatformStatusChanged(BLUETOOTH_STATUS_EVT, &sta, 1);
}
}
+
+static JNINativeMethod methods[] = {
+ {"startNative", "(Z)V", reinterpret_cast<void *>(startNative)},
+ {"MainProcMsgEntry", "(ILjava/lang/String;)V", reinterpret_cast<void *>(MainProcMsgEntry)},
+ {"MainProcBinMsgEntry", "(I[BI)V", reinterpret_cast<void *>(MainProcBinMsgEntry)},
+ {"UpgradeMcu", "(Ljava/lang/String;[B)V", reinterpret_cast<void *>(UpgradeMcu)},
+ {"TextSpeakEnd", "(I)V", reinterpret_cast<void *>(TextSpeakEnd)},
+ {"BluetoothConnected", "(Ljava/lang/String;Ljava/lang/String;)V", reinterpret_cast<void *>(BluetoothConnected)},
+ {"BluetoothStatusChange", "(I)V", reinterpret_cast<void *>(BluetoothStatusChange)},
+ {"BluetoothDataComeIn", "([BI)V", reinterpret_cast<void *>(BluetoothDataComeIn)}
+};
+
+jint JNI_OnLoad(JavaVM *vm, void *reserved)
+{
+ sg_jvm = vm;
+
+ if (sg_jvm->GetEnv(reinterpret_cast<void **> (&jenv), JNI_VERSION_1_6) != JNI_OK) {
+ DEBUG("Env not got");
+ return JNI_ERR;
+ }
+
+ jclass clz = jenv->FindClass("com/anyun/exam/lib/RemoteService");
+ if (clz == NULL) {
+ DEBUG("鐩爣绫绘湭鎵惧埌");
+ return JNI_ERR;
+ }
+
+ if (jenv->RegisterNatives(clz, methods, LIBENC_ARRAY_ELEMS(methods))) {
+ DEBUG("methods not registered");
+ return JNI_ERR;
+ }
+
+ DEBUG("JNI_OnLoad");
+
+ return JNI_VERSION_1_6;
+}
+
+void JNI_OnUnload(JavaVM* vm, void* reserved)
+{
+ JNIEnv* env;
+
+ if (vm->GetEnv(reinterpret_cast<void **> (&env), JNI_VERSION_1_6) != JNI_OK) {
+ DEBUG("Env not got");
+ return;
+ }
+
+ jclass clz = env->FindClass("com/anyun/exam/lib/RemoteService");
+ if (clz == NULL) {
+ DEBUG("鐩爣绫绘湭鎵惧埌");
+ return;
+ }
+
+ env->UnregisterNatives(clz);
+
+ DEBUG("JNI_OnUnload");
+}
--
Gitblit v1.8.0