You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.0 KiB
63 lines
2.0 KiB
7 months ago
|
This file just contains some notes about the design and usage of the PDL language.
|
||
|
|
||
|
-------
|
||
|
TERMS
|
||
|
-------
|
||
|
.pdl
|
||
|
The file type that defines packet definitions. You may think of each pdl file
|
||
|
as its own translation unit.
|
||
|
|
||
|
Packet Views and Builders
|
||
|
Generated from a packet definition. Views are used to validate packets and
|
||
|
extract the fields that are defined in the pdl file. Builders check the input
|
||
|
arguments and can be serialized.
|
||
|
|
||
|
Checksum types
|
||
|
checksum MyChecksumClass : 16 "path/to/the/class/"
|
||
|
Checksum fields need to implement the following three methods:
|
||
|
void Initialize(MyChecksumClass&);
|
||
|
void AddByte(MyChecksumClass&, uint8_t);
|
||
|
// Assuming a 16-bit (uint16_t) checksum:
|
||
|
uint16_t GetChecksum(MyChecksumClass&);
|
||
|
-------------
|
||
|
LIMITATIONS
|
||
|
-------------
|
||
|
- Size fields for a variable length field MUST come before the definition
|
||
|
of said field.
|
||
|
|
||
|
- Payload fields must be byte-aligned unless they have an unknown size.
|
||
|
Body fields are allowed to not be byte aligned.
|
||
|
|
||
|
- No conditionals
|
||
|
|
||
|
- Can not have to fields with the same name anywhere in the in an inheritence chain
|
||
|
|
||
|
- Can't handle size for Body type fields yet since they might not be byte aligned.
|
||
|
|
||
|
- Currently no arrays of custom types (might change later)
|
||
|
|
||
|
-------
|
||
|
NOTES
|
||
|
-------
|
||
|
All field names should be in snake_case. Types should be in CamelCase.
|
||
|
|
||
|
The _payload_ keyword generates a getter but _body_ doesn't. Therefore, a
|
||
|
_payload_ must be byte aligned.
|
||
|
|
||
|
Supports constraints on grandparents
|
||
|
Supports multiple constraints
|
||
|
Every field handles its own generation.
|
||
|
One pdl file will result in one header file with all the packets
|
||
|
|
||
|
Things to cover -
|
||
|
Constraints
|
||
|
Inheritance vs Contains
|
||
|
|
||
|
Custom fields with fixed size must extend and implement:
|
||
|
packet::CustomFieldFixedSizeInterface
|
||
|
|
||
|
Custom fields with variable size need the following functions:
|
||
|
static void Serialize(const Type&, MutableView&);
|
||
|
static std::optional<size_t> Size(Iterator);
|
||
|
static Type Parse(Iterator);
|
||
|
std::string ToString();
|