Skip to content

Commit

Permalink
refactored sensor and adc parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
pseudoincorrect committed Mar 16, 2021
1 parent ca22f5c commit fb821c8
Show file tree
Hide file tree
Showing 8 changed files with 181 additions and 110 deletions.
2 changes: 1 addition & 1 deletion Embedded_system/smart_mask/src/ble/app_ble.c
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
// bsp_board_led_off(CONNECTED_LED);
m_conn_handle = BLE_CONN_HANDLE_INVALID;
// err_code = app_button_disable();
APP_ERROR_CHECK(err_code);
//APP_ERROR_CHECK(err_code);
advertising_start();
break;

Expand Down
81 changes: 40 additions & 41 deletions Embedded_system/smart_mask/src/ble/services/ble_sms.c
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// BLE SENSORS MEASUREMENT SERVICE

#include "ble_sms.h"
#include "app_error.h"
#include "ble_srv_common.h"
#include "sdk_common.h"
#include "nrf_log.h"
#include "sdk_common.h"
#include "sensor_handle.h"
#include "app_error.h"

/**@brief Function for handling the Write event.
*
Expand Down Expand Up @@ -54,49 +54,48 @@ void ble_sms_on_ble_evt(ble_evt_t const * p_ble_evt, void * p_context)
}
}


uint32_t ble_sms_on_sensors_update(
uint16_t conn_handle, ble_sms_t * p_sms, sensor_t sensor)
{
static sensor_val_t vals[SENSOR_VAL_AMOUNT_NOTIF];
ret_code_t ret;
int16_t len = SENSOR_VAL_AMOUNT_NOTIF * sizeof(sensor_val_t);

ble_gatts_hvx_params_t params;
memset(&params, 0, sizeof(params));
params.type = BLE_GATT_HVX_NOTIFICATION;
params.p_len = &len;

//ble_gatts_hvx_params_t params;
//memset(&params, 0, sizeof(params));
//params.type = BLE_GATT_HVX_NOTIFICATION;
//params.p_len = &len;

sensor_val_t vals[SENSOR_VAL_AMOUNT_NOTIF];

uint16_t amount = SENSOR_VAL_AMOUNT_NOTIF;
ret = get_sensor_values(sensor, vals, amount);
APP_ERROR_CHECK(ret);

int16_t tmp1 = vals[0];
int16_t tmp2 = vals[1];

NRF_LOG_INFO("sensor %d data1 = %d data2 = %d", sensor + 1, tmp1, tmp2);

//int16_t tmp1 = *(params.p_data + 1) << 8 | *params.p_data;
//int16_t tmp2 = *(params.p_data + 3) << 8 | *(params.p_data + 2);
//params.p_data = (uint8_t *) vals;
//switch (sensor)
//{
// case (SENSOR_1):
// params.handle = p_sms->s1_val_char.value_handle;
// break;
// case (SENSOR_2):
// params.handle = p_sms->s2_val_char.value_handle;
// break;
// case (SENSOR_3):
// params.handle = p_sms->s3_val_char.value_handle;
// break;
// case (SENSOR_4):
// params.handle = p_sms->s4_val_char.value_handle;
// break;
//}
params.p_data = (uint8_t *)vals;

return NRF_SUCCESS;
//return sd_ble_gatts_hvx(conn_handle, &params);
switch (sensor)
{
case (SENSOR_1):
params.handle = p_sms->s1_val_char.value_handle;
break;
case (SENSOR_2):
params.handle = p_sms->s2_val_char.value_handle;
break;
case (SENSOR_3):
params.handle = p_sms->s3_val_char.value_handle;
break;
case (SENSOR_4):
params.handle = p_sms->s4_val_char.value_handle;
break;
}

return sd_ble_gatts_hvx(conn_handle, &params);

//if (sensor == SENSOR_2)
// NRF_LOG_INFO("sensor %d, first %d, last %d", sensor + 1,
// *(params.p_data + 1) << 8 | *(params.p_data + 0),
// *(params.p_data + 19) << 8 | *(params.p_data + 18));
}


Expand Down Expand Up @@ -186,14 +185,14 @@ uint32_t ble_sms_init(ble_sms_t * p_sms, const ble_sms_init_t * p_sms_init)

sensor_ctrl_t sensor_ctrl = {0};

add_sensor_ctrl_char(p_sms, SMS_UUID_SENSOR_1_CTRL_CHAR,
&p_sms->s1_ctrl_char, &sensor_ctrl);
add_sensor_ctrl_char(p_sms, SMS_UUID_SENSOR_2_CTRL_CHAR,
&p_sms->s2_ctrl_char, &sensor_ctrl);
add_sensor_ctrl_char(p_sms, SMS_UUID_SENSOR_3_CTRL_CHAR,
&p_sms->s3_ctrl_char, &sensor_ctrl);
add_sensor_ctrl_char(p_sms, SMS_UUID_SENSOR_4_CTRL_CHAR,
&p_sms->s4_ctrl_char, &sensor_ctrl);
add_sensor_ctrl_char(
p_sms, SMS_UUID_SENSOR_1_CTRL_CHAR, &p_sms->s1_ctrl_char, &sensor_ctrl);
add_sensor_ctrl_char(
p_sms, SMS_UUID_SENSOR_2_CTRL_CHAR, &p_sms->s2_ctrl_char, &sensor_ctrl);
add_sensor_ctrl_char(
p_sms, SMS_UUID_SENSOR_3_CTRL_CHAR, &p_sms->s3_ctrl_char, &sensor_ctrl);
add_sensor_ctrl_char(
p_sms, SMS_UUID_SENSOR_4_CTRL_CHAR, &p_sms->s4_ctrl_char, &sensor_ctrl);

return err_code;
}
26 changes: 18 additions & 8 deletions Embedded_system/smart_mask/src/boards/smart_mask_v_2_0.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#ifndef __smart_mask_v_2_0_h__
#define __smart_mask_v_2_0_h__

#include "nrfx_saadc.h"

#define RX_PIN_NUMBER 18
#define TX_PIN_NUMBER 20
Expand All @@ -11,17 +12,26 @@

#define USR_BUTTON_PIN 16

#define SENSOR_1_PWR_PIN 25
#define SENSOR_1_ADC_PIN 30
#define SENSOR_1_PWR_PIN 25
#define SENSOR_1_ADC_PIN 30
#define SENSOR_1_ANALOG_INPUT NRF_SAADC_INPUT_AIN6
#define SENSOR_1_ADC_CHANNEL 6

#define SENSOR_2_PWR_PIN 1
#define SENSOR_2_ADC_PIN 28
#define SENSOR_2_PWR_PIN 1
#define SENSOR_2_ADC_PIN 28
#define SENSOR_2_ANALOG_INPUT NRF_SAADC_INPUT_AIN2
#define SENSOR_2_ADC_CHANNEL 2

#define SENSOR_3_PWR_PIN 6
#define SENSOR_3_ADC_PIN 4
#define SENSOR_3_PWR_PIN 6
#define SENSOR_3_ADC_PIN 4
#define SENSOR_3_ANALOG_INPUT NRF_SAADC_INPUT_AIN3
#define SENSOR_3_ADC_CHANNEL 3

#define SENSOR_4_PWR_PIN 9
#define SENSOR_4_ADC_PIN 5
#define SENSOR_4_ANALOG_INPUT NRF_SAADC_INPUT_AIN4
#define SENSOR_4_ADC_CHANNEL 4

#define SENSOR_4_PWR_PIN 9
#define SENSOR_4_ADC_PIN 5

// BSP Leds (for compatibility with SDK)
#define LEDS_NUMBER 3
Expand Down
7 changes: 3 additions & 4 deletions Embedded_system/smart_mask/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -222,11 +222,11 @@ static void idle_state_handle(void)
*/
void check_sensors_update(void)
{
//if (! is_connected())
// return;
if (! is_connected())
return;

ret_code_t err_code;
for (sensor_t s_i = SENSOR_1; s_i <= SENSOR_4; s_i++)
for (sensor_t s_i = SENSOR_FIRST; s_i <= SENSOR_LAST; s_i++)
{
if (available_sensor_data(s_i) >= SENSOR_VAL_AMOUNT_NOTIF)
{
Expand All @@ -242,7 +242,6 @@ void check_sensors_update(void)
}
}
}
NRF_LOG_INFO("");
}

