pinebuds/services/overlay/app_overlay.cpp

77 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 "cmsis_os.h"
#include "app_overlay.h"
#include "hal_trace.h"
#include "hal_location.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;
}
}