1use crate::ErrorCode;
55
56pub trait BleAdvertisementDriver<'a> {
57 fn transmit_advertisement(&self, buf: &'static mut [u8], len: usize, channel: RadioChannel);
58 fn receive_advertisement(&self, channel: RadioChannel);
59 fn set_receive_client(&self, client: &'a dyn RxClient);
60 fn set_transmit_client(&self, client: &'a dyn TxClient);
61}
62
63pub trait BleConfig {
64 fn set_tx_power(&self, power: u8) -> Result<(), ErrorCode>;
65}
66
67pub trait RxClient {
68 fn receive_event(&self, buf: &'static mut [u8], len: u8, result: Result<(), ErrorCode>);
69}
70
71pub trait TxClient {
72 fn transmit_event(&self, buf: &'static mut [u8], result: Result<(), ErrorCode>);
73}
74
75#[derive(PartialEq, Debug, Copy, Clone)]
77pub enum RadioChannel {
78 DataChannel0 = 4,
79 DataChannel1 = 6,
80 DataChannel2 = 8,
81 DataChannel3 = 10,
82 DataChannel4 = 12,
83 DataChannel5 = 14,
84 DataChannel6 = 16,
85 DataChannel7 = 18,
86 DataChannel8 = 20,
87 DataChannel9 = 22,
88 DataChannel10 = 24,
89 DataChannel11 = 28,
90 DataChannel12 = 30,
91 DataChannel13 = 32,
92 DataChannel14 = 34,
93 DataChannel15 = 36,
94 DataChannel16 = 38,
95 DataChannel17 = 40,
96 DataChannel18 = 42,
97 DataChannel19 = 44,
98 DataChannel20 = 46,
99 DataChannel21 = 48,
100 DataChannel22 = 50,
101 DataChannel23 = 52,
102 DataChannel24 = 54,
103 DataChannel25 = 56,
104 DataChannel26 = 58,
105 DataChannel27 = 60,
106 DataChannel28 = 62,
107 DataChannel29 = 64,
108 DataChannel30 = 66,
109 DataChannel31 = 68,
110 DataChannel32 = 70,
111 DataChannel33 = 72,
112 DataChannel34 = 74,
113 DataChannel35 = 76,
114 DataChannel36 = 78,
115 AdvertisingChannel37 = 2,
116 AdvertisingChannel38 = 26,
117 AdvertisingChannel39 = 80,
118}
119
120impl RadioChannel {
121 pub fn get_channel_index(&self) -> u32 {
122 match *self {
123 RadioChannel::DataChannel0 => 0,
124 RadioChannel::DataChannel1 => 1,
125 RadioChannel::DataChannel2 => 2,
126 RadioChannel::DataChannel3 => 3,
127 RadioChannel::DataChannel4 => 4,
128 RadioChannel::DataChannel5 => 5,
129 RadioChannel::DataChannel6 => 6,
130 RadioChannel::DataChannel7 => 7,
131 RadioChannel::DataChannel8 => 8,
132 RadioChannel::DataChannel9 => 9,
133 RadioChannel::DataChannel10 => 10,
134 RadioChannel::DataChannel11 => 11,
135 RadioChannel::DataChannel12 => 12,
136 RadioChannel::DataChannel13 => 13,
137 RadioChannel::DataChannel14 => 14,
138 RadioChannel::DataChannel15 => 15,
139 RadioChannel::DataChannel16 => 16,
140 RadioChannel::DataChannel17 => 17,
141 RadioChannel::DataChannel18 => 18,
142 RadioChannel::DataChannel19 => 19,
143 RadioChannel::DataChannel20 => 20,
144 RadioChannel::DataChannel21 => 21,
145 RadioChannel::DataChannel22 => 22,
146 RadioChannel::DataChannel23 => 23,
147 RadioChannel::DataChannel24 => 24,
148 RadioChannel::DataChannel25 => 25,
149 RadioChannel::DataChannel26 => 26,
150 RadioChannel::DataChannel27 => 27,
151 RadioChannel::DataChannel28 => 28,
152 RadioChannel::DataChannel29 => 29,
153 RadioChannel::DataChannel30 => 30,
154 RadioChannel::DataChannel31 => 31,
155 RadioChannel::DataChannel32 => 32,
156 RadioChannel::DataChannel33 => 33,
157 RadioChannel::DataChannel34 => 34,
158 RadioChannel::DataChannel35 => 35,
159 RadioChannel::DataChannel36 => 36,
160 RadioChannel::AdvertisingChannel37 => 37,
161 RadioChannel::AdvertisingChannel38 => 38,
162 RadioChannel::AdvertisingChannel39 => 39,
163 }
164 }
165}