/**@brief App Error handler (override the weak one)
Expand Down
57 changes: 44 additions & 13 deletions Embedded_system/smart_mask/src/sensors/sensor_handle.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
#include "nrf_log.h"
#include "nrf_ringbuf.h"
#include "nrf_saadc.h"
#include "boards.h"
#include <string.h>

#define SENSOR_BUFF_SIZE 8 // needs to be a power of 2
#define SENSOR_BUFF_SIZE 256 // needs to be a power of 2

static sensor_handle_t s_h_1, s_h_2, s_h_3, s_h_4;

Expand Down Expand Up @@ -51,10 +52,40 @@ void init_sensor_handles(void)
nrf_ringbuf_init(s_h_3.buffer);
nrf_ringbuf_init(s_h_4.buffer);

NRF_LOG_INFO("avail 1 %d",buf_available_data(s_h_1.buffer));
NRF_LOG_INFO("avail 2 %d",buf_available_data(s_h_2.buffer));
NRF_LOG_INFO("avail 3 %d",buf_available_data(s_h_3.buffer));
NRF_LOG_INFO("avail 4 %d",buf_available_data(s_h_4.buffer));
sensor_ctrl_t * ctrl;
for (sensor_t s_i = SENSOR_FIRST; s_i <= SENSOR_LAST; s_i++)
{
ctrl = get_sensor_ctrl(s_i);
ctrl->gain = SAADC_CH_CONFIG_GAIN_Gain1_6;
ctrl->enable = true;
ctrl->frequency = 100; // ms
}

s_h_1.hardware.pwr_pin = SENSOR_1_PWR_PIN;
s_h_1.hardware.adc_pin = SENSOR_1_ADC_PIN;
s_h_1.hardware.adc_chanel = SENSOR_1_ADC_CHANNEL;
s_h_1.hardware.analog_input = SENSOR_1_ANALOG_INPUT;

s_h_2.hardware.pwr_pin = SENSOR_2_PWR_PIN;
s_h_2.hardware.adc_pin = SENSOR_2_ADC_PIN;
s_h_2.hardware.adc_chanel = SENSOR_2_ADC_CHANNEL;
s_h_2.hardware.analog_input = SENSOR_2_ANALOG_INPUT;

s_h_3.hardware.pwr_pin = SENSOR_3_PWR_PIN;
s_h_3.hardware.adc_pin = SENSOR_3_ADC_PIN;
s_h_3.hardware.adc_chanel = SENSOR_3_ADC_CHANNEL;
s_h_3.hardware.analog_input = SENSOR_3_ANALOG_INPUT;

s_h_4.hardware.pwr_pin = SENSOR_4_PWR_PIN;
s_h_4.hardware.adc_pin = SENSOR_4_ADC_PIN;
s_h_4.hardware.adc_chanel = SENSOR_4_ADC_CHANNEL;
s_h_4.hardware.analog_input = SENSOR_4_ANALOG_INPUT;
}

sensor_hardware_t * get_sensor_hardware(sensor_t sensor)
{
sensor_handle_t * s_h = get_sensor_handle(sensor);
return &s_h->hardware;
}

sensor_ctrl_t * get_sensor_ctrl(sensor_t sensor)
Expand Down Expand Up @@ -86,36 +117,36 @@ int available_sensor_data(sensor_t sensor)

ret_code_t add_sensor_value(sensor_t sensor, sensor_val_t val)
{
ret_code_t ret;
ret_code_t err;
const nrf_ringbuf_t * buf = get_sensor_buffer(sensor);
size_t len = sizeof(sensor_val_t);

uint8_t * data_p;
uint8_t ** data_pp = &data_p;

ret = nrf_ringbuf_alloc(buf, data_pp, &len, false);
if (ret != NRF_SUCCESS || len != sizeof(sensor_val_t))
err = nrf_ringbuf_alloc(buf, data_pp, &len, false);
if (err != NRF_SUCCESS || len != sizeof(sensor_val_t))
return NRF_ERROR_DATA_SIZE;

ret = nrf_ringbuf_cpy_put(buf, (uint8_t *)&val, &len);
if (ret != NRF_SUCCESS || len != sizeof(sensor_val_t))
err = nrf_ringbuf_cpy_put(buf, (uint8_t *)&val, &len);
if (err != NRF_SUCCESS || len != sizeof(sensor_val_t))
return NRF_ERROR_DATA_SIZE;

return NRF_SUCCESS;
}

ret_code_t get_sensor_values(sensor_t sensor, sensor_val_t * vals, uint8_t amount)
{
ret_code_t ret;
ret_code_t err;
const nrf_ringbuf_t * buf = get_sensor_buffer(sensor);
size_t len = amount * sizeof(sensor_val_t);

if (buf_available_data(buf) < len)
return NRF_ERROR_DATA_SIZE;

ret = nrf_ringbuf_cpy_get(buf, (uint8_t *)vals, &len);
err = nrf_ringbuf_cpy_get(buf, (uint8_t *)vals, &len);
if (len != amount * sizeof(sensor_val_t))
return NRF_ERROR_DATA_SIZE;

return ret;
return err;
}
2 changes: 2 additions & 0 deletions Embedded_system/smart_mask/src/sensors/sensor_handle.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ void init_sensor_handles(void);

sensor_ctrl_t * get_sensor_ctrl(sensor_t sensor);

sensor_hardware_t * get_sensor_hardware(sensor_t sensor);

ret_code_t set_sensor_ctrl(sensor_t sensor, sensor_ctrl_t* sensor_ctrl);

int available_sensor_data(sensor_t sensor);
Expand Down
Loading

0 comments on commit fb821c8

Please sign in to comment.