diff --git a/docs/spec/spec.adoc b/docs/spec/spec.adoc index b2805ab..4821684 100644 --- a/docs/spec/spec.adoc +++ b/docs/spec/spec.adoc @@ -62,4 +62,8 @@ include::structs/twin_sector.adoc[] <<< -include::structs/geom.adoc[] \ No newline at end of file +include::structs/geom.adoc[] + +<<< + +include::structs/metadata.adoc[] \ No newline at end of file diff --git a/docs/spec/structs/metadata.adoc b/docs/spec/structs/metadata.adoc new file mode 100644 index 0000000..b34854a --- /dev/null +++ b/docs/spec/structs/metadata.adoc @@ -0,0 +1,219 @@ +=== The metadata block (`META`) + +The metadata block contains descriptive information related to the media source, which is not part of the original media data itself. +Typical fields may include the manufacturer name, device model, acquisition sequence identifiers, and other contextual attributes. + +All string values within this block are encoded as little-endian UTF-16 and terminated with a null character. + +[source,c] +#define META_MAGIC 0x4154454D +/**Metadata block, contains metadata */ +typedef struct MetadataBlockHeader +{ + /**Identifier, */ + uint32_t identifier; + /**Size in uint8_ts of this whole metadata block */ + uint32_t blockSize; + /**Sequence of media set this media beint64_ts to */ + int32_t mediaSequence; + /**Total number of media on the media set this media beint64_ts to */ + int32_t lastMediaSequence; + /**Offset to start of creator string from start of this block */ + uint32_t creatorOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t creatorLength; + /**Offset to start of creator string from start of this block */ + uint32_t commentsOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t commentsLength; + /**Offset to start of creator string from start of this block */ + uint32_t mediaTitleOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t mediaTitleLength; + /**Offset to start of creator string from start of this block */ + uint32_t mediaManufacturerOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t mediaManufacturerLength; + /**Offset to start of creator string from start of this block */ + uint32_t mediaModelOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t mediaModelLength; + /**Offset to start of creator string from start of this block */ + uint32_t mediaSerialNumberOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t mediaSerialNumberLength; + /**Offset to start of creator string from start of this block */ + uint32_t mediaBarcodeOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t mediaBarcodeLength; + /**Offset to start of creator string from start of this block */ + uint32_t mediaPartNumberOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t mediaPartNumberLength; + /**Offset to start of creator string from start of this block */ + uint32_t driveManufacturerOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t driveManufacturerLength; + /**Offset to start of creator string from start of this block */ + uint32_t driveModelOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t driveModelLength; + /**Offset to start of creator string from start of this block */ + uint32_t driveSerialNumberOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t driveSerialNumberLength; + /**Offset to start of creator string from start of this block */ + uint32_t driveFirmwareRevisionOffset; + /**Length in uint8_ts of the null-terminated UTF-16LE creator string */ + uint32_t driveFirmwareRevisionLength; +} MetadataBlockHeader; + +==== Field Descriptions + +[cols="2,2,2,6",options="header"] +|=== +|Type +|Size +|Name +|Description + +|uint32_t +|4 bytes +|identifier +|The metadata table identifier, always 'META' + +|uint32_t +|4 bytes +|blockSize +|The size of this block including all of its data. + +|int32_t +|4 bytes +|mediaSequence +|The number of heads. + +|int32_t +|4 bytes +|lastMediaSequence +|The number of sectors per track. + +|uint32_t +|4 bytes +|creatorOffset +|Offset to start of creator string from start of this block. + +|uint32_t +|4 bytes +|creatorLength +|Length in bytes of the creator string. + +|uint32_t +|4 bytes +|commentsOffset +|Offset to start of comments string from start of this block. + +|uint32_t +|4 bytes +|commentsLength +|Length in bytes of the comments string. + +|uint32_t +|4 bytes +|mediaTitleOffset +|Offset to start of media title string from start of this block. + +|uint32_t +|4 bytes +|mediaTitleLength +|Length in bytes of the media title string. + +|uint32_t +|4 bytes +|mediaManufacturerOffset +|Offset to start of media manufacturer string from start of this block. + +|uint32_t +|4 bytes +|mediaManufacturerLength +|Length in bytes of the media manufacturer string. + +|uint32_t +|4 bytes +|mediaModelOffset +|Offset to start of media model string from start of this block. + +|uint32_t +|4 bytes +|mediaModelLength +|Length in bytes of the media model string. + +|uint32_t +|4 bytes +|mediaSerialNumberOffset +|Offset to start of media serial number string from start of this block. + +|uint32_t +|4 bytes +|mediaSerialNumberLength +|Length in bytes of the media serial number string. + +|uint32_t +|4 bytes +|mediaBarcodeOffset +|Offset to start of media barcode string from start of this block. + +|uint32_t +|4 bytes +|mediaBarcodeLength +|Length in bytes of the media barcode string. + +|uint32_t +|4 bytes +|mediaPartNumberOffset +|Offset to start of media part number string from start of this block. + +|uint32_t +|4 bytes +|mediaPartNumberLength +|Length in bytes of the media part number string. + +|uint32_t +|4 bytes +|driveManufacturerOffset +|Offset to start of drive manufacturer string from start of this block. + +|uint32_t +|4 bytes +|driveManufacturerLength +|Length in bytes of the drive manufacturer string. + +|uint32_t +|4 bytes +|driveModelOffset +|Offset to start of drive model string from start of this block. + +|uint32_t +|4 bytes +|driveModelLength +|Length in bytes of the drive model string. + +|uint32_t +|4 bytes +|driveSerialNumberOffset +|Offset to start of drive serial number string from start of this block. + +|uint32_t +|4 bytes +|driveSerialNumberLength +|Length in bytes of the drive serial number string. + +|uint32_t +|4 bytes +|driveFirmwareRevisionOffset +|Offset to start of drive firmware revision string from start of this block. + +|uint32_t +|4 bytes +|driveFirmwareRevisionLength +|Length in bytes of the drive firmware revision string. +|=== \ No newline at end of file