예제 #1
0
U8 bRadio_GetCurrentChannel(void)
{
  // Requests the current state of the device
  si446x_request_device_state();

  return Si446xCmd.REQUEST_DEVICE_STATE.CURRENT_CHANNEL;
}
예제 #2
0
파일: radio.c 프로젝트: Ryoma521/ChlTest
uint8 New_SI4463_Transmit(U8 * pSrc,U8 len)
{
   
  
  SI4463_Enable_NIRQ_TX();
  
 
  
  
  /* Check if the radio is already in TX state */
  si446x_request_device_state();
  if (SI446X_CMD_REQUEST_DEVICE_STATE_REP_MAIN_STATE_ENUM_TX == \
      (Si446xCmd.REQUEST_DEVICE_STATE.CURR_STATE & 0x0F)) {
    /* Still transmitting */
    return FALSE;
  }

  /* Reset TX FIFO */
  si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_TX_BIT);

  /* Fill the TX FIFO with data */
  si446x_write_tx_fifo(len, pSrc);


  /* Start sending packet, channel 0, START immediately,
   * Packet length according to 'len', go READY when done */
  si446x_start_tx(0u, 0x30,  len);
  
 uint32 counter = 0;
 StatTime = tmpGlobalTime;
 while(TRUE != gRadio_CheckTransmitted())
 {
   
  asm("nop");
  counter++;
  if(counter >= 0xFFFFFFFF)
  {
     
    SI4463_Enable_NIRQ_RX();
    EXTILineNIRQ_Config();
    return FALSE;
  }
    
 }  
  StopTime = tmpGlobalTime-StatTime;
 

 SI4463_Enable_NIRQ_RX();
  EXTILineNIRQ_Config();
  return TRUE;
}
예제 #3
0
파일: radio.c 프로젝트: Ryoma521/ChlTest
/*!
 *  Set Radio to TX mode, fixed packet length.
 *
 *  @param channel Freq. Channel, Packet to be sent
 *
 *  @note
 *
 */
uint8  vRadio_StartTx(U8 channel, U8 *pioFixRadioPacket,U8 len)
{
  // Read ITs, clear pending ones
  si446x_get_int_status(0u, 0u, 0u);

  
  /* Check if the radio is already in TX state */
  si446x_request_device_state();
  if (SI446X_CMD_REQUEST_DEVICE_STATE_REP_MAIN_STATE_ENUM_TX == \
      (Si446xCmd.REQUEST_DEVICE_STATE.CURR_STATE & 0x0F)) {
    /* Still transmitting */
    return FALSE;
  }

  
  /* Fill the TX fifo with datas */
  si446x_write_tx_fifo(RadioConfiguration.Radio_PacketLength, pioFixRadioPacket);

  /* Start sending packet, channel 0, START immediately, Packet n bytes long, go READY when done */
  si446x_start_tx(channel, 0x30,  RadioConfiguration.Radio_PacketLength);
  
  return TRUE;
}
예제 #4
0
파일: radio.c 프로젝트: Ryoma521/ChlTest
uint8 SI4463_Config_Transmit_singlerate(U8 * pSrc1,U8 len1)
{
  
  //发送第一个包
   trx_state = 0;//f发送模式
  
  /* Check if the radio is already in TX state */
  si446x_request_device_state();
  if (SI446X_CMD_REQUEST_DEVICE_STATE_REP_MAIN_STATE_ENUM_TX == \
      (Si446xCmd.REQUEST_DEVICE_STATE.CURR_STATE & 0x0F)) {
    /* Still transmitting */
    return FALSE;
  }

  /* Reset TX FIFO */
  si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_TX_BIT);

  /* Fill the TX FIFO with data */
  si446x_write_tx_fifo(len1, pSrc1);


  /* Start sending packet, channel 0, START immediately,
   * Packet length according to 'len', go READY when done */
  si446x_start_tx(0u, 0x30,  len1);
  
  uint32 counter = 0;
  while (PKT_Sent_Flag!=1)//发送等待
  {
  //等待保护
  asm("nop");
  counter++;
  if(counter >= 0xFFFFFFFF)
    {
     //第一个包未发送成功
    counter=0;
    return FALSE;
    }  
  }
  
   PKT_Sent_Flag =0;
  
  
