コード例 #1
0
ファイル: nrf_gzp_host.c プロジェクト: 1072258106/duband
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
}
コード例 #2
0
ファイル: main.c プロジェクト: olatief/Headstage
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);  
}