examples: added receive and send examples
[libsi24] / examples / recv-with-ack.c
1 /**
2  * File              : recv-with-ack.c
3  * Author            : Robin Krens <robin@robinkrens.nl>
4  * Date              : 23.01.2023
5  * Last Modified Date: 23.01.2023
6  * Last Modified By  : Robin Krens <robin@robinkrens.nl>
7  */
8 #include <stdarg.h>
9 #include <stdint.h>
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <string.h>
13
14 #include "libsi24.h"
15
16 #define MSG_SIZE 32
17
18 int example_spi_write_read(unsigned char* data, size_t sz)
19 {
20         (void)data;
21         (void)sz;
22         return 0;
23 }
24
25 void example_ce(unsigned val)
26 {
27         (void)val;
28 }
29
30 void example_event_handler(si24_t* si, si24_event_t* e)
31 {
32         (void)si;
33
34         switch (e->type) {
35         case EV_RX_COMPLETE:
36                 break;
37         case EV_TX_COMPLETE:
38                 break;
39         case EV_TX_FULL:
40                 break;
41         case EV_RX_EMPTY:
42                 break;
43         case EV_ERR_TIMEOUT:
44                 break;
45         case EV_ERR_BUS:
46                 break;
47         case EV_ERR_MAX_RETRIES:
48                 break;
49         case EV_ERR_CRC:
50                 break;
51         case EV_ERR_CONFIG:
52                 break;
53         default:
54                 break;
55         }
56 }
57
58 int main(void)
59 {
60         unsigned char recv_buf[MSG_SIZE];
61
62         si24_ioctl_t ctl = {
63                 .write_and_read = example_spi_write_read,
64                 .chip_enable = example_ce,
65         };
66
67         const si24_opts_t opts = {
68                 .mode = RECV_MODE,
69                 .enable_ack = 1,
70                 .non_blocking = 0,
71                 .enable_crc = 1,
72                 .enable_dynpd = 1,
73                 .crc = TWO_BYTE,
74                 .ioctl = &ctl,
75                 .speed = MBPS2,
76                 .txpwr = PLUS4DB,
77                 .payload = 5,
78                 .timeout = 1,
79                 .retries = 5,
80                 .mac_addr = { 0xAB, 0xCD, 0xEF, 0xFF, 0xFF }
81         };
82
83         struct si24_t* si = si24_init(&opts, example_event_handler);
84
85         while (1) {
86                 int read = si24_recv(si, recv_buf, 32);
87                 for (int i = 0; i < read; ++i) {
88                         printf("%c", recv_buf[i]);
89                 }
90                 sleep(1);
91         }
92 }