123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- #include "myRadio.h"
- #include "board.h"
- #include "stm32f10x.h"
- #include "stm32f10x_exti.h"
- #include "misc.h"
- //------------radio include
- #include "sx1208.h"
- //------------
- #include "myRadio_gpio.h"
- // #include "myRadio_setting.h"
- int8_t rfTxPower;
- sx1208_rx_pkt_t *rx_pkt;
- static rfRxCallBack rxCb;
- static uint8_t rfRxBuffer[255];
- void EXTI0_IRQHandler(void)
- {
- if(EXTI_GetITStatus(EXTI_Line0) != RESET)
- {
- /* Clear the EXTI line 1 pending bit */
- EXTI_ClearITPendingBit(EXTI_Line0);
- sx1208_onDioIrq();
- }
- }
- // BOARD_PIN_SPI_GPIOB
- void NVIC_Config()
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
-
- EXTI_ClearITPendingBit(EXTI_Line0);
- EXTI_InitStructure.EXTI_Line = EXTI_Line0;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);
- /* Enable and set EXTI1 Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
- void sx1208_event(sx1208_event_t state, void *ptr)
- {
- switch(state){
- case SX1208_TX_DONE:
- {
- rfRxPacket_ts rfRxPacket;
- if (rxCb)
- {
- rxCb(TX_STA_SECCESS, rfRxPacket);
- }
- }
- break;
- case SX1208_RX_DONE:
- {
- rfRxPacket_ts rfRxPacket;
- rx_pkt = ptr;
- if (rx_pkt->len > MAX_RF_PACKET_LEN)
- {
- rx_pkt->len = MAX_RF_PACKET_LEN;
- }
-
- memset(rfRxPacket.payload, 0, sizeof(rfRxPacket.payload));
- memcpy(rfRxPacket.payload, rx_pkt->buf, rx_pkt->len);
- rfRxPacket.len = rx_pkt->len;
- rfRxPacket.rssi = (-rx_pkt->raw_rssi) / 2;
- if (rxCb)
- {
- rxCb(RX_STA_SECCESS, rfRxPacket);
- }
- }
- break;
- case SX1208_RX_ERROR:
- {
- rfRxPacket_ts rfRxPacket;
- if (rxCb)
- {
- rxCb(RX_STA_TIMEOUT, rfRxPacket);
- }
- }
- break;
- case SX1208_RX_TIMEOUT:
- {
- rfRxPacket_ts rfRxPacket;
- if (rxCb)
- {
- rxCb(RX_STA_TIMEOUT, rfRxPacket);
- }
- }
- break;
- default:
- break;
- }
- }
- void myRadio_init(int agr0, void *agr1_ptr)
- {
- sx1208_config_t sx1208_config;
- myRadio_gpio_init();
- NVIC_Config();
- sx1208_init(sx1208_event);
- sx1208_config.protocol = SX1208_PROTOCOL_NONE;
- sx1208_config.frf = 915000000;
- // sx1208_config.bitrate = 4800;
- // sx1208_config.fdev = 5005;
- sx1208_config.bitrate = 10000;
- sx1208_config.fdev = 25000;
- sx1208_config.crc_mode = SX1208_CRC_OFF;
- sx1208_config.header_mode = SX1208_HEADER_ENABLE;
- sx1208_config.payload_len = 0; // Set
- sx1208_config.tx_power = 20;
- sx1208_config.tx_preamble_len = 6;
- sx1208_config.rx_preamble_len = 5;
- sx1208_config.sync_word_len = 4;
- sx1208_config.sync_word[0] = 0x55;
- sx1208_config.sync_word[1] = 0x55;
- sx1208_config.sync_word[2] = 0x98;
- sx1208_config.sync_word[3] = 0xF3;
- // sx1208_config.sync_word[0] = 0xC1;
- // sx1208_config.sync_word[1] = 0x94;
- // sx1208_config.sync_word[2] = 0xC1;
- // sx1208_config.sync_word[3] = 0x00;
- // sx1208_initParams();
- sx1208_set_config(&sx1208_config);
- if ((rfRxCallBack )agr1_ptr)
- {
- rxCb = (rfRxCallBack )agr1_ptr;
- }
- }
- void myRadio_process(void)
- {
- sx1208_process();
- }
- void myRadio_abort(void)
- {
- sx1208_set_mode(SX1208_MODE_STANDBY);
- }
- void myRadio_setChipType(uint8_t type)
- {
- }
- uint8_t myRadio_getChipType(void)
- {
- return 0;
- }
- uint32_t myRadio_getFrequency(void)
- {
- return 0;
- }
- int8_t myRadio_getRssi(void)
- {
- return (-sx1208_read_rssi()) / 2;
- }
- void myRadio_setFrequency(uint32_t freq)
- {
- sx1208_set_frf(freq);
- }
- int8_t myRadio_getTxPower(void)
- {
- return rfTxPower;
- }
- void myRadio_setTxPower(int8_t power)
- {
- rfTxPower = power;
- sx1208_set_tx_power(power);
- }
- void myRadio_transmit(rfTxPacket_ts *packet)
- {
- sx1208_send(packet->payload, packet->len, 0);
- }
- void myRadio_receiver(void)
- {
- sx1208_receive(rfRxBuffer, 255, 0);
- }
- void myRadio_receiverSync(rfRxPacket_ts *packet)
- {
- }
- void myRadio_setCtrl(controlMode_te mode, uint32_t value)
- {
- static uint8_t old_mode = 0xff;
- // if (old_mode == mode)
- // {
- // return;
- // }
-
- switch (mode)
- {
- case RADIO_EXT_CONTROL_TX_UNMODULATED:
- {
- sx1208_set_frf(value);
- sx1208_set_fdev(0);
- sx1208_tx_test_mode();
- }
- break;
- case RADIO_EXT_CONTROL_RX_SENSITIVITY:
- {
- sx1208_set_frf(value);
- // sx1208_set_bitrate(4800);
- // sx1208_set_fdev(8000);
- // sx1208_set_rxbw(8000, 4800);
- sx1208_set_bitrate(10000);
- sx1208_set_fdev(25000);
- sx1208_set_rxbw(25000, 10000);
- sx1208_rx_test_mode();
- }
- break;
-
- default:
- break;
- }
- old_mode = mode;
- }
|