Exemplo n.º 1
0
static void
PtInternalTransmit (BRFPacket * pkg)
{
  /* update the sequence */
  if (sequence_seed == 0)
    return;

  /* turn on redLED for TX indication */
  vLedSetRed (1);

  /* disable receive mode */
  nRFCMD_CE (0);

  /* wait in case a packet is currently received */
  vTaskDelay (3 / portTICK_RATE_MS);

  /* set TX mode */
  nRFAPI_SetRxMode (0);

  if (pkg->mac == 0xffff)
    rf_sent_broadcast++;
  else
    rf_sent_unicast++;

  pkg->sequence = sequence_seed + (xTaskGetTickCount () / portTICK_RATE_MS);

  /* update crc */
  pkg->crc =
    PtSwapLong (crc32
		((unsigned char *) pkg, sizeof (*pkg) - sizeof (pkg->crc)));

  /* encrypt the data */
  shuffle_tx_byteorder ((unsigned long *) pkg, sizeof (*pkg) / sizeof (long));
  xxtea_encode ((long *) pkg, sizeof (*pkg) / sizeof (long));
  shuffle_tx_byteorder ((unsigned long *) pkg, sizeof (*pkg) / sizeof (long));

  /* upload data to nRF24L01 */
  //hex_dump((unsigned char *) pkg, 0, sizeof(*pkg));
  nRFAPI_TX ((unsigned char *) pkg, sizeof (*pkg));

  /* transmit data */
  nRFCMD_CE (1);

  /* wait till packet is transmitted */
  vTaskDelay (3 / portTICK_RATE_MS);

  /* switch to RX mode again */
  nRFAPI_SetRxMode (1);

  /* turn off red TX indication LED */
  vLedSetRed (0);
}
Exemplo n.º 2
0
static void
nRF_tx (uint8_t power)
{

  /* encrypt data */
  xxtea_encode (g_Beacon.block, XXTEA_BLOCK_COUNT, xxtea_key);

  /* set TX power */
  nRFAPI_SetTxPower (power & 0x3);

  /* upload data to nRF24L01 */
  nRFAPI_TX (g_Beacon.byte, sizeof (g_Beacon));

  /* transmit data */
  nRFCMD_CE (1);

  /* wait for packet to be transmitted */
  pmu_sleep_ms (2);

  /* transmit data */
  nRFCMD_CE (0);
}
signed char sendBeacon( ob_data* block )
{
    unsigned int i=0;
    unsigned long crc;

	ob_switchRXMode();

    if( nRFAPI_CarrierDetect()!=STATUS_CD ) {
    	ob_switchTXMode();

    	crc = env_crc16(block->payload, sizeof(block->payload) );
    	block->crc = swapshort(crc);

    	// upload data to nRF24L01
    	nRFAPI_TX((unsigned char*)block, sizeof(ob_data) );

    	// transmit data
    	nRFLL_CE(1);
		increment(ob_int_mgmt.tx_beacons, 4);
        return 0;
    }
	increment(ob_int_mgmt.fail_tx_beacons, 4);
    return -1;
}