void gzp_host_execute() { bool gzp_packet_received = false; uint32_t payload_length = NRF_GZLL_CONST_MAX_PAYLOAD_LENGTH; uint8_t rx_payload[NRF_GZLL_CONST_MAX_PAYLOAD_LENGTH]; gzp_address_exchanged_f = false; if(nrf_gzll_get_rx_fifo_packet_count(GZP_PAIRING_PIPE) > 0) { gzp_packet_received = nrf_gzll_fetch_packet_from_rx_fifo(GZP_PAIRING_PIPE, rx_payload, &payload_length); } if(!gzp_packet_received && (gzp_encrypted_user_data_length == 0)) { if(nrf_gzll_get_rx_fifo_packet_count(GZP_DATA_PIPE) > 0) { gzp_packet_received = nrf_gzll_fetch_packet_from_rx_fifo(GZP_DATA_PIPE, rx_payload, &payload_length); } } if(gzp_packet_received) { //lint -save -esym(644,rx_payload) //may not have been initialized switch(rx_payload[0]) { case GZP_CMD_HOST_ADDRESS_REQ: gzp_process_address_req(rx_payload); break; #ifndef GZP_CRYPT_DISABLE case GZP_CMD_HOST_ID_REQ: gzp_process_id_req(rx_payload); break; case GZP_CMD_HOST_ID_FETCH: gzp_process_id_fetch(rx_payload); break; case GZP_CMD_KEY_UPDATE_PREPARE: gzp_process_key_update_prepare(); break; case GZP_CMD_KEY_UPDATE: gzp_process_key_update(rx_payload); break; case GZP_CMD_ENCRYPTED_USER_DATA: gzp_process_encrypted_user_data(rx_payload, payload_length); break; #endif case GZP_CMD_FETCH_RESP: default: break; } } // Restart reception if "not proximity backoff" period has elapsed if(!nrf_gzll_is_enabled()) { gzll_set_rx_timeout(0); if(gzp_pairing_enabled_f) { (void)nrf_gzll_set_rx_pipes_enabled(nrf_gzll_get_rx_pipes_enabled() | (1 << GZP_PAIRING_PIPE)); } gzll_rx_start(); } #ifndef GZP_CRYPT_DISABLE gzp_session_counter_inc(); #endif }
void app_execute(uint8_t buttons) { static xdata main_menu = 0; xdata uint8_t lcd_line0[17], lcd_line1[17], i; /*----------------------------------------------------------------------------- Evaluate menu independent buttons -----------------------------------------------------------------------------*/ if(buttons & (MAIN_MENU_INC | MAIN_MENU_DEC)) { if(buttons & MAIN_MENU_INC) { main_menu = inc_mod(main_menu, MM_LAST_PAGE - 1); } if(buttons & MAIN_MENU_DEC) { main_menu = dec_mod(main_menu, MM_LAST_PAGE - 1); } lcd_update(main_menu_header[main_menu], " "); delay_ms(DELAY_SHORT_MESSAGE); } if(buttons & RUN_STOP) { if(radio_run) { radio_run = false; gzll_goto_idle(); lcd_update(MESSAGE_STOP_L0, MESSAGE_STOP_L1); delay_ms(DELAY_SHORT_MESSAGE); } else { if(!device_mode) { gzll_rx_start(); } radio_run = true; lcd_update(MESSAGE_RUN_L0, MESSAGE_RUN_L1); delay_ms(DELAY_SHORT_MESSAGE); } } if(buttons & CLEAR_STATISTICS) { lcd_update(MESSAGE_STATISTICS_CLR_L0, MESSAGE_STATISTICS_CLR_L1); delay_ms(DELAY_SHORT_MESSAGE); for(i = 0; i < STATISTICS_SIZE; i++) { statistics[i] = 0; } } /*----------------------------------------------------------------------------- Run submenu dependent operations -----------------------------------------------------------------------------*/ switch(main_menu) { case MM_MODE_SELECT: mm_mode_select(lcd_line0, lcd_line1, buttons); break; case MM_TEST_APP_SETUP: mm_test_app_setup(lcd_line0, lcd_line1, buttons); break; case MM_GZLL_PARAMS: mm_gzll_params(lcd_line0, lcd_line1, buttons); break; case MM_STATISTICS: mm_statistics(lcd_line0, lcd_line1, buttons); break; case MM_CHANNEL_SETUP: mm_channel_setup(lcd_line0, lcd_line1, buttons); break; } lcd_update(lcd_line0, lcd_line1); }