/*
 * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#ifndef PLATFORM_HAL_H
#define PLATFORM_HAL_H

/**
 * This file should present a C API for the main application logic to use
 * and be indifferent to the lower level platform. In addition to this it
 * will also need to be aware of the API exposed by data acquisition and
 * data presentation modules.
 */

#ifdef __cplusplus
extern "C" {
#endif

#include "platform_drivers.h"   /* Platform drivers */
#include "hal_pmu.h"              /* Timer/profiler API */
#include "hal_lcd.h"            /* LCD functions */

#include <inttypes.h>
#include <stdbool.h>

/**
 * @brief       Initialise the HAL platform. This will go and initialise all the
 *              modules on the platform the application requires to run.
 * @return      True if successful, false otherwise.
 **/
bool hal_platform_init(void);


/**
 * @brief       Release the HAL platform. This should release resources acquired.
 *                          platform structure.
 **/
void hal_platform_release(void);

/**
 * @brief       Gets user input from the stdin interface.
 * @param[out]  user_input  Pointer to a buffer where the input will be stored.
 * @param[in]   size        Buffer size in bytes.
 * @return      True if successful, false otherwise.
 */
bool hal_get_user_input(char* user_input, int size);

#ifdef __cplusplus
}
#endif

#endif /* PLATFORM_HAL_H */
