40 #include "hal_nop_delay.h" 41 #include "hal_clocks.h" 45 #include "profiler_timer.h" 51 #include "app_error.h" 52 #include "sd_evt_handler.h" 63 #define PRODUCT_ID_LEN 16 70 static void soc_evt_handler(uint32_t evt_id);
85 static void ble_evt_handler(ble_evt_t * evt);
105 uint32_t
if_pulse(uint32_t pin_trigger, uint32_t pin_focus);
124 static uint32_t pir_flag = 0;
128 static uint8_t sense_pi_mac_addr[] = {0,0,0,0,0,0};
130 static ble_gap_addr_t my_peer_addr;
132 static ble_gap_evt_adv_report_t my_adv_report;
141 (BLE_GAP_SCAN_BUFFER_MAX),
144 static ble_gap_scan_params_t
const sys_lvl_app_scan_params =
147 .interval = (BLE_GAP_SCAN_INTERVAL_MAX),
148 .window = (BLE_GAP_SCAN_WINDOW_MAX),
150 .report_incomplete_evts = 0,
151 .channel_mask = {0,0,0,0,0},
152 .timeout = BLE_GAP_SCAN_TIMEOUT_UNLIMITED,
153 .scan_phys = BLE_GAP_PHY_AUTO,
154 .filter_policy = BLE_GAP_SCAN_FP_ACCEPT_ALL,
157 static ble_gap_conn_params_t
const sys_lvl_conn_params =
159 .min_conn_interval = BLE_GAP_CP_MIN_CONN_INTVL_MIN,
160 .max_conn_interval = BLE_GAP_CP_MAX_CONN_INTVL_MIN,
161 .slave_latency = BLE_GAP_CP_SLAVE_LATENCY_MAX,
162 .conn_sup_timeout = BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX,
171 log_printf(
"\n SYSTEM LEVEL TEST\n");
178 err_code = sd_softdevice_disable();
182 log_printf(
"BLE_Status : 1\n");
186 log_printf(
"BLE_Status : 0\n");
188 for(uint32_t addr_byte = BLE_GAP_ADDR_LEN; addr_byte > 0; addr_byte--)
190 sense_pi_mac_addr[(addr_byte - 1)] = 0;
198 static void ble_evt_handler(ble_evt_t * evt)
200 switch(evt->header.evt_id)
202 case BLE_GAP_EVT_CONNECTED:
205 err_code = sd_ble_gap_disconnect(evt->evt.gap_evt.conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
209 case BLE_GAP_EVT_DISCONNECTED:
214 case BLE_GAP_EVT_CONN_PARAM_UPDATE:
217 case BLE_GAP_EVT_ADV_SET_TERMINATED:
220 case BLE_GATTS_EVT_WRITE:
223 case BLE_GAP_EVT_ADV_REPORT:
225 my_adv_report = (evt->evt.gap_evt.params.adv_report);
227 uint32_t mac_flag = 1;
228 for(uint32_t addr_byte = BLE_GAP_ADDR_LEN; addr_byte > 0; addr_byte--)
230 if(evt->evt.gap_evt.params.adv_report.peer_addr.addr[(addr_byte - 1)] != sense_pi_mac_addr[(addr_byte - 1)])
237 my_peer_addr = evt->evt.gap_evt.params.adv_report.peer_addr;
238 if(my_adv_report.type.scan_response == 1 && my_adv_report.rssi >= (-65))
241 err_code = sd_ble_gap_connect(&my_peer_addr, &sys_lvl_app_scan_params, &sys_lvl_conn_params, BLE_CONN_CFG_TAG_DEFAULT);
243 memcpy(
scan_resp, my_adv_report.data.p_data, my_adv_report.data.len);
260 case BLE_GAP_EVT_TIMEOUT:
272 static void soc_evt_handler(uint32_t evt_id)
274 log_printf(
"soc evt %x\n", evt_id);
287 uint32_t app_ram_start = 0x200032C8;
289 err_code = sd_ble_enable(&app_ram_start);
293 sd_evt_handler_init(ble_evt_handler, soc_evt_handler);
307 log_printf(
"START\n");
314 static uint8_t data_to_comp[23] = {};
315 static const uint8_t sense_pi_data[23] = {0x53, 0x65, 0x6e, 0x73, 0x65, 0x50, 0x69, 0x0a, 0xde, 0xfb, 0x07, 0x74, 0x83, 0x66, 0xb0, 0x0d, 0x48, 0xf5, 0x07, 0x50, 0xdc, 0x73, 0x3c};
316 uint32_t cpy_arr_cnt = 0;
317 uint32_t pst_arr_cnt = 0;
318 uint32_t arr_cnt = 0;
319 uint32_t comp_flag = 1;
320 uint8_t * mac_addr_value = my_adv_report.peer_addr.addr;
321 for(cpy_arr_cnt = 5, pst_arr_cnt = 0; cpy_arr_cnt < 12; cpy_arr_cnt++, pst_arr_cnt++)
323 data_to_comp[pst_arr_cnt] = my_adv_report.data.p_data[cpy_arr_cnt];
325 for(cpy_arr_cnt = 14, pst_arr_cnt = 7; cpy_arr_cnt < 30; cpy_arr_cnt++, pst_arr_cnt++)
327 data_to_comp[pst_arr_cnt] = my_adv_report.data.p_data[cpy_arr_cnt];
329 for(arr_cnt = 0; arr_cnt < 23; arr_cnt++)
331 if(data_to_comp[arr_cnt] != sense_pi_data[arr_cnt])
338 for(uint32_t addr_byte = BLE_GAP_ADDR_LEN; addr_byte > 0; addr_byte--)
340 sense_pi_mac_addr[(addr_byte - 1)] = mac_addr_value[(addr_byte - 1)];
343 log_printf(
"MAC :\n");
344 for(uint32_t addr_byte = BLE_GAP_ADDR_LEN; addr_byte > 0; addr_byte--)
346 log_printf(
"%02x ",my_adv_report.peer_addr.addr[(addr_byte - 1)]);
353 log_printf(
"RSSI : %d\n", (int32_t)my_adv_report.rssi);
354 log_printf(
"SCAN_RESPONSE : %d\n", my_adv_report.type.scan_response);
365 uint8_t product_id[
PRODUCT_ID_LEN] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
367 log_printf(
"Product_ID : ");
370 log_printf(
"%c", product_id[char_cnt]);
376 uint32_t
if_pulse(uint32_t pin_trigger, uint32_t pin_focus)
378 uint32_t toggle_flag = 0;
379 uint32_t trigger_flag = 0;
380 uint32_t focus_flag = 0;
381 uint32_t prev_state_trigger = 0;
382 uint32_t prev_state_focus = 0;
383 uint32_t current_state_trigger = 0;
384 uint32_t current_state_focus = 0;
385 uint32_t focus_cnt = 0;
386 uint32_t trigger_cnt = 0;
387 prev_state_trigger = hal_gpio_pin_read(pin_trigger);
388 prev_state_focus = hal_gpio_pin_read(pin_focus);
389 current_state_trigger = hal_gpio_pin_read(pin_trigger);
390 current_state_focus = hal_gpio_pin_read(pin_focus);
395 if(current_state_trigger != prev_state_trigger)
397 prev_state_trigger = current_state_trigger;
402 current_state_trigger = hal_gpio_pin_read(
TRIGGER);
404 if(current_state_focus != prev_state_focus)
406 prev_state_focus = current_state_focus;
411 current_state_focus = hal_gpio_pin_read(
FOCUS);
422 if((trigger_flag && focus_flag) == 1)
442 log_printf(
"PIR_Status : 1\n");
447 log_printf(
"PIR_Status : 0\n");
455 char temp_str[] = {};
456 char * start_pir =
"PIR\n";
457 char * start_scan =
"SCN\n";
458 memcpy(temp_str, buffer,
sizeof(start_pir));
459 if(memcmp(temp_str, start_pir,(
sizeof(start_pir)) - 1) == 0)
463 else if(memcmp(temp_str, start_scan,(
sizeof(start_scan) - 1)) == 0)
void profiler_timer_init(void)
void ble_stack_init(void)
Function for initializing the BLE stack by enabling the SoftDevice and the BLE event interrupt.
#define BOARD_LFCLKSRC_STRUCT
void recv_data(uint8_t *buffer)
IRQHandler for UART RX_DONE event.
void lfclk_init(lfclk_src_t lfclk_src)
Function to initialize the LF clock.
void check_pir(void)
Function to check if PIR is present or not.
void extract_product_id(void)
Function to extract Product ID from Scan response data.
void profiler_timer_deinit()
Fully stop the profiling timer to save power. profiler_timer_init needs to be called again before usi...
#define APP_ERROR_CHECK(ERR_CODE)
Macro calls error handler if the provided error code is not NRF_SUCCESS. The behavior of this call de...
void app_error_fault_handler(uint32_t id, uint32_t pc, uint32_t info)
Callback to be invoked in case of fault i.e. unrecoverable errors occurring within the application or...
void scan_start()
Function to start scanning.
void hal_uart_init(hal_uart_baud_t baud, void(*handler)(uint8_t *ptr))
uint32_t if_pulse(uint32_t pin_trigger, uint32_t pin_focus)
Function to detect pulses from trigger pin and focus pin.
volatile uint32_t conn_terminate_flag
void conn_to_sense_pi(void)
Function to generate table of scanned devices with MAC addresses.
ble_data_t sys_lvl_app_scan_buffer
int main(void)
Function for application main entry.
uint8_t scan_resp[BLE_GAP_SCAN_BUFFER_MAX]
uint8_t scan_data_buffer[BLE_GAP_SCAN_BUFFER_MAX]
uint32_t read_time_us(void)