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