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/rtk_platform/parse_net.cpp | 61 ++++++++++--------------------
1 files changed, 20 insertions(+), 41 deletions(-)
diff --git a/lib/src/main/cpp/rtk_platform/parse_net.cpp b/lib/src/main/cpp/rtk_platform/parse_net.cpp
index afe75aa..2d0fa15 100644
--- a/lib/src/main/cpp/rtk_platform/parse_net.cpp
+++ b/lib/src/main/cpp/rtk_platform/parse_net.cpp
@@ -6,7 +6,7 @@
#include <cstdio>
#include <cstring>
#include <malloc.h>
-#include <pthread.h>
+#include <mutex>
#include <semaphore.h>
#include "../jni_log.h"
#include "../defs.h"
@@ -125,10 +125,10 @@
}largeMessage[DATA_ACCESS_END];
static uint8_t PhoneNumber[PHONE_NUM_SIZE] = {0};
-static pthread_mutex_t seq_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t tx_queue_mutex = PTHREAD_MUTEX_INITIALIZER;
+static mutex seq_mutex;
+static mutex tx_queue_mutex;
-static void ParseTimeout(union sigval sig);
+static void ParseTimeout(apptimer_var_t val);
static uint32_t GetResendTimeout(uint8_t access, uint8_t curr_resend_cnt, uint32_t base_time);
static uint16_t GetMessageSeq(uint8_t access);
static void PacketEntry(uint8_t access, const uint8_t *data, uint16_t length);
@@ -148,8 +148,8 @@
static void ResendItemTimeout(message_tx_table_t **head, uint32_t tm);
static uint32_t GetResentTimeoutTxQueue(message_tx_table_t **head);
-static void *TxQueueMgrThread(void *p);
-static void TriggerResendTxQueue(union sigval sig);
+static void TxQueueMgrThread(void);
+static void TriggerResendTxQueue(apptimer_var_t val);
/*
7E 80 89 00 40 87 00 00 01 37 20 20 55 68 00 76 00 9A 41 11 00 22 00 77 00 00 00 00 00 00 00 00
@@ -225,11 +225,8 @@
}
}
-static void ParseTimeout(union sigval sig) {
- AppTimer_delete(ParseTimeout);
- packet_parse_status[sig.sival_int] = PKT_SYNC_HEAD;
-
- DEBUG("ParseTimeout %d", sig.sival_int);
+static void ParseTimeout(apptimer_var_t val) {
+ packet_parse_status[val.var1] = PKT_SYNC_HEAD;
}
static uint32_t GetResendTimeout(uint8_t access, uint8_t curr_resend_cnt, uint32_t base_time)
@@ -252,10 +249,10 @@
static uint16_t TxSeq[DATA_ACCESS_END] = {0};
uint16_t seq;
- pthread_mutex_lock(&seq_mutex);
+ lock_guard<std::mutex> lock(seq_mutex);
+
seq = TxSeq[access];
TxSeq[access]++;
- pthread_mutex_unlock(&seq_mutex);
return seq;
}
@@ -534,7 +531,7 @@
DEBUG("AddTxQueue id = 0x%X, seq = %d, len = %d", id, seq, length);
- pthread_mutex_lock(&tx_queue_mutex);
+ lock_guard<mutex> lock(tx_queue_mutex);
// If the item is exist, skip it
if (FindTxQueue(head, id, seq) != NULL) {
@@ -595,7 +592,6 @@
}
ATQ_END:
- pthread_mutex_unlock(&tx_queue_mutex);
uint32_t tim = GetResentTimeoutTxQueue(&message_tx_table_head[DATA_ACCESS_PLATFORM]);
@@ -614,7 +610,7 @@
message_tx_table_t *ptr = *head;
- pthread_mutex_lock(&tx_queue_mutex);
+ lock_guard<mutex> lock(tx_queue_mutex);
while ( ptr != NULL ) {
if (ptr->id == id && ptr->seq == seq) {
// delete
@@ -642,7 +638,6 @@
ptr = ptr->next;
}
}
- pthread_mutex_unlock(&tx_queue_mutex);
}
static void RemoveTxQueue(message_tx_table_t **head, uint16_t id)
@@ -652,7 +647,7 @@
message_tx_table_t *ptr = *head;
- pthread_mutex_lock(&tx_queue_mutex);
+ lock_guard<mutex> lock(tx_queue_mutex);
while ( ptr != NULL ) {
if (ptr->id == id) {
// delete
@@ -681,7 +676,6 @@
ptr = ptr->next;
}
}
- pthread_mutex_unlock(&tx_queue_mutex);
}
static void RemoveAllTxQueue(message_tx_table_t **head)
@@ -690,13 +684,12 @@
return;
}
- pthread_mutex_lock(&tx_queue_mutex);
+ lock_guard<mutex> lock(tx_queue_mutex);
for (message_tx_table_t *ptr = *head, *next; ptr != NULL; ptr = next) {
next = ptr->next;
free(ptr);
}
*head = NULL;
- pthread_mutex_unlock(&tx_queue_mutex);
}
static int SendQueue(message_tx_table_t *item)
@@ -704,11 +697,7 @@
DEBUG("SendQueue id = 0x%04X, seq = %d, length = %d", item->id, item->seq, item->length);
if (item != NULL) {
if (item->access == DATA_ACCESS_MCU) {
- if (WriteSerialPort(GetSerialPort(UART_1), item->data, item->length) != item->length) {
- item->time_out = 100 + AppTimer_GetTickCount();
- LOGE("鍙戝線涓插彛鍑洪敊浜�");
-// return -1;
- }
+
} else if(item->access == DATA_ACCESS_PLATFORM) {
if (WritePlatform(item->data, item->length) != item->length) {
item->time_out = D_SEC(3) + AppTimer_GetTickCount();
@@ -769,8 +758,8 @@
// delete
DEBUG("Delete item %d", ptr->curr_cnt);
message_tx_table_t *temp = ptr;
+ lock_guard<mutex> lock(tx_queue_mutex);
- pthread_mutex_lock(&tx_queue_mutex);
if (ptr == *head) {
if (ptr->next == NULL) {
DEBUG("****************** Delete all 2 ******************");
@@ -787,7 +776,6 @@
ptr->prev->next = ptr->next;
ptr = ptr->next;
}
- pthread_mutex_unlock(&tx_queue_mutex);
free(temp);
} else {
@@ -807,7 +795,7 @@
if (head == NULL)
return resentTime;
- pthread_mutex_lock(&tx_queue_mutex);
+ lock_guard<mutex> lock(tx_queue_mutex);
message_tx_table_t *ptr = *head;
while ( ptr != NULL ) {
@@ -819,14 +807,13 @@
}
ptr = ptr->next;
}
- pthread_mutex_unlock(&tx_queue_mutex);
return resentTime;
}
static sem_t sem_tx_mgr;
-static void *TxQueueMgrThread(void *p) {
+static void TxQueueMgrThread(void) {
while (true) {
sem_wait(&sem_tx_mgr);
uint32_t tim = AppTimer_GetTickCount();
@@ -844,11 +831,9 @@
AppTimer_add(TriggerResendTxQueue, tim);
}
}
- pthread_exit(NULL);
}
-static void TriggerResendTxQueue(union sigval sig) {
- AppTimer_delete(TriggerResendTxQueue);
+static void TriggerResendTxQueue(apptimer_var_t val) {
sem_post(&sem_tx_mgr);
}
@@ -864,15 +849,9 @@
PhoneNumber[6] = 0x00;
PhoneNumber[7] = 0x02;*/
- pthread_mutex_init(&seq_mutex, NULL);
- pthread_mutex_init(&tx_queue_mutex, NULL);
sem_init(&sem_tx_mgr, 0, 0);
- pthread_t pid;
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
- pthread_create(&pid, &attr, TxQueueMgrThread, NULL);
+ std::thread(TxQueueMgrThread).detach();
}
void SetPlatformTxPhoneNum(const char *phone)
--
Gitblit v1.8.0