示例#1
0
文件: cc1101.c 项目: gefa/CC1101
/**
 * receiveData
 *
 * Read data packet from RX FIFO
 *
 * 'packet'     Container for the packet received
 *
 * Return:
 *      Amount of bytes received
 */
byte CC1101_receiveData(CCPACKET * packet)
{

	  byte val;

	  // Rx FIFO overflow?
	  if (((val=readStatusReg(CC1101_MARCSTATE)) & 0x1F) == 0x11)
	  {
	    setIdleState();       // Enter IDLE state
	    flushRxFifo();        // Flush Rx FIFO
	    //CC1101_cmdStrobe(CC1101_SFSTXON);
	    packet->length = 0;
	  }
	  // Any byte waiting to be read?
	  else if ((val=readStatusReg(CC1101_RXBYTES)) & 0x7F)
	  {
	    // Read data length
	    packet->length = readConfigReg(CC1101_RXFIFO);
	    // If packet is too long
	    if (packet->length > CC1101_DATA_LEN)
	      packet->length = 0;   // Discard packet
	    else
	    {
	      // Read data packet
	      CC1101_readBurstReg(packet->data, CC1101_RXFIFO, packet->length);
	      // Read RSSI
	      packet->rssi = readConfigReg(CC1101_RXFIFO);
	      // Read LQI and CRC_OK
	      val = readConfigReg(CC1101_RXFIFO);
	      packet->lqi = val & 0x7F;
	      packet->crc_ok = (val & 0x80)>>7;
	    }
	  }
示例#2
0
文件: Thermal.c 项目: sdajani/sdp
void Thermal_init(){
    I2C_init(THERMAL_I2C_ID,I2C_CLOCK_FREQ);
    count = 0;

    readEeprom();
    writeTrimmingValue();
    writeConfigReg();
    readConfigReg();
    configCalculationData();

    Timer_new(TIMER_THERMAL,READ_DELAY);
}
示例#3
0
/**
 * receiveData
 * 
 * Read data packet from RX FIFO
 *
 * 'packet'	Container for the packet received
 * 
 * Return:
 * 	Amount of bytes received
 */
byte CC1101::receiveData(CCPACKET * packet)
{
  byte val;
  byte rxBytes = readStatusReg(CC1101_RXBYTES);

  // Any byte waiting to be read and no overflow?
  if (rxBytes & 0x7F && !(rxBytes & 0x80))
  {
    // Read data length
    packet->length = readConfigReg(CC1101_RXFIFO);
    // If packet is too long
    if (packet->length > CC1101_DATA_LEN)
      packet->length = 0;   // Discard packet
    else
    {
      // Read data packet
      readBurstReg(packet->data, CC1101_RXFIFO, packet->length);
      // Read RSSI
      packet->rssi = readConfigReg(CC1101_RXFIFO);
      // Read LQI and CRC_OK
      val = readConfigReg(CC1101_RXFIFO);
      packet->lqi = val & 0x7F;
      packet->crc_ok = bitRead(val, 7);
    }
  }
  else
    packet->length = 0;

  setIdleState();       // Enter IDLE state
  flushRxFifo();        // Flush Rx FIFO
  //cmdStrobe(CC1101_SCAL);

  // Back to RX state
  setRxState();

  return packet->length;
}
示例#4
0
/**
 * receiveData
 * 
 * Read data packet from RX FIFO
 * 
 * Return:
 * 	Amount fo bytes received
 * 'packet'	Container for the packet received
 */
byte CC1101::receiveData(CCPACKET * packet)
{
  byte val;

  // Any byte waiting to be read?
  if (readStatusReg(CC1101_RXBYTES) & 0x7F)
  {
    // Read data length
    packet->length = readConfigReg(CC1101_RXFIFO);

    // If packewt is too long
    if (packet->length > CC1101_DATA_LEN)
      packet->length = 0;   // Discard packet
    else
    {
      // Read data packet
      readBurstReg(packet->data, CC1101_RXFIFO, packet->length);
      // Read RSSI
      packet->rssi = readConfigReg(CC1101_RXFIFO);
      // Read LQI and CRC_OK
      val = readConfigReg(CC1101_RXFIFO);
      packet->lqi = val & 0x7F;
      packet->crc_ok = bitRead(val, 7);
    }
  }
  else
    packet->length = 0;

  // Flush RX FIFO. Don't uncomment
  //cmdStrobe(CC1101_SFRX);

  // Enter back into RX state
  setRxState(); 

  return packet->length;
}