/** * @brief RBC_MESH framework event handler. Defined in rbc_mesh.h. Handles * events coming from the mesh. Sets LEDs according to data * * @param[in] evt RBC event propagated from framework */ void rbc_mesh_event_handler(rbc_mesh_event_t* evt) { TICK_PIN(28); switch (evt->event_type) { case RBC_MESH_EVENT_TYPE_CONFLICTING_VAL: case RBC_MESH_EVENT_TYPE_NEW_VAL: case RBC_MESH_EVENT_TYPE_UPDATE_VAL: if (evt->value_handle > 2) break; led_config(evt->value_handle, evt->data[0]); break; case RBC_MESH_EVENT_TYPE_INITIALIZED: /* init BLE gateway softdevice application: */ nrf_adv_conn_init(); break; } }
/** @brief main function */ int main(void) { uart_init(); PUTS("LED Mesh initializing"); /* Enable Softdevice (including sd_ble before framework */ uint32_t error_code = sd_softdevice_enable(NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, sd_assert_handler); APP_ERROR_CHECK(error_code); ble_enable_params_t ble_enable_params; memset(&ble_enable_params, 0, sizeof(ble_enable_params)); ble_enable_params.gatts_enable_params.service_changed = 0; ble_enable_params.gatts_enable_params.attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT; error_code = sd_ble_enable(&ble_enable_params); APP_ERROR_CHECK(error_code); /* init leds and pins */ gpio_init(); #ifdef RBC_MESH_SERIAL /* only want to enable serial interface, and let external host setup the framework */ mesh_aci_init(); #else /* Enable mesh framework on channel 37, min adv interval at 100ms, 2 characteristics */ rbc_mesh_init_params_t init_params; init_params.access_addr = 0xA541A68F; init_params.adv_int_ms = 100; init_params.channel = 38; init_params.handle_count = 2; init_params.packet_format = RBC_MESH_PACKET_FORMAT_ORIGINAL; init_params.radio_mode = RBC_MESH_RADIO_MODE_BLE_1MBIT; error_code = rbc_mesh_init(init_params); APP_ERROR_CHECK(error_code); /* request values for both LEDs on the mesh */ error_code = rbc_mesh_value_enable(1); APP_ERROR_CHECK(error_code); error_code = rbc_mesh_value_enable(2); APP_ERROR_CHECK(error_code); /* init BLE gateway softdevice application: */ nrf_adv_conn_init(); #endif /* enable softdevice IRQ */ error_code = sd_nvic_EnableIRQ(SD_EVT_IRQn); #ifndef BUTTONS /* sleep */ while (true) { sd_app_evt_wait(); } #else uint8_t mesh_data[16] = {0,0}; while (true) { // red off if(nrf_gpio_pin_read(BUTTON_1) == 0) { PUTS("BUTTON_1 pressed"); while(nrf_gpio_pin_read(BUTTON_1) == 0); mesh_data[0] = 0; rbc_mesh_value_set(1, mesh_data, 1); } // red on if(nrf_gpio_pin_read(BUTTON_2) == 0) { PUTS("BUTTON_1 pressed"); while(nrf_gpio_pin_read(BUTTON_2) == 0); mesh_data[0] = 1; rbc_mesh_value_set(1, mesh_data, 1); } // green off if(nrf_gpio_pin_read(BUTTON_3) == 0) { PUTS("BUTTON_3 pressed"); while(nrf_gpio_pin_read(BUTTON_3) == 0); mesh_data[0] = 0; rbc_mesh_value_set(2, mesh_data, 1); } // green on if(nrf_gpio_pin_read(BUTTON_4) == 0) { PUTS("BUTTON_4 pressed"); while(nrf_gpio_pin_read(BUTTON_4) == 0); mesh_data[0] = 1; rbc_mesh_value_set(2, mesh_data, 1); } } #endif }