U8 bRadio_GetCurrentChannel(void) { // Requests the current state of the device si446x_request_device_state(); return Si446xCmd.REQUEST_DEVICE_STATE.CURRENT_CHANNEL; }
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; }
/*! * 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; }
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; }
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; }