//===================================== u8 sx1278_LoRaRxPacket(void) //===================================== { u8 i; u8 addr; u8 packet_size; if(Get_NIRQ()) { for(i=0;i<32;i++) RxData[i] = 0x00; addr = SPIRead(LR_RegFifoRxCurrentaddr); //last packet addr SPIWrite(LR_RegFifoAddrPtr,addr); //RxBaseAddr -> FiFoAddrPtr if(sx1278SpreadFactorTable[Lora_Rate_Sel]==6) //When SpreadFactor is six£¬will used Implicit Header mode(Excluding internal packet length) packet_size=21; else packet_size = SPIRead(LR_RegRxNbBytes); //Number for received bytes SPIBurstRead(0x00, RxData, packet_size); SPIWrite(LR_RegIrqFlags,LoRa_ClearIRQ_Value); for(i=0;i<17;i++) { if(RxData[i]!=sx1278Data[i]) break; } if(i>=17) //Rx success return(1); else return(0); } else return(0); }
/****************************************************************************** **Name: SI4432_RxPacket **Function: receive package data in FIFO to buffer **Input: receive buffer ** len =0--dont care ** >0--max bytes to read **output: 1--receive sucessful ** 0--no receive or receive wrong ******************************************************************************/ byte SI4432_RxPacket(byte *buffer, int len) { byte i; int recvLen; if (!buffer) return 0; // no nil buffer! SPIWrite(0x0701); // Disable Rx chain recvLen = SPIRead(0x4B); // How many bytes do we have? if (((len > 0) && (recvLen < len)) || (len == 0)) { len = recvLen; } if (len > FIFOSIZE) len = FIFOSIZE; // so that we won't BOF for(i=0;i<len;i++) buffer[i] = 0x00; SPIBurstRead(0x7F, buffer, len); return len; }