/**@brief Function for initializing services that will be used by the application. */ static void services_init(void) { // Initializing ANTFS service. const antfs_params_t params = { ANTFS_CLIENT_SERIAL_NUMBER, ANTFS_CLIENT_DEV_TYPE, ANTFS_CLIENT_MANUF_ID, ANTFS_LINK_FREQ, ANTFS_DEFAULT_BEACON | UPLOAD_ENABLED_FLAG_MASK | DATA_AVAILABLE_FLAG_MASK, m_pass_key, m_friendly_name }; antfs_init(¶ms); antfs_channel_setup(); /* adjust coex settings * only enables ANT search and ANT synch keep alive priority behaviour. Transfer keep alive disabled to ensure flash erase doesn’t time out * */ uint32_t err_code; static uint8_t aucCoexConfig[8] = {0x09, 0x00, 0x00, 0x04, 0x00, 0x3A, 0x00, 0x3A}; err_code = sd_ant_coex_config_set(ANTFS_CHANNEL, aucCoexConfig, NULL); APP_ERROR_CHECK(err_code); m_current_offset = 0; m_current_crc = 0; m_pending_offset = 0; m_data_buffered = 0; mp_buffering_handle = NULL; m_upload_swap_space_prepared = false; m_antfs_dfu_state = ANTFS_DFU_STATE_READY; }
/**@brief Function for application main entry, does not return. */ int main(void) { uint32_t err_code; #ifdef TRACE_UART // Configure and make UART ready for usage. const app_uart_comm_params_t comm_params = { RX_PIN_NUMBER, TX_PIN_NUMBER, RTS_PIN_NUMBER, CTS_PIN_NUMBER, APP_UART_FLOW_CONTROL_DISABLED, false, UART_BAUDRATE_BAUDRATE_Baud38400 }; APP_UART_FIFO_INIT(&comm_params, UART_RX_BUF_SIZE, UART_TX_BUF_SIZE, uart_error_handle, APP_IRQ_PRIORITY_LOW, err_code); APP_ERROR_CHECK(err_code); #endif // Initialize timer module. APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, false); // Initialize GPIOTE module. APP_GPIOTE_INIT(APP_GPIOTE_MAX_USERS); // Initialize and enable button handler module. static app_button_cfg_t buttons[] = { {BUTTON_0, false, BUTTON_PULL, button_event_handler}, {BUTTON_1, false, BUTTON_PULL, button_event_handler}, }; APP_BUTTON_INIT(buttons, sizeof(buttons) / sizeof(buttons[0]), BUTTON_DETECTION_DELAY, false); softdevice_setup(); const antfs_params_t params = { ANTFS_CLIENT_SERIAL_NUMBER, ANTFS_CLIENT_DEV_TYPE, ANTFS_CLIENT_MANUF_ID, ANTFS_LINK_FREQ, ANTFS_DEFAULT_BEACON | DATA_AVAILABLE_FLAG_MASK, m_pass_key, m_friendly_name }; antfs_init(¶ms); antfs_channel_setup(); m_pairing_state = PAIRING_OFF; uint8_t event; uint8_t ant_channel; uint8_t event_message_buffer[ANT_EVENT_MSG_BUFFER_MIN_SIZE]; bool allow_sleep; for (;;) { allow_sleep = true; // Process ANT-FS event queue. if (antfs_event_extract(&m_antfs_event)) { antfs_event_process(&m_antfs_event); allow_sleep = false; } // Process ANT event queue. if (sd_ant_event_get(&ant_channel, &event, event_message_buffer) == NRF_SUCCESS) { antfs_message_process(event_message_buffer); allow_sleep = false; } // Process user feedback for pairing authentication request. if (m_pairing_state != PAIRING_OFF) { pairing_user_feedback_handle(); // Reset to default state as been processed. m_pairing_state = PAIRING_OFF; allow_sleep = false; } // Sleep if allowed. if (allow_sleep) { err_code = sd_app_evt_wait(); APP_ERROR_CHECK(err_code); } } }