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