working nordic comm, tested. May need cleaning

remotes/github/master
Ondřej Hruška 7 years ago
parent 2f4101a6e0
commit e4ae8e23fc
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 20
      comm/iface_nordic.c
  2. 9
      comm/interfaces.c
  3. 2
      comm/interfaces.h
  4. 3
      comm/messages.c
  5. 144
      comm/nrf.c
  6. 8
      comm/nrf.h
  7. 2
      gex.mk

@ -9,10 +9,11 @@
#include "nrf.h" #include "nrf.h"
#include "unit_base.h" #include "unit_base.h"
#include "system_settings.h" #include "system_settings.h"
#include "utils/hexdump.h"
extern osSemaphoreId semVcomTxReadyHandle; extern osSemaphoreId semVcomTxReadyHandle;
#define RX_PIPE_NUM 1 #define RX_PIPE_NUM 0
void iface_nordic_claim_resources(void) void iface_nordic_claim_resources(void)
{ {
@ -45,16 +46,18 @@ static uint8_t rx_buffer[32];
static void NrfIrqHandler(void *arg) static void NrfIrqHandler(void *arg)
{ {
LL_EXTI_ClearFlag_0_31(LL_EXTI_LINES[NRF_EXTI_LINENUM]); LL_EXTI_ClearFlag_0_31(LL_EXTI_LINES[NRF_EXTI_LINENUM]);
dbg_nrf("[EXTI] ---");
uint8_t pipenum; uint8_t pipenum;
uint8_t count = NRF_ReceivePacket(rx_buffer, &pipenum); uint8_t count = NRF_ReceivePacket(rx_buffer, &pipenum);
if (count > 0) { if (count > 0) {
dbg("NRF RX %d bytes", (int)count); dbg_nrf("NRF RX %d bytes", (int)count);
rxQuePostMsg(rx_buffer, count); rxQuePostMsg(rx_buffer, count);
} else { } else {
dbg("IRQ but no Rx"); dbg("IRQ but no Rx");
} }
dbg_nrf("--- end [EXTI]");
} }
bool iface_nordic_init(void) bool iface_nordic_init(void)
@ -75,10 +78,11 @@ bool iface_nordic_init(void)
LL_SPI_Disable(NRF_SPI); LL_SPI_Disable(NRF_SPI);
{ {
LL_SPI_SetBaudRatePrescaler(NRF_SPI, LL_SPI_BAUDRATEPRESCALER_DIV8); LL_SPI_SetBaudRatePrescaler(NRF_SPI, LL_SPI_BAUDRATEPRESCALER_DIV32);
//LL_SPI_BAUDRATEPRESCALER_DIV8
LL_SPI_SetClockPolarity(NRF_SPI, LL_SPI_POLARITY_LOW); LL_SPI_SetClockPolarity(NRF_SPI, LL_SPI_POLARITY_LOW);
LL_SPI_SetClockPhase(NRF_SPI, LL_SPI_PHASE_2EDGE); LL_SPI_SetClockPhase(NRF_SPI, LL_SPI_PHASE_1EDGE);
LL_SPI_SetTransferDirection(NRF_SPI, LL_SPI_FULL_DUPLEX); LL_SPI_SetTransferDirection(NRF_SPI, LL_SPI_FULL_DUPLEX);
LL_SPI_SetTransferBitOrder(NRF_SPI, LL_SPI_MSB_FIRST); LL_SPI_SetTransferBitOrder(NRF_SPI, LL_SPI_MSB_FIRST);
@ -128,7 +132,8 @@ void iface_nordic_deinit(void)
hw_deinit_pin_rsc(NRF_R_IRQ); hw_deinit_pin_rsc(NRF_R_IRQ);
} }
#define MAX_RETRY 8 // FIXME
#define MAX_RETRY 5
void iface_nordic_transmit(const uint8_t *buff, uint32_t len) void iface_nordic_transmit(const uint8_t *buff, uint32_t len)
{ {
@ -137,11 +142,12 @@ void iface_nordic_transmit(const uint8_t *buff, uint32_t len)
uint8_t chunk = (uint8_t) MIN(32, len); uint8_t chunk = (uint8_t) MIN(32, len);
uint16_t delay = 1; uint16_t delay = 1;
//hexDump("Tx chunk", buff, chunk);
for (int i = 0; i < MAX_RETRY; i++) { for (int i = 0; i < MAX_RETRY; i++) {
suc = NRF_SendPacket(RX_PIPE_NUM, buff, chunk); // use the pipe to retrieve the address suc = NRF_SendPacket(RX_PIPE_NUM, buff, chunk); // use the pipe to retrieve the address
if (!suc) { if (!suc) {
vTaskDelay(delay); vTaskDelay(delay);
delay += 5; // longer delay next time delay *= 2; // longer delay next time
} else { } else {
break; break;
} }
@ -156,7 +162,7 @@ void iface_nordic_transmit(const uint8_t *buff, uint32_t len)
} }
if (suc) { if (suc) {
dbg("+ NRF Tx OK!"); dbg_nrf("+ NRF Tx OK!");
} else { } else {
dbg("- NRF sending failed"); dbg("- NRF sending failed");
} }

@ -16,6 +16,15 @@
#include "iface_usb.h" #include "iface_usb.h"
#include "iface_nordic.h" #include "iface_nordic.h"
const char * COMPORT_NAMES[] = {
"NONE",
"USB",
"UART",
"NRF",
"LORA",
};
enum ComportSelection gActiveComport = COMPORT_USB; // start with USB so the handlers work correctly initially enum ComportSelection gActiveComport = COMPORT_USB; // start with USB so the handlers work correctly initially
static uint32_t last_switch_time = 0; // started with USB static uint32_t last_switch_time = 0; // started with USB

@ -15,6 +15,8 @@ enum ComportSelection {
COMPORT_LORA = 4, COMPORT_LORA = 4,
}; };
extern const char * COMPORT_NAMES[];
/** /**
* The currently active communication port * The currently active communication port
*/ */

@ -11,6 +11,7 @@
#include "framework/system_settings.h" #include "framework/system_settings.h"
#include "utils/malloc_safe.h" #include "utils/malloc_safe.h"
#include "platform/status_led.h" #include "platform/status_led.h"
#include "interfaces.h"
static TinyFrame tf_; static TinyFrame tf_;
TinyFrame *comm = &tf_; TinyFrame *comm = &tf_;
@ -23,7 +24,7 @@ TinyFrame *comm = &tf_;
static TF_Result lst_ping(TinyFrame *tf, TF_Msg *msg) static TF_Result lst_ping(TinyFrame *tf, TF_Msg *msg)
{ {
com_respond_snprintf(msg->frame_id, MSG_SUCCESS, com_respond_snprintf(msg->frame_id, MSG_SUCCESS,
"GEX v%s on %s", GEX_VERSION, GEX_PLATFORM); "GEX v%s on %s (%s)", GEX_VERSION, GEX_PLATFORM, COMPORT_NAMES[gActiveComport]);
return TF_STAY; return TF_STAY;
} }

@ -53,13 +53,17 @@ do { \
#define _delay_us(n) __asm_loop((n)*8) #define _delay_us(n) __asm_loop((n)*8)
static inline void CE(bool level) { static inline void CE(bool level) {
__asm_loop(1);
if (level) LL_GPIO_SetOutputPin(NRF_CE_GPIO_Port, NRF_CE_Pin); if (level) LL_GPIO_SetOutputPin(NRF_CE_GPIO_Port, NRF_CE_Pin);
else LL_GPIO_ResetOutputPin(NRF_CE_GPIO_Port, NRF_CE_Pin); else LL_GPIO_ResetOutputPin(NRF_CE_GPIO_Port, NRF_CE_Pin);
__asm_loop(1);
} }
static inline void NSS(bool level) { static inline void NSS(bool level) {
__asm_loop(1);
if (level) LL_GPIO_SetOutputPin(NRF_NSS_GPIO_Port, NRF_NSS_Pin); if (level) LL_GPIO_SetOutputPin(NRF_NSS_GPIO_Port, NRF_NSS_Pin);
else LL_GPIO_ResetOutputPin(NRF_NSS_GPIO_Port, NRF_NSS_Pin); else LL_GPIO_ResetOutputPin(NRF_NSS_GPIO_Port, NRF_NSS_Pin);
__asm_loop(1);
} }
static uint8_t spi(uint8_t tx) { static uint8_t spi(uint8_t tx) {
@ -136,9 +140,6 @@ static uint8_t spi(uint8_t tx) {
RD_CONFIG_EN_CRC | \ RD_CONFIG_EN_CRC | \
RD_CONFIG_CRCO) RD_CONFIG_CRCO)
#define CEHIGH CE(1)
#define CELOW CE(0)
static inline uint8_t CS(uint8_t hl) static inline uint8_t CS(uint8_t hl)
{ {
if (hl == 1) { if (hl == 1) {
@ -166,7 +167,21 @@ static uint8_t NRF_WriteRegister(uint8_t reg, uint8_t value)
status = spi(CMD_WRITE_REG | reg); status = spi(CMD_WRITE_REG | reg);
spi(value); spi(value);
} }
dbg("Wr[0x%02x] := 0x%02x", (int)reg, (int) value); dbg_nrf("Wr[0x%02x] := 0x%02x", (int)reg, (int) value);
uint8_t reg_val = 0;
CHIPSELECT {
spi(CMD_READ_REG | reg);
reg_val = spi(0);
}
dbg_nrf(" verify 0x%02x", (int)reg_val);
if (reg_val != value)
dbg_nrf(" !!!");
else
dbg_nrf(" OK");
return status; return status;
} }
@ -177,7 +192,7 @@ static uint8_t NRF_ReadRegister(uint8_t reg)
spi(CMD_READ_REG | reg); spi(CMD_READ_REG | reg);
reg_val = spi(0); reg_val = spi(0);
} }
dbg("Rd[0x%02x] = 0x%02x", (int)reg, (int) reg_val); dbg_nrf("Rd[0x%02x] = 0x%02x", (int)reg, (int) reg_val);
return reg_val; return reg_val;
} }
@ -218,12 +233,17 @@ void NRF_SetBaseAddress(const uint8_t *Bytes4)
{ {
memcpy(nrf_base_address, Bytes4, 4); memcpy(nrf_base_address, Bytes4, 4);
nrf_base_address[4] = 0; nrf_base_address[4] = 0;
// write it to the two full-width address registers
NRF_WriteBuffer(RG_RX_ADDR_P0, nrf_base_address, 5);
nrf_base_address[4] = 1;// to be different
NRF_WriteBuffer(RG_RX_ADDR_P1, nrf_base_address, 5);
} }
void NRF_SetRxAddress(uint8_t pipenum, uint8_t AddrByte) void NRF_SetRxAddress(uint8_t pipenum, uint8_t AddrByte)
{ {
if (pipenum > 5) { if (pipenum > 5) {
dbg("!! bad pipe %d", pipenum); dbg_nrf("!! bad pipe %d", pipenum);
return; return;
} }
@ -231,13 +251,13 @@ void NRF_SetRxAddress(uint8_t pipenum, uint8_t AddrByte)
nrf_pipe_addr[pipenum] = AddrByte; nrf_pipe_addr[pipenum] = AddrByte;
dbg("Set Rx addr (pipe %d) = 0x%02x", (int)pipenum, AddrByte); dbg_nrf("Set Rx addr (pipe %d) = 0x%02x", (int)pipenum, AddrByte);
if (pipenum == 0) { if (pipenum == 0) {
dbg("W ADDR_PA0: %02X-%02X-%02X-%02X-%02X", nrf_base_address[0], nrf_base_address[1], nrf_base_address[2], nrf_base_address[3], nrf_base_address[4]); dbg_nrf("W ADDR_PA0: %02X-%02X-%02X-%02X-%02X", nrf_base_address[0], nrf_base_address[1], nrf_base_address[2], nrf_base_address[3], nrf_base_address[4]);
NRF_WriteBuffer(RG_RX_ADDR_P0, nrf_base_address, 5); NRF_WriteBuffer(RG_RX_ADDR_P0, nrf_base_address, 5);
} }
else if (pipenum == 1) { else if (pipenum == 1) {
dbg("W ADDR_PA1: %02X-%02X-%02X-%02X-%02X", nrf_base_address[0], nrf_base_address[1], nrf_base_address[2], nrf_base_address[3], nrf_base_address[4]); dbg_nrf("W ADDR_PA1: %02X-%02X-%02X-%02X-%02X", nrf_base_address[0], nrf_base_address[1], nrf_base_address[2], nrf_base_address[3], nrf_base_address[4]);
NRF_WriteBuffer(RG_RX_ADDR_P1, nrf_base_address, 5); NRF_WriteBuffer(RG_RX_ADDR_P1, nrf_base_address, 5);
} }
else { else {
@ -275,6 +295,7 @@ uint8_t NRF_Addr2PipeNum(uint8_t addr)
void NRF_EnablePipe(uint8_t pipenum) void NRF_EnablePipe(uint8_t pipenum)
{ {
dbg_nrf("Enable pipe num %d", (int)pipenum);
uint8_t enabled = NRF_ReadRegister(RG_EN_RXADDR); uint8_t enabled = NRF_ReadRegister(RG_EN_RXADDR);
enabled |= 1 << pipenum; enabled |= 1 << pipenum;
NRF_WriteRegister(RG_EN_RXADDR, enabled); NRF_WriteRegister(RG_EN_RXADDR, enabled);
@ -295,34 +316,39 @@ static void NRF_SetTxAddress(uint8_t SendTo)
{ {
nrf_base_address[4] = SendTo; nrf_base_address[4] = SendTo;
dbg("W Tx_ADDR + Rx0: %02X-%02X-%02X-%02X-%02X", nrf_base_address[0], nrf_base_address[1], nrf_base_address[2], nrf_base_address[3], nrf_base_address[4]); dbg_nrf("W Tx_ADDR + Rx0: %02X-%02X-%02X-%02X-%02X",
nrf_base_address[0], nrf_base_address[1], nrf_base_address[2], nrf_base_address[3], nrf_base_address[4]);
NRF_WriteBuffer(RG_TX_ADDR, nrf_base_address, 5); NRF_WriteBuffer(RG_TX_ADDR, nrf_base_address, 5);
NRF_WriteBuffer(RG_RX_ADDR_P0, nrf_base_address, 5); // the ACK will come to pipe 0 NRF_WriteBuffer(RG_RX_ADDR_P0, nrf_base_address, 5); // the ACK will come to pipe 0
} }
void NRF_PowerDown(void) void NRF_PowerDown(void)
{ {
dbg("PDn"); dbg_nrf("PDn");
CELOW; CE(0);
NRF_WriteRegister(RG_CONFIG, ModeBits); NRF_WriteRegister(RG_CONFIG, ModeBits);
} }
void NRF_ModeTX(void) void NRF_ModeTX(void)
{ {
dbg("Tx Mode"); dbg_nrf("Tx Mode");
CELOW; CE(0);
uint8_t m = NRF_ReadRegister(RG_CONFIG); uint8_t m = NRF_ReadRegister(RG_CONFIG);
NRF_WriteRegister(RG_CONFIG, ModeBits | RD_CONFIG_PWR_UP); NRF_WriteRegister(RG_CONFIG, ModeBits | RD_CONFIG_PWR_UP);
if ((m & RD_CONFIG_PWR_UP) == 0) LL_mDelay(5); if ((m & RD_CONFIG_PWR_UP) == 0) {
// switching on
LL_mDelay(5);
}
} }
void NRF_ModeRX(void) void NRF_ModeRX(void)
{ {
dbg("Rx Mode"); dbg_nrf("Rx Mode");
NRF_WriteRegister(RG_CONFIG, ModeBits | RD_CONFIG_PWR_UP | RD_CONFIG_PRIM_RX); NRF_WriteRegister(RG_CONFIG, ModeBits | RD_CONFIG_PWR_UP | RD_CONFIG_PRIM_RX);
NRF_SetRxAddress(0, nrf_pipe_addr[0]); // set the P0 address - it was changed during Rx for ACK reception NRF_SetRxAddress(0, nrf_pipe_addr[0]); // set the P0 address - it was changed during Rx for ACK reception
CEHIGH; CE(1);
//if ((m&2)==0) LL_mDelay()(5); You don't need to wait. Just nothing will come for 5ms or more //if ((m&2)==0) LL_mDelay()(5); You don't need to wait. Just nothing will come for 5ms or more
} }
@ -360,7 +386,9 @@ uint8_t NRF_ReceivePacket(uint8_t *Packet, uint8_t *PipeNum)
uint8_t pw = 0, status; uint8_t pw = 0, status;
if (!NRF_IsRxPacket()) return 0; if (!NRF_IsRxPacket()) return 0;
CELOW; const uint8_t orig_conf = NRF_ReadRegister(RG_CONFIG);
CE(0); // quit Rx mode - go idle
CHIPSELECT { CHIPSELECT {
status = spi(CMD_RD_RX_PL_WIDTH); status = spi(CMD_RD_RX_PL_WIDTH);
pw = spi(0); pw = spi(0);
@ -370,19 +398,25 @@ uint8_t NRF_ReceivePacket(uint8_t *Packet, uint8_t *PipeNum)
CHIPSELECT { CHIPSELECT {
spi(CMD_FLUSH_RX); spi(CMD_FLUSH_RX);
} }
NRF_WriteRegister(RG_STATUS, RD_STATUS_RX_DR); pw = 0;
return 0; } else {
// Read the reception pipe number
*PipeNum = ((status & RD_STATUS_RX_PNO) >> 1);
CHIPSELECT {
spi(CMD_RD_RX_PLD);
for (uint8_t i = 0; i < pw; i++) Packet[i] = spi(0);
}
} }
NRF_WriteRegister(RG_STATUS, RD_STATUS_RX_DR); // Clear the RX_DR interrupt
// Read the reception pipe number if ((orig_conf & RD_CONFIG_PWR_UP) == 0) {
*PipeNum = (status & RD_STATUS_RX_PNO) >> 1; dbg_nrf("going back PwrDn");
NRF_PowerDown();
CHIPSELECT { }
spi(CMD_RD_RX_PLD); else if ((orig_conf & RD_CONFIG_PRIM_RX) == RD_CONFIG_PRIM_RX) {
for (uint8_t i = 0; i < pw; i++) Packet[i] = spi(0); dbg_nrf("going back PwrUp+Rx");
NRF_ModeRX();
} }
NRF_WriteRegister(RG_STATUS, RD_STATUS_RX_DR); // Clear the RX_DR interrupt
CEHIGH;
return pw; return pw;
} }
@ -395,14 +429,16 @@ bool NRF_IsRxPacket(void)
bool NRF_SendPacket(uint8_t PipeNum, const uint8_t *Packet, uint8_t Length) bool NRF_SendPacket(uint8_t PipeNum, const uint8_t *Packet, uint8_t Length)
{ {
if (!nrf_pipe_enabled[PipeNum]) { if (!nrf_pipe_enabled[PipeNum]) {
dbg("!! Pipe %d not enabled", PipeNum); dbg_nrf("!! Pipe %d not enabled", PipeNum);
return 0; return 0;
} }
dbg_nrf("Will tx to addr %02x", nrf_pipe_addr[PipeNum]);
const uint8_t orig_conf = NRF_ReadRegister(RG_CONFIG); const uint8_t orig_conf = NRF_ReadRegister(RG_CONFIG);
CELOW; CE(0);
NRF_ModeTX(); // Make sure in TX mode NRF_ModeTX(); // Make sure in TX mode
NRF_SetTxAddress(nrf_pipe_addr[PipeNum]); NRF_SetTxAddress(nrf_pipe_addr[PipeNum]); // this sets the Tx addr and also pipe 0 addr for ACK
CHIPSELECT { CHIPSELECT {
spi(CMD_FLUSH_TX); spi(CMD_FLUSH_TX);
@ -413,58 +449,56 @@ bool NRF_SendPacket(uint8_t PipeNum, const uint8_t *Packet, uint8_t Length)
for (uint8_t i = 0; i < Length; i++) spi(Packet[i]); for (uint8_t i = 0; i < Length; i++) spi(Packet[i]);
}; };
CEHIGH; // CE pulse
_delay_us(15); // At least 10 us CE(1);
CELOW; _delay_us(20); // At least 10 us
CE(0);
uint8_t st = 0; uint8_t st = 0;
while ((st & (RD_STATUS_MAX_RT|RD_STATUS_TX_DS)) == 0) { while ((st & (RD_STATUS_MAX_RT|RD_STATUS_TX_DS)) == 0) {
st = NRF_ReadStatus(); // Packet acked or timed out st = NRF_ReadStatus(); // Packet acked or timed out
} }
dbg("Send status: MAX_RT %d, SENT %d", (st&RD_STATUS_MAX_RT) != 0, (st&RD_STATUS_TX_DS) != 0); dbg_nrf("Send status: 0x%02x - MAX_RT %d, SENT %d", (int)st,
(st&RD_STATUS_MAX_RT) != 0, (st&RD_STATUS_TX_DS) != 0);
NRF_WriteRegister(RG_STATUS, st & (RD_STATUS_MAX_RT|RD_STATUS_TX_DS)); // Clear the bit NRF_WriteRegister(RG_STATUS, st & (RD_STATUS_MAX_RT|RD_STATUS_TX_DS)); // Clear the bit
if ((orig_conf & RD_CONFIG_PWR_UP) == 0) { if ((orig_conf & RD_CONFIG_PWR_UP) == 0) {
dbg("going back PwrDn"); dbg_nrf("going back PwrDn");
NRF_PowerDown(); NRF_PowerDown();
} }
else if ((orig_conf & RD_CONFIG_PRIM_RX) == RD_CONFIG_PRIM_RX) { else if ((orig_conf & RD_CONFIG_PRIM_RX) == RD_CONFIG_PRIM_RX) {
dbg("going back PwrUp+Rx"); dbg_nrf("going back PwrUp+Rx");
NRF_ModeRX(); NRF_ModeRX();
} }
return 0 != (st & RD_STATUS_TX_DS); // success return 0 != (st & RD_STATUS_TX_DS); // success
} }
void NRF_Reset(void) void NRF_Init(uint8_t pSpeed)
{ {
// Set the required output pins
NSS(1); NSS(1);
CELOW; CE(0);
NRF_PowerDown();
NRF_WriteRegister(RG_EN_RXADDR, 0); // disable all pipes LL_mDelay(200);
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
nrf_pipe_addr[i] = 0; nrf_pipe_addr[i] = 0;
nrf_pipe_enabled[i] = 0; nrf_pipe_enabled[i] = 0;
} }
}
void NRF_Init(uint8_t pSpeed) // clear flags etc
{ NRF_PowerDown();
// Set the required output pins CHIPSELECT { spi(CMD_FLUSH_RX); }
NSS(1); CHIPSELECT { spi(CMD_FLUSH_TX); }
CELOW; NRF_WriteRegister(RG_STATUS, 0x70);
LL_mDelay(200);
NRF_WriteRegister(RG_CONFIG, ModeBits); NRF_WriteRegister(RG_CONFIG, ModeBits);
NRF_WriteRegister(RG_SETUP_AW, 0b11); // 5 byte addresses NRF_WriteRegister(RG_SETUP_AW, 0b11); // 5 byte addresses
// default NRF_WriteRegister(RG_EN_RXADDR, 0x01); // disable all, enable pipe 0 - this is required for shockburst, despite not being specified in the DS
// NRF_EnablePipe(0);
NRF_WriteRegister(RG_SETUP_RETR, 0x18); // 8 retries NRF_WriteRegister(RG_SETUP_RETR, 0x18); // 8 retries
NRF_WriteRegister(RG_RF_CH, 2); // channel 2 NO HIGHER THAN 83 in USA! NRF_WriteRegister(RG_RF_CH, 2); // channel 2 NO HIGHER THAN 83 in USA!
@ -474,9 +508,7 @@ void NRF_Init(uint8_t pSpeed)
NRF_WriteRegister(RG_DYNPD, 0b111111); // Dynamic packet length NRF_WriteRegister(RG_DYNPD, 0b111111); // Dynamic packet length
NRF_WriteRegister(RG_FEATURE, 0b100); // Enable dynamic payload, and no payload in the ack. NRF_WriteRegister(RG_FEATURE, 0b100); // Enable dynamic payload, and no payload in the ack.
for (int i = 0; i < 6; i++) { // for (int i = 0; i < 6; i++) {
NRF_WriteRegister(RG_RX_PW_P0+i, 32); // Receive 32 byte packets - XXX this is probably not needed with dynamic length // NRF_WriteRegister(RG_RX_PW_P0+i, 32); // Receive 32 byte packets - XXX this is probably not needed with dynamic length
} // }
//NRFModePowerDown(); // Already in power down mode, dummy
} }

@ -23,6 +23,9 @@
#include "resources.h" #include "resources.h"
#include "nrf_pins.h" #include "nrf_pins.h"
#define dbg_nrf(...) do{}while(0)
//#define dbg_nrf(...) dbg(##__VA_ARGS__)
// Initialize SPI and the Nordic // Initialize SPI and the Nordic
/** /**
@ -103,11 +106,6 @@ uint8_t NRF_PipeNum2Addr(uint8_t pipe_num);
*/ */
uint8_t NRF_Addr2PipeNum(uint8_t addr); uint8_t NRF_Addr2PipeNum(uint8_t addr);
/**
* Reset as much as possible (incl. removing pipes)
*/
void NRF_Reset(void);
/** /**
* Send a packet (takes care of mode switching etc) * Send a packet (takes care of mode switching etc)
* *

@ -95,7 +95,7 @@ GEX_CDEFS = $(GEX_CDEFS_BASE) \
-DDEBUG_VFS=0 \ -DDEBUG_VFS=0 \
-DDEBUG_FLASH_WRITE=0 \ -DDEBUG_FLASH_WRITE=0 \
-DVERBOSE_HARDFAULT=1 \ -DVERBOSE_HARDFAULT=1 \
-DUSE_STACK_MONITOR=1 \ -DUSE_STACK_MONITOR=0 \
-DUSE_DEBUG_UART=1 \ -DUSE_DEBUG_UART=1 \
-DDEBUG_MALLOC=0 \ -DDEBUG_MALLOC=0 \
-DDEBUG_RSC=0 -DDEBUG_RSC=0

Loading…
Cancel
Save