Files
2026-09-22 09:38:26 +08:00

80 lines
2.5 KiB
C
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Copyright (c) 2020 by UNISOC Technology(Shanghai), Inc. ALL RIGHTS RESERVED.
*
* These coded instructions, statements, and computer programs are the
* copyrighted works and confidential proprietary information of
* UNISOC Technology(Shanghai), Inc. They may not be modified, copied, reproduced,
* distributed, or disclosed to third parties in any manner, medium, or form,
* in whole or in part, without the prior written consent of UNISOC Technology(Shanghai), Inc.
*/
#define _GNU_SOURCE
#include <pthread.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "gnss-ota.h"
#include "pc_request.h"
#include "gpsd_report.h"
bool loop = true;
//set loop false to stop thread while abnormal signal arrived
void sig_handler(int sig_number)
{
if((SIGTERM == sig_number) || (SIGKILL == sig_number) || (SIGINT == sig_number))
{
loop = false;
LOGD("%s received signal %d, loop be set false.", __func__, sig_number);
}else{
LOGD("%s received signal %d.", __func__, sig_number);
}
}
int main()
{
LOGD("gnss-ota booting...");
if (signal(SIGINT, sig_handler) == SIG_ERR) {
LOGE("%s can not catch signal", __func__);
}
//use for main thread holding there
pthread_mutex_t main_mutex;
pthread_cond_t main_cond;
pthread_mutex_init(&main_mutex, NULL);
pthread_cond_init(&main_cond, NULL);
//thread wait for pc request
pthread_t pc_request_handler_tid;
if ((pthread_create(&pc_request_handler_tid, NULL, pc_request_handler, NULL)) != 0) {
LOGE("create pc_request_handler thread fail");
return -1;
} else {
LOGD("create pc_request_handler thread ok, tid=%d", pc_request_handler_tid);
}
pthread_detach(pc_request_handler_tid); //auto recyle
//thread wait for pc request
pthread_t gpsd_report_handler_tid;
if ((pthread_create(&gpsd_report_handler_tid, NULL, gpsd_report_handler, NULL)) != 0) {
LOGE("create gpsd_report_handler thread fail");
return -1;
} else {
LOGD("create gpsd_report_handler thread ok, tid=%d", gpsd_report_handler_tid);
}
pthread_detach(gpsd_report_handler_tid); //auto recyle
while(loop){
pthread_mutex_lock(&main_mutex);
LOGD("unisoc-gnss-ota pthread_cond_wait here");
pthread_cond_wait(&main_cond, &main_mutex);
pthread_mutex_unlock(&main_mutex);
}
LOGE("gnss-ota exiting...");
return 0;
}