Beispiel #1
0
uint8 gRadio_CheckReceived(void)
{  
    /* Read ITs, clear pending ones */
    si446x_get_int_status(0u, 0u, 0u);

    si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_READY);
    
    /* check the reason for the IT */
    if (Si446xCmd.GET_INT_STATUS.PH_PEND & SI446X_CMD_GET_INT_STATUS_REP_PACKET_RX_PEND_BIT)
    {  
      RfRxDataX[0]=0;
      si446x_fifo_info(0u);        
      si446x_read_rx_fifo(1, &RfRxDataX[0]);    
      
      //si446x_read_rx_fifo(RxBuffer[0], &RxBuffer[1]);        
      
      //RxBuff2FrameBuff(RxBuffer,&FrameBuffToUart);      
      
      RfRxFlag=RfRxData;      
      
      /* Reset FIFO */
      si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_RX_BIT); 
      si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_RX);
      return TRUE;  
    }
    /* Reset FIFO */
    si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_RX_BIT); 
    si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_RX);
    return FALSE;
}
Beispiel #2
0
/*!
 *  Check if Packet received IT flag is pending.
 *
 *  @return   TRUE - Packet successfully received / FALSE - No packet pending.
 *
 *  @note
 *
 */
uint8 gRadio_CheckReceived_VariablePacket(void)
{
  uint8 nirq_recv_var= SI4463_NIRQ_Bit();
  
  if (nirq_recv_var == FALSE)
  {
    /* Read ITs, clear pending ones */
    si446x_get_int_status(0u, 0u, 0u);

	if (Si446xCmd.GET_INT_STATUS.CHIP_PEND & SI446X_CMD_GET_CHIP_STATUS_REP_CMD_ERROR_PEND_BIT)
    {
      /* State change to */
      si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_SLEEP);
	
	  /* Reset FIFO */
      si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_RX_BIT);
      
	  /* State change to */
      si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_RX);
    }

    /* check the reason for the IT */
    if (Si446xCmd.GET_INT_STATUS.MODEM_PEND & SI446X_CMD_GET_INT_STATUS_REP_SYNC_DETECT_BIT)
    {
      /* Blink once LED2 to show Sync Word detected */
      //vHmi_ChangeLedState(eHmi_Led2_c, eHmi_LedBlinkOnce_c);
    }

    if (Si446xCmd.GET_INT_STATUS.PH_PEND & SI446X_CMD_GET_INT_STATUS_REP_PACKET_RX_PEND_BIT)
    {
      /* Blink once LED3 as CRC OK or not enabled */
     // vHmi_ChangeLedState(eHmi_Led3_c, eHmi_LedBlinkOnce_c);

      /* Read the length of RX_FIFO */
      si446x_fifo_info(0u);

      /* Packet RX */
      si446x_read_rx_fifo(Si446xCmd.FIFO_INFO.RX_FIFO_COUNT, &fixRadioPacket[0]);

      /* Do not use UART in case of direct firmware load */
#ifdef UART_LOGGING_SUPPORT
      {
          /* Send it to UART */
        UartSendByte(fixRadioPacket,RadioConfiguration.Radio_PacketLength);
      }
#endif

      return TRUE;
    }

    if (Si446xCmd.GET_INT_STATUS.PH_PEND & SI446X_CMD_GET_INT_STATUS_REP_CRC_ERROR_BIT)
    {
      /* Reset FIFO */
      si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_RX_BIT);
    }
  }

  return FALSE;
}
unsigned char Si4438_Tx__Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  SetHighRate();  //设置成高速率模式
  //配置相应发送GPIO口
  GPIO_InitStructure.GPIO_Pin = TX_DATA_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(TX_DATA_PORT, &GPIO_InitStructure);

  
  GPIO_InitStructure.GPIO_Pin = TX_CLK_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(TX_CLK_PORT, &GPIO_InitStructure);

  si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_READY);
  si4438_phy.RF_status=RF_IDLE_FLAG;
  
  NVIC_DisableIRQ(GDIO1_EXTI_IRQn);
  NVIC_DisableIRQ(GDIO0_EXTI_IRQn);
  
  if (SI446X_SUCCESS != si446x_configuration_init(DirectModefiguration))
  {
    DBUG("Si4438_Tx__Config fail\r\n");
    wireless_phy_init();
    return 0;
  }
  return 1;
}
/*!
 *  Check if Packet sent IT flag or Packet Received IT is pending.
 *
 *  @return   SI4455_CMD_GET_INT_STATUS_REP_PACKET_SENT_PEND_BIT / SI4455_CMD_GET_INT_STATUS_REP_PACKET_RX_PEND_BIT
 *
 *  @note
 *
 */
