From 22f24e6a821cd69220840821ce10e5eca9f2043f Mon Sep 17 00:00:00 2001 From: Andrey Perminov Date: Wed, 22 Apr 2020 15:28:34 -0700 Subject: [PATCH] Code refactoring Moved all HW-dependent function definitions to bmlite_hal.h Moved all HW-dependent function implementations to hal_*.c Change-Id: I5f592fcffab1ef4bb815f90b968be638d33d0a5d --- .vscode/settings.json | 1 + BMLite_example/inc/bmlite_hal.h | 89 +++++++++++++++++++ BMLite_example/inc/platform.h | 29 +----- BMLite_example/src/main.c | 28 +++--- {HAL_Driver => BMLite_example}/src/platform.c | 47 +++------- HAL_Driver/inc/bmlite.h | 13 --- HAL_Driver/inc/btns_leds.h | 14 --- HAL_Driver/inc/platform_spi.h | 16 ---- HAL_Driver/src/{board_hal.c => hal_board.c} | 31 +++---- HAL_Driver/src/{board_leds.c => hal_leds.c} | 4 +- HAL_Driver/src/{platform_spi.c => hal_spi.c} | 7 +- .../{platform_timebase.c => hal_timebase.c} | 6 +- 12 files changed, 142 insertions(+), 143 deletions(-) create mode 100755 BMLite_example/inc/bmlite_hal.h rename {HAL_Driver => BMLite_example}/src/platform.c (59%) delete mode 100755 HAL_Driver/inc/bmlite.h delete mode 100644 HAL_Driver/inc/btns_leds.h delete mode 100755 HAL_Driver/inc/platform_spi.h rename HAL_Driver/src/{board_hal.c => hal_board.c} (71%) rename HAL_Driver/src/{board_leds.c => hal_leds.c} (94%) rename HAL_Driver/src/{platform_spi.c => hal_spi.c} (94%) rename HAL_Driver/src/{platform_timebase.c => hal_timebase.c} (95%) diff --git a/.vscode/settings.json b/.vscode/settings.json index bc10cf9..d1e5ba3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,7 @@ "C_Cpp.default.includePath": [ "${workspaceFolder}/BMLite_example/inc", "${workspaceFolder}/hcp/inc", + "${workspaceFolder}/CMSIS/Include", "${workspaceFolder}/HAL_Driver/inc", "${workspaceFolder}/HAL_Driver/sdk", "${workspaceFolder}/HAL_Driver/sdk/components", diff --git a/BMLite_example/inc/bmlite_hal.h b/BMLite_example/inc/bmlite_hal.h new file mode 100755 index 0000000..990a8d8 --- /dev/null +++ b/BMLite_example/inc/bmlite_hal.h @@ -0,0 +1,89 @@ +/** + * @file bmlite.h + * @brief BM-Lite HAL functions. + * + * All functions must be implemented in order to support BM-Lite on a Board + */ + +#ifndef BMLITE_H +#define BMLITE_H + +#include "fpc_bep_types.h" +#include "platform.h" + +/* + * @brief Board initialization + * @param[in] SPI CLK speed + */ + +void hal_board_init(uint32_t speed_hz); + +/* + * @brief Control BM-Lite Reset pin + * @param[in] True - Activate RESET + * False - Deactivate RESET + */ +void hal_bmlite_reset(bool state); + +/* + * @brief Init SPI interface + * @param[in] SPI CLK speed + */ +void hal_bmlite_spi_init(uint32_t speed_hz); + +/* + * @brief SPI write-read + * @param[in] Write buffer + * @param[in] Read buffer + * @param[in] Size + * @param[in] Leave CS asserted + * @return ::fpc_bep_result_t + */ +fpc_bep_result_t hal_bmlite_spi_write_read(uint8_t *write, uint8_t *read, size_t size, + bool leave_cs_asserted); + +/* + * @brief Check if BM-Lite IRQ pin is set + * @return ::bool + */ +bool hal_bmlite_get_status(void); + +/** + * @brief Initializes timebase. Starts system tick counter. + */ +void hal_timebase_init(void); + +/** + * @brief Reads the system tick counter. + * + * @return Tick count since hal_timebase_init() call. [ms] + */ +uint32_t hal_timebase_get_tick(void); + +/** + * @brief Busy wait. + * + * @param[in] ms Time to wait [ms]. + * 0 => return immediately + * 1 => wait at least 1ms etc. + */ +void hal_timebase_busy_wait(uint32_t ms); + +/* + * Optional functions for Buttons & Leds control + */ + +/* + * @brief Get button press time (msec) + * @return ::uint32_t + */ +uint32_t hal_get_button_press_time(); + +/* + * @brief Set LED(s) status + * @param[in] Status + */ +void hal_set_leds(uint8_t status); + + +#endif /* BMLITE_H */ diff --git a/BMLite_example/inc/platform.h b/BMLite_example/inc/platform.h index db4ac05..83bfbb7 100644 --- a/BMLite_example/inc/platform.h +++ b/BMLite_example/inc/platform.h @@ -27,6 +27,7 @@ #include #include "fpc_com_result.h" +#include "bmlite_hal.h" /** * @brief LED status. @@ -80,34 +81,6 @@ fpc_com_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32 fpc_com_result_t platform_bmlite_receive(uint16_t size, uint8_t *data, uint32_t timeout, void *session); -/** - * @brief Initializes timebase. Starts system tick counter. - */ -void platform_timebase_init(void); - -/** - * @brief Reads the system tick counter. - * - * @return Tick count since platform_timebase_init() call. [ms] - */ -uint32_t platform_timebase_get_tick(void); - -/** - * @brief Busy wait. - * - * @param[in] ms Time to wait [ms]. - * 0 => return immediately - * 1 => wait at least 1ms etc. - */ -void platform_timebase_busy_wait(uint32_t ms); - -/** - * @brief Get time in micro seconds - * - * @return time in us. - */ -uint32_t platform_get_time(void); - /** * @brief Stops execution if a debug interface is attached. */ diff --git a/BMLite_example/src/main.c b/BMLite_example/src/main.c index 9e3d40f..327bf95 100644 --- a/BMLite_example/src/main.c +++ b/BMLite_example/src/main.c @@ -35,16 +35,16 @@ void bmlite_on_error(bmlite_error_t error, int32_t value) { if(value != FPC_BEP_RESULT_TIMEOUT) { platform_set_led(3); - platform_timebase_busy_wait(500); + hal_timebase_busy_wait(500); platform_set_led(0); - platform_timebase_busy_wait(500); + hal_timebase_busy_wait(500); platform_set_led(3); - platform_timebase_busy_wait(500); + hal_timebase_busy_wait(500); platform_set_led(0); - platform_timebase_busy_wait(500); + hal_timebase_busy_wait(500); } else { platform_set_led(3); - platform_timebase_busy_wait(100); + hal_timebase_busy_wait(100); platform_set_led(0); } } @@ -55,19 +55,19 @@ void bmlite_on_error(bmlite_error_t error, int32_t value) void bmlite_on_start_enroll() { platform_set_led(1); - platform_timebase_busy_wait(500); + hal_timebase_busy_wait(500); platform_set_led(2); - platform_timebase_busy_wait(500); + hal_timebase_busy_wait(500); } void bmlite_on_finish_enroll() { platform_set_led(1); - platform_timebase_busy_wait(100); + hal_timebase_busy_wait(100); platform_set_led(0); - platform_timebase_busy_wait(100); + hal_timebase_busy_wait(100); platform_set_led(1); - platform_timebase_busy_wait(100); + hal_timebase_busy_wait(100); platform_set_led(0); } @@ -96,9 +96,7 @@ int main (int argc, char **argv) uint16_t size[2] = { 256, 256 }; fpc_com_chain_t hcp_chain; - if(!platform_init(baudrate)) { - platform_halt_if_debug(); - } + platform_init(baudrate); init_com_chain(&hcp_chain, buffer, size, NULL); hcp_chain.channel = 1; @@ -127,7 +125,7 @@ int main (int argc, char **argv) } else { // Erase All templates platform_set_led(BMLITE_LED_STATUS_DELETE_TEMPLATES); - platform_timebase_busy_wait(500); + hal_timebase_busy_wait(500); res = bep_delete_template(&hcp_chain, REMOVE_ID_ALL_TEMPLATES); } res = bep_identify_finger(&hcp_chain, &template_id, &match); @@ -138,7 +136,7 @@ int main (int argc, char **argv) } else { platform_set_led(BMLITE_LED_STATUS_NOMATCH); } - platform_timebase_busy_wait(500); + hal_timebase_busy_wait(500); } } } diff --git a/HAL_Driver/src/platform.c b/BMLite_example/src/platform.c similarity index 59% rename from HAL_Driver/src/platform.c rename to BMLite_example/src/platform.c index a5bcad8..04112fd 100644 --- a/HAL_Driver/src/platform.c +++ b/BMLite_example/src/platform.c @@ -22,32 +22,23 @@ #include "fpc_com_result.h" #include "platform.h" -#include "bmlite.h" -#include "boards.h" -#include "platform_spi.h" -#include "btns_leds.h" +#include "bmlite_hal.h" bool platform_init(uint32_t speed_hz) { - nordic_board_init(4000000); - platform_timebase_init(); - bsp_board_init(BSP_INIT_LEDS | BSP_INIT_BUTTONS); + hal_board_init(4000000); + hal_timebase_init(); platform_bmlite_reset(); return true; } -uint32_t platform_get_time(void) -{ - return platform_timebase_get_tick(); -} - void platform_bmlite_reset(void) { - nordic_bmlite_reset(true); - platform_timebase_busy_wait(100); - nordic_bmlite_reset(false); - platform_timebase_busy_wait(100); + hal_bmlite_reset(true); + hal_timebase_busy_wait(100); + hal_bmlite_reset(false); + hal_timebase_busy_wait(100); } fpc_com_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32_t timeout, @@ -55,38 +46,26 @@ fpc_com_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32 { uint8_t buff[size]; - return nordic_bmlite_spi_write_read((uint8_t *)data, buff, size, false); + return hal_bmlite_spi_write_read((uint8_t *)data, buff, size, false); } fpc_com_result_t platform_bmlite_receive(uint16_t size, uint8_t *data, uint32_t timeout, void *session) { - volatile uint32_t start_time = platform_get_time(); + volatile uint32_t start_time = hal_timebase_get_tick(); volatile uint32_t curr_time = start_time; - while (!nordic_bmlite_get_status() && - (curr_time = platform_get_time()) - start_time < timeout) { + while (!hal_bmlite_get_status() && + (curr_time = hal_timebase_get_tick()) - start_time < timeout) { } if(curr_time - start_time >= timeout) { return FPC_COM_RESULT_TIMEOUT; } uint8_t buff[size]; - return nordic_bmlite_spi_write_read(buff, data, size, false); -} - -void platform_halt_if_debug(void) -{ - // Stop here if debugger is attached. - __BKPT(0xFC); -} - -void platform_sw_reset(void) -{ - NVIC_SystemReset(); - while(1); + return hal_bmlite_spi_write_read(buff, data, size, false); } void platform_set_led(platform_led_status_t color) { - board_set_leds(color); + hal_set_leds(color); } diff --git a/HAL_Driver/inc/bmlite.h b/HAL_Driver/inc/bmlite.h deleted file mode 100755 index c4a97e4..0000000 --- a/HAL_Driver/inc/bmlite.h +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @file bmlite.h - * @brief BM-Lite control functions. - */ - -#ifndef BMLITE_H -#define BMLITE_H - -bool nordic_bmlite_get_status(void); -void nordic_board_init(uint32_t speed_hz); -void nordic_bmlite_reset(bool state); - -#endif /* BMLITE_H */ diff --git a/HAL_Driver/inc/btns_leds.h b/HAL_Driver/inc/btns_leds.h deleted file mode 100644 index f727d6b..0000000 --- a/HAL_Driver/inc/btns_leds.h +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @file btns_leds.h - * @brief Buttons and LEDs control functions - */ - -#ifndef BTNS_LEDS_H -#define BTNS_LEDS_H - -#include "platform.h" - -void board_set_leds(platform_led_status_t color); -uint32_t board_get_button_press_time(); - -#endif diff --git a/HAL_Driver/inc/platform_spi.h b/HAL_Driver/inc/platform_spi.h deleted file mode 100755 index 62175cd..0000000 --- a/HAL_Driver/inc/platform_spi.h +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @file platform_spi.h - * @brief Platform SPI functions. - */ - -#ifndef PLATFORM_SPI_H -#define PLATFORM_SPI_H - -#include "fpc_bep_types.h" - -fpc_bep_result_t nordic_bmlite_spi_write_read(uint8_t *write, uint8_t *read, size_t size, - bool leave_cs_asserted); - -void nordic_bmlite_spi_init(uint32_t speed_hz); - -#endif /* PLATFORM_SPI_H */ diff --git a/HAL_Driver/src/board_hal.c b/HAL_Driver/src/hal_board.c similarity index 71% rename from HAL_Driver/src/board_hal.c rename to HAL_Driver/src/hal_board.c index 4808b9a..09562dd 100755 --- a/HAL_Driver/src/board_hal.c +++ b/HAL_Driver/src/hal_board.c @@ -15,7 +15,7 @@ */ /** - * @file board_hal.c + * @file hal_board.c * @brief Board Specific functions */ @@ -26,17 +26,16 @@ #include "nrf_gpiote.h" #include "nrf_drv_gpiote.h" -#include "bmlite.h" -#include "platform_spi.h" +#include "bmlite_hal.h" -#define FPC_PIN_RESET ARDUINO_2_PIN -#define FPC_PIN_INTERRUPT ARDUINO_A2_PIN +#define BMLITE_PIN_RESET ARDUINO_2_PIN +#define BMLITE_PIN_STATUS ARDUINO_A2_PIN static volatile bool sensor_interrupt = false; static void nordic_bmlite_gpio_init (void); -void nordic_board_init(uint32_t speed_hz) +void hal_board_init(uint32_t speed_hz) { if (NRF_UICR->REGOUT0 != UICR_REGOUT0_VOUT_3V3) @@ -51,21 +50,23 @@ void nordic_board_init(uint32_t speed_hz) NRF_USBD->ENABLE = 1; nordic_bmlite_gpio_init(); - nordic_bmlite_spi_init(speed_hz); + hal_bmlite_spi_init(speed_hz); + bsp_board_init(BSP_INIT_LEDS | BSP_INIT_BUTTONS); + } -void nordic_bmlite_reset(bool state) +void hal_bmlite_reset(bool state) { if(!state) { - nrf_drv_gpiote_out_set(FPC_PIN_RESET); + nrf_drv_gpiote_out_set(BMLITE_PIN_RESET); } else { - nrf_drv_gpiote_out_clear(FPC_PIN_RESET); + nrf_drv_gpiote_out_clear(BMLITE_PIN_RESET); } } -bool nordic_bmlite_get_status(void) +bool hal_bmlite_get_status(void) { - return nrf_drv_gpiote_in_is_set(FPC_PIN_INTERRUPT); + return nrf_drv_gpiote_in_is_set(BMLITE_PIN_STATUS); } static void nordic_bmlite_gpio_init(void) @@ -74,12 +75,12 @@ static void nordic_bmlite_gpio_init(void) err_code = nrf_drv_gpiote_init(); APP_ERROR_CHECK(err_code); nrf_drv_gpiote_out_config_t out_config = GPIOTE_CONFIG_OUT_SIMPLE(true); - err_code = nrf_drv_gpiote_out_init(FPC_PIN_RESET, &out_config); + err_code = nrf_drv_gpiote_out_init(BMLITE_PIN_RESET, &out_config); APP_ERROR_CHECK(err_code); - nrf_drv_gpiote_out_task_enable(FPC_PIN_RESET); //Enable task for output pin (toggle) + nrf_drv_gpiote_out_task_enable(BMLITE_PIN_RESET); //Enable task for output pin (toggle) nrf_drv_gpiote_in_config_t config = GPIOTE_CONFIG_IN_SENSE_LOTOHI(true); - err_code = nrf_drv_gpiote_in_init(FPC_PIN_INTERRUPT, &config, NULL); + err_code = nrf_drv_gpiote_in_init(BMLITE_PIN_STATUS, &config, NULL); APP_ERROR_CHECK(err_code); nrf_gpiote_event_clear(NRF_GPIOTE_EVENTS_IN_0); return; diff --git a/HAL_Driver/src/board_leds.c b/HAL_Driver/src/hal_leds.c similarity index 94% rename from HAL_Driver/src/board_leds.c rename to HAL_Driver/src/hal_leds.c index 01dbddb..541488c 100644 --- a/HAL_Driver/src/board_leds.c +++ b/HAL_Driver/src/hal_leds.c @@ -20,7 +20,7 @@ */ #include "boards.h" -#include "btns_leds.h" +#include "bmlite_hal.h" /** LED ON time in ms */ #define LED_SOLID_ON_TIME_MS 700 @@ -28,7 +28,7 @@ /** LED blink time in ms */ #define LED_BLINK_TIME_MS 200 -void board_set_leds(uint8_t color) +void hal_set_leds(uint8_t color) { uint32_t i; diff --git a/HAL_Driver/src/platform_spi.c b/HAL_Driver/src/hal_spi.c similarity index 94% rename from HAL_Driver/src/platform_spi.c rename to HAL_Driver/src/hal_spi.c index bf41dbf..f159fcb 100755 --- a/HAL_Driver/src/platform_spi.c +++ b/HAL_Driver/src/hal_spi.c @@ -25,7 +25,8 @@ #include "nrf_gpiote.h" #include "nrf_drv_gpiote.h" -#include "platform.h" +//#include "platform.h" +#include "bmlite_hal.h" #include "fpc_bep_types.h" @@ -76,7 +77,7 @@ static void spi_write_read(uint8_t *write, uint8_t *read, size_t size, bool leav } -fpc_bep_result_t nordic_bmlite_spi_write_read(uint8_t *write, uint8_t *read, size_t size, +fpc_bep_result_t hal_bmlite_spi_write_read(uint8_t *write, uint8_t *read, size_t size, bool leave_cs_asserted) { @@ -95,7 +96,7 @@ fpc_bep_result_t nordic_bmlite_spi_write_read(uint8_t *write, uint8_t *read, siz return FPC_BEP_RESULT_OK; } -void nordic_bmlite_spi_init(uint32_t speed_hz) +void hal_bmlite_spi_init(uint32_t speed_hz) { //spi_config.ss_pin = BMLITE_CS_PIN; spi_config.miso_pin = BMLITE_MISO_PIN; diff --git a/HAL_Driver/src/platform_timebase.c b/HAL_Driver/src/hal_timebase.c similarity index 95% rename from HAL_Driver/src/platform_timebase.c rename to HAL_Driver/src/hal_timebase.c index f6a4f92..1c5aae5 100755 --- a/HAL_Driver/src/platform_timebase.c +++ b/HAL_Driver/src/hal_timebase.c @@ -59,7 +59,7 @@ static void timer_event_handler(nrf_timer_event_t event_type, void* p_context) } } -void platform_timebase_init(void) +void hal_timebase_init(void) { uint32_t time_ms = 1; //Time (in miliseconds) between consecutive compare events. uint32_t time_ticks; @@ -77,7 +77,7 @@ void platform_timebase_init(void) nrf_drv_timer_enable(&TIMER_LED); } -void platform_timebase_busy_wait(uint32_t delay) +void hal_timebase_busy_wait(uint32_t delay) { uint32_t start; uint32_t delay_internal = 0; @@ -91,7 +91,7 @@ void platform_timebase_busy_wait(uint32_t delay) } } -uint32_t platform_timebase_get_tick(void) +uint32_t hal_timebase_get_tick(void) { return systick; }