/***************************************************************************
 *
 * 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;
	}
}


