int32_t VL53L0X_comms_initialise(uint8_t comms_type, uint16_t comms_speed_khz){ if(comms_type == SPI){ NRF_LOG_ERROR("SPI not supported. Use I2C.\r\n"); return 1; } else if(comms_type != I2C){ NRF_LOG_ERROR("Invalid communication protocol with VL53L0X. Use I2C.\r\n"); return 1; } uint32_t nrf_speed; if(comms_speed_khz == 400){ nrf_speed = NRF_TWI_FREQ_400K; } else if(comms_speed_khz == 250){ nrf_speed = NRF_TWI_FREQ_250K; } else if(comms_speed_khz == 100){ nrf_speed = NRF_TWI_FREQ_100K; } else { NRF_LOG_ERROR("Invalid TWI comms speed."); return 1; } ret_code_t ret; const nrf_drv_twi_config_t config = { .scl = TWI_SCL_M, .sda = TWI_SDA_M, .frequency = nrf_speed, .interrupt_priority = APP_IRQ_PRIORITY_HIGH, .clear_bus_init = false }; ret = nrf_drv_twi_init(&m_twi_master, &config, NULL, NULL); if (NRF_SUCCESS == ret) { nrf_drv_twi_enable(&m_twi_master); NRF_LOG_DEBUG("TWI init successful\r\n"); } else { NRF_LOG_ERROR("TWI init failed\r\n"); } return ret; }; /** * @brief Close platform comms. * * @return status - status 0 = ok, 1 = error * */ int32_t VL53L0X_comms_close(void){ nrf_drv_twi_disable(&m_twi_master); return 0; }
void nrf_drv_twi_uninit(nrf_drv_twi_t const * const p_instance) { ASSERT(m_cb[p_instance->instance_id].state != NRF_DRV_STATE_UNINITIALIZED); if (m_handlers[p_instance->instance_id]) { nrf_drv_common_irq_disable(p_instance->irq); } nrf_drv_twi_disable(p_instance); nrf_twi_shorts_clear(p_instance->p_reg, DISABLE_MASK); m_cb[p_instance->instance_id].state = NRF_DRV_STATE_UNINITIALIZED; }