diff --git a/source/hal/include/data_acq.h b/source/hal/include/data_acq.h
new file mode 100644
index 0000000..965fbe5
--- /dev/null
+++ b/source/hal/include/data_acq.h
@@ -0,0 +1,52 @@
+/*
+ * 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 DATA_ACQ_H
+#define DATA_ACQ_H
+
+/**
+ * This file is the top level abstraction for the data acquisition module.
+ **/
+#include <stdint.h>
+
+/* Structure to encompass the data acquisition module and it's methods. */
+typedef struct data_acquisition_module {
+    int inited;                 /**< initialised or not. */
+    char system_name[8];        /**< name(s) of the channel in use. */
+    int (* system_init)(void);  /**< channel initialisation function. */
+
+    /* Function to go and check if there are any events that require handling. */
+    int (* get_input)(char *user_input, int size);
+} data_acq_module;
+
+/**
+ * @brief           Initialise the data acquisition channel: goes and
+ *                  sets the required channel up for usage.
+ * @param[in,out]   module  Pointer to a pre-allocated data
+ *                          acquisition structure object.
+ * @return          0 if successful, error code otherwise.
+ **/
+int data_acq_channel_init(data_acq_module *module);
+
+/**
+ * @brief           Releases the data acquisition channel.
+ * @param[in,out]   module  Pointer to a pre-allocated data
+ *                          acquisition structure object.
+ * @return          0 if successful, error code otherwise.
+ **/
+int data_acq_channel_release(data_acq_module *module);
+
+#endif /* DATA_ACQ_H */
diff --git a/source/hal/include/data_psn.h b/source/hal/include/data_psn.h
new file mode 100644
index 0000000..8c14c77
--- /dev/null
+++ b/source/hal/include/data_psn.h
@@ -0,0 +1,72 @@
+/*
+ * 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 DATA_PSN_H
+#define DATA_PSN_H
+
+/**
+ * This file is the top level abstraction for the data presentation module
+ **/
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+/* Structure to encompass the data presentation module and it's methods */
+typedef struct data_presentation_module {
+    int inited;                 /**< initialised or not */
+    char system_name[8];        /**< name of the system in use */
+    int (* system_init)(void);  /**< pointer to init function */
+
+    /** Pointer to the image presentation function */
+    int (* present_data_image)(uint8_t *data, const uint32_t width,
+        const uint32_t height, const uint32_t channels,
+        const uint32_t pos_x, const uint32_t pos_y,
+        const uint32_t downsample_factor);
+
+    /* Pointer to text presentation function */
+    int (* present_data_text)(const char *str, const size_t str_sz,
+        const uint32_t pos_x, const uint32_t pos_y,
+        const bool allow_multiple_lines);
+
+    /* Pointer to box presentation function */
+    int (* present_box)(const uint32_t pos_x, const uint32_t pos_y,
+        const uint32_t width, const uint32_t height, const uint16_t color);
+
+    /* Pointer to clear presentation function */
+    int (* clear)(const uint16_t color);
+
+    /* Pointer to set text color presentation function */
+    int (* set_text_color)(const uint16_t color);
+} data_psn_module;
+
+
+/**
+ * @brief           Initialises the data presentation system.
+ * @param[in,out]   module  Pointer to a pre-allocated data
+ *                          presentation structure object.
+ * @return          0 if successful, error code otherwise.
+ **/
+int data_psn_system_init(data_psn_module *module);
+
+/**
+ * @brief           Releases the data presentation system.
+ * @param[in,out]   module  Pointer to a pre-allocated data
+ *                          presentation structure object.
+ * @return          0 if successful, error code otherwise.
+ **/
+int data_psn_system_release(data_psn_module *module);
+
+#endif /* DATA_PSN_H */
diff --git a/source/hal/include/hal.h b/source/hal/include/hal.h
new file mode 100644
index 0000000..a192ea7
--- /dev/null
+++ b/source/hal/include/hal.h
@@ -0,0 +1,83 @@
+/*
+ * 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 */
+
+#include <inttypes.h>
+
+/* Structure to define a platform context to be used by the application */
+typedef struct hal_platform_context {
+    int inited;                         /**< initialised */
+    char plat_name[64];                 /**< 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 */
diff --git a/source/hal/include/hal_config.h b/source/hal/include/hal_config.h
new file mode 100644
index 0000000..ca32f4e
--- /dev/null
+++ b/source/hal/include/hal_config.h
@@ -0,0 +1,39 @@
+/*
+ * 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 HAL_CONFIG_H
+#define HAL_CONFIG_H
+
+/* This header provides some basic configuration for HAL */
+
+/* Platform definitions for the systems we expect to support */
+#define PLATFORM_CORTEX_M_BAREMETAL 1U
+#define PLATFORM_UNKNOWN_LINUX_OS   3U
+
+/* This should come from compile time definition */
+#ifndef PLATFORM_HAL
+    #define PLATFORM_HAL    PLATFORM_UNKNOWN_LINUX_OS    /* Default platform */
+#endif /* PLATFORM_HAL */
+
+#if ((PLATFORM_HAL) == PLATFORM_CORTEX_M_BAREMETAL)
+    #include "bsp.h"
+#endif
+
+#if !defined (DESIGN_NAME)
+    #define DESIGN_NAME   ("N/A")
+#endif /* !defined (DESIGN_NAME) */
+
+#endif /* HAL_CONFIG_H */
diff --git a/source/hal/include/timer.h b/source/hal/include/timer.h
new file mode 100644
index 0000000..56aad5b
--- /dev/null
+++ b/source/hal/include/timer.h
@@ -0,0 +1,71 @@
+/*
+ * 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 HAL_TIMER_H
+#define HAL_TIMER_H
+
+#include "hal_config.h"
+#include "platform_timer.h"
+
+/** Struct for describing the capabilities available for
+ * the timer provided by HAL */
+typedef struct _platform_timer_capability {
+    uint32_t npu_cycles:    1;
+    uint32_t cpu_cycles:    1;
+    uint32_t duration_ms:   1;
+    uint32_t duration_us:   1;
+} timer_capability;
+
+/* Structure to hold a platform specific timer implementation */
+typedef struct _platform_timer {
+    int inited;                 /**< initialised or not */
+    timer_capability cap;       /**< capability of this timer */
+
+    /* reset the timer */
+    void (* reset)(void);
+
+    /* Gets the current time counter. */
+    time_counter (* get_time_counter)(void);
+
+    /* Gets the duration in milliseconds. */
+    time_t (* get_duration_ms)(time_counter *start, time_counter *end);
+
+    /* Gets duration in microseconds. */
+    time_t (* get_duration_us)(time_counter *start, time_counter *end);
+
+    /* Gets difference in CPU cycle counts. */
+    uint64_t (* get_cpu_cycle_diff)(time_counter *start, time_counter *end);
+
+    /* Gets the difference in terms of cycle counts for collected pmu counters. */
+    int (* get_npu_cycles_diff)(time_counter *start, time_counter *end,
+                                uint64_t* pmu_counters_values, size_t size);
+
+    /* Wraps get_time_counter function with additional profiling
+     * initialisation, if required. */
+    time_counter (* start_profiling)(void);
+
+    /* Wraps get_time_counter function along with additional instructions when
+     * profiling ends, if required. */
+    time_counter (* stop_profiling)(void);
+
+} platform_timer;
+
+/**
+ * @brief   Initialise the timer available for the platform.
+ **/
+void init_timer(platform_timer *timer);
+
+#endif /* HAL_TIMER_H */
