summaryrefslogtreecommitdiff
path: root/source/application/hal/include/hal.h
blob: 26ba1e3c55afafdaf1a73a2d494fc43c7882464d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
 * Copyright (c) 2021 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.
 */
#include "hal_config.h"

#ifdef __cplusplus
extern "C" {
#endif

#include "data_acq.h"                   /* Data acquisition abstraction */
#include "data_psn.h"                   /* Data presentation abstraction */
#include "timer.h"                      /* Timer/profiler API */

/* Structure to define a platform context to be used by the application */
typedef struct hal_platform_context {
    int inited;                         /**< initialised */
    char plat_name[16];                 /**< name of this platform */
    data_acq_module * data_acq;         /**< data acquisition module pointer */
    data_psn_module * data_psn;         /**< data presentation module pointer */
    platform_timer *  timer;            /**< timer */
    int (* platform_init)();            /**< pointer to platform initialisation function */
    void (* platform_release)();        /**< pointer to platform release function */
} hal_platform;

/**
 * @brief           Initialise the HAL structure based on compile time config. This
 *                  should be called before any other function in this API.
 * @param[in,out]   platform    Pointer to a pre-allocated platform struct.
 * @param[in,out]   data_acq    Pointer to a pre-allocated data acquisition module.
 * @param[in,out]   data_psn    Pointer to a pre-allocated data presentation module.
 * @param[in,out]   timer       Pointer to a pre-allocated timer module.
 * @return          0 if successful, error code otherwise.
 **/
int hal_init(hal_platform *platform, data_acq_module *data_acq,
    data_psn_module *data_psn, platform_timer *timer);


/**
 * @brief       Initialise the HAL platform. This will go and initialise all the
 *              modules on the platform the application requires to run.
 * @param[in]   platform    Pointer to a pre-allocated and initialised
 *                          platform structure.
 * @return      0 if successful, error code otherwise.
 **/
int hal_platform_init(hal_platform *platform);


/**
 * @brief       Release the HAL platform. This should release resources acquired.
 * @param[in]   platform    pointer to a pre-allocated and initialised
 *                          platform structure.
 **/
void hal_platform_release(hal_platform *platform);

#ifdef __cplusplus
}
#endif

#endif /* PLATFORM_HAL_H */