68 lines
2.0 KiB
C++
68 lines
2.0 KiB
C++
/***************************************************************************
|
|
*
|
|
* Copyright 2015-2019 BES.
|
|
* All rights reserved. All unpublished rights reserved.
|
|
*
|
|
* No part of this work may be used or reproduced in any form or by any
|
|
* means, or stored in a database or retrieval system, without prior written
|
|
* permission of BES.
|
|
*
|
|
* Use of this work is governed by a license granted by BES.
|
|
* This work contains confidential and proprietary information of
|
|
* BES. which is protected by copyright, trade secret,
|
|
* trademark and other intellectual property rights.
|
|
*
|
|
****************************************************************************/
|
|
#include "app_overlay.h"
|
|
#include "cmsis_os.h"
|
|
#include "hal_location.h"
|
|
#include "hal_trace.h"
|
|
|
|
osMutexDef(app_overlay_mutex);
|
|
|
|
static osMutexId app_overlay_mutex_id = NULL;
|
|
static APP_OVERLAY_ID_T app_overlay_id = APP_OVERLAY_ID_QTY;
|
|
|
|
APP_OVERLAY_ID_T app_get_current_overlay(void) { return app_overlay_id; }
|
|
|
|
void app_overlay_select(enum APP_OVERLAY_ID_T id) {
|
|
#ifndef FPGA
|
|
TRACE(3, "%s id:%d:%d", __func__, id, app_overlay_id);
|
|
|
|
osMutexWait(app_overlay_mutex_id, osWaitForever);
|
|
if (app_overlay_id == APP_OVERLAY_ID_QTY) {
|
|
app_overlay_load(id);
|
|
} else if (app_overlay_id != APP_OVERLAY_ID_QTY) {
|
|
if (app_overlay_id != id) {
|
|
app_overlay_unload(app_overlay_id);
|
|
app_overlay_load(id);
|
|
}
|
|
}
|
|
app_overlay_id = id;
|
|
osMutexRelease(app_overlay_mutex_id);
|
|
#endif
|
|
}
|
|
|
|
void app_overlay_unloadall(void) {
|
|
osMutexWait(app_overlay_mutex_id, osWaitForever);
|
|
if (app_overlay_id != APP_OVERLAY_ID_QTY) {
|
|
app_overlay_unload(app_overlay_id);
|
|
}
|
|
app_overlay_id = APP_OVERLAY_ID_QTY;
|
|
osMutexRelease(app_overlay_mutex_id);
|
|
}
|
|
|
|
void app_overlay_open(void) {
|
|
if (app_overlay_mutex_id == NULL) {
|
|
app_overlay_mutex_id = osMutexCreate(osMutex(app_overlay_mutex));
|
|
}
|
|
}
|
|
|
|
void app_overlay_close(void) {
|
|
app_overlay_unloadall();
|
|
if (app_overlay_mutex_id != NULL) {
|
|
osMutexDelete(app_overlay_mutex_id);
|
|
app_overlay_mutex_id = NULL;
|
|
}
|
|
}
|