#if 0
  //DelayMs(1);
//发送第二个包
  
  vRadio_config_2nd();
  
  trx_state = 0;//f发送模式
  
  /* Check if the radio is already in TX state */
  si446x_request_device_state();
  if (SI446X_CMD_REQUEST_DEVICE_STATE_REP_MAIN_STATE_ENUM_TX == \
      (Si446xCmd.REQUEST_DEVICE_STATE.CURR_STATE & 0x0F)) {
    /* Still transmitting */
    return FALSE;
  }

  /* Reset TX FIFO */
  si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_TX_BIT);

  /* Fill the TX FIFO with data */
  si446x_write_tx_fifo(len2, pSrc2);


  /* Start sending packet, channel 0, START immediately,
   * Packet length according to 'len', go READY when done */
  si446x_start_tx(0u, 0x30,  len2);
  
  
  while (PKT_Sent_Flag!=1)//发送等待
  {
  //等待保护
  asm("nop");
  counter++;
  if(counter >= 0xFFFFFFFF)
  {
     //第一个包未发送成功
    counter=0;
    return FALSE;
  }
    
  }
  
  PKT_Sent_Flag =0;
  vRadio_config_1st();
  
  vRadio_StartRX_1st(pRadioConfiguration_1st->Radio_ChannelNumber);//回复第一个包的接收模式
  trx_state = 1;//第二个包发完之后默认为接收状态
   
#endif 
  
    vRadio_StartRX(pRadioConfiguration->Radio_ChannelNumber);//回复第一个包的接收模式
  trx_state = 1;//第二个包发完之后默认为接收状态
  
  return TRUE;
}
예제 #5
0
unsigned char get_property(void)
{
  U8 cmd_length,i,device_state;

    i=0;
    device_state=0;
  
    Pro2Cmd[i++]=0x12;
    Pro2Cmd[i++]=0x50;
    Pro2Cmd[i++]=0x0C;
    Pro2Cmd[i++]=0x00;
    cmd_length=0x0C;
    if(radio_comm_SendCmdGetResp(4, Pro2Cmd, cmd_length, Pro2Cmd)!= 0xFF)  //获取跳频表参数
    {
      DBUG("get_hop cmd err\r\n");
      return FALSE;
    }
    for(i=0;i<(cmd_length);i++)
    {
    //  DBUG("%02x %02x\r\n",Pro2Cmd[i],Si4438HopRegister[i]);
      if(Pro2Cmd[i]!=Si4438HopRegister[i])  //判断跳频表参数
      {
          DBUG("get_hop err\r\n");
          return FALSE;
      }
    }
    if(si4438_phy.RF_status==RF_RX_FLAG)
    {
      si446x_request_device_state();
      device_state=Si446xCmd.REQUEST_DEVICE_STATE.CURR_STATE;  //获取设备当前状态是否为读状态
      if(device_state!=SI446X_CMD_REQUEST_DEVICE_STATE_REP_MAIN_STATE_ENUM_RX)
      {
          DBUG("CURR_STATE err\r\n");
          return FALSE;
      }

    }
/*        
    tick_tmp=0;
    device_state=0x00;

    if(radio_hal_Gpio0Level())  //判断晶振是否启振;
    {
      for(tick_tmp=0;tick_tmp<5;tick_tmp++)
      {
        if(!radio_hal_Gpio0Level())
          break;
      }
    }
    else
    {
      for(tick_tmp=0;tick_tmp<5;tick_tmp++)
      {
        if(radio_hal_Gpio0Level())
          break;
      }
    }
    
    if(tick_tmp>=20)
    {
      DBUG("READY state err");
      return TRUE;
    }
*/
    return TRUE;
}