Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b1cc03f authored by Myles Watson's avatar Myles Watson Committed by Gerrit Code Review
Browse files

Merge "pdl,bluetooth_packetgen: Change the syntax of size modifiers"

parents 1f68930c 4e8627b2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ enum GapDataType : 8 {
struct GapData {
  _size_(data) : 8, // Including one byte for data_type
  data_type : GapDataType,
  data : 8[+1*8],
  data : 8[+1],
}

// HCI ACL Packets
+1 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ packet BasicFrameWithFcs {
  _checksum_start_(fcs),
  _size_(_payload_) : 16,
  channel_id : 16,
  _payload_ : [+2*8], // Include Fcs in the _size_
  _payload_ : [+2], // Include Fcs in the _size_
  fcs : Fcs,
}

+3 −3
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ Size PayloadField::GetSize() const {

  std::string dynamic_size = "(Get" + util::UnderscoreToCamelCase(size_field_->GetName()) + "() * 8)";
  if (!size_modifier_.empty()) {
    dynamic_size += "- (" + size_modifier_ + ")";
    dynamic_size += "- (" + size_modifier_.substr(1) + " * 8)";
  }

  return dynamic_size;
@@ -121,7 +121,7 @@ void PayloadField::GenBoundsCheck(std::ostream& s, Size start_offset, Size, std:
  if (size_field_ != nullptr) {
    s << "let want_ = " << start_offset.bytes() << " + (" << size_field_->GetName() << " as usize)";
    if (!size_modifier_.empty()) {
      s << " - ((" << size_modifier_.substr(1) << ") / 8)";
      s << " - " << size_modifier_.substr(1);
    }
    s << ";";
    s << "if bytes.len() < want_ {";
@@ -132,7 +132,7 @@ void PayloadField::GenBoundsCheck(std::ostream& s, Size start_offset, Size, std:
    s << "    got: bytes.len()});";
    s << "}";
    if (!size_modifier_.empty()) {
      s << "if ((" << size_field_->GetName() << " as usize) < ((" << size_modifier_.substr(1) << ") / 8)) {";
      s << "if (" << size_field_->GetName() << " as usize) < " << size_modifier_.substr(1) << " {";
      s << " return Err(Error::ImpossibleStructError);";
      s << "}";
    }
+6 −6
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ Size VectorField::GetSize() const {
  // size_field_ is of type SIZE
  if (size_field_->GetFieldType() == SizeField::kFieldType) {
    std::string ret = "(static_cast<size_t>(Get" + util::UnderscoreToCamelCase(size_field_->GetName()) + "()) * 8)";
    if (!size_modifier_.empty()) ret += size_modifier_;
    if (!size_modifier_.empty()) ret += "+ (" + size_modifier_.substr(1) + " * 8)";
    return ret;
  }

@@ -90,7 +90,7 @@ Size VectorField::GetStructSize() const {
  // size_field_ is of type SIZE
  if (size_field_->GetFieldType() == SizeField::kFieldType) {
    std::string ret = "(static_cast<size_t>(to_fill->" + size_field_->GetName() + "_extracted_) * 8)";
    if (!size_modifier_.empty()) ret += "-" + size_modifier_;
    if (!size_modifier_.empty()) ret += "- (" + size_modifier_.substr(1) + " * 8)";
    return ret;
  }

@@ -262,7 +262,7 @@ void VectorField::GenBoundsCheck(std::ostream& s, Size start_offset, Size, std::
  if (size_field_ != nullptr && size_field_->GetFieldType() == SizeField::kFieldType) {
    s << "let want_ = " << start_offset.bytes() << " + (" << size_field_->GetName() << " as usize)";
    if (GetSizeModifier() != "") {
      s << " - ((" << GetSizeModifier().substr(1) << ") / 8)";
      s << " - " << GetSizeModifier().substr(1);
    }
    s << ";";
    s << "if bytes.len() < want_ {";
@@ -273,7 +273,7 @@ void VectorField::GenBoundsCheck(std::ostream& s, Size start_offset, Size, std::
    s << "    got: bytes.len()});";
    s << "}";
    if (GetSizeModifier() != "") {
      s << "if ((" << size_field_->GetName() << " as usize) < ((" << GetSizeModifier().substr(1) << ") / 8)) {";
      s << "if (" << size_field_->GetName() << " as usize) < " << GetSizeModifier().substr(1) << " {";
      s << " return Err(Error::ImpossibleStructError);";
      s << "}";
    }
@@ -318,7 +318,7 @@ void VectorField::GenRustGetter(std::ostream& s, Size start_offset, Size, std::s
      s << start_offset.bytes() << " + " << size_field_->GetName();
      s << " as usize)";
      if (GetSizeModifier() != "") {
        s << " - ((" << GetSizeModifier().substr(1) << ") / 8)";
        s << " - " << GetSizeModifier().substr(1);
      }
      s << "]";
    }
@@ -346,7 +346,7 @@ void VectorField::GenRustGetter(std::ostream& s, Size start_offset, Size, std::s
      s << "let mut parsable_ = &bytes[" << start_offset.bytes() << ".." << start_offset.bytes() << " + ("
        << size_field_->GetName() << " as usize)";
      if (GetSizeModifier() != "") {
        s << " - ((" << GetSizeModifier().substr(1) << ") / 8)";
        s << " - " << GetSizeModifier().substr(1);
      }
      s << "];";
      s << "while parsable_.len() > 0 {";
+3 −5
Original line number Diff line number Diff line
@@ -398,8 +398,7 @@ void ParentDef::GenSerialize(std::ostream& s) const {
        s << "size_t payload_bytes = GetPayloadSize();";
        std::string modifier = ((PayloadField*)sized_field)->size_modifier_;
        if (modifier != "") {
          s << "static_assert((" << modifier << ")%8 == 0, \"Modifiers must be byte-aligned\");";
          s << "payload_bytes = payload_bytes + (" << modifier << ") / 8;";
          s << "payload_bytes = payload_bytes + " << modifier.substr(1) << ";";
        }
        s << "ASSERT(payload_bytes < (static_cast<size_t>(1) << " << field->GetSize().bits() << "));";
        s << "insert(static_cast<" << field->GetDataType() << ">(payload_bytes), i," << field->GetSize().bits() << ");";
@@ -426,9 +425,8 @@ void ParentDef::GenSerialize(std::ostream& s) const {
        }
        std::string modifier = vector->GetSizeModifier();
        if (modifier != "") {
          s << "static_assert((" << modifier << ")%8 == 0, \"Modifiers must be byte-aligned\");";
          s << vector_name << "bytes = ";
          s << vector_name << "bytes + (" << modifier << ") / 8;";
          s << vector_name << "bytes + " << modifier.substr(1) << ";";
        }
        s << "ASSERT(" << vector_name + "bytes < (1 << " << field->GetSize().bits() << "));";
        s << "insert(" << vector_name << "bytes, i, ";
@@ -671,7 +669,7 @@ void ParentDef::GenRustWriteToFields(std::ostream& s) const {
        }
        std::string modifier = vector->GetSizeModifier();
        if (modifier != "") {
          s << "let " << vector_name << " = " << vector_name << " + (" << modifier.substr(1) << ") / 8;";
          s << "let " << vector_name << " = " << vector_name << " + " << modifier.substr(1) << ";";
        }

        s << "let " << field->GetName() << " = " << field->GetRustDataType() << "::try_from(" << vector_name
Loading