From 6e0f29b08a040d14576d7053c1206a8439936570 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 24 十一月 2020 14:18:03 +0800
Subject: [PATCH] 坐标
---
lib/src/main/cpp/mcu/mcu_if.cpp | 85 ++++++++++++++++++++++++++++++++----------
1 files changed, 65 insertions(+), 20 deletions(-)
diff --git a/lib/src/main/cpp/mcu/mcu_if.cpp b/lib/src/main/cpp/mcu/mcu_if.cpp
index 492cd4d..080f233 100644
--- a/lib/src/main/cpp/mcu/mcu_if.cpp
+++ b/lib/src/main/cpp/mcu/mcu_if.cpp
@@ -12,6 +12,8 @@
#include "../jni_log.h"
#include "../common/serial_port.h"
#include "../rtk_platform/platform.h"
+#include "../rtk_module/parse_gps.h"
+#include "../native-lib.h"
#define DEBUG(fmt, args...) LOGD("<mcu_if> <%s>: " fmt, __func__, ##args)
@@ -46,6 +48,8 @@
#define ID_CM_READ_RFCARD 0x0009
#define ID_MC_RFCARD_RSP 0x8009
#define ID_CM_SHUTDOWN 0x0020
+#define ID_MC_GNSS_DATA 0x800A
+#define ID_CM_SINAN_CMD_DATA 0x000B
static parse_status_t parse_status;
@@ -65,15 +69,27 @@
const int DFU_MAX_TRY = 3;
const int DFU_FILE_BLOCK_SIZE = 896;
+static int (*WriteMcu)(int id, const void *buf, int len);
+
+static int WriteBluetooth(int id, const void *buf, int len);
static void *UartThread1(void *p);
static void ParseMcuTimeout(union sigval sig);
-static void McuCommandEntry(uint16_t id, const uint8_t *data, int lenth);
+static void McuCommandEntry(uint16_t id, const uint8_t *data, int length);
static void SendDfuFile(int fileLen, int sentLen, int blockLen, const uint8_t *data);
static void GoNextDfuLater(union sigval sig);
static void GoNextDfu(void);
static void ReadCardTimeout(union sigval sig);
+
+void McuCommModeSel(int mode)
+{
+ if (mode == 0) {
+ WriteMcu = WriteSerialPort;
+ } else {
+ WriteMcu = WriteBluetooth;
+ }
+}
void ParseMcuInit(void)
{
@@ -83,8 +99,15 @@
parse_status = SYNC_HEAD_ONE;
AppTimer_delete(ParseMcuTimeout);
- SendMcuCommand(ID_CM_APP_BOOT, NULL, 0);
+// SendMcuCommand(ID_CM_APP_BOOT, NULL, 0);
}
+
+static int WriteBluetooth(int id, const void *buf, int len)
+{
+ SendToBluetooth((uint8_t *)buf, len);
+ return len;
+}
+
#define PARSE_BUFF_SIZE 4096
@@ -251,13 +274,15 @@
buffer[x++] = HI_UINT16(crc16);
buffer[x++] = LO_UINT16(crc16);
- WriteSerialPort(MCU_UART, buffer, x);
+ WriteMcu(MCU_UART, buffer, x);
}
void ConfigMCU(void)
{
+ McuCommModeSel(1);
+
// TODO
- static struct serial_config serialConfig;
+ /* static struct serial_config serialConfig;
strcpy(serialConfig.name, "/dev/ttyHSL1");
serialConfig.baud = 115200;
@@ -270,7 +295,7 @@
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
- pthread_create(&pid, &attr, UartThread1, &serialConfig);
+ pthread_create(&pid, &attr, UartThread1, &serialConfig);*/
}
void SendRtkToMcu(const uint8_t *data, int length)
@@ -296,20 +321,23 @@
AppTimer_add(sendrtk, D_SEC(1));
}
-static void McuCommandEntry(uint16_t id, const uint8_t *data, int lenth)
+static uint8_t GnssBuf[PARSE_BUFF_SIZE];
+static int GnssBufLen = 0;
+
+static void McuCommandEntry(uint16_t id, const uint8_t *data, int length)
{
static int ii = 0;
switch (id) {
case ID_MC_MCU_BOOT:
DEBUG("MCU BOOT");
- if (lenth == 8) {
- PlatformStatusChanged(CAN_UPDATE_EVT, data, lenth);
+ if (length == 8) {
+ PlatformStatusChanged(CAN_UPDATE_EVT, data, length);
}
break;
case ID_MC_DFU_RSP:
- DEBUG("ID_MC_DFU_RSP %d len %d", data[0], lenth);
+ DEBUG("ID_MC_DFU_RSP %d len %d", data[0], length);
if (data[0] == 0) {
// 绗竴鍖呬紶杈撴垚鍔�
@@ -329,12 +357,12 @@
int total = dfuFileLength / DFU_FILE_BLOCK_SIZE + ((dfuFileLength % DFU_FILE_BLOCK_SIZE)?1:0);
int a = 0, b = 0;
- for (int i = 1; i < lenth; ++i) {
+ for (int i = 1; i < length; ++i) {
for (int j = 0; j < 8; ++j) {
if ((data[i] & BV(j))) b++;
a++;
if (a == total) {
- i = lenth;
+ i = length;
break;
}
}
@@ -343,7 +371,7 @@
DEBUG("BITMAP total %d succ %d", total, b);
//memset(dfuFileBitmap, 0, sizeof(dfuFileBitmap));
- memcpy(dfuFileBitmap, data + 1, lenth - 1);
+ memcpy(dfuFileBitmap, data + 1, length - 1);
if (total % 8) {
dfuFileBitmap[total/8] &= ~BV((total%8) - 1);
@@ -362,16 +390,16 @@
case ID_MC_MCU_DFU_RSP:
break;
case ID_MC_CAR_INFO2:
-// DEBUG("ID_MC_CAR_INFO2 %d", lenth);
- if (lenth > 0) {
- PlatformStatusChanged(CAR_SENSOR_UPDATE_EVT, data, lenth);
+// DEBUG("ID_MC_CAR_INFO2 %d", length);
+ if (length > 0) {
+ PlatformStatusChanged(CAR_SENSOR_UPDATE_EVT, data, length);
}
break;
case ID_MC_CAR_INFO: {
-// DEBUG("ID_MC_CAR_INFO %d", lenth);
+// DEBUG("ID_MC_CAR_INFO %d", length);
- if (lenth > 0)
- PlatformStatusChanged(MCU_UPDATE_EVT, data, lenth);
+ if (length > 0)
+ PlatformStatusChanged(MCU_UPDATE_EVT, data, length);
break;
}
case ID_MC_RTK_DATA:
@@ -381,9 +409,26 @@
DEBUG("ID_MC_RFCARD_RSP");
AppTimer_delete(ReadCardTimeout);
- if (lenth > 0)
- PlatformStatusChanged(CARD_UPDATE_EVT, data, lenth);
+ if (length > 0)
+ PlatformStatusChanged(CARD_UPDATE_EVT, data, length);
break;
+ case ID_MC_GNSS_DATA: {
+ length = (length > PARSE_BUFF_SIZE - GnssBufLen) ? (PARSE_BUFF_SIZE - GnssBufLen) : length;
+
+ memcpy(GnssBuf + GnssBufLen, data, length);
+ GnssBufLen += length;
+ if (GnssBufLen > 0) {
+ const uint8_t *ptr = parseGPS(GnssBuf, GnssBuf + GnssBufLen);
+ if (ptr != GnssBuf) {
+ memcpy(GnssBuf, ptr, GnssBufLen - (ptr - GnssBuf));
+ GnssBufLen -= ptr - GnssBuf;
+ } else if (GnssBufLen == PARSE_BUFF_SIZE) { //濉弧浜嗭紝涓旀病鏈変竴涓猏r锛岄兘鎶涘純
+ DEBUG("Parse GPS error");
+ GnssBufLen = 0;
+ }
+ }
+ break;
+ }
default:
break;
}
--
Gitblit v1.8.0