| 31 | } |
| 32 | |
| 33 | pub fn encode(&self, payload: Vec<u8>) -> Vec<u16> { |
| 34 | let frame = Self::whitening(&payload); |
| 35 | let frame = if self.implicit_header { |
| 36 | frame |
| 37 | } else { |
| 38 | Self::header(frame, self.code_rate, self.has_crc) |
| 39 | }; |
| 40 | let frame = if self.has_crc { |
| 41 | Self::crc(frame, &payload) |
| 42 | } else { |
| 43 | frame |
| 44 | }; |
| 45 | let frame = Self::hamming_encode(frame, self.code_rate, self.spreading_factor); |
| 46 | let frame = Self::interleave( |
| 47 | frame, |
| 48 | self.code_rate, |
| 49 | self.spreading_factor, |
| 50 | self.ldro_enabled, |
| 51 | ); |
| 52 | Self::gray_demap(frame, self.spreading_factor) |
| 53 | } |
| 54 | |
| 55 | fn whitening(payload: &[u8]) -> Vec<u8> { |
| 56 | let mut out = vec![0; payload.len() * 2]; |