3 #ifdef HAS_R0KETBEAM_SUPPORT
11 #include <avr/pgmspace.h>
35 #if defined(PRINT_NORESPONSE)
39 void r0ketbeam_setup(void)
42 nrf24_setDataRate(RF24_2MBPS
);
45 nrf24_setPayloadSize(16);
46 nrf24_setCRCLength(RF24_CRC_8
);
47 nrf24_openReadingPipe(1, 0x0102030201LL
);
48 nrf24_openWritingPipe(0x0102030201LL
);
49 uart_puts_p(PSTR("RF24 Carrier: "));
50 uint8_t carrier
= nrf24_testCarrier();
51 uart_putc(carrier
?'Y':'N');
53 nrf24_startListening();
56 uint16_t flip16(uint16_t number
)
58 return number
>>8|number
<<8;
61 uint16_t crc16(uint8_t* buf
, int len
)
63 /* code from r0ket/firmware/basic/crc.c */
64 uint16_t crc
= 0xffff;
65 for (int i
=0; i
< len
; i
++)
67 crc
= (unsigned char)(crc
>> 8) | (crc
<< 8);
69 crc
^= (unsigned char)(crc
& 0xff) >> 4;
70 crc
^= (crc
<< 8) << 4;
71 crc
^= ((crc
& 0xff) << 4) << 1;
76 //CAUTION!!1! "id" is little-endian
77 void sendNick(uint32_t id
, char* name
)
83 memset(&pkt
.name
, 0, sizeof(pkt
.name
));
84 strncpy((char*)&pkt
.name
, name
, min(8,strlen(name
)));
85 pkt
.crc
= flip16(crc16((uint8_t*)&pkt
, sizeof(pkt
)-2));
87 nrf24_stopListening();
88 nrf24_openWritingPipe(0x0102030201LL
);
89 nrf24_write(&pkt
, sizeof(pkt
));
90 nrf24_startListening();
93 //CAUTION!!1! "id" and "sequence" are little-endian
94 void sendDummyPacket(uint32_t id
, uint32_t sequence
)
100 pkt
.sequence
= sequence
;
105 pkt
.crc
= flip16(crc16((uint8_t*)&pkt
, sizeof(pkt
)-2));
107 nrf24_stopListening();
108 nrf24_write((uint8_t*)&pkt
, sizeof(pkt
));
109 nrf24_startListening();
112 int last_sent_packet
= 0;
113 char* nick
= "c_leuse";
115 void r0ketbeam_loop(void)
117 //sorry, since we are not arduino, we do not yet have a millis() function.
118 //int delta = millis() - last_sent_packet;
122 last_sent_packet = millis(); //FIXME little endianness, anyone?
123 //printf("[%i] ", delta);
125 uint32_t id = 0x78563412UL;
128 sprintf((char*)&myNick, "*[%u]", (unsigned int)millis());
129 myNick[sizeof(myNick)-1] = '\0';
131 Serial.print("# Sending nick '");
132 Serial.print(myNick);
133 Serial.print("' as 0x");
134 Serial.print(id, HEX);
135 Serial.println(" ...");
136 sendNick(id, (char*)&myNick);
138 //sendDummyPacket(id, last_sent_packet);
142 if (nrf24_available()){
144 nrf24_read(&buf
, sizeof(buf
));
146 #ifdef PRINT_NORESPONSE
152 uart_puts_p(PSTR("RF24 RECV "));
153 uart_puthex_flip_32(buf
.id
);
156 uart_puthex_flip_32(buf
.sequence
);
159 uart_putdec(buf
.strength
);
162 uart_puthex(buf
.protocol
);
165 uint16_t crc
= flip16(crc16((uint8_t*)&buf
, sizeof(buf
)-2));
167 uart_puts_p(PSTR("RF24 ! CRC mismatch (expected/got): "));
170 uart_puthex_16(buf
.crc
);
174 #ifdef PRINT_NORESPONSE
185 #else//HAS_R0KETBEAM_SUPPORT
187 void r0ketbeam_loop(){}
188 void r0ketbeam_setup(){}
190 #endif//HAS_R0KETBEAM_SUPPORT