| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #include "rad_sens_i2c.h"
- #include "rad_sens.h"
- bool rad_sens_read_data(RadSensModel* model) {
- furi_hal_i2c_acquire(I2C_BUS);
- uint32_t timeout = furi_ms_to_ticks(100);
- model->connected = false;
- model->verified = false;
- if(furi_hal_i2c_is_device_ready(I2C_BUS, RAD_SENS_ADDRESS, timeout) > 0) {
- model->connected = true;
- uint8_t buffer[4];
- uint8_t device_id = 0;
- buffer[0] = RAD_SENS_ID_RG;
- if(furi_hal_i2c_tx(I2C_BUS, RAD_SENS_ADDRESS, buffer, 1, timeout)) {
- if(furi_hal_i2c_rx(I2C_BUS, (uint8_t)RAD_SENS_ADDRESS, buffer, 1, timeout)) {
- device_id = buffer[0];
- }
- }
- if(device_id == RAD_SENS_ID) {
- model->verified = true;
- // Read dynamic intensity
- buffer[0] = RAD_SENS_DYN_INTENSITY_RG;
- if(furi_hal_i2c_tx(I2C_BUS, RAD_SENS_ADDRESS, buffer, 1, timeout)) {
- if(furi_hal_i2c_rx(I2C_BUS, (uint8_t)RAD_SENS_ADDRESS, buffer, 3, timeout)) {
- model->dyn_intensity =
- (((uint32_t)buffer[0] << 16) | ((uint32_t)buffer[1] << 8) |
- (uint32_t)buffer[2]);
- }
- }
- // Read static intensity
- buffer[0] = RAD_SENS_STAT_INTENSITY_RG;
- if(furi_hal_i2c_tx(I2C_BUS, RAD_SENS_ADDRESS, buffer, 1, timeout)) {
- if(furi_hal_i2c_rx(I2C_BUS, (uint8_t)RAD_SENS_ADDRESS, buffer, 3, timeout)) {
- model->stat_intensity =
- (((uint32_t)buffer[0] << 16) | ((uint32_t)buffer[1] << 8) |
- (uint32_t)buffer[2]);
- }
- }
- // Read impulses
- buffer[0] = RAD_SENS_IMP_CNT_RG;
- if(furi_hal_i2c_tx(I2C_BUS, RAD_SENS_ADDRESS, buffer, 1, timeout)) {
- if(furi_hal_i2c_rx(I2C_BUS, (uint8_t)RAD_SENS_ADDRESS, buffer, 2, timeout)) {
- model->new_impulse_count = (((uint16_t)buffer[0] << 8) | (uint16_t)buffer[1]);
- model->impulse_count += model->new_impulse_count;
- }
- }
- }
- }
- furi_hal_i2c_release(I2C_BUS);
- return model->verified;
- }
|