U8 bRadio_Check_Tx_RX(void)
{
  if (RF_NIRQ == FALSE)
  {
      /* Read ITs, clear pending ones */
      si446x_get_int_status(0u, 0u, 0u);

	  if (Si446xCmd.GET_INT_STATUS.CHIP_PEND & SI446X_CMD_GET_CHIP_STATUS_REP_CHIP_PEND_CMD_ERROR_PEND_BIT)
      {
      	/* State change to */
      	si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEXT_STATE1_NEW_STATE_ENUM_SLEEP);
	
	  	/* Reset FIFO */
      	si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_FIFO_RX_BIT);
      
	  	/* State change to */
        si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEXT_STATE1_NEW_STATE_ENUM_RX);
      }

      if(Si446xCmd.GET_INT_STATUS.PH_PEND & SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_SENT_PEND_BIT)
      {
        return SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_SENT_PEND_BIT;
      }

      if(Si446xCmd.GET_INT_STATUS.PH_PEND & SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT)
      {
        /* Packet RX */

        /* Get payload length */
        si446x_fifo_info(0x00);

        si446x_read_rx_fifo(Si446xCmd.FIFO_INFO.RX_FIFO_COUNT, &customRadioPacket[0]);

        return SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT;
      }
      
	  if (Si446xCmd.GET_INT_STATUS.PH_PEND & SI446X_CMD_GET_INT_STATUS_REP_PH_STATUS_CRC_ERROR_BIT)
      {
      	/* Reset FIFO */
      	si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_FIFO_RX_BIT);
      }


  }

  return 0;
}
Beispiel #5
0
/*!
 *  Set Radio to TX mode, variable packet length.
 *
 *  @param channel Freq. Channel, Packet to be sent length of of the packet sent to TXFIFO
 *
 *  @note
 *
 */
void set_txd_mode(void)
{
  volatile unsigned int  tick_tmp=1000; //延时220uS;
  PA_Txen();
  RXD_LED(0);
  si4438_phy.RF_status=RF_IDLE_FLAG;
  si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_READY);
  while(tick_tmp--);
  si446x_get_int_status(0u, 0u, 0u);
  si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_TX_BIT);
  /* Reset the Tx Fifo */
  si4438_phy.tx_flag=TX_ON;
  si4438_phy.RF_status=RF_TX_FLAG;
  
}
Beispiel #6
0
unsigned char Rf_set(void)
{ 
  U8 SetPA[]={ RF_PA_MODE_5};
  si4438_phy.RF_status=RF_IDLE_FLAG;
  si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_READY);
  
  
  if (radio_comm_SendCmdGetResp(0x09, SetPA, 0, 0) != 0xFF)
  {
    DBUG("rf_power_up SI446X_CTS_TIMEOUT\r\n");
    return FALSE;
  }

  return TRUE;
}
/*!
 *  Set Radio to TX mode, variable packet length.
 *
 *  @param channel Freq. Channel, Packet to be sent length of of the packet sent to TXFIFO
 *
 *  @note
 *
 */
