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)