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); }
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; }