void vRadio_StartTx_Variable_Packet(U8 channel, U8 *pioRadioPacket, U8 length)
{
  /* Leave RX state */
  si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEXT_STATE1_NEW_STATE_ENUM_READY);

  /* Read ITs, clear pending ones */
  si446x_get_int_status(0u, 0u, 0u);

  /* Reset the Tx Fifo */
  si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_FIFO_TX_BIT);

  /* Fill the TX fifo with datas */
  si446x_write_tx_fifo(length, pioRadioPacket);

  /* Start sending packet, channel 0, START immediately */
   si446x_start_tx(channel, 0x80, length);
 
}
Beispiel #8
0
U8 set_hop_table(U8 UserChannel)
{
    U8 i=0,j=0;
    if(UserChannel>32)
    {
      UserChannel = PUBLIC_CHANNEL;
      
    }
    si4438_phy.RF_status=RF_IDLE_FLAG;
    si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_READY);
    Clear_int_status();
    Pro2Cmd[i++]=0x11;
    Pro2Cmd[i++]=0x50;
    Pro2Cmd[i++]=0x0C;
    Pro2Cmd[i++]=0x00;
    Pro2Cmd[i++]=Si4438HopRegister[j++]=0x30; 
    Pro2Cmd[i++]=Si4438HopRegister[j++]=0x04;
    Pro2Cmd[i++]=Si4438HopRegister[j++]=ChannelsSupported[0][0]; 
    Pro2Cmd[i++]=Si4438HopRegister[j++]=ChannelsSupported[0][1];
    Pro2Cmd[i++]=Si4438HopRegister[j++]=ChannelsSupported[UserChannel][0];
    Pro2Cmd[i++]=Si4438HopRegister[j++]=ChannelsSupported[UserChannel][1];
    Pro2Cmd[i++]=Si4438HopRegister[j++]=0xFF;
    Pro2Cmd[i++]=Si4438HopRegister[j++]=0xFF;
    Pro2Cmd[i++]=Si4438HopRegister[j++]=0xFF;
    Pro2Cmd[i++]=Si4438HopRegister[j++]=0xFF;
    Pro2Cmd[i++]=Si4438HopRegister[j++]=0xFF;
    Pro2Cmd[i++]=Si4438HopRegister[j++]=0xFF;
      
    if(set_property(Pro2Cmd,0x10)==SI446X_SUCCESS)
    {
      DBUG("set_hop_table=%d\r\n",UserChannel);
      set_pchannel=UserChannel;
      si4438_phy.PhyPrivateChannel=UserChannel;
      Clear_int_status();
      vRadio_StartRX(ChannelsSupported[0][0]);
      return TRUE;
    }
    return FALSE;
  
    
}
Beispiel #9
0
/*!
 *  Set Radio to RX mode, fixed packet length.
 *
 *  @param channel Freq. Channel
 *
 *  @note
 *
 */
void vRadio_StartRX(U8 channel)
{
//  volatile unsigned int  tick_tmp=1000; //延时220uS;
//  while(tick_tmp--);
#ifdef LOW_RATE_CHECK

  SetHighRate();
#endif
  PA_Rxen();
  si4438_phy.RF_status=RF_IDLE_FLAG;
  si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_READY);
  si4438_phy.rx_flag=RX_ON;
  si4438_phy.RF_status=RF_RX_FLAG;
  // Read ITs, clear pending ones
  si446x_get_int_status(0u, 0u, 0u);
  /* Reset FIFO */
  si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_RX_BIT);
  /* Start Receiving packet, channel 0, START immediately, Packet length according to PH */
  si446x_start_rx(channel, 0u, 0x00,
            SI446X_CMD_START_RX_ARG_RXTIMEOUT_STATE_ENUM_NOCHANGE,
            SI446X_CMD_START_RX_ARG_RXVALID_STATE_ENUM_RX,
            SI446X_CMD_START_RX_ARG_RXINVALID_STATE_ENUM_RX );
}