diff --git a/Cargo.lock b/Cargo.lock index 9481d99..6e711ae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -659,6 +659,7 @@ dependencies = [ "drogue-device", "embassy", "env_logger", + "heapless", "log", ] diff --git a/Cargo.toml b/Cargo.toml index 596ade6..bfc5885 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ embassy = { version = "0.1.0", default-features = false, features = ["std"] } drogue-device = { version = "0.1.0", default-features = false, features = ["log", "std"] } env_logger = "0.9.0" log = "0.4.14" +heapless = "0.7.10" [patch.crates-io] embassy = { git = "https://github.com/embassy-rs/embassy.git", rev = "d76cd5ceaf5140c48ef97180beae156c0c0e07c8" } diff --git a/src/packet/packet_builder.rs b/src/packet/packet_builder.rs index 35e3113..5020ce7 100644 --- a/src/packet/packet_builder.rs +++ b/src/packet/packet_builder.rs @@ -56,7 +56,7 @@ impl<'a> PacketBuilder<'a> { // Tutaj se cely packet dokonci - spocita se remaining len co chybi v hlavicce atd... } - pub fn decode_packet(& mut self, buff_reader: &'a mut BuffReader) { + pub fn decode_packet(& mut self, buff_reader: & mut BuffReader<'a>) { self.decodeFixedHeader(buff_reader); if self.currentPacket.fixed_header & 0xF0 == (PacketType::Connect).into() { self.decodeControllPacket(buff_reader); @@ -70,7 +70,7 @@ impl<'a> PacketBuilder<'a> { return PacketType::from(self.currentPacket.fixed_header); } - pub fn decodeControllPacket(& mut self, buff_reader: &'a mut BuffReader) { + pub fn decodeControllPacket(& mut self, buff_reader: & mut BuffReader<'a>) { self.currentPacket.packet_identifier = 0; self.currentPacket.protocol_name_len = buff_reader.readU16().unwrap(); self.currentPacket.protocol_name = buff_reader.readU32().unwrap(); @@ -80,17 +80,21 @@ impl<'a> PacketBuilder<'a> { self.currentPacket.property_len = buff_reader.readVariableByteInt().unwrap(); let mut x: u32 = 0; let mut prop: Result; - let mut res; + let mut res: Property; loop { prop = Property::decode(buff_reader); - if prop.is_ok() { - res = prop.unwrap(); + if let Ok(res) = prop { + x = x + res.len() as u32 + 1; self.currentPacket.properties.push(res); + } + + /*if prop.is_ok() { + } else { log::error!("Decoding property did not went well!"); - } + }*/ - x = x + res.len() as u32 + 1; + if x == self.currentPacket.property_len { break; } diff --git a/src/packet/property.rs b/src/packet/property.rs index 05b344b..e8583d0 100644 --- a/src/packet/property.rs +++ b/src/packet/property.rs @@ -37,7 +37,7 @@ pub enum Property<'a> { } impl<'a> Property<'a> { - pub fn len(mut self) -> u16 { + pub fn len(self) -> u16 { match self { Property::PayloadFormat(u) => return 1, Property::MessageExpiryInterval(u) => return 4, @@ -69,7 +69,7 @@ impl<'a> Property<'a> { } } - pub fn decode(buff_reader: &'a mut BuffReader) -> Result, ProperyParseError> { + pub fn decode(buff_reader: & mut BuffReader<'a>) -> Result, ProperyParseError> { let propertyIdentifier = buff_reader.readU8(); match propertyIdentifier { Ok(0x01) => return Ok(Property::PayloadFormat(buff_reader.readU8())),