| LibDriver NRF24L01 1.0.0 NRF24L01 full function driver

driver_nrf24l01.c
Go to the documentation of this file.
1
37 #include "driver_nrf24l01.h"
38
42 #define CHIP_NAME "Nordic nRF24L01"
43 #define MANUFACTURER_NAME "Nordic"
44 #define SUPPLY_VOLTAGE_MIN 1.9f
45 #define SUPPLY_VOLTAGE_MAX 3.6f
46 #define MAX_CURRENT 13.50f
47 #define TEMPERATURE_MIN -40.0f
48 #define TEMPERATURE_MAX 85.0f
49 #define DRIVER_VERSION 1000
54 #define NRF24L01_COMMAND_R_REGISTER 0x00
55 #define NRF24L01_COMMAND_W_REGISTER 0x20
56 #define NRF24L01_COMMAND_R_RX_PAYLOAD 0x61
57 #define NRF24L01_COMMAND_W_TX_PAYLOAD 0xA0
58 #define NRF24L01_COMMAND_FLUSH_TX 0xE1
59 #define NRF24L01_COMMAND_FLUSH_RX 0xE2
60 #define NRF24L01_COMMAND_REUSE_TX_PL 0xE3
61 #define NRF24L01_COMMAND_R_RX_PL_WID 0x60
62 #define NRF24L01_COMMAND_W_ACK_PAYLOAD 0xA8
63 #define NRF24L01_COMMAND_W_TX_PAYLOAD_NO_ACK 0xB0
64 #define NRF24L01_COMMAND_NOP 0xFF
69 #define NRF24L01_REG_CONFIG 0x00
70 #define NRF24L01_REG_EN_AA 0x01
71 #define NRF24L01_REG_EN_RXADDR 0x02
72 #define NRF24L01_REG_SETUP_AW 0x03
73 #define NRF24L01_REG_SETUP_RETR 0x04
74 #define NRF24L01_REG_RF_CH 0x05
75 #define NRF24L01_REG_RF_SETUP 0x06
76 #define NRF24L01_REG_STATUS 0x07
77 #define NRF24L01_REG_OBSERVE_TX 0x08
78 #define NRF24L01_REG_RPD 0x09
79 #define NRF24L01_REG_RX_ADDR_P0 0x0A
80 #define NRF24L01_REG_RX_ADDR_P1 0x0B
81 #define NRF24L01_REG_RX_ADDR_P2 0x0C
82 #define NRF24L01_REG_RX_ADDR_P3 0x0D
83 #define NRF24L01_REG_RX_ADDR_P4 0x0E
84 #define NRF24L01_REG_RX_ADDR_P5 0x0F
85 #define NRF24L01_REG_TX_ADDR 0x10
86 #define NRF24L01_REG_RX_PW_P0 0x11
87 #define NRF24L01_REG_RX_PW_P1 0x12
88 #define NRF24L01_REG_RX_PW_P2 0x13
89 #define NRF24L01_REG_RX_PW_P3 0x14
90 #define NRF24L01_REG_RX_PW_P4 0x15
91 #define NRF24L01_REG_RX_PW_P5 0x16
92 #define NRF24L01_REG_FIFO_STATUS 0x17
93 #define NRF24L01_REG_DYNPD 0x1C
94 #define NRF24L01_REG_FEATURE 0x1D
107 static uint8_t a_nrf24l01_spi_read(nrf24l01_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
108 {
109 if (handle->spi_read(NRF24L01_COMMAND_R_REGISTER | reg, buf, len) != 0) /* spi read */
110 {
111 return 1; /* return error */
112 }
113 else
114 {
115 return 0; /* success return 0 */
116 }
117 }
118
130 static uint8_t a_nrf24l01_spi_write(nrf24l01_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
131 {
132 if (handle->spi_write(NRF24L01_COMMAND_W_REGISTER | reg, buf, len) != 0) /* spi write */
133 {
134 return 1; /* return error */
135 }
136 else
137 {
138 return 0; /* success return 0 */
139 }
140 }
141
153 uint8_t nrf24l01_init(nrf24l01_handle_t *handle)
154 {
155 if (handle == NULL) /* check handle */
156 {
157 return 2; /* return error */
158 }
159 if (handle->debug_print == NULL) /* check debug_print */
160 {
161 return 3; /* return error */
162 }
163 if (handle->spi_init == NULL) /* check spi_init */
164 {
165 handle->debug_print("nrf24l01: spi_init is null.\n"); /* spi_init is null */
166
167 return 3; /* return error */
168 }
169 if (handle->spi_deinit == NULL) /* check spi_deinit */
170 {
171 handle->debug_print("nrf24l01: spi_deinit is null.\n"); /* spi_deinit is null */
172
173 return 3; /* return error */
174 }
175 if (handle->spi_read == NULL) /* check spi_read */
176 {
177 handle->debug_print("nrf24l01: spi_read is null.\n"); /* spi_read is null */
178
179 return 3; /* return error */
180 }
181 if (handle->spi_write == NULL) /* check spi_write */
182 {
183 handle->debug_print("nrf24l01: spi_write is null.\n"); /* spi_write is null */
184
185 return 3; /* return error */
186 }
187 if (handle->gpio_init == NULL) /* check gpio_init */
188 {
189 handle->debug_print("nrf24l01: gpio_init is null.\n"); /* gpio_init is null */
190
191 return 3; /* return error */
192 }
193 if (handle->gpio_deinit == NULL) /* check gpio_deinit */
194 {
195 handle->debug_print("nrf24l01: gpio_deinit is null.\n"); /* gpio_deinit is null */
196
197 return 3; /* return error */
198 }
199 if (handle->gpio_write == NULL) /* check gpio_write */
200 {
201 handle->debug_print("nrf24l01: gpio_write is null.\n"); /* gpio_write is null */
202
203 return 3; /* return error */
204 }
205 if (handle->delay_ms == NULL) /* check delay_ms */
206 {
207 handle->debug_print("nrf24l01: delay_ms is null.\n"); /* delay_ms is null */
208
209 return 3; /* return error */
210 }
211 if (handle->receive_callback == NULL) /* check receive_callback */
212 {
213 handle->debug_print("nrf24l01: receive_callback is null.\n"); /* receive_callback is null */
214
215 return 3; /* return error */
216 }
217
218 if (handle->gpio_init() != 0) /* gpio init */
219 {
220 handle->debug_print("nrf24l01: gpio init failed.\n"); /* gpio init failed */
221
222 return 4; /* return error */
223 }
224 if (handle->spi_init() != 0) /* spi init */
225 {
226 handle->debug_print("nrf24l01: spi init failed.\n"); /* spi init failed */
227 (void)handle->gpio_deinit(); /* gpio deinit */
228
229 return 1; /* return error */
230 }
231
232 handle->inited = 1; /* flag finish initialization */
233
234 return 0; /* success return 0 */
235 }
236
249 uint8_t nrf24l01_deinit(nrf24l01_handle_t *handle)
250 {
251 uint8_t res;
252 uint8_t prev;
253
254 if (handle == NULL) /* check handle */
255 {
256 return 2; /* return error */
257 }
258 if (handle->inited != 1) /* check handle initialization */
259 {
260 return 3; /* return error */
261 }
262
263 res = handle->spi_write(NRF24L01_COMMAND_NOP, NULL, 0); /* nop */
264 if (res != 0) /* check result */
265 {
266 handle->debug_print("nrf24l01: nop failed.\n"); /* nop failed */
267
268 return 1; /* return error */
269 }
270 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_CONFIG, (uint8_t *)&prev, 1); /* get config */
271 if (res != 0) /* check result */
272 {
273 handle->debug_print("nrf24l01: get config failed.\n"); /* get config failed */
274
275 return 1; /* return error */
276 }
277 prev &= ~(1 << 1); /* clear config */
278 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_CONFIG, (uint8_t *)&prev, 1); /* set config */
279 if (res != 0) /* check result */
280 {
281 handle->debug_print("nrf24l01: set config failed.\n"); /* set config failed */
282
283 return 1; /* return error */
284 }
285 res = handle->gpio_deinit(); /* gpio deinit */
286 if (res != 0) /* check result */
287 {
288 handle->debug_print("nrf24l01: gpio deinit failed.\n"); /* gpio deinit failed */
289
290 return 4; /* return error */
291 }
292 res = handle->spi_deinit(); /* spi deinit */
293 if (res != 0) /* check result */
294 {
295 handle->debug_print("nrf24l01: spi deinit failed.\n"); /* spi deinit failed */
296
297 return 5; /* return error */
298 }
299 handle->inited = 0; /* flag close */
300
301 return 0; /* success return 0 */
302 }
303
315 uint8_t nrf24l01_set_active(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
316 {
317 if (handle == NULL) /* check handle */
318 {
319 return 2; /* return error */
320 }
321 if (handle->inited != 1) /* check handle initialization */
322 {
323 return 3; /* return error */
324 }
325
326 if (handle->gpio_write(enable) != 0) /* gpio write */
327 {
328 handle->debug_print("nrf24l01: gpio write failed.\n"); /* gpio write failed */
329
330 return 1; /* return error */
331 }
332
333 return 0; /* success return 0 */
334 }
335
350 uint8_t nrf24l01_send(nrf24l01_handle_t *handle, uint8_t *buf, uint8_t len)
351 {
352 uint8_t res;
353 uint8_t i;
354 uint8_t k;
355 uint8_t tmp;
356 uint8_t buffer[32];
357 uint32_t timeout;
358
359 if (handle == NULL) /* check handle */
360 {
361 return 2; /* return error */
362 }
363 if (handle->inited != 1) /* check handle initialization */
364 {
365 return 3; /* return error */
366 }
367 if (len > 32) /* check the result */
368 {
369 handle->debug_print("nrf24l01: len is over 32.\n"); /* len is over 32 */
370
371 return 4; /* return error */
372 }
373
374 memcpy((uint8_t *)buffer, buf, len); /* copy the data */
375 k = len / 2; /* get the half */
376 for (i = 0; i < k; i++) /* run k times */
377 {
378 tmp = buffer[i]; /* copy to tmp */
379 buffer[i] = buffer[len - 1 - i]; /* buffer[i] = buffer[n - 1 - i] */
380 buffer[len - 1 - i] = tmp; /* set buffer[n - 1 - i]*/
381 }
382 handle->finished = 0; /* clear finished */
383 if (handle->gpio_write(0) != 0) /* gpio write */
384 {
385 handle->debug_print("nrf24l01: gpio write failed.\n"); /* gpio write failed */
386
387 return 1; /* return error */
388 }
389 res = handle->spi_write(NRF24L01_COMMAND_W_TX_PAYLOAD, (uint8_t *)buffer, len); /* set tx payload */
390 if (res != 0) /* check result */
391 {
392 handle->debug_print("nrf24l01: set tx payload failed.\n"); /* set tx payload failed */
393
394 return 1; /* return error */
395 }
396 if (handle->gpio_write(1) != 0) /* gpio write */
397 {
398 handle->debug_print("nrf24l01: gpio write failed.\n"); /* gpio write failed */
399
400 return 1; /* return error */
401 }
402 timeout = 5000; /* set timeout */
403 while ((timeout != 0) && (handle->finished == 0)) /* wait time */
404 {
405 handle->delay_ms(1); /* delay 1 ms */
406 timeout--; /* timeout-- */
407 }
408 if (timeout == 0) /* check timeout */
409 {
410 handle->debug_print("nrf24l01: send timeout.\n"); /* send timeout failed */
411
412 return 5; /* return error */
413 }
414 if (handle->finished == 1) /* check finished */
415 {
416 return 0; /* success return 0 */
417 }
418 else
419 {
420 handle->debug_print("nrf24l01: send failed.\n"); /* send failed */
421
422 return 1; /* return error */
423 }
424 }
425
436 uint8_t nrf24l01_irq_handler(nrf24l01_handle_t *handle)
437 {
438 uint8_t res;
439 uint8_t prev;
440
441 if (handle == NULL) /* check handle */
442 {
443 return 2; /* return error */
444 }
445 if (handle->inited != 1) /* check handle initialization */
446 {
447 return 3; /* return error */
448 }
449
450 res = handle->gpio_write(0); /* set gpio */
451 if (res != 0) /* check result */
452 {
453 handle->debug_print("nrf24l01: gpio write failed.\n"); /* gpio write failed */
454
455 return 1; /* return error */
456 }
457 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_STATUS, (uint8_t *)&prev, 1); /* get status register */
458 if (res != 0) /* check result */
459 {
460 handle->debug_print("nrf24l01: get status register failed.\n"); /* get status register failed */
461 (void)handle->gpio_write(1); /* set gpio */
462
463 return 1; /* return error */
464 }
465 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_STATUS, (uint8_t *)&prev, 1); /* clear status register */
466 if (res != 0) /* check result */
467 {
468 handle->debug_print("nrf24l01: set status register failed.\n"); /* set status register failed */
469 (void)handle->gpio_write(1); /* set gpio */
470
471 return 1; /* return error */
472 }
473
474 if (((prev >> 0) & 0x01) != 0) /* tx full */
475 {
476 if (handle->receive_callback != NULL) /* if receive callback */
477 {
478 handle->receive_callback(NRF24L01_INTERRUPT_TX_FULL, 0, NULL, 0); /* run receive callback */
479 }
480 }
481 if (((prev >> 4) & 0x01) != 0) /* max rt */
482 {
483 res = handle->spi_write(NRF24L01_COMMAND_FLUSH_TX, NULL, 0); /* flush tx */
484 if (res != 0) /* check result */
485 {
486 handle->debug_print("nrf24l01: flush tx failed.\n"); /* flush tx failed */
487 (void)handle->gpio_write(1); /* set gpio */
488
489 return 1; /* return error */
490 }
491 handle->finished = 2; /* set timeout */
492 if (handle->receive_callback != NULL) /* if receive callback */
493 {
494 handle->receive_callback(NRF24L01_INTERRUPT_MAX_RT, 0, NULL, 0); /* run receive callback */
495 }
496 }
497 if (((prev >> 5) & 0x01) != 0) /* send ok */
498 {
499 handle->finished = 1; /* set finished */
500 if (handle->receive_callback != NULL) /* if receive callback */
501 {
502 handle->receive_callback(NRF24L01_INTERRUPT_TX_DS, 0, NULL, 0); /* run receive callback */
503 }
504 }
505 if (((prev >> 6) & 0x01) != 0) /* receive */
506 {
507 uint8_t num;
508 uint8_t width;
509 uint8_t i;
510 uint8_t k;
511 uint8_t tmp;
512 uint8_t buffer[33];
513
514 res = handle->spi_read(NRF24L01_COMMAND_R_RX_PL_WID, (uint8_t *)&width, 1); /* get payload width */
515 if (res != 0) /* check result */
516 {
517 handle->debug_print("nrf24l01: get payload width failed.\n"); /* get payload width failed */
518 (void)handle->gpio_write(1); /* set gpio */
519
520 return 1; /* return error */
521 }
522 if (width > 32) /* check width */
523 {
524 res = handle->spi_write(NRF24L01_COMMAND_FLUSH_RX, NULL, 0); /* flush rx */
525 if (res != 0) /* check result */
526 {
527 handle->debug_print("nrf24l01: flush rx failed.\n"); /* flush rx failed */
528 (void)handle->gpio_write(1); /* set gpio */
529
530 return 1; /* return error */
531 }
532 }
533 res = handle->spi_read(NRF24L01_COMMAND_R_RX_PAYLOAD, (uint8_t *)buffer, width); /* get rx payload */
534 if (res != 0) /* check result */
535 {
536 handle->debug_print("nrf24l01: get rx payload failed.\n"); /* get rx payload failed */
537 (void)handle->gpio_write(1); /* set gpio */
538
539 return 1; /* return error */
540 }
541 k = width / 2; /* get the half */
542 for (i = 0; i < k; i++) /* run k times */
543 {
544 tmp = buffer[i]; /* copy to tmp */
545 buffer[i] = buffer[width - 1 - i]; /* buffer[i] = buffer[n - 1 - i] */
546 buffer[width - 1 - i] = tmp; /* set buffer[n - 1 - i]*/
547 }
548 num = (prev >> 1) & 0x7; /* get number */
549 if (handle->receive_callback != NULL) /* if receive callback */
550 {
551 handle->receive_callback(NRF24L01_INTERRUPT_RX_DR, num, (uint8_t *)buffer, width); /* run receive callback */
552 }
553 }
554 res = handle->gpio_write(1); /* set gpio write */
555 if (res != 0) /* check result */
556 {
557 handle->debug_print("nrf24l01: gpio write failed.\n"); /* gpio write failed */
558
559 return 1; /* return error */
560 }
561
562 return 0; /* success return 0 */
563 }
564
577 uint8_t nrf24l01_set_config(nrf24l01_handle_t *handle, nrf24l01_config_t config, nrf24l01_bool_t enable)
578 {
579 uint8_t res;
580 uint8_t prev;
581
582 if (handle == NULL) /* check handle */
583 {
584 return 2; /* return error */
585 }
586 if (handle->inited != 1) /* check handle initialization */
587 {
588 return 3; /* return error */
589 }
590
591 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_CONFIG, (uint8_t *)&prev, 1); /* get config */
592 if (res != 0) /* check result */
593 {
594 handle->debug_print("nrf24l01: get config failed.\n"); /* get config failed */
595
596 return 1; /* return error */
597 }
598 prev &= ~(1 << config); /* clear config */
599 prev |= enable << config; /* set config */
600 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_CONFIG, (uint8_t *)&prev, 1); /* set config */
601 if (res != 0) /* check result */
602 {
603 handle->debug_print("nrf24l01: set config failed.\n"); /* set config failed */
604
605 return 1; /* return error */
606 }
607
608 return 0; /* success return 0 */
609 }
610
623 uint8_t nrf24l01_get_config(nrf24l01_handle_t *handle, nrf24l01_config_t config, nrf24l01_bool_t *enable)
624 {
625 uint8_t res;
626 uint8_t prev;
627
628 if (handle == NULL) /* check handle */
629 {
630 return 2; /* return error */
631 }
632 if (handle->inited != 1) /* check handle initialization */
633 {
634 return 3; /* return error */
635 }
636
637 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_CONFIG, (uint8_t *)&prev, 1); /* get config */
638 if (res != 0) /* check result */
639 {
640 handle->debug_print("nrf24l01: get config failed.\n"); /* get config failed */
641
642 return 1; /* return error */
643 }
644 *enable = (nrf24l01_bool_t)((prev >> config) & 0x01); /* get config */
645
646 return 0; /* success return 0 */
647 }
648
660 uint8_t nrf24l01_set_mode(nrf24l01_handle_t *handle, nrf24l01_mode_t mode)
661 {
662 uint8_t res;
663 uint8_t prev;
664
665 if (handle == NULL) /* check handle */
666 {
667 return 2; /* return error */
668 }
669 if (handle->inited != 1) /* check handle initialization */
670 {
671 return 3; /* return error */
672 }
673
674 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_CONFIG, (uint8_t *)&prev, 1); /* get config */
675 if (res != 0) /* check result */
676 {
677 handle->debug_print("nrf24l01: get config failed.\n"); /* get config failed */
678
679 return 1; /* return error */
680 }
681 prev &= ~(1 << 0); /* clear config */
682 prev |= mode << 0; /* set config */
683 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_CONFIG, (uint8_t *)&prev, 1); /* set config */
684 if (res != 0) /* check result */
685 {
686 handle->debug_print("nrf24l01: set config failed.\n"); /* set config failed */
687
688 return 1; /* return error */
689 }
690
691 return 0; /* success return 0 */
692 }
693
705 uint8_t nrf24l01_get_mode(nrf24l01_handle_t *handle, nrf24l01_mode_t *mode)
706 {
707 uint8_t res;
708 uint8_t prev;
709
710 if (handle == NULL) /* check handle */
711 {
712 return 2; /* return error */
713 }
714 if (handle->inited != 1) /* check handle initialization */
715 {
716 return 3; /* return error */
717 }
718
719 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_CONFIG, (uint8_t *)&prev, 1); /* get config */
720 if (res != 0) /* check result */
721 {
722 handle->debug_print("nrf24l01: get config failed.\n"); /* get config failed */
723
724 return 1; /* return error */
725 }
726 *mode = (nrf24l01_mode_t)(prev & 0x01); /* get mode */
727
728 return 0; /* success return 0 */
729 }
730
743 uint8_t nrf24l01_set_auto_acknowledgment(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t enable)
744 {
745 uint8_t res;
746 uint8_t prev;
747
748 if (handle == NULL) /* check handle */
749 {
750 return 2; /* return error */
751 }
752 if (handle->inited != 1) /* check handle initialization */
753 {
754 return 3; /* return error */
755 }
756
757 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_EN_AA, (uint8_t *)&prev, 1); /* get auto acknowledgment */
758 if (res != 0) /* check result */
759 {
760 handle->debug_print("nrf24l01: get auto acknowledgment failed.\n"); /* get auto acknowledgment failed */
761
762 return 1; /* return error */
763 }
764 prev &= ~(1 << pipe); /* clear config */
765 prev |= enable << pipe; /* set pipe */
766 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_EN_AA, (uint8_t *)&prev, 1); /* set auto acknowledgment */
767 if (res != 0) /* check result */
768 {
769 handle->debug_print("nrf24l01: set auto acknowledgment failed.\n"); /* set auto acknowledgment failed */
770
771 return 1; /* return error */
772 }
773
774 return 0; /* success return 0 */
775 }
776
789 uint8_t nrf24l01_get_auto_acknowledgment(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t *enable)
790 {
791 uint8_t res;
792 uint8_t prev;
793
794 if (handle == NULL) /* check handle */
795 {
796 return 2; /* return error */
797 }
798 if (handle->inited != 1) /* check handle initialization */
799 {
800 return 3; /* return error */
801 }
802
803 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_EN_AA, (uint8_t *)&prev, 1); /* get auto acknowledgment */
804 if (res != 0) /* check result */
805 {
806 handle->debug_print("nrf24l01: get auto acknowledgment failed.\n"); /* get auto acknowledgment failed */
807
808 return 1; /* return error */
809 }
810 *enable = (nrf24l01_bool_t)((prev >> pipe) & 0x01); /* get pipe */
811
812 return 0; /* success return 0 */
813 }
814
827 uint8_t nrf24l01_set_rx_pipe(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t enable)
828 {
829 uint8_t res;
830 uint8_t prev;
831
832 if (handle == NULL) /* check handle */
833 {
834 return 2; /* return error */
835 }
836 if (handle->inited != 1) /* check handle initialization */
837 {
838 return 3; /* return error */
839 }
840
841 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_EN_RXADDR, (uint8_t *)&prev, 1); /* get rx address */
842 if (res != 0) /* check result */
843 {
844 handle->debug_print("nrf24l01: get rx address failed.\n"); /* get rx address failed */
845
846 return 1; /* return error */
847 }
848 prev &= ~(1 << pipe); /* clear config */
849 prev |= enable << pipe; /* set pipe */
850 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_EN_RXADDR, (uint8_t *)&prev, 1); /* set rx address */
851 if (res != 0) /* check result */
852 {
853 handle->debug_print("nrf24l01: set rx address failed.\n"); /* set rx address failed */
854
855 return 1; /* return error */
856 }
857
858 return 0; /* success return 0 */
859 }
860
873 uint8_t nrf24l01_get_rx_pipe(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t *enable)
874 {
875 uint8_t res;
876 uint8_t prev;
877
878 if (handle == NULL) /* check handle */
879 {
880 return 2; /* return error */
881 }
882 if (handle->inited != 1) /* check handle initialization */
883 {
884 return 3; /* return error */
885 }
886
887 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_EN_RXADDR, (uint8_t *)&prev, 1); /* get rx address */
888 if (res != 0) /* check result */
889 {
890 handle->debug_print("nrf24l01: get rx address failed.\n"); /* get rx address failed */
891
892 return 1; /* return error */
893 }
894 *enable = (nrf24l01_bool_t)((prev >> pipe) & 0x01); /* get pipe */
895
896 return 0; /* success return 0 */
897 }
898
910 uint8_t nrf24l01_set_address_width(nrf24l01_handle_t *handle, nrf24l01_address_width_t width)
911 {
912 uint8_t res;
913 uint8_t prev;
914
915 if (handle == NULL) /* check handle */
916 {
917 return 2; /* return error */
918 }
919 if (handle->inited != 1) /* check handle initialization */
920 {
921 return 3; /* return error */
922 }
923
924 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_AW, (uint8_t *)&prev, 1); /* get setup of address widths */
925 if (res != 0) /* check result */
926 {
927 handle->debug_print("nrf24l01: get setup of address widths failed.\n"); /* get setup of address widths failed */
928
929 return 1; /* return error */
930 }
931 prev &= ~(3 << 0); /* clear config */
932 prev |= width << 0; /* set width */
933 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_SETUP_AW, (uint8_t *)&prev, 1); /* set setup of address widths */
934 if (res != 0) /* check result */
935 {
936 handle->debug_print("nrf24l01: set setup of address widths failed.\n"); /* set setup of address widths failed */
937
938 return 1; /* return error */
939 }
940
941 return 0; /* success return 0 */
942 }
943
955 uint8_t nrf24l01_get_address_width(nrf24l01_handle_t *handle, nrf24l01_address_width_t *width)
956 {
957 uint8_t res;
958 uint8_t prev;
959
960 if (handle == NULL) /* check handle */
961 {
962 return 2; /* return error */
963 }
964 if (handle->inited != 1) /* check handle initialization */
965 {
966 return 3; /* return error */
967 }
968
969 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_AW, (uint8_t *)&prev, 1); /* get setup of address widths */
970 if (res != 0) /* check result */
971 {
972 handle->debug_print("nrf24l01: get setup of address widths failed.\n"); /* get setup of address widths failed */
973
974 return 1; /* return error */
975 }
976 *width = (nrf24l01_address_width_t)((prev >> 0) & 0x3); /* get config */
977
978 return 0; /* success return 0 */
979 }
980
993 uint8_t nrf24l01_set_auto_retransmit_delay(nrf24l01_handle_t *handle, uint8_t delay)
994 {
995 uint8_t res;
996 uint8_t prev;
997
998 if (handle == NULL) /* check handle */
999 {
1000 return 2; /* return error */
1001 }
1002 if (handle->inited != 1) /* check handle initialization */
1003 {
1004 return 3; /* return error */
1005 }
1006 if (delay > 0xF) /* check delay */
1007 {
1008 handle->debug_print("nrf24l01: delay is over 0xF.\n"); /* delay is over 0xF */
1009
1010 return 4; /* return error */
1011 }
1012
1013 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_RETR, (uint8_t *)&prev, 1); /* get setup of automatic retransmission */
1014 if (res != 0) /* check result */
1015 {
1016 handle->debug_print("nrf24l01: get setup of automatic retransmission failed.\n"); /* get setup of automatic retransmission failed */
1017
1018 return 1; /* return error */
1019 }
1020 prev &= ~(0xF << 4); /* clear config */
1021 prev |= delay << 4; /* set delay */
1022 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_SETUP_RETR, (uint8_t *)&prev, 1); /* set setup of automatic retransmission */
1023 if (res != 0) /* check result */
1024 {
1025 handle->debug_print("nrf24l01: set setup of automatic retransmission failed.\n"); /* set setup of automatic retransmission failed */
1026
1027 return 1; /* return error */
1028 }
1029
1030 return 0; /* success return 0 */
1031 }
1032
1044 uint8_t nrf24l01_get_auto_retransmit_delay(nrf24l01_handle_t *handle, uint8_t *delay)
1045 {
1046 uint8_t res;
1047 uint8_t prev;
1048
1049 if (handle == NULL) /* check handle */
1050 {
1051 return 2; /* return error */
1052 }
1053 if (handle->inited != 1) /* check handle initialization */
1054 {
1055 return 3; /* return error */
1056 }
1057
1058 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_RETR, (uint8_t *)&prev, 1); /* get setup of automatic retransmission */
1059 if (res != 0) /* check result */
1060 {
1061 handle->debug_print("nrf24l01: get setup of automatic retransmission failed.\n"); /* get setup of automatic retransmission failed */
1062
1063 return 1; /* return error */
1064 }
1065 *delay = (prev >> 4) & 0xF; /* get delay */
1066
1067 return 0; /* success return 0 */
1068 }
1069
1081 uint8_t nrf24l01_auto_retransmit_delay_convert_to_register(nrf24l01_handle_t *handle, uint32_t us, uint8_t *reg)
1082 {
1083 if (handle == NULL) /* check handle */
1084 {
1085 return 2; /* return error */
1086 }
1087 if (handle->inited != 1) /* check handle initialization */
1088 {
1089 return 3; /* return error */
1090 }
1091
1092 *reg = (uint8_t)(us / 250); /* convert real data to register data */
1093
1094 return 0; /* success return 0 */
1095 }
1096
1108 uint8_t nrf24l01_auto_retransmit_delay_convert_to_data(nrf24l01_handle_t *handle, uint8_t reg, uint32_t *us)
1109 {
1110 if (handle == NULL) /* check handle */
1111 {
1112 return 2; /* return error */
1113 }
1114 if (handle->inited != 1) /* check handle initialization */
1115 {
1116 return 3; /* return error */
1117 }
1118
1119 *us = (uint32_t)(reg) * 250; /* convert raw data to real data */
1120
1121 return 0; /* success return 0 */
1122 }
1123
1136 uint8_t nrf24l01_set_auto_retransmit_count(nrf24l01_handle_t *handle, uint8_t count)
1137 {
1138 uint8_t res;
1139 uint8_t prev;
1140
1141 if (handle == NULL) /* check handle */
1142 {
1143 return 2; /* return error */
1144 }
1145 if (handle->inited != 1) /* check handle initialization */
1146 {
1147 return 3; /* return error */
1148 }
1149 if (count > 0xF) /* check count */
1150 {
1151 handle->debug_print("nrf24l01: count is over 0xF.\n"); /* count is over 0xF */
1152
1153 return 4; /* return error */
1154 }
1155
1156 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_RETR, (uint8_t *)&prev, 1); /* get setup of automatic retransmission */
1157 if (res != 0) /* check result */
1158 {
1159 handle->debug_print("nrf24l01: get setup of automatic retransmission failed.\n"); /* get setup of automatic retransmission failed */
1160
1161 return 1; /* return error */
1162 }
1163 prev &= ~(0xF << 0); /* clear config */
1164 prev |= count << 0; /* set count */
1165 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_SETUP_RETR, (uint8_t *)&prev, 1); /* set setup of automatic retransmission */
1166 if (res != 0) /* check result */
1167 {
1168 handle->debug_print("nrf24l01: set setup of automatic retransmission failed.\n"); /* set setup of automatic retransmission failed */
1169
1170 return 1; /* return error */
1171 }
1172
1173 return 0; /* success return 0 */
1174 }
1175
1187 uint8_t nrf24l01_get_auto_retransmit_count(nrf24l01_handle_t *handle, uint8_t *count)
1188 {
1189 uint8_t res;
1190 uint8_t prev;
1191
1192 if (handle == NULL) /* check handle */
1193 {
1194 return 2; /* return error */
1195 }
1196 if (handle->inited != 1) /* check handle initialization */
1197 {
1198 return 3; /* return error */
1199 }
1200
1201 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_RETR, (uint8_t *)&prev, 1); /* get setup of automatic retransmission */
1202 if (res != 0) /* check result */
1203 {
1204 handle->debug_print("nrf24l01: get setup of automatic retransmission failed.\n"); /* get setup of automatic retransmission failed */
1205
1206 return 1; /* return error */
1207 }
1208 *count = (prev >> 0) & 0xF; /* get count */
1209
1210 return 0; /* success return 0 */
1211 }
1212
1225 uint8_t nrf24l01_set_channel_frequency(nrf24l01_handle_t *handle, uint8_t freq)
1226 {
1227 uint8_t res;
1228 uint8_t prev;
1229
1230 if (handle == NULL) /* check handle */
1231 {
1232 return 2; /* return error */
1233 }
1234 if (handle->inited != 1) /* check handle initialization */
1235 {
1236 return 3; /* return error */
1237 }
1238 if (freq > 0x7F) /* check freq */
1239 {
1240 handle->debug_print("nrf24l01: freq is over 0x7F.\n"); /* freq is over 0x7F */
1241
1242 return 4; /* return error */
1243 }
1244
1245 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RF_CH, (uint8_t *)&prev, 1); /* get rf channel */
1246 if (res != 0) /* check result */
1247 {
1248 handle->debug_print("nrf24l01: get rf channel failed.\n"); /* get rf channel failed */
1249
1250 return 1; /* return error */
1251 }
1252 prev &= ~(0x7F << 0); /* clear config */
1253 prev |= freq << 0; /* set freq */
1254 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RF_CH, (uint8_t *)&prev, 1); /* set rf channel */
1255 if (res != 0) /* check result */
1256 {
1257 handle->debug_print("nrf24l01: set rf channel failed.\n"); /* set rf channel failed */
1258
1259 return 1; /* return error */
1260 }
1261
1262 return 0; /* success return 0 */
1263 }
1264
1276 uint8_t nrf24l01_get_channel_frequency(nrf24l01_handle_t *handle, uint8_t *freq)
1277 {
1278 uint8_t res;
1279 uint8_t prev;
1280
1281 if (handle == NULL) /* check handle */
1282 {
1283 return 2; /* return error */
1284 }
1285 if (handle->inited != 1) /* check handle initialization */
1286 {
1287 return 3; /* return error */
1288 }
1289
1290 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RF_CH, (uint8_t *)&prev, 1); /* get rf channel */
1291 if (res != 0) /* check result */
1292 {
1293 handle->debug_print("nrf24l01: get rf channel failed.\n"); /* get rf channel failed */
1294
1295 return 1; /* return error */
1296 }
1297 *freq = prev & 0x7F; /* get freq */
1298
1299 return 0; /* success return 0 */
1300 }
1301
1313 uint8_t nrf24l01_set_continuous_carrier_transmit(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
1314 {
1315 uint8_t res;
1316 uint8_t prev;
1317
1318 if (handle == NULL) /* check handle */
1319 {
1320 return 2; /* return error */
1321 }
1322 if (handle->inited != 1) /* check handle initialization */
1323 {
1324 return 3; /* return error */
1325 }
1326
1327 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* get rf setup register */
1328 if (res != 0) /* check result */
1329 {
1330 handle->debug_print("nrf24l01: get rf setup register failed.\n"); /* get rf setup register failed */
1331
1332 return 1; /* return error */
1333 }
1334 prev &= ~(1 << 7); /* clear config */
1335 prev |= enable << 7; /* set bool */
1336 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* set rf setup register */
1337 if (res != 0) /* check result */
1338 {
1339 handle->debug_print("nrf24l01: set rf setup register failed.\n"); /* set rf setup register failed */
1340
1341 return 1; /* return error */
1342 }
1343
1344 return 0; /* success return 0 */
1345 }
1346
1358 uint8_t nrf24l01_get_continuous_carrier_transmit(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
1359 {
1360 uint8_t res;
1361 uint8_t prev;
1362
1363 if (handle == NULL) /* check handle */
1364 {
1365 return 2; /* return error */
1366 }
1367 if (handle->inited != 1) /* check handle initialization */
1368 {
1369 return 3; /* return error */
1370 }
1371
1372 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* get rf setup register */
1373 if (res != 0) /* check result */
1374 {
1375 handle->debug_print("nrf24l01: get rf setup register failed.\n"); /* get rf setup register failed */
1376
1377 return 1; /* return error */
1378 }
1379 *enable = (nrf24l01_bool_t)((prev >> 7) & 0x01); /* get bool */
1380
1381 return 0; /* success return 0 */
1382 }
1383
1395 uint8_t nrf24l01_set_force_pll_lock_signal(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
1396 {
1397 uint8_t res;
1398 uint8_t prev;
1399
1400 if (handle == NULL) /* check handle */
1401 {
1402 return 2; /* return error */
1403 }
1404 if (handle->inited != 1) /* check handle initialization */
1405 {
1406 return 3; /* return error */
1407 }
1408
1409 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* get rf setup register */
1410 if (res != 0) /* check result */
1411 {
1412 handle->debug_print("nrf24l01: get rf setup register failed.\n"); /* get rf setup register failed */
1413
1414 return 1; /* return error */
1415 }
1416 prev &= ~(1 << 4); /* clear config */
1417 prev |= enable << 4; /* set bool */
1418 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* set rf setup register */
1419 if (res != 0) /* check result */
1420 {
1421 handle->debug_print("nrf24l01: set rf setup register failed.\n"); /* set rf setup register failed */
1422
1423 return 1; /* return error */
1424 }
1425
1426 return 0; /* success return 0 */
1427 }
1428
1440 uint8_t nrf24l01_get_force_pll_lock_signal(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
1441 {
1442 uint8_t res;
1443 uint8_t prev;
1444
1445 if (handle == NULL) /* check handle */
1446 {
1447 return 2; /* return error */
1448 }
1449 if (handle->inited != 1) /* check handle initialization */
1450 {
1451 return 3; /* return error */
1452 }
1453
1454 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* get rf setup register */
1455 if (res != 0) /* check result */
1456 {
1457 handle->debug_print("nrf24l01: get rf setup register failed.\n"); /* get rf setup register failed */
1458
1459 return 1; /* return error */
1460 }
1461 *enable = (nrf24l01_bool_t)((prev >> 4) & 0x01); /* get bool */
1462
1463 return 0; /* success return 0 */
1464 }
1465
1477 uint8_t nrf24l01_set_data_rate(nrf24l01_handle_t *handle, nrf24l01_data_rate_t rate)
1478 {
1479 uint8_t res;
1480 uint8_t prev;
1481
1482 if (handle == NULL) /* check handle */
1483 {
1484 return 2; /* return error */
1485 }
1486 if (handle->inited != 1) /* check handle initialization */
1487 {
1488 return 3; /* return error */
1489 }
1490
1491 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* get rf setup register */
1492 if (res != 0) /* check result */
1493 {
1494 handle->debug_print("nrf24l01: get rf setup register failed.\n"); /* get rf setup register failed */
1495
1496 return 1; /* return error */
1497 }
1498 prev &= ~(1 << 5); /* clear config */
1499 prev &= ~(1 << 3); /* clear config */
1500 prev |= ((rate >> 0) & 0x1) << 3; /* set rate */
1501 prev |= ((rate >> 1) & 0x1) << 5; /* set rate */
1502 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* set rf setup register */
1503 if (res != 0) /* check result */
1504 {
1505 handle->debug_print("nrf24l01: set rf setup register failed.\n"); /* set rf setup register failed */
1506
1507 return 1; /* return error */
1508 }
1509
1510 return 0; /* success return 0 */
1511 }
1512
1524 uint8_t nrf24l01_get_data_rate(nrf24l01_handle_t *handle, nrf24l01_data_rate_t *rate)
1525 {
1526 uint8_t res;
1527 uint8_t prev;
1528
1529 if (handle == NULL) /* check handle */
1530 {
1531 return 2; /* return error */
1532 }
1533 if (handle->inited != 1) /* check handle initialization */
1534 {
1535 return 3; /* return error */
1536 }
1537
1538 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* get rf setup register */
1539 if (res != 0) /* check result */
1540 {
1541 handle->debug_print("nrf24l01: get rf setup register failed.\n"); /* get rf setup register failed */
1542
1543 return 1; /* return error */
1544 }
1545 *rate = (nrf24l01_data_rate_t)(((prev >> 3) & 0x01) | ((prev >> 5) & 0x01) << 1); /* get rate */
1546
1547 return 0; /* success return 0 */
1548 }
1549
1561 uint8_t nrf24l01_set_output_power(nrf24l01_handle_t *handle, nrf24l01_output_power_t power)
1562 {
1563 uint8_t res;
1564 uint8_t prev;
1565
1566 if (handle == NULL) /* check handle */
1567 {
1568 return 2; /* return error */
1569 }
1570 if (handle->inited != 1) /* check handle initialization */
1571 {
1572 return 3; /* return error */
1573 }
1574
1575 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* get rf setup register */
1576 if (res != 0) /* check result */
1577 {
1578 handle->debug_print("nrf24l01: get rf setup register failed.\n"); /* get rf setup register failed */
1579
1580 return 1; /* return error */
1581 }
1582 prev &= ~(3 << 1); /* clear config */
1583 prev |= power << 1; /* set power */
1584 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* set rf setup register */
1585 if (res != 0) /* check result */
1586 {
1587 handle->debug_print("nrf24l01: set rf setup register failed.\n"); /* set rf setup register failed */
1588
1589 return 1; /* return error */
1590 }
1591
1592 return 0; /* success return 0 */
1593 }
1594
1606 uint8_t nrf24l01_get_output_power(nrf24l01_handle_t *handle, nrf24l01_output_power_t *power)
1607 {
1608 uint8_t res;
1609 uint8_t prev;
1610
1611 if (handle == NULL) /* check handle */
1612 {
1613 return 2; /* return error */
1614 }
1615 if (handle->inited != 1) /* check handle initialization */
1616 {
1617 return 3; /* return error */
1618 }
1619
1620 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RF_SETUP, (uint8_t *)&prev, 1); /* get rf setup register */
1621 if (res != 0) /* check result */
1622 {
1623 handle->debug_print("nrf24l01: get rf setup register failed.\n"); /* get rf setup register failed */
1624
1625 return 1; /* return error */
1626 }
1627 *power = (nrf24l01_output_power_t)((prev >> 1) & 0x03); /* get output power */
1628
1629 return 0; /* success return 0 */
1630 }
1631
1644 uint8_t nrf24l01_get_interrupt(nrf24l01_handle_t *handle, nrf24l01_interrupt_t type, nrf24l01_bool_t *enable)
1645 {
1646 uint8_t res;
1647 uint8_t prev;
1648
1649 if (handle == NULL) /* check handle */
1650 {
1651 return 2; /* return error */
1652 }
1653 if (handle->inited != 1) /* check handle initialization */
1654 {
1655 return 3; /* return error */
1656 }
1657
1658 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_STATUS, (uint8_t *)&prev, 1); /* get status register */
1659 if (res != 0) /* check result */
1660 {
1661 handle->debug_print("nrf24l01: get status register failed.\n"); /* get status register failed */
1662
1663 return 1; /* return error */
1664 }
1665 *enable = (nrf24l01_bool_t)((prev >> type) & 0x01); /* get bool */
1666
1667 return 0; /* success return 0 */
1668 }
1669
1681 uint8_t nrf24l01_clear_interrupt(nrf24l01_handle_t *handle, nrf24l01_interrupt_t type)
1682 {
1683 uint8_t res;
1684 uint8_t prev;
1685
1686 if (handle == NULL) /* check handle */
1687 {
1688 return 2; /* return error */
1689 }
1690 if (handle->inited != 1) /* check handle initialization */
1691 {
1692 return 3; /* return error */
1693 }
1694
1695 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_STATUS, (uint8_t *)&prev, 1); /* get status register */
1696 if (res != 0) /* check result */
1697 {
1698 handle->debug_print("nrf24l01: get status register failed.\n"); /* get status register failed */
1699
1700 return 1; /* return error */
1701 }
1702 prev &= ~(1 << type); /* clear config */
1703 prev |= 1 << type; /* set interrupt */
1704 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_STATUS, (uint8_t *)&prev, 1); /* set status register */
1705 if (res != 0) /* check result */
1706 {
1707 handle->debug_print("nrf24l01: set status register failed.\n"); /* set status register failed */
1708
1709 return 1; /* return error */
1710 }
1711
1712 return 0; /* success return 0 */
1713 }
1714
1726 uint8_t nrf24l01_get_data_pipe_number(nrf24l01_handle_t *handle, uint8_t *number)
1727 {
1728 uint8_t res;
1729 uint8_t prev;
1730
1731 if (handle == NULL) /* check handle */
1732 {
1733 return 2; /* return error */
1734 }
1735 if (handle->inited != 1) /* check handle initialization */
1736 {
1737 return 3; /* return error */
1738 }
1739
1740 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_STATUS, (uint8_t *)&prev, 1); /* get status register */
1741 if (res != 0) /* check result */
1742 {
1743 handle->debug_print("nrf24l01: get status register failed.\n"); /* get status register failed */
1744
1745 return 1; /* return error */
1746 }
1747 *number = (prev >> 1) & 0x7; /* get number */
1748
1749 return 0; /* success return 0 */
1750 }
1751
1763 uint8_t nrf24l01_get_lost_packet_count(nrf24l01_handle_t *handle, uint8_t *count)
1764 {
1765 uint8_t res;
1766 uint8_t prev;
1767
1768 if (handle == NULL) /* check handle */
1769 {
1770 return 2; /* return error */
1771 }
1772 if (handle->inited != 1) /* check handle initialization */
1773 {
1774 return 3; /* return error */
1775 }
1776
1777 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_OBSERVE_TX, (uint8_t *)&prev, 1); /* get transmit observe register */
1778 if (res != 0) /* check result */
1779 {
1780 handle->debug_print("nrf24l01: get transmit observe register failed.\n"); /* get transmit observe failed */
1781
1782 return 1; /* return error */
1783 }
1784 *count = (prev >> 4) & 0xF; /* get count */
1785
1786 return 0; /* success return 0 */
1787 }
1788
1800 uint8_t nrf24l01_get_retransmitted_packet_count(nrf24l01_handle_t *handle, uint8_t *count)
1801 {
1802 uint8_t res;
1803 uint8_t prev;
1804
1805 if (handle == NULL) /* check handle */
1806 {
1807 return 2; /* return error */
1808 }
1809 if (handle->inited != 1) /* check handle initialization */
1810 {
1811 return 3; /* return error */
1812 }
1813
1814 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_OBSERVE_TX, (uint8_t *)&prev, 1); /* get transmit observe register */
1815 if (res != 0) /* check result */
1816 {
1817 handle->debug_print("nrf24l01: get transmit observe register failed.\n"); /* get transmit observe failed */
1818
1819 return 1; /* return error */
1820 }
1821 *count = (prev >> 0) & 0xF; /* get count */
1822
1823 return 0; /* success return 0 */
1824 }
1825
1837 uint8_t nrf24l01_get_received_power_detector(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
1838 {
1839 uint8_t res;
1840 uint8_t prev;
1841
1842 if (handle == NULL) /* check handle */
1843 {
1844 return 2; /* return error */
1845 }
1846 if (handle->inited != 1) /* check handle initialization */
1847 {
1848 return 3; /* return error */
1849 }
1850
1851 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RPD, (uint8_t *)&prev, 1); /* get rpd register */
1852 if (res != 0) /* check result */
1853 {
1854 handle->debug_print("nrf24l01: get rpd failed.\n"); /* get rpd failed */
1855
1856 return 1; /* return error */
1857 }
1858 *enable = (nrf24l01_bool_t)((prev >> 0) & 0x01); /* get bool */
1859
1860 return 0; /* success return 0 */
1861 }
1862
1876 uint8_t nrf24l01_set_rx_pipe_0_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t len)
1877 {
1878 uint8_t res;
1879 uint8_t prev;
1880 uint8_t width;
1881 uint8_t i;
1882 uint8_t k;
1883 uint8_t tmp;
1884 uint8_t buffer[8];
1885
1886 if (handle == NULL) /* check handle */
1887 {
1888 return 2; /* return error */
1889 }
1890 if (handle->inited != 1) /* check handle initialization */
1891 {
1892 return 3; /* return error */
1893 }
1894
1895 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_AW, (uint8_t *)&prev, 1); /* get setup of address widths */
1896 if (res != 0) /* check result */
1897 {
1898 handle->debug_print("nrf24l01: get setup of address widths failed.\n"); /* get setup of address widths failed */
1899
1900 return 1; /* return error */
1901 }
1902 width = (nrf24l01_address_width_t)((prev >> 0) & 0x3); /* get width */
1903 if (width == 0) /* check width */
1904 {
1905 handle->debug_print("nrf24l01: len is too long with %d.\n", 0); /* len is too long */
1906
1907 return 4; /* return error */
1908 }
1909 else
1910 {
1911 width += 2; /* width + 2 */
1912 }
1913 if (len > width) /* check width */
1914 {
1915 handle->debug_print("nrf24l01: len is too long with %d.\n", width); /* len is too long */
1916
1917 return 4; /* return error */
1918 }
1919
1920 k = len / 2; /* set k */
1921 memcpy((uint8_t *)buffer, addr, len); /* copy data */
1922 for (i = 0; i < k; i++) /* run k times */
1923 {
1924 tmp = buffer[i]; /* copy to tmp */
1925 buffer[i] = buffer[len - 1 - i]; /* buffer[i] = buffer[n - 1 - i] */
1926 buffer[len - 1 - i] = tmp; /* set buffer[n - 1 - i]*/
1927 }
1928 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_ADDR_P0, (uint8_t *)buffer, len); /* set receive address data pipe p0 register */
1929 if (res != 0) /* check result */
1930 {
1931 handle->debug_print("nrf24l01: set receive address data pipe p0 register failed.\n"); /* set receive address data pipe p0 register failed */
1932
1933 return 1; /* return error */
1934 }
1935
1936 return 0; /* success return 0 */
1937 }
1938
1952 uint8_t nrf24l01_get_rx_pipe_0_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t *len)
1953 {
1954 uint8_t res;
1955 uint8_t i;
1956 uint8_t k;
1957 uint8_t tmp;
1958 uint8_t prev;
1959 uint8_t width;
1960
1961 if (handle == NULL) /* check handle */
1962 {
1963 return 2; /* return error */
1964 }
1965 if (handle->inited != 1) /* check handle initialization */
1966 {
1967 return 3; /* return error */
1968 }
1969
1970 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_AW, (uint8_t *)&prev, 1); /* get setup of address widths */
1971 if (res != 0) /* check result */
1972 {
1973 handle->debug_print("nrf24l01: get setup of address widths failed.\n"); /* get setup of address widths failed */
1974
1975 return 1; /* return error */
1976 }
1977 width = (nrf24l01_address_width_t)((prev >> 0) & 0x3); /* get width */
1978 if (width == 0) /* check width */
1979 {
1980 handle->debug_print("nrf24l01: len is too long with %d.\n", 0); /* len is too long */
1981
1982 return 4; /* return error */
1983 }
1984 else
1985 {
1986 width += 2; /* width + 2 */
1987 }
1988 if (*len < width) /* check width */
1989 {
1990 handle->debug_print("nrf24l01: len is too short with %d.\n", width); /* len is too short */
1991
1992 return 4; /* return error */
1993 }
1994 *len = width; /* set width */
1995
1996 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_ADDR_P0, (uint8_t *)addr, width); /* get receive address data pipe p0 register */
1997 if (res != 0) /* check result */
1998 {
1999 handle->debug_print("nrf24l01: get receive address data pipe p0 register failed.\n"); /* get receive address data pipe p0 register failed */
2000
2001 return 1; /* return error */
2002 }
2003 k = (*len) / 2; /* set k */
2004 for (i = 0; i < k; i++) /* run k times */
2005 {
2006 tmp = addr[i]; /* copy to tmp */
2007 addr[i] = addr[(*len) - 1 - i]; /* addr[i] = addr[n - 1 - i] */
2008 addr[(*len) - 1 - i] = tmp; /* set addr[n - 1 - i]*/
2009 }
2010
2011 return 0; /* success return 0 */
2012 }
2013
2027 uint8_t nrf24l01_set_rx_pipe_1_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t len)
2028 {
2029 uint8_t res;
2030 uint8_t prev;
2031 uint8_t width;
2032 uint8_t i;
2033 uint8_t k;
2034 uint8_t tmp;
2035 uint8_t buffer[8];
2036
2037 if (handle == NULL) /* check handle */
2038 {
2039 return 2; /* return error */
2040 }
2041 if (handle->inited != 1) /* check handle initialization */
2042 {
2043 return 3; /* return error */
2044 }
2045
2046 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_AW, (uint8_t *)&prev, 1); /* get setup of address widths */
2047 if (res != 0) /* check result */
2048 {
2049 handle->debug_print("nrf24l01: get setup of address widths failed.\n"); /* get setup of address widths failed */
2050
2051 return 1; /* return error */
2052 }
2053 width = (nrf24l01_address_width_t)((prev >> 0) & 0x3); /* get width */
2054 if (width == 0) /* check width */
2055 {
2056 handle->debug_print("nrf24l01: len is too long with %d.\n", 0); /* len is too long */
2057
2058 return 4; /* return error */
2059 }
2060 else
2061 {
2062 width += 2; /* width + 2 */
2063 }
2064 if (len > width) /* check width */
2065 {
2066 handle->debug_print("nrf24l01: len is too long with %d.\n", width); /* len is too long */
2067
2068 return 4; /* return error */
2069 }
2070
2071 k = len / 2; /* set k */
2072 memcpy((uint8_t *)buffer, addr, len); /* copy data */
2073 for (i = 0; i < k; i++) /* run k times */
2074 {
2075 tmp = buffer[i]; /* copy to tmp */
2076 buffer[i] = buffer[len - 1 - i]; /* buffer[i] = buffer[n - 1 - i] */
2077 buffer[len - 1 - i] = tmp; /* set buffer[n - 1 - i]*/
2078 }
2079 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_ADDR_P1, (uint8_t *)buffer, len); /* set receive address data pipe p1 register */
2080 if (res != 0) /* check result */
2081 {
2082 handle->debug_print("nrf24l01: set receive address data pipe p1 register failed.\n"); /* set receive address data pipe p1 register failed */
2083
2084 return 1; /* return error */
2085 }
2086
2087 return 0; /* success return 0 */
2088 }
2089
2103 uint8_t nrf24l01_get_rx_pipe_1_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t *len)
2104 {
2105 uint8_t res;
2106 uint8_t i;
2107 uint8_t k;
2108 uint8_t tmp;
2109 uint8_t prev;
2110 uint8_t width;
2111
2112 if (handle == NULL) /* check handle */
2113 {
2114 return 2; /* return error */
2115 }
2116 if (handle->inited != 1) /* check handle initialization */
2117 {
2118 return 3; /* return error */
2119 }
2120
2121 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_AW, (uint8_t *)&prev, 1); /* get setup of address widths */
2122 if (res != 0) /* check result */
2123 {
2124 handle->debug_print("nrf24l01: get setup of address widths failed.\n"); /* get setup of address widths failed */
2125
2126 return 1; /* return error */
2127 }
2128 width = (nrf24l01_address_width_t)((prev >> 0) & 0x3); /* get width */
2129 if (width == 0) /* check width */
2130 {
2131 handle->debug_print("nrf24l01: len is too long with %d.\n", 0); /* len is too long */
2132
2133 return 4; /* return error */
2134 }
2135 else
2136 {
2137 width += 2; /* width + 2 */
2138 }
2139 if (*len < width) /* check width */
2140 {
2141 handle->debug_print("nrf24l01: len is too short with %d.\n", width); /* len is too short */
2142
2143 return 4; /* return error */
2144 }
2145 *len = width; /* set width */
2146
2147 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_ADDR_P1, (uint8_t *)addr, width); /* get receive address data pipe p1 register */
2148 if (res != 0) /* check result */
2149 {
2150 handle->debug_print("nrf24l01: get receive address data pipe p1 register failed.\n"); /* get receive address data pipe p1 register failed */
2151
2152 return 1; /* return error */
2153 }
2154 k = (*len) / 2; /* set k */
2155 for (i = 0; i < k; i++) /* run k times */
2156 {
2157 tmp = addr[i]; /* copy to tmp */
2158 addr[i] = addr[(*len) - 1 - i]; /* addr[i] = addr[n - 1 - i] */
2159 addr[(*len) - 1 - i] = tmp; /* set addr[n - 1 - i]*/
2160 }
2161
2162 return 0; /* success return 0 */
2163 }
2164
2176 uint8_t nrf24l01_set_rx_pipe_2_address(nrf24l01_handle_t *handle, uint8_t addr)
2177 {
2178 uint8_t res;
2179
2180 if (handle == NULL) /* check handle */
2181 {
2182 return 2; /* return error */
2183 }
2184 if (handle->inited != 1) /* check handle initialization */
2185 {
2186 return 3; /* return error */
2187 }
2188
2189 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_ADDR_P2, (uint8_t *)&addr, 1); /* set receive address data pipe p2 register */
2190 if (res != 0) /* check result */
2191 {
2192 handle->debug_print("nrf24l01: set receive address data pipe p2 register failed.\n"); /* set receive address data pipe p2 register failed */
2193
2194 return 1; /* return error */
2195 }
2196
2197 return 0; /* success return 0 */
2198 }
2199
2211 uint8_t nrf24l01_get_rx_pipe_2_address(nrf24l01_handle_t *handle, uint8_t *addr)
2212 {
2213 uint8_t res;
2214
2215 if (handle == NULL) /* check handle */
2216 {
2217 return 2; /* return error */
2218 }
2219 if (handle->inited != 1) /* check handle initialization */
2220 {
2221 return 3; /* return error */
2222 }
2223
2224 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_ADDR_P2, (uint8_t *)addr, 1); /* get receive address data pipe p2 register */
2225 if (res != 0) /* check result */
2226 {
2227 handle->debug_print("nrf24l01: get receive address data pipe p2 register failed.\n"); /* get receive address data pipe p2 register failed */
2228
2229 return 1; /* return error */
2230 }
2231
2232 return 0; /* success return 0 */
2233 }
2234
2246 uint8_t nrf24l01_set_rx_pipe_3_address(nrf24l01_handle_t *handle, uint8_t addr)
2247 {
2248 uint8_t res;
2249
2250 if (handle == NULL) /* check handle */
2251 {
2252 return 2; /* return error */
2253 }
2254 if (handle->inited != 1) /* check handle initialization */
2255 {
2256 return 3; /* return error */
2257 }
2258
2259 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_ADDR_P3, (uint8_t *)&addr, 1); /* set receive address data pipe p3 register */
2260 if (res != 0) /* check result */
2261 {
2262 handle->debug_print("nrf24l01: set receive address data pipe p3 register failed.\n"); /* set receive address data pipe p3 register failed */
2263
2264 return 1; /* return error */
2265 }
2266
2267 return 0; /* success return 0 */
2268 }
2269
2281 uint8_t nrf24l01_get_rx_pipe_3_address(nrf24l01_handle_t *handle, uint8_t *addr)
2282 {
2283 uint8_t res;
2284
2285 if (handle == NULL) /* check handle */
2286 {
2287 return 2; /* return error */
2288 }
2289 if (handle->inited != 1) /* check handle initialization */
2290 {
2291 return 3; /* return error */
2292 }
2293
2294 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_ADDR_P3, (uint8_t *)addr, 1); /* get receive address data pipe p3 register */
2295 if (res != 0) /* check result */
2296 {
2297 handle->debug_print("nrf24l01: get receive address data pipe p3 register failed.\n"); /* get receive address data pipe p3 register failed */
2298
2299 return 1; /* return error */
2300 }
2301
2302 return 0; /* success return 0 */
2303 }
2304
2316 uint8_t nrf24l01_set_rx_pipe_4_address(nrf24l01_handle_t *handle, uint8_t addr)
2317 {
2318 uint8_t res;
2319
2320 if (handle == NULL) /* check handle */
2321 {
2322 return 2; /* return error */
2323 }
2324 if (handle->inited != 1) /* check handle initialization */
2325 {
2326 return 3; /* return error */
2327 }
2328
2329 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_ADDR_P4, (uint8_t *)&addr, 1); /* set receive address data pipe p4 register */
2330 if (res != 0) /* check result */
2331 {
2332 handle->debug_print("nrf24l01: set receive address data pipe p4 register failed.\n"); /* set receive address data pipe p4 register failed */
2333
2334 return 1; /* return error */
2335 }
2336
2337 return 0; /* success return 0 */
2338 }
2339
2351 uint8_t nrf24l01_get_rx_pipe_4_address(nrf24l01_handle_t *handle, uint8_t *addr)
2352 {
2353 uint8_t res;
2354
2355 if (handle == NULL) /* check handle */
2356 {
2357 return 2; /* return error */
2358 }
2359 if (handle->inited != 1) /* check handle initialization */
2360 {
2361 return 3; /* return error */
2362 }
2363
2364 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_ADDR_P4, (uint8_t *)addr, 1); /* get receive address data pipe p4 register */
2365 if (res != 0) /* check result */
2366 {
2367 handle->debug_print("nrf24l01: get receive address data pipe p4 register failed.\n"); /* get receive address data pipe p4 register failed */
2368
2369 return 1; /* return error */
2370 }
2371
2372 return 0; /* success return 0 */
2373 }
2374
2386 uint8_t nrf24l01_set_rx_pipe_5_address(nrf24l01_handle_t *handle, uint8_t addr)
2387 {
2388 uint8_t res;
2389
2390 if (handle == NULL) /* check handle */
2391 {
2392 return 2; /* return error */
2393 }
2394 if (handle->inited != 1) /* check handle initialization */
2395 {
2396 return 3; /* return error */
2397 }
2398
2399 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_ADDR_P5, (uint8_t *)&addr, 1); /* set receive address data pipe p5 register */
2400 if (res != 0) /* check result */
2401 {
2402 handle->debug_print("nrf24l01: set receive address data pipe p5 register failed.\n"); /* set receive address data pipe p5 register failed */
2403
2404 return 1; /* return error */
2405 }
2406
2407 return 0; /* success return 0 */
2408 }
2409
2421 uint8_t nrf24l01_get_rx_pipe_5_address(nrf24l01_handle_t *handle, uint8_t *addr)
2422 {
2423 uint8_t res;
2424
2425 if (handle == NULL) /* check handle */
2426 {
2427 return 2; /* return error */
2428 }
2429 if (handle->inited != 1) /* check handle initialization */
2430 {
2431 return 3; /* return error */
2432 }
2433
2434 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_ADDR_P5, (uint8_t *)addr, 1); /* get receive address data pipe p5 register */
2435 if (res != 0) /* check result */
2436 {
2437 handle->debug_print("nrf24l01: get receive address data pipe p5 register failed.\n"); /* get receive address data pipe p5 register failed */
2438
2439 return 1; /* return error */
2440 }
2441
2442 return 0; /* success return 0 */
2443 }
2444
2458 uint8_t nrf24l01_set_tx_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t len)
2459 {
2460 uint8_t res;
2461 uint8_t prev;
2462 uint8_t width;
2463 uint8_t i;
2464 uint8_t k;
2465 uint8_t tmp;
2466 uint8_t buffer[8];
2467
2468 if (handle == NULL) /* check handle */
2469 {
2470 return 2; /* return error */
2471 }
2472 if (handle->inited != 1) /* check handle initialization */
2473 {
2474 return 3; /* return error */
2475 }
2476
2477 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_AW, (uint8_t *)&prev, 1); /* get setup of address widths */
2478 if (res != 0) /* check result */
2479 {
2480 handle->debug_print("nrf24l01: get setup of address widths failed.\n"); /* get setup of address widths failed */
2481
2482 return 1; /* return error */
2483 }
2484 width = (nrf24l01_address_width_t)((prev >> 0) & 0x3); /* get width */
2485 if (width == 0) /* check width */
2486 {
2487 handle->debug_print("nrf24l01: len is too long with %d.\n", 0); /* len is too long */
2488
2489 return 4; /* return error */
2490 }
2491 else
2492 {
2493 width += 2; /* width + 2 */
2494 }
2495 if (len > width) /* check width */
2496 {
2497 handle->debug_print("nrf24l01: len is too long with %d.\n", width); /* len is too long */
2498
2499 return 4; /* return error */
2500 }
2501
2502 k = len / 2; /* set k */
2503 memcpy((uint8_t *)buffer, addr, len); /* copy data */
2504 for (i = 0; i < k; i++) /* run k times */
2505 {
2506 tmp = buffer[i]; /* copy to tmp */
2507 buffer[i] = buffer[len - 1 - i]; /* buffer[i] = buffer[n - 1 - i] */
2508 buffer[len - 1 - i] = tmp; /* set buffer[n - 1 - i]*/
2509 }
2510 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_TX_ADDR, (uint8_t *)buffer, len); /* set tx address */
2511 if (res != 0) /* check result */
2512 {
2513 handle->debug_print("nrf24l01: set tx address failed.\n"); /* set tx address failed */
2514
2515 return 1; /* return error */
2516 }
2517
2518 return 0; /* success return 0 */
2519 }
2520
2534 uint8_t nrf24l01_get_tx_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t *len)
2535 {
2536 uint8_t res;
2537 uint8_t prev;
2538 uint8_t width;
2539 uint8_t i;
2540 uint8_t k;
2541 uint8_t tmp;
2542
2543 if (handle == NULL) /* check handle */
2544 {
2545 return 2; /* return error */
2546 }
2547 if (handle->inited != 1) /* check handle initialization */
2548 {
2549 return 3; /* return error */
2550 }
2551
2552 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_SETUP_AW, (uint8_t *)&prev, 1); /* get setup of address widths */
2553 if (res != 0) /* check result */
2554 {
2555 handle->debug_print("nrf24l01: get setup of address widths failed.\n"); /* get setup of address widths failed */
2556
2557 return 1; /* return error */
2558 }
2559 width = (nrf24l01_address_width_t)((prev >> 0) & 0x3); /* get width */
2560 if (width == 0) /* check width */
2561 {
2562 handle->debug_print("nrf24l01: len is too long with %d.\n", 0); /* len is too long */
2563
2564 return 4; /* return error */
2565 }
2566 else
2567 {
2568 width += 2; /* width + 2 */
2569 }
2570 if (*len < width) /* check width */
2571 {
2572 handle->debug_print("nrf24l01: len is too short with %d.\n", width); /* len is too short */
2573
2574 return 4; /* return error */
2575 }
2576 *len = width; /* set width */
2577
2578 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_TX_ADDR, (uint8_t *)addr, width); /* get tx address register */
2579 if (res != 0) /* check result */
2580 {
2581 handle->debug_print("nrf24l01: get tx address failed.\n"); /* get tx address failed */
2582
2583 return 1; /* return error */
2584 }
2585 k = (*len) / 2; /* set k */
2586 for (i = 0; i < k; i++) /* run k times */
2587 {
2588 tmp = addr[i]; /* copy to tmp */
2589 addr[i] = addr[(*len) - 1 - i]; /* addr[i] = addr[n - 1 - i] */
2590 addr[(*len) - 1 - i] = tmp; /* set addr[n - 1 - i]*/
2591 }
2592
2593 return 0; /* success return 0 */
2594 }
2595
2608 uint8_t nrf24l01_set_pipe_0_payload_number(nrf24l01_handle_t *handle, uint8_t num)
2609 {
2610 uint8_t res;
2611
2612 if (handle == NULL) /* check handle */
2613 {
2614 return 2; /* return error */
2615 }
2616 if (handle->inited != 1) /* check handle initialization */
2617 {
2618 return 3; /* return error */
2619 }
2620 if (num > 0x3F) /* check num */
2621 {
2622 handle->debug_print("nrf24l01: num is over 0x3F.\n"); /* num is over 0x3F */
2623
2624 return 4; /* return error */
2625 }
2626
2627 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_PW_P0, (uint8_t *)&num, 1); /* set pipe 0 payload number failed */
2628 if (res != 0) /* check result */
2629 {
2630 handle->debug_print("nrf24l01: set pipe 0 payload number failed.\n"); /* set pipe 0 payload number failed */
2631
2632 return 1; /* return error */
2633 }
2634
2635 return 0; /* success return 0 */
2636 }
2637
2649 uint8_t nrf24l01_get_pipe_0_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
2650 {
2651 uint8_t res;
2652
2653 if (handle == NULL) /* check handle */
2654 {
2655 return 2; /* return error */
2656 }
2657 if (handle->inited != 1) /* check handle initialization */
2658 {
2659 return 3; /* return error */
2660 }
2661
2662 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_PW_P0, (uint8_t *)num, 1); /* get pipe 0 payload number failed */
2663 if (res != 0) /* check result */
2664 {
2665 handle->debug_print("nrf24l01: get pipe 0 payload number failed.\n"); /* get pipe 0 payload number failed */
2666
2667 return 1; /* return error */
2668 }
2669 *num = (*num) & 0x3F; /* get number */
2670
2671 return 0; /* success return 0 */
2672 }
2673
2686 uint8_t nrf24l01_set_pipe_1_payload_number(nrf24l01_handle_t *handle, uint8_t num)
2687 {
2688 uint8_t res;
2689
2690 if (handle == NULL) /* check handle */
2691 {
2692 return 2; /* return error */
2693 }
2694 if (handle->inited != 1) /* check handle initialization */
2695 {
2696 return 3; /* return error */
2697 }
2698 if (num > 0x3F) /* check num */
2699 {
2700 handle->debug_print("nrf24l01: num is over 0x3F.\n"); /* num is over 0x3F */
2701
2702 return 4; /* return error */
2703 }
2704
2705 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_PW_P1, (uint8_t *)&num, 1); /* set pipe 1 payload number failed */
2706 if (res != 0) /* check result */
2707 {
2708 handle->debug_print("nrf24l01: set pipe 1 payload number failed.\n"); /* set pipe 1 payload number failed */
2709
2710 return 1; /* return error */
2711 }
2712
2713 return 0; /* success return 0 */
2714 }
2715
2727 uint8_t nrf24l01_get_pipe_1_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
2728 {
2729 uint8_t res;
2730
2731 if (handle == NULL) /* check handle */
2732 {
2733 return 2; /* return error */
2734 }
2735 if (handle->inited != 1) /* check handle initialization */
2736 {
2737 return 3; /* return error */
2738 }
2739
2740 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_PW_P1, (uint8_t *)num, 1); /* get pipe 1 payload number failed */
2741 if (res != 0) /* check result */
2742 {
2743 handle->debug_print("nrf24l01: get pipe 1 payload number failed.\n"); /* get pipe 1 payload number failed */
2744
2745 return 1; /* return error */
2746 }
2747 *num = (*num) & 0x3F; /* get number */
2748
2749 return 0; /* success return 0 */
2750 }
2751
2764 uint8_t nrf24l01_set_pipe_2_payload_number(nrf24l01_handle_t *handle, uint8_t num)
2765 {
2766 uint8_t res;
2767
2768 if (handle == NULL) /* check handle */
2769 {
2770 return 2; /* return error */
2771 }
2772 if (handle->inited != 1) /* check handle initialization */
2773 {
2774 return 3; /* return error */
2775 }
2776 if (num > 0x3F) /* check num */
2777 {
2778 handle->debug_print("nrf24l01: num is over 0x3F.\n"); /* num is over 0x3F */
2779
2780 return 4; /* return error */
2781 }
2782
2783 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_PW_P2, (uint8_t *)&num, 1); /* set pipe 2 payload number failed */
2784 if (res != 0) /* check result */
2785 {
2786 handle->debug_print("nrf24l01: set pipe 2 payload number failed.\n"); /* set pipe 2 payload number failed */
2787
2788 return 1; /* return error */
2789 }
2790
2791 return 0; /* success return 0 */
2792 }
2793
2805 uint8_t nrf24l01_get_pipe_2_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
2806 {
2807 uint8_t res;
2808
2809 if (handle == NULL) /* check handle */
2810 {
2811 return 2; /* return error */
2812 }
2813 if (handle->inited != 1) /* check handle initialization */
2814 {
2815 return 3; /* return error */
2816 }
2817
2818 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_PW_P2, (uint8_t *)num, 1); /* get pipe 2 payload number failed */
2819 if (res != 0) /* check result */
2820 {
2821 handle->debug_print("nrf24l01: get pipe 2 payload number failed.\n"); /* get pipe 2 payload number failed */
2822
2823 return 1; /* return error */
2824 }
2825 *num = (*num) & 0x3F; /* get number */
2826
2827 return 0; /* success return 0 */
2828 }
2829
2842 uint8_t nrf24l01_set_pipe_3_payload_number(nrf24l01_handle_t *handle, uint8_t num)
2843 {
2844 uint8_t res;
2845
2846 if (handle == NULL) /* check handle */
2847 {
2848 return 2; /* return error */
2849 }
2850 if (handle->inited != 1) /* check handle initialization */
2851 {
2852 return 3; /* return error */
2853 }
2854 if (num > 0x3F) /* check num */
2855 {
2856 handle->debug_print("nrf24l01: num is over 0x3F.\n"); /* num is over 0x3F */
2857
2858 return 4; /* return error */
2859 }
2860
2861 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_PW_P3, (uint8_t *)&num, 1); /* set pipe 3 payload number failed */
2862 if (res != 0) /* check result */
2863 {
2864 handle->debug_print("nrf24l01: set pipe 3 payload number failed.\n"); /* set pipe 3 payload number failed */
2865
2866 return 1; /* return error */
2867 }
2868
2869 return 0; /* success return 0 */
2870 }
2871
2883 uint8_t nrf24l01_get_pipe_3_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
2884 {
2885 uint8_t res;
2886
2887 if (handle == NULL) /* check handle */
2888 {
2889 return 2; /* return error */
2890 }
2891 if (handle->inited != 1) /* check handle initialization */
2892 {
2893 return 3; /* return error */
2894 }
2895
2896 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_PW_P3, (uint8_t *)num, 1); /* get pipe 3 payload number failed */
2897 if (res != 0) /* check result */
2898 {
2899 handle->debug_print("nrf24l01: get pipe 3 payload number failed.\n"); /* get pipe 3 payload number failed */
2900
2901 return 1; /* return error */
2902 }
2903 *num = (*num) & 0x3F; /* get number */
2904
2905 return 0; /* success return 0 */
2906 }
2907
2920 uint8_t nrf24l01_set_pipe_4_payload_number(nrf24l01_handle_t *handle, uint8_t num)
2921 {
2922 uint8_t res;
2923
2924 if (handle == NULL) /* check handle */
2925 {
2926 return 2; /* return error */
2927 }
2928 if (handle->inited != 1) /* check handle initialization */
2929 {
2930 return 3; /* return error */
2931 }
2932 if (num > 0x3F) /* check num */
2933 {
2934 handle->debug_print("nrf24l01: num is over 0x3F.\n"); /* num is over 0x3F */
2935
2936 return 4; /* return error */
2937 }
2938
2939 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_PW_P4, (uint8_t *)&num, 1); /* set pipe 4 payload number failed */
2940 if (res != 0) /* check result */
2941 {
2942 handle->debug_print("nrf24l01: set pipe 4 payload number failed.\n"); /* set pipe 4 payload number failed */
2943
2944 return 1; /* return error */
2945 }
2946
2947 return 0; /* success return 0 */
2948 }
2949
2961 uint8_t nrf24l01_get_pipe_4_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
2962 {
2963 uint8_t res;
2964
2965 if (handle == NULL) /* check handle */
2966 {
2967 return 2; /* return error */
2968 }
2969 if (handle->inited != 1) /* check handle initialization */
2970 {
2971 return 3; /* return error */
2972 }
2973
2974 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_PW_P4, (uint8_t *)num, 1); /* get pipe 4 payload number failed */
2975 if (res != 0) /* check result */
2976 {
2977 handle->debug_print("nrf24l01: get pipe 4 payload number failed.\n"); /* get pipe 4 payload number failed */
2978
2979 return 1; /* return error */
2980 }
2981 *num = (*num) & 0x3F; /* get number */
2982
2983 return 0; /* success return 0 */
2984 }
2985
2998 uint8_t nrf24l01_set_pipe_5_payload_number(nrf24l01_handle_t *handle, uint8_t num)
2999 {
3000 uint8_t res;
3001
3002 if (handle == NULL) /* check handle */
3003 {
3004 return 2; /* return error */
3005 }
3006 if (handle->inited != 1) /* check handle initialization */
3007 {
3008 return 3; /* return error */
3009 }
3010 if (num > 0x3F) /* check num */
3011 {
3012 handle->debug_print("nrf24l01: num is over 0x3F.\n"); /* num is over 0x3F */
3013
3014 return 4; /* return error */
3015 }
3016
3017 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_RX_PW_P5, (uint8_t *)&num, 1); /* set pipe 5 payload number failed */
3018 if (res != 0) /* check result */
3019 {
3020 handle->debug_print("nrf24l01: set pipe 5 payload number failed.\n"); /* set pipe 5 payload number failed */
3021
3022 return 1; /* return error */
3023 }
3024
3025 return 0; /* success return 0 */
3026 }
3027
3039 uint8_t nrf24l01_get_pipe_5_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
3040 {
3041 uint8_t res;
3042
3043 if (handle == NULL) /* check handle */
3044 {
3045 return 2; /* return error */
3046 }
3047 if (handle->inited != 1) /* check handle initialization */
3048 {
3049 return 3; /* return error */
3050 }
3051
3052 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_RX_PW_P5, (uint8_t *)num, 1); /* get pipe 5 payload number failed */
3053 if (res != 0) /* check result */
3054 {
3055 handle->debug_print("nrf24l01: get pipe 5 payload number failed.\n"); /* get pipe 5 payload number failed */
3056
3057 return 1; /* return error */
3058 }
3059 *num = (*num) & 0x3F; /* get number */
3060
3061 return 0; /* success return 0 */
3062 }
3063
3075 uint8_t nrf24l01_get_fifo_status(nrf24l01_handle_t *handle, uint8_t *status)
3076 {
3077 uint8_t res;
3078
3079 if (handle == NULL) /* check handle */
3080 {
3081 return 2; /* return error */
3082 }
3083 if (handle->inited != 1) /* check handle initialization */
3084 {
3085 return 3; /* return error */
3086 }
3087
3088 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_FIFO_STATUS, (uint8_t *)status, 1); /* get fifo status failed */
3089 if (res != 0) /* check result */
3090 {
3091 handle->debug_print("nrf24l01: get fifo status failed.\n"); /* get fifo status failed */
3092
3093 return 1; /* return error */
3094 }
3095
3096 return 0; /* success return 0 */
3097 }
3098
3111 uint8_t nrf24l01_set_pipe_dynamic_payload(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t enable)
3112 {
3113 uint8_t res;
3114 uint8_t prev;
3115
3116 if (handle == NULL) /* check handle */
3117 {
3118 return 2; /* return error */
3119 }
3120 if (handle->inited != 1) /* check handle initialization */
3121 {
3122 return 3; /* return error */
3123 }
3124
3125 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_DYNPD, (uint8_t *)&prev, 1); /* get dynamic payload length register */
3126 if (res != 0) /* check result */
3127 {
3128 handle->debug_print("nrf24l01: get dynamic payload length register failed.\n"); /* get dynamic payload length register failed */
3129
3130 return 1; /* return error */
3131 }
3132 prev &= ~(1 << pipe); /* clear config */
3133 prev |= enable << pipe; /* set bool */
3134 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_DYNPD, (uint8_t *)&prev, 1); /* set dynamic payload length register */
3135 if (res != 0) /* check result */
3136 {
3137 handle->debug_print("nrf24l01: set dynamic payload length register failed.\n"); /* set dynamic payload length register failed */
3138
3139 return 1; /* return error */
3140 }
3141
3142 return 0; /* success return 0 */
3143 }
3144
3157 uint8_t nrf24l01_get_pipe_dynamic_payload(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t *enable)
3158 {
3159 uint8_t res;
3160 uint8_t prev;
3161
3162 if (handle == NULL) /* check handle */
3163 {
3164 return 2; /* return error */
3165 }
3166 if (handle->inited != 1) /* check handle initialization */
3167 {
3168 return 3; /* return error */
3169 }
3170
3171 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_DYNPD, (uint8_t *)&prev, 1); /* get dynamic payload length register */
3172 if (res != 0) /* check result */
3173 {
3174 handle->debug_print("nrf24l01: get dynamic payload length register failed.\n"); /* get dynamic payload length register failed */
3175
3176 return 1; /* return error */
3177 }
3178 *enable = (nrf24l01_bool_t)((prev >> pipe) & 0x01); /* get bool */
3179
3180 return 0; /* success return 0 */
3181 }
3182
3194 uint8_t nrf24l01_set_dynamic_payload(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
3195 {
3196 uint8_t res;
3197 uint8_t prev;
3198
3199 if (handle == NULL) /* check handle */
3200 {
3201 return 2; /* return error */
3202 }
3203 if (handle->inited != 1) /* check handle initialization */
3204 {
3205 return 3; /* return error */
3206 }
3207
3208 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_FEATURE, (uint8_t *)&prev, 1); /* get feature register */
3209 if (res != 0) /* check result */
3210 {
3211 handle->debug_print("nrf24l01: get feature register failed.\n"); /* get feature register failed */
3212
3213 return 1; /* return error */
3214 }
3215 prev &= ~(1 << 2); /* clear config */
3216 prev |= enable << 2; /* set bool */
3217 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_FEATURE, (uint8_t *)&prev, 1); /* set feature register */
3218 if (res != 0) /* check result */
3219 {
3220 handle->debug_print("nrf24l01: set feature register failed.\n"); /* set feature register failed */
3221
3222 return 1; /* return error */
3223 }
3224
3225 return 0; /* success return 0 */
3226 }
3227
3239 uint8_t nrf24l01_get_dynamic_payload(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
3240 {
3241 uint8_t res;
3242 uint8_t prev;
3243
3244 if (handle == NULL) /* check handle */
3245 {
3246 return 2; /* return error */
3247 }
3248 if (handle->inited != 1) /* check handle initialization */
3249 {
3250 return 3; /* return error */
3251 }
3252
3253 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_FEATURE, (uint8_t *)&prev, 1); /* get feature register */
3254 if (res != 0) /* check result */
3255 {
3256 handle->debug_print("nrf24l01: get feature register failed.\n"); /* get feature register failed */
3257
3258 return 1; /* return error */
3259 }
3260 *enable = (nrf24l01_bool_t)((prev >> 2) & 0x01); /* get bool */
3261
3262 return 0; /* success return 0 */
3263 }
3264
3276 uint8_t nrf24l01_set_payload_with_ack(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
3277 {
3278 uint8_t res;
3279 uint8_t prev;
3280
3281 if (handle == NULL) /* check handle */
3282 {
3283 return 2; /* return error */
3284 }
3285 if (handle->inited != 1) /* check handle initialization */
3286 {
3287 return 3; /* return error */
3288 }
3289
3290 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_FEATURE, (uint8_t *)&prev, 1); /* get feature register */
3291 if (res != 0) /* check result */
3292 {
3293 handle->debug_print("nrf24l01: get feature register failed.\n"); /* get feature register failed */
3294
3295 return 1; /* return error */
3296 }
3297 prev &= ~(1 << 1); /* clear config */
3298 prev |= enable << 1; /* set bool */
3299 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_FEATURE, (uint8_t *)&prev, 1); /* set feature register */
3300 if (res != 0) /* check result */
3301 {
3302 handle->debug_print("nrf24l01: set feature register failed.\n"); /* set feature register failed */
3303
3304 return 1; /* return error */
3305 }
3306
3307 return 0; /* success return 0 */
3308 }
3309
3321 uint8_t nrf24l01_get_payload_with_ack(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
3322 {
3323 uint8_t res;
3324 uint8_t prev;
3325
3326 if (handle == NULL) /* check handle */
3327 {
3328 return 2; /* return error */
3329 }
3330 if (handle->inited != 1) /* check handle initialization */
3331 {
3332 return 3; /* return error */
3333 }
3334
3335 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_FEATURE, (uint8_t *)&prev, 1); /* get feature register */
3336 if (res != 0) /* check result */
3337 {
3338 handle->debug_print("nrf24l01: get feature register failed.\n"); /* get feature register failed */
3339
3340 return 1; /* return error */
3341 }
3342 *enable = (nrf24l01_bool_t)((prev >> 1) & 0x01); /* get bool */
3343
3344 return 0; /* success return 0 */
3345 }
3346
3358 uint8_t nrf24l01_set_tx_payload_with_no_ack(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
3359 {
3360 uint8_t res;
3361 uint8_t prev;
3362
3363 if (handle == NULL) /* check handle */
3364 {
3365 return 2; /* return error */
3366 }
3367 if (handle->inited != 1) /* check handle initialization */
3368 {
3369 return 3; /* return error */
3370 }
3371
3372 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_FEATURE, (uint8_t *)&prev, 1); /* get feature register */
3373 if (res != 0) /* check result */
3374 {
3375 handle->debug_print("nrf24l01: get feature register failed.\n"); /* get feature register failed */
3376
3377 return 1; /* return error */
3378 }
3379 prev &= ~(1 << 0); /* clear config */
3380 prev |= enable << 0; /* set bool */
3381 res = a_nrf24l01_spi_write(handle, NRF24L01_REG_FEATURE, (uint8_t *)&prev, 1); /* set feature register */
3382 if (res != 0) /* check result */
3383 {
3384 handle->debug_print("nrf24l01: set feature register failed.\n"); /* set feature register failed */
3385
3386 return 1; /* return error */
3387 }
3388
3389 return 0; /* success return 0 */
3390 }
3391
3403 uint8_t nrf24l01_get_tx_payload_with_no_ack(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
3404 {
3405 uint8_t res;
3406 uint8_t prev;
3407
3408 if (handle == NULL) /* check handle */
3409 {
3410 return 2; /* return error */
3411 }
3412 if (handle->inited != 1) /* check handle initialization */
3413 {
3414 return 3; /* return error */
3415 }
3416
3417 res = a_nrf24l01_spi_read(handle, NRF24L01_REG_FEATURE, (uint8_t *)&prev, 1); /* get feature register */
3418 if (res != 0) /* check result */
3419 {
3420 handle->debug_print("nrf24l01: get feature register failed.\n"); /* get feature register failed */
3421
3422 return 1; /* return error */
3423 }
3424 *enable = (nrf24l01_bool_t)((prev >> 0) & 0x01); /* get bool */
3425
3426 return 0; /* success return 0 */
3427 }
3428
3442 uint8_t nrf24l01_read_rx_payload(nrf24l01_handle_t *handle, uint8_t *buf, uint8_t len)
3443 {
3444 uint8_t res;
3445 uint8_t i;
3446 uint8_t k;
3447 uint8_t tmp;
3448
3449 if (handle == NULL) /* check handle */
3450 {
3451 return 2; /* return error */
3452 }
3453 if (handle->inited != 1) /* check handle initialization */
3454 {
3455 return 3; /* return error */
3456 }
3457 if (len > 32)
3458 {
3459 handle->debug_print("nrf24l01: len is over 32.\n"); /* len is over 32 */
3460
3461 return 4; /* return error */
3462 }
3463
3464 res = handle->spi_read(NRF24L01_COMMAND_R_RX_PAYLOAD, buf, len); /* get rx payload */
3465 if (res != 0) /* check result */
3466 {
3467 handle->debug_print("nrf24l01: get rx payload failed.\n"); /* get rx payload failed */
3468
3469 return 1; /* return error */
3470 }
3471 k = len / 2; /* get the half */
3472 for (i = 0; i < k; i++) /* run k times */
3473 {
3474 tmp = buf[i]; /* copy to tmp */
3475 buf[i] = buf[len - 1 - i]; /* buf[i] = buf[n - 1 - i] */
3476 buf[len - 1 - i] = tmp; /* set buf[n - 1 - i]*/
3477 }
3478
3479 return 0; /* success return 0 */
3480 }
3481
3495 uint8_t nrf24l01_write_tx_payload(nrf24l01_handle_t *handle, uint8_t *buf, uint8_t len)
3496 {
3497 uint8_t res;
3498 uint8_t i;
3499 uint8_t k;
3500 uint8_t tmp;
3501 uint8_t buffer[32];
3502
3503 if (handle == NULL) /* check handle */
3504 {
3505 return 2; /* return error */
3506 }
3507 if (handle->inited != 1) /* check handle initialization */
3508 {
3509 return 3; /* return error */
3510 }
3511 if (len > 32) /* check len */
3512 {
3513 handle->debug_print("nrf24l01: len is over 32.\n"); /* len is over 32 */
3514
3515 return 4; /* return error */
3516 }
3517
3518 for (i = 0; i < len; i++) /* copy the data */
3519 {
3520 buffer[i] = buf[i]; /* copy */
3521 }
3522 k = len / 2; /* get the half */
3523 for (i = 0; i < k; i++) /* run k times */
3524 {
3525 tmp = buffer[i]; /* copy to tmp */
3526 buffer[i] = buffer[len - 1 - i]; /* buffer[i] = buffer[n - 1 - i] */
3527 buffer[len - 1 - i] = tmp; /* set buffer[n - 1 - i]*/
3528 }
3529 res = handle->spi_write(NRF24L01_COMMAND_W_TX_PAYLOAD, (uint8_t *)buffer, len); /* set tx payload */
3530 if (res != 0) /* check result */
3531 {
3532 handle->debug_print("nrf24l01: set tx payload failed.\n"); /* set tx payload failed */
3533
3534 return 1; /* return error */
3535 }
3536
3537 return 0; /* success return 0 */
3538 }
3539
3550 uint8_t nrf24l01_flush_tx(nrf24l01_handle_t *handle)
3551 {
3552 uint8_t res;
3553
3554 if (handle == NULL) /* check handle */
3555 {
3556 return 2; /* return error */
3557 }
3558 if (handle->inited != 1) /* check handle initialization */
3559 {
3560 return 3; /* return error */
3561 }
3562
3563 res = handle->spi_write(NRF24L01_COMMAND_FLUSH_TX, NULL, 0); /* flush tx */
3564 if (res != 0) /* check result */
3565 {
3566 handle->debug_print("nrf24l01: flush tx failed.\n"); /* flush tx failed */
3567
3568 return 1; /* return error */
3569 }
3570
3571 return 0; /* success return 0 */
3572 }
3573
3584 uint8_t nrf24l01_flush_rx(nrf24l01_handle_t *handle)
3585 {
3586 uint8_t res;
3587
3588 if (handle == NULL) /* check handle */
3589 {
3590 return 2; /* return error */
3591 }
3592 if (handle->inited != 1) /* check handle initialization */
3593 {
3594 return 3; /* return error */
3595 }
3596
3597 res = handle->spi_write(NRF24L01_COMMAND_FLUSH_RX, NULL, 0); /* flush rx */
3598 if (res != 0) /* check result */
3599 {
3600 handle->debug_print("nrf24l01: flush rx failed.\n"); /* flush rx failed */
3601
3602 return 1; /* return error */
3603 }
3604
3605 return 0; /* success return 0 */
3606 }
3607
3618 uint8_t nrf24l01_reuse_tx_payload(nrf24l01_handle_t *handle)
3619 {
3620 uint8_t res;
3621
3622 if (handle == NULL) /* check handle */
3623 {
3624 return 2; /* return error */
3625 }
3626 if (handle->inited != 1) /* check handle initialization */
3627 {
3628 return 3; /* return error */
3629 }
3630
3631 res = handle->spi_write(NRF24L01_COMMAND_REUSE_TX_PL, NULL, 0); /* reuse tx payload */
3632 if (res != 0) /* check result */
3633 {
3634 handle->debug_print("nrf24l01: reuse tx payload failed.\n"); /* reuse tx payload failed */
3635
3636 return 1; /* return error */
3637 }
3638
3639 return 0; /* success return 0 */
3640 }
3641
3653 uint8_t nrf24l01_get_rx_payload_width(nrf24l01_handle_t *handle, uint8_t *width)
3654 {
3655 uint8_t res;
3656
3657 if (handle == NULL) /* check handle */
3658 {
3659 return 2; /* return error */
3660 }
3661 if (handle->inited != 1) /* check handle initialization */
3662 {
3663 return 3; /* return error */
3664 }
3665
3666 res = handle->spi_read(NRF24L01_COMMAND_R_RX_PL_WID, width, 1); /* get payload width */
3667 if (res != 0) /* check result */
3668 {
3669 handle->debug_print("nrf24l01: get payload width failed.\n"); /* get payload width failed */
3670
3671 return 1; /* return error */
3672 }
3673
3674 return 0; /* success return 0 */
3675 }
3676
3691 uint8_t nrf24l01_write_payload_with_ack(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, uint8_t *buf, uint8_t len)
3692 {
3693 uint8_t res;
3694 uint8_t i;
3695 uint8_t k;
3696 uint8_t tmp;
3697 uint8_t buffer[32];
3698
3699 if (handle == NULL) /* check handle */
3700 {
3701 return 2; /* return error */
3702 }
3703 if (handle->inited != 1) /* check handle initialization */
3704 {
3705 return 3; /* return error */
3706 }
3707 if (len > 32) /* check len */
3708 {
3709 handle->debug_print("nrf24l01: len is over 32.\n"); /* len is over 32 */
3710
3711 return 4; /* return error */
3712 }
3713
3714 for (i = 0; i < len; i++) /* copy the data */
3715 {
3716 buffer[i] = buf[i]; /* copy */
3717 }
3718 k = len / 2; /* get the half */
3719 for (i = 0; i < k; i++) /* run k times */
3720 {
3721 tmp = buffer[i]; /* copy to tmp */
3722 buffer[i] = buffer[len - 1 - i]; /* buffer[i] = buffer[n - 1 - i] */
3723 buffer[len - 1 - i] = tmp; /* set buffer[n - 1 - i]*/
3724 }
3725 res = handle->spi_write((uint8_t)(NRF24L01_COMMAND_W_ACK_PAYLOAD | pipe),
3726 (uint8_t *)buffer, len); /* set payload with ack */
3727 if (res != 0) /* check result */
3728 {
3729 handle->debug_print("nrf24l01: set payload with ack failed.\n"); /* set payload with ack failed */
3730
3731 return 1; /* return error */
3732 }
3733
3734 return 0; /* success return 0 */
3735 }
3736
3750 uint8_t nrf24l01_write_payload_with_no_ack(nrf24l01_handle_t *handle, uint8_t *buf, uint8_t len)
3751 {
3752 uint8_t res;
3753 uint8_t i;
3754 uint8_t k;
3755 uint8_t tmp;
3756 uint8_t buffer[32];
3757
3758 if (handle == NULL) /* check handle */
3759 {
3760 return 2; /* return error */
3761 }
3762 if (handle->inited != 1) /* check handle initialization */
3763 {
3764 return 3; /* return error */
3765 }
3766 if (len > 32) /* check len */
3767 {
3768 handle->debug_print("nrf24l01: len is over 32.\n"); /* len is over 32 */
3769
3770 return 4; /* return error */
3771 }
3772
3773 for (i = 0; i < len; i++) /* copy the data */
3774 {
3775 buffer[i] = buf[i]; /* copy */
3776 }
3777 k = len / 2; /* get the half */
3778 for (i = 0; i < k; i++) /* run k times */
3779 {
3780 tmp = buffer[i]; /* copy to tmp */
3781 buffer[i] = buffer[len - 1 - i]; /* buffer[i] = buffer[n - 1 - i] */
3782 buffer[len - 1 - i] = tmp; /* set buffer[n - 1 - i]*/
3783 }
3784
3785 res = handle->spi_write(NRF24L01_COMMAND_W_TX_PAYLOAD_NO_ACK, (uint8_t *)buffer, len); /* set payload with no ack */
3786 if (res != 0) /* check result */
3787 {
3788 handle->debug_print("nrf24l01: set payload with no ack failed.\n"); /* set payload with no ack failed */
3789
3790 return 1; /* return error */
3791 }
3792
3793 return 0; /* success return 0 */
3794 }
3795
3806 uint8_t nrf24l01_nop(nrf24l01_handle_t *handle)
3807 {
3808 uint8_t res;
3809
3810 if (handle == NULL) /* check handle */
3811 {
3812 return 2; /* return error */
3813 }
3814 if (handle->inited != 1) /* check handle initialization */
3815 {
3816 return 3; /* return error */
3817 }
3818
3819 res = handle->spi_write(NRF24L01_COMMAND_NOP, NULL, 0); /* nop */
3820 if (res != 0) /* check result */
3821 {
3822 handle->debug_print("nrf24l01: nop failed.\n"); /* nop failed */
3823
3824 return 1; /* return error */
3825 }
3826
3827 return 0; /* success return 0 */
3828 }
3829
3843 uint8_t nrf24l01_set_reg(nrf24l01_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
3844 {
3845 if (handle == NULL) /* check handle */
3846 {
3847 return 2; /* return error */
3848 }
3849 if (handle->inited != 1) /* check handle initialization */
3850 {
3851 return 3; /* return error */
3852 }
3853
3854 return a_nrf24l01_spi_write(handle, reg, buf, len); /* write data */
3855 }
3856
3870 uint8_t nrf24l01_get_reg(nrf24l01_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
3871 {
3872 if (handle == NULL) /* check handle */
3873 {
3874 return 2; /* return error */
3875 }
3876 if (handle->inited != 1) /* check handle initialization */
3877 {
3878 return 3; /* return error */
3879 }
3880
3881 return a_nrf24l01_spi_read(handle, reg, buf, len); /* read data */
3882 }
3883
3892 uint8_t nrf24l01_info(nrf24l01_info_t *info)
3893 {
3894 if (info == NULL) /* check handle */
3895 {
3896 return 2; /* return error */
3897 }
3898
3899 memset(info, 0, sizeof(nrf24l01_info_t)); /* initialize nrf24l01 info structure */
3900 strncpy(info->chip_name, CHIP_NAME, 32); /* copy chip name */
3901 strncpy(info->manufacturer_name, MANUFACTURER_NAME, 32); /* copy manufacturer name */
3902 strncpy(info->interface, "SPI", 8); /* copy interface name */
3903 info->supply_voltage_min_v = SUPPLY_VOLTAGE_MIN; /* set minimal supply voltage */
3904 info->supply_voltage_max_v = SUPPLY_VOLTAGE_MAX; /* set maximum supply voltage */
3905 info->max_current_ma = MAX_CURRENT; /* set maximum current */
3906 info->temperature_max = TEMPERATURE_MAX; /* set minimal temperature */
3907 info->temperature_min = TEMPERATURE_MIN; /* set maximum temperature */
3908 info->driver_version = DRIVER_VERSION; /* set driver version */
3909
3910 return 0; /* success return 0 */
3911 }
NRF24L01_COMMAND_FLUSH_RX
#define NRF24L01_COMMAND_FLUSH_RX
Definition: driver_nrf24l01.c:59
NRF24L01_REG_FEATURE
#define NRF24L01_REG_FEATURE
Definition: driver_nrf24l01.c:94
NRF24L01_COMMAND_FLUSH_TX
#define NRF24L01_COMMAND_FLUSH_TX
Definition: driver_nrf24l01.c:58
NRF24L01_REG_RX_PW_P4
#define NRF24L01_REG_RX_PW_P4
Definition: driver_nrf24l01.c:90
NRF24L01_REG_STATUS
#define NRF24L01_REG_STATUS
Definition: driver_nrf24l01.c:76
NRF24L01_REG_EN_RXADDR
#define NRF24L01_REG_EN_RXADDR
Definition: driver_nrf24l01.c:71
MAX_CURRENT
#define MAX_CURRENT
Definition: driver_nrf24l01.c:46
NRF24L01_REG_RX_PW_P5
#define NRF24L01_REG_RX_PW_P5
Definition: driver_nrf24l01.c:91
NRF24L01_COMMAND_NOP
#define NRF24L01_COMMAND_NOP
Definition: driver_nrf24l01.c:64
NRF24L01_REG_RX_ADDR_P1
#define NRF24L01_REG_RX_ADDR_P1
Definition: driver_nrf24l01.c:80
NRF24L01_REG_EN_AA
#define NRF24L01_REG_EN_AA
Definition: driver_nrf24l01.c:70
NRF24L01_COMMAND_R_REGISTER
#define NRF24L01_COMMAND_R_REGISTER
chip command definition
Definition: driver_nrf24l01.c:54
NRF24L01_REG_OBSERVE_TX
#define NRF24L01_REG_OBSERVE_TX
Definition: driver_nrf24l01.c:77
NRF24L01_REG_RX_ADDR_P5
#define NRF24L01_REG_RX_ADDR_P5
Definition: driver_nrf24l01.c:84
SUPPLY_VOLTAGE_MAX
#define SUPPLY_VOLTAGE_MAX
Definition: driver_nrf24l01.c:45
NRF24L01_REG_RX_PW_P1
#define NRF24L01_REG_RX_PW_P1
Definition: driver_nrf24l01.c:87
NRF24L01_COMMAND_W_TX_PAYLOAD_NO_ACK
#define NRF24L01_COMMAND_W_TX_PAYLOAD_NO_ACK
Definition: driver_nrf24l01.c:63
NRF24L01_REG_RX_ADDR_P3
#define NRF24L01_REG_RX_ADDR_P3
Definition: driver_nrf24l01.c:82
NRF24L01_REG_CONFIG
#define NRF24L01_REG_CONFIG
chip register definition
Definition: driver_nrf24l01.c:69
NRF24L01_REG_RF_SETUP
#define NRF24L01_REG_RF_SETUP
Definition: driver_nrf24l01.c:75
NRF24L01_REG_RX_PW_P3
#define NRF24L01_REG_RX_PW_P3
Definition: driver_nrf24l01.c:89
NRF24L01_REG_DYNPD
#define NRF24L01_REG_DYNPD
Definition: driver_nrf24l01.c:93
NRF24L01_COMMAND_R_RX_PAYLOAD
#define NRF24L01_COMMAND_R_RX_PAYLOAD
Definition: driver_nrf24l01.c:56
TEMPERATURE_MAX
#define TEMPERATURE_MAX
Definition: driver_nrf24l01.c:48
NRF24L01_REG_RX_ADDR_P4
#define NRF24L01_REG_RX_ADDR_P4
Definition: driver_nrf24l01.c:83
NRF24L01_REG_RX_PW_P2
#define NRF24L01_REG_RX_PW_P2
Definition: driver_nrf24l01.c:88
MANUFACTURER_NAME
#define MANUFACTURER_NAME
Definition: driver_nrf24l01.c:43
TEMPERATURE_MIN
#define TEMPERATURE_MIN
Definition: driver_nrf24l01.c:47
SUPPLY_VOLTAGE_MIN
#define SUPPLY_VOLTAGE_MIN
Definition: driver_nrf24l01.c:44
NRF24L01_REG_SETUP_RETR
#define NRF24L01_REG_SETUP_RETR
Definition: driver_nrf24l01.c:73
NRF24L01_REG_RX_ADDR_P2
#define NRF24L01_REG_RX_ADDR_P2
Definition: driver_nrf24l01.c:81
NRF24L01_REG_FIFO_STATUS
#define NRF24L01_REG_FIFO_STATUS
Definition: driver_nrf24l01.c:92
NRF24L01_REG_SETUP_AW
#define NRF24L01_REG_SETUP_AW
Definition: driver_nrf24l01.c:72
NRF24L01_REG_TX_ADDR
#define NRF24L01_REG_TX_ADDR
Definition: driver_nrf24l01.c:85
NRF24L01_COMMAND_W_ACK_PAYLOAD
#define NRF24L01_COMMAND_W_ACK_PAYLOAD
Definition: driver_nrf24l01.c:62
NRF24L01_REG_RF_CH
#define NRF24L01_REG_RF_CH
Definition: driver_nrf24l01.c:74
NRF24L01_COMMAND_W_REGISTER
#define NRF24L01_COMMAND_W_REGISTER
Definition: driver_nrf24l01.c:55
CHIP_NAME
#define CHIP_NAME
chip information definition
Definition: driver_nrf24l01.c:42
NRF24L01_COMMAND_REUSE_TX_PL
#define NRF24L01_COMMAND_REUSE_TX_PL
Definition: driver_nrf24l01.c:60
NRF24L01_COMMAND_R_RX_PL_WID
#define NRF24L01_COMMAND_R_RX_PL_WID
Definition: driver_nrf24l01.c:61
DRIVER_VERSION
#define DRIVER_VERSION
Definition: driver_nrf24l01.c:49
NRF24L01_REG_RX_PW_P0
#define NRF24L01_REG_RX_PW_P0
Definition: driver_nrf24l01.c:86
NRF24L01_COMMAND_W_TX_PAYLOAD
#define NRF24L01_COMMAND_W_TX_PAYLOAD
Definition: driver_nrf24l01.c:57
NRF24L01_REG_RX_ADDR_P0
#define NRF24L01_REG_RX_ADDR_P0
Definition: driver_nrf24l01.c:79
NRF24L01_REG_RPD
#define NRF24L01_REG_RPD
Definition: driver_nrf24l01.c:78
driver_nrf24l01.h
driver nrf24l01 header file
nrf24l01_get_rx_pipe_2_address
uint8_t nrf24l01_get_rx_pipe_2_address(nrf24l01_handle_t *handle, uint8_t *addr)
get the rx pipe 2 address
Definition: driver_nrf24l01.c:2211
nrf24l01_output_power_t
nrf24l01_output_power_t
nrf24l01 output power enumeration definition
Definition: driver_nrf24l01.h:128
nrf24l01_get_pipe_4_payload_number
uint8_t nrf24l01_get_pipe_4_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
get the pipe 4 payload number
Definition: driver_nrf24l01.c:2961
nrf24l01_flush_tx
uint8_t nrf24l01_flush_tx(nrf24l01_handle_t *handle)
flush tx
Definition: driver_nrf24l01.c:3550
nrf24l01_get_auto_retransmit_delay
uint8_t nrf24l01_get_auto_retransmit_delay(nrf24l01_handle_t *handle, uint8_t *delay)
get the auto retransmit delay
Definition: driver_nrf24l01.c:1044
nrf24l01_get_rx_pipe_3_address
uint8_t nrf24l01_get_rx_pipe_3_address(nrf24l01_handle_t *handle, uint8_t *addr)
get the rx pipe 3 address
Definition: driver_nrf24l01.c:2281
nrf24l01_get_fifo_status
uint8_t nrf24l01_get_fifo_status(nrf24l01_handle_t *handle, uint8_t *status)
get the fifo status
Definition: driver_nrf24l01.c:3075
nrf24l01_get_pipe_1_payload_number
uint8_t nrf24l01_get_pipe_1_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
get the pipe 1 payload number
Definition: driver_nrf24l01.c:2727
nrf24l01_set_dynamic_payload
uint8_t nrf24l01_set_dynamic_payload(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
enable or disable the dynamic payload
Definition: driver_nrf24l01.c:3194
nrf24l01_set_rx_pipe_3_address
uint8_t nrf24l01_set_rx_pipe_3_address(nrf24l01_handle_t *handle, uint8_t addr)
set the rx pipe 3 address
Definition: driver_nrf24l01.c:2246
nrf24l01_set_tx_address
uint8_t nrf24l01_set_tx_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t len)
set the tx address
Definition: driver_nrf24l01.c:2458
nrf24l01_set_pipe_2_payload_number
uint8_t nrf24l01_set_pipe_2_payload_number(nrf24l01_handle_t *handle, uint8_t num)
set the pipe 2 payload number
Definition: driver_nrf24l01.c:2764
nrf24l01_set_pipe_0_payload_number
uint8_t nrf24l01_set_pipe_0_payload_number(nrf24l01_handle_t *handle, uint8_t num)
set the pipe 0 payload number
Definition: driver_nrf24l01.c:2608
nrf24l01_write_tx_payload
uint8_t nrf24l01_write_tx_payload(nrf24l01_handle_t *handle, uint8_t *buf, uint8_t len)
write the tx payload
Definition: driver_nrf24l01.c:3495
nrf24l01_set_tx_payload_with_no_ack
uint8_t nrf24l01_set_tx_payload_with_no_ack(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
enable or disable the tx payload with no ack
Definition: driver_nrf24l01.c:3358
nrf24l01_get_interrupt
uint8_t nrf24l01_get_interrupt(nrf24l01_handle_t *handle, nrf24l01_interrupt_t type, nrf24l01_bool_t *enable)
get the interrupt status
Definition: driver_nrf24l01.c:1644
nrf24l01_set_pipe_dynamic_payload
uint8_t nrf24l01_set_pipe_dynamic_payload(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t enable)
enable or disable the pipe dynamic payload
Definition: driver_nrf24l01.c:3111
nrf24l01_config_t
nrf24l01_config_t
nrf24l01 config enumeration definition
Definition: driver_nrf24l01.h:72
nrf24l01_get_retransmitted_packet_count
uint8_t nrf24l01_get_retransmitted_packet_count(nrf24l01_handle_t *handle, uint8_t *count)
get the retransmitted packet count
Definition: driver_nrf24l01.c:1800
nrf24l01_nop
uint8_t nrf24l01_nop(nrf24l01_handle_t *handle)
nop
Definition: driver_nrf24l01.c:3806
nrf24l01_get_rx_pipe_1_address
uint8_t nrf24l01_get_rx_pipe_1_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t *len)
get the rx pipe 1 address
Definition: driver_nrf24l01.c:2103
nrf24l01_set_auto_retransmit_count
uint8_t nrf24l01_set_auto_retransmit_count(nrf24l01_handle_t *handle, uint8_t count)
set the auto retransmit count
Definition: driver_nrf24l01.c:1136
nrf24l01_get_dynamic_payload
uint8_t nrf24l01_get_dynamic_payload(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
get the dynamic payload status
Definition: driver_nrf24l01.c:3239
nrf24l01_set_pipe_4_payload_number
uint8_t nrf24l01_set_pipe_4_payload_number(nrf24l01_handle_t *handle, uint8_t num)
set the pipe 4 payload number
Definition: driver_nrf24l01.c:2920
nrf24l01_send
uint8_t nrf24l01_send(nrf24l01_handle_t *handle, uint8_t *buf, uint8_t len)
send data
Definition: driver_nrf24l01.c:350
nrf24l01_set_payload_with_ack
uint8_t nrf24l01_set_payload_with_ack(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
enable or disable the payload with ack
Definition: driver_nrf24l01.c:3276
nrf24l01_write_payload_with_no_ack
uint8_t nrf24l01_write_payload_with_no_ack(nrf24l01_handle_t *handle, uint8_t *buf, uint8_t len)
write the payload with no ack
Definition: driver_nrf24l01.c:3750
nrf24l01_set_config
uint8_t nrf24l01_set_config(nrf24l01_handle_t *handle, nrf24l01_config_t config, nrf24l01_bool_t enable)
enable or disable configure
Definition: driver_nrf24l01.c:577
nrf24l01_get_received_power_detector
uint8_t nrf24l01_get_received_power_detector(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
get the received power detector
Definition: driver_nrf24l01.c:1837
nrf24l01_get_rx_payload_width
uint8_t nrf24l01_get_rx_payload_width(nrf24l01_handle_t *handle, uint8_t *width)
get the rx payload width
Definition: driver_nrf24l01.c:3653
nrf24l01_set_output_power
uint8_t nrf24l01_set_output_power(nrf24l01_handle_t *handle, nrf24l01_output_power_t power)
set the output power
Definition: driver_nrf24l01.c:1561
nrf24l01_set_rx_pipe_1_address
uint8_t nrf24l01_set_rx_pipe_1_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t len)
set the rx pipe 1 address
Definition: driver_nrf24l01.c:2027
nrf24l01_get_payload_with_ack
uint8_t nrf24l01_get_payload_with_ack(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
get the payload with ack status
Definition: driver_nrf24l01.c:3321
nrf24l01_get_mode
uint8_t nrf24l01_get_mode(nrf24l01_handle_t *handle, nrf24l01_mode_t *mode)
get the chip mode
Definition: driver_nrf24l01.c:705
nrf24l01_mode_t
nrf24l01_mode_t
nrf24l01 mode enumeration definition
Definition: driver_nrf24l01.h:85
nrf24l01_auto_retransmit_delay_convert_to_data
uint8_t nrf24l01_auto_retransmit_delay_convert_to_data(nrf24l01_handle_t *handle, uint8_t reg, uint32_t *us)
convert the register raw data to the delay
Definition: driver_nrf24l01.c:1108
nrf24l01_set_channel_frequency
uint8_t nrf24l01_set_channel_frequency(nrf24l01_handle_t *handle, uint8_t freq)
set the channel frequency
Definition: driver_nrf24l01.c:1225
nrf24l01_get_address_width
uint8_t nrf24l01_get_address_width(nrf24l01_handle_t *handle, nrf24l01_address_width_t *width)
get the address width
Definition: driver_nrf24l01.c:955
nrf24l01_get_pipe_0_payload_number
uint8_t nrf24l01_get_pipe_0_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
get the pipe 0 payload number
Definition: driver_nrf24l01.c:2649
nrf24l01_get_auto_retransmit_count
uint8_t nrf24l01_get_auto_retransmit_count(nrf24l01_handle_t *handle, uint8_t *count)
get the auto retransmit count
Definition: driver_nrf24l01.c:1187
nrf24l01_irq_handler
uint8_t nrf24l01_irq_handler(nrf24l01_handle_t *handle)
irq handler
Definition: driver_nrf24l01.c:436
nrf24l01_set_auto_acknowledgment
uint8_t nrf24l01_set_auto_acknowledgment(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t enable)
enable or disable auto acknowledgment
Definition: driver_nrf24l01.c:743
nrf24l01_get_pipe_2_payload_number
uint8_t nrf24l01_get_pipe_2_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
get the pipe 2 payload number
Definition: driver_nrf24l01.c:2805
nrf24l01_clear_interrupt
uint8_t nrf24l01_clear_interrupt(nrf24l01_handle_t *handle, nrf24l01_interrupt_t type)
clear the interrupt status
Definition: driver_nrf24l01.c:1681
nrf24l01_get_output_power
uint8_t nrf24l01_get_output_power(nrf24l01_handle_t *handle, nrf24l01_output_power_t *power)
get the output power
Definition: driver_nrf24l01.c:1606
nrf24l01_get_auto_acknowledgment
uint8_t nrf24l01_get_auto_acknowledgment(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t *enable)
get the auto acknowledgment status
Definition: driver_nrf24l01.c:789
nrf24l01_get_rx_pipe_0_address
uint8_t nrf24l01_get_rx_pipe_0_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t *len)
get the rx pipe 0 address
Definition: driver_nrf24l01.c:1952
nrf24l01_get_tx_address
uint8_t nrf24l01_get_tx_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t *len)
get the tx address
Definition: driver_nrf24l01.c:2534
nrf24l01_get_pipe_dynamic_payload
uint8_t nrf24l01_get_pipe_dynamic_payload(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t *enable)
get the pipe dynamic payload status
Definition: driver_nrf24l01.c:3157
nrf24l01_set_pipe_3_payload_number
uint8_t nrf24l01_set_pipe_3_payload_number(nrf24l01_handle_t *handle, uint8_t num)
set the pipe 3 payload number
Definition: driver_nrf24l01.c:2842
nrf24l01_get_config
uint8_t nrf24l01_get_config(nrf24l01_handle_t *handle, nrf24l01_config_t config, nrf24l01_bool_t *enable)
get the configure
Definition: driver_nrf24l01.c:623
nrf24l01_write_payload_with_ack
uint8_t nrf24l01_write_payload_with_ack(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, uint8_t *buf, uint8_t len)
write the payload with ack
Definition: driver_nrf24l01.c:3691
nrf24l01_get_rx_pipe
uint8_t nrf24l01_get_rx_pipe(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t *enable)
get the rx pipe status
Definition: driver_nrf24l01.c:873
nrf24l01_auto_retransmit_delay_convert_to_register
uint8_t nrf24l01_auto_retransmit_delay_convert_to_register(nrf24l01_handle_t *handle, uint32_t us, uint8_t *reg)
convert the delay to the register raw data
Definition: driver_nrf24l01.c:1081
nrf24l01_get_data_pipe_number
uint8_t nrf24l01_get_data_pipe_number(nrf24l01_handle_t *handle, uint8_t *number)
get the data pipe number
Definition: driver_nrf24l01.c:1726
nrf24l01_get_data_rate
uint8_t nrf24l01_get_data_rate(nrf24l01_handle_t *handle, nrf24l01_data_rate_t *rate)
get the data rate
Definition: driver_nrf24l01.c:1524
nrf24l01_read_rx_payload
uint8_t nrf24l01_read_rx_payload(nrf24l01_handle_t *handle, uint8_t *buf, uint8_t len)
read the rx payload
Definition: driver_nrf24l01.c:3442
nrf24l01_get_rx_pipe_5_address
uint8_t nrf24l01_get_rx_pipe_5_address(nrf24l01_handle_t *handle, uint8_t *addr)
get the rx pipe 5 address
Definition: driver_nrf24l01.c:2421
nrf24l01_get_channel_frequency
uint8_t nrf24l01_get_channel_frequency(nrf24l01_handle_t *handle, uint8_t *freq)
get the channel frequency
Definition: driver_nrf24l01.c:1276
nrf24l01_set_rx_pipe_5_address
uint8_t nrf24l01_set_rx_pipe_5_address(nrf24l01_handle_t *handle, uint8_t addr)
set the rx pipe 5 address
Definition: driver_nrf24l01.c:2386
nrf24l01_interrupt_t
nrf24l01_interrupt_t
nrf24l01 interrupt enumeration definition
Definition: driver_nrf24l01.h:139
nrf24l01_set_address_width
uint8_t nrf24l01_set_address_width(nrf24l01_handle_t *handle, nrf24l01_address_width_t width)
set the address width
Definition: driver_nrf24l01.c:910
nrf24l01_set_active
uint8_t nrf24l01_set_active(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
enable or disable the chip
Definition: driver_nrf24l01.c:315
nrf24l01_address_width_t
nrf24l01_address_width_t
nrf24l01 address width enumeration definition
Definition: driver_nrf24l01.h:107
nrf24l01_get_lost_packet_count
uint8_t nrf24l01_get_lost_packet_count(nrf24l01_handle_t *handle, uint8_t *count)
get the lost packet count
Definition: driver_nrf24l01.c:1763
nrf24l01_set_rx_pipe
uint8_t nrf24l01_set_rx_pipe(nrf24l01_handle_t *handle, nrf24l01_pipe_t pipe, nrf24l01_bool_t enable)
enable or disable rx pipe
Definition: driver_nrf24l01.c:827
nrf24l01_pipe_t
nrf24l01_pipe_t
nrf24l01 pipe enumeration definition
Definition: driver_nrf24l01.h:94
nrf24l01_get_continuous_carrier_transmit
uint8_t nrf24l01_get_continuous_carrier_transmit(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
get the continuous carrier transmit status
Definition: driver_nrf24l01.c:1358
nrf24l01_info
uint8_t nrf24l01_info(nrf24l01_info_t *info)
get chip's information
Definition: driver_nrf24l01.c:3892
nrf24l01_set_pipe_5_payload_number
uint8_t nrf24l01_set_pipe_5_payload_number(nrf24l01_handle_t *handle, uint8_t num)
set the pipe 5 payload number
Definition: driver_nrf24l01.c:2998
nrf24l01_set_continuous_carrier_transmit
uint8_t nrf24l01_set_continuous_carrier_transmit(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
enable or disable continuous carrier transmit
Definition: driver_nrf24l01.c:1313
nrf24l01_init
uint8_t nrf24l01_init(nrf24l01_handle_t *handle)
initialize the chip
Definition: driver_nrf24l01.c:153
nrf24l01_set_force_pll_lock_signal
uint8_t nrf24l01_set_force_pll_lock_signal(nrf24l01_handle_t *handle, nrf24l01_bool_t enable)
enable or disable force pll lock signal
Definition: driver_nrf24l01.c:1395
nrf24l01_get_pipe_3_payload_number
uint8_t nrf24l01_get_pipe_3_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
get the pipe 3 payload number
Definition: driver_nrf24l01.c:2883
nrf24l01_set_rx_pipe_2_address
uint8_t nrf24l01_set_rx_pipe_2_address(nrf24l01_handle_t *handle, uint8_t addr)
set the rx pipe 2 address
Definition: driver_nrf24l01.c:2176
nrf24l01_get_rx_pipe_4_address
uint8_t nrf24l01_get_rx_pipe_4_address(nrf24l01_handle_t *handle, uint8_t *addr)
get the rx pipe 4 address
Definition: driver_nrf24l01.c:2351
nrf24l01_get_force_pll_lock_signal
uint8_t nrf24l01_get_force_pll_lock_signal(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
get the force pll lock signal status
Definition: driver_nrf24l01.c:1440
nrf24l01_set_mode
uint8_t nrf24l01_set_mode(nrf24l01_handle_t *handle, nrf24l01_mode_t mode)
set the chip mode
Definition: driver_nrf24l01.c:660
nrf24l01_set_auto_retransmit_delay
uint8_t nrf24l01_set_auto_retransmit_delay(nrf24l01_handle_t *handle, uint8_t delay)
set the auto retransmit delay
Definition: driver_nrf24l01.c:993
nrf24l01_get_pipe_5_payload_number
uint8_t nrf24l01_get_pipe_5_payload_number(nrf24l01_handle_t *handle, uint8_t *num)
get the pipe 5 payload number
Definition: driver_nrf24l01.c:3039
nrf24l01_set_pipe_1_payload_number
uint8_t nrf24l01_set_pipe_1_payload_number(nrf24l01_handle_t *handle, uint8_t num)
set the pipe 1 payload number
Definition: driver_nrf24l01.c:2686
nrf24l01_flush_rx
uint8_t nrf24l01_flush_rx(nrf24l01_handle_t *handle)
flush rx
Definition: driver_nrf24l01.c:3584
nrf24l01_data_rate_t
nrf24l01_data_rate_t
nrf24l01 data rate enumeration definition
Definition: driver_nrf24l01.h:118
nrf24l01_deinit
uint8_t nrf24l01_deinit(nrf24l01_handle_t *handle)
close the chip
Definition: driver_nrf24l01.c:249
nrf24l01_set_data_rate
uint8_t nrf24l01_set_data_rate(nrf24l01_handle_t *handle, nrf24l01_data_rate_t rate)
set the data rate
Definition: driver_nrf24l01.c:1477
nrf24l01_get_tx_payload_with_no_ack
uint8_t nrf24l01_get_tx_payload_with_no_ack(nrf24l01_handle_t *handle, nrf24l01_bool_t *enable)
get the tx payload with no ack status
Definition: driver_nrf24l01.c:3403
nrf24l01_bool_t
nrf24l01_bool_t
nrf24l01 bool enumeration definition
Definition: driver_nrf24l01.h:63
nrf24l01_set_rx_pipe_0_address
uint8_t nrf24l01_set_rx_pipe_0_address(nrf24l01_handle_t *handle, uint8_t *addr, uint8_t len)
set the rx pipe 0 address
Definition: driver_nrf24l01.c:1876
nrf24l01_reuse_tx_payload
uint8_t nrf24l01_reuse_tx_payload(nrf24l01_handle_t *handle)
reuse the tx payload
Definition: driver_nrf24l01.c:3618
nrf24l01_set_rx_pipe_4_address
uint8_t nrf24l01_set_rx_pipe_4_address(nrf24l01_handle_t *handle, uint8_t addr)
set the rx pipe 4 address
Definition: driver_nrf24l01.c:2316
NRF24L01_INTERRUPT_TX_DS
@ NRF24L01_INTERRUPT_TX_DS
Definition: driver_nrf24l01.h:141
NRF24L01_INTERRUPT_MAX_RT
@ NRF24L01_INTERRUPT_MAX_RT
Definition: driver_nrf24l01.h:142
NRF24L01_INTERRUPT_RX_DR
@ NRF24L01_INTERRUPT_RX_DR
Definition: driver_nrf24l01.h:140
NRF24L01_INTERRUPT_TX_FULL
@ NRF24L01_INTERRUPT_TX_FULL
Definition: driver_nrf24l01.h:143
nrf24l01_get_reg
uint8_t nrf24l01_get_reg(nrf24l01_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
get the chip register
Definition: driver_nrf24l01.c:3870
nrf24l01_set_reg
uint8_t nrf24l01_set_reg(nrf24l01_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
set the chip register
Definition: driver_nrf24l01.c:3843
nrf24l01_handle_s
nrf24l01 handle structure definition
Definition: driver_nrf24l01.h:162
nrf24l01_handle_s::inited
uint8_t inited
Definition: driver_nrf24l01.h:173
nrf24l01_handle_s::gpio_write
uint8_t(* gpio_write)(uint8_t value)
Definition: driver_nrf24l01.h:165
nrf24l01_handle_s::spi_init
uint8_t(* spi_init)(void)
Definition: driver_nrf24l01.h:166
nrf24l01_handle_s::delay_ms
void(* delay_ms)(uint32_t ms)
Definition: driver_nrf24l01.h:170
nrf24l01_handle_s::spi_read
uint8_t(* spi_read)(uint8_t reg, uint8_t *buf, uint16_t len)
Definition: driver_nrf24l01.h:168
nrf24l01_handle_s::spi_write
uint8_t(* spi_write)(uint8_t reg, uint8_t *buf, uint16_t len)
Definition: driver_nrf24l01.h:169
nrf24l01_handle_s::debug_print
void(* debug_print)(const char *const fmt,...)
Definition: driver_nrf24l01.h:171
nrf24l01_handle_s::finished
uint8_t finished
Definition: driver_nrf24l01.h:174
nrf24l01_handle_s::spi_deinit
uint8_t(* spi_deinit)(void)
Definition: driver_nrf24l01.h:167
nrf24l01_handle_s::gpio_init
uint8_t(* gpio_init)(void)
Definition: driver_nrf24l01.h:163
nrf24l01_handle_s::gpio_deinit
uint8_t(* gpio_deinit)(void)
Definition: driver_nrf24l01.h:164
nrf24l01_handle_s::receive_callback
void(* receive_callback)(uint8_t type, uint8_t num, uint8_t *buf, uint8_t len)
Definition: driver_nrf24l01.h:172
nrf24l01_info_s
nrf24l01 information structure definition
Definition: driver_nrf24l01.h:181
nrf24l01_info_s::temperature_max
float temperature_max
Definition: driver_nrf24l01.h:189
nrf24l01_info_s::supply_voltage_max_v
float supply_voltage_max_v
Definition: driver_nrf24l01.h:186
nrf24l01_info_s::driver_version
uint32_t driver_version
Definition: driver_nrf24l01.h:190
nrf24l01_info_s::temperature_min
float temperature_min
Definition: driver_nrf24l01.h:188
nrf24l01_info_s::max_current_ma
float max_current_ma
Definition: driver_nrf24l01.h:187
nrf24l01_info_s::manufacturer_name
char manufacturer_name[32]
Definition: driver_nrf24l01.h:183
nrf24l01_info_s::supply_voltage_min_v
float supply_voltage_min_v
Definition: driver_nrf24l01.h:185
nrf24l01_info_s::interface
char interface[8]
Definition: driver_nrf24l01.h:184
nrf24l01_info_s::chip_name
char chip_name[32]
Definition: driver_nrf24l01.h:182