The format of the [unencrypted] CFS file is described in the SeaChest documentation. Some distributions use the CFS file for their "directives", as you point out. Others specify the parameters in an XML file, or they may explicitly select the family, model and payload (LOD) in a BAT file. Since you appear to have been unsuccessful when explicitly specifying the parameters, it would appear that the drive itself is rejecting the payload, rather than the updater rejecting the directives. Does that make sense? :-)
I was wondering whether there was any point in deciphering the structure of the DLP header. We could add our own desired firmware versions, but we would need to know how to recalculate the header's CRC/checksum. Assuming we could do this, I suspect that the update would still fail (because the drive is rejecting the payload?).
FWIW, here is my take on the header format.
AISI, there are actually two headers, a Drive_Download_File_Header and an Action_Descriptor.
Code:
Offset(h) 00 04 08 0C
00000000 44726976 655F446F 776E6C6F 61645F46 Drive_Download_F 0x20-byte
00000010 696C655F 48656164 65720000 00000000 ile_Header...... text string
00000020 01000000 C0000000 58671100 B97488FD
^^^^^^^^ -------- ^^^^^^^^
size of header = 0xC0 : CRC/checksum ???
DLP file size = 0x116758
00000030 53454147 41544500 00000000 00000000 SEAGATE......... manufacturer
00000040 53543939 30303830 35535300 00000000 ST9900805SS..... model (40 bytes)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
00000050 00000000 00000000 00000000 00000000
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
00000060 00000000 00000000 4D533034 20202020 ........MS04 updated f/w version
^^^^^^^^^^^^^^^^^ -----------------
00000070 01000000 00000000 00000000 00000000
00000080 00000000 00000000 00000000 00000000
00000090 00000000 05000000 4D533030 00000000 ........MS00.... 5 candidate f/w versions
^^^^^^^^ -----------------
number of f/w candidates = 5
000000A0 4D533031 00000000 4D533032 00000000 MS01....MS02....
^^^^^^^^^^^^^^^^^ -----------------
000000B0 4D533033 00000000 4D533034 00000000 MS03....MS04....
^^^^^^^^^^^^^^^^^ -----------------
Code:
Offset(h) 00 04 08 0C
000000C0 41637469 6F6E5F44 65736372 6970746F Action_Descripto 0x20-byte
000000D0 72000000 00000000 00000000 00000000 r............... text string
000000E0 01000000 98000000 00000000 00000000
^^^^^^^^
size of header = 0x98 bytes
000000F0 00000000 00000000 00000000 00000000
00000100 00000000 00000000 03000000 00661100
^^^^^^^^
size of payload = 0x116600 = size of DLP file - DLP header
00000110 00000000 0A000000 3B050000 00001166
^^^^
size of payload / 0x100 (big-endian) = 0x1166
00000120 00000000 00000000 00000000 00000000
00000130 00000000 00000000 00000000 00000000
00000140 00000000 00000000 00000000 00000000
00000150 00000000 00000000