Difference between revisions of "GSD"

From Inkscape Wiki
Jump to navigation Jump to search
Line 45: Line 45:
|+Sample Block Data
|+Sample Block Data
!Prefix !!Type !!Length !!Data
!Prefix !!Type !!Length !!Data
|-
|0x0006 ||00 || ||06
|-
|0x0106 ||00 || ||00
|-
|0x0007 ||00 || ||06 - Number of 0x??07 elements?
|-
|0x0107 ||01 ||01 ||02
|-
|0x0207 ||03 ||01 ||Unknown 32-bit value
|-
|0x0307 ||03 ||01 ||Unknown 32-bit value
|-
|0x0407 ||05 ||00 ||Unknown text field
|-
|0x0507 ||04 ||01 ||Dashed Line Pattern Cut Segment Length
|-
|0x0607 ||04 ||01 ||Dashed Line Pattern Spacing Length
|-
|0x0206 ||00 || ||00
|-
|0x000A ||00 || ||1D - Number of 0x??08 elements?
|-
|-
|0x0108 ||05 ||13 ||"Graphtec Craft ROBO" - Optional
|0x0108 ||05 ||13 ||"Graphtec Craft ROBO" - Optional
Line 54: Line 76:
|0x0508 ||03 ||02 ||56 54 00 00  24 6D 00 00 - Paper size in 1/2540" (ie:0.01mm) units (Little Endian). This seems to have been chosen to allow precise storing of both fractional imperial and metric units. 4-byte width, 4-byte height
|0x0508 ||03 ||02 ||56 54 00 00  24 6D 00 00 - Paper size in 1/2540" (ie:0.01mm) units (Little Endian). This seems to have been chosen to allow precise storing of both fractional imperial and metric units. 4-byte width, 4-byte height
|-
|-
|0x1B08 ||01 ||01 ||00 - Portrait(0) or Landscape(1)
|0x1B08 ||01 ||01 ||00
|-
|-
|0x2708 ||01 ||01 ||00
|0x2708 ||01 ||01 ||00
|-
|-
|0x1A08 ||02 ||01 ||64 00
|0x1A08 ||02 ||01 ||64 00 - Scaling
|-
|-
|0x0908 ||01 ||01 ||00
|0x0908 ||01 ||01 ||00 - Offset Toggle
|-
|-
|0x0A08 ||03 ||01 ||00 00 00 00
|0x0A08 ||03 ||01 ||00 00 00 00 - Offset X
|-
|-
|0x0B08 ||03 ||01 ||00 00 00 00
|0x0B08 ||03 ||01 ||00 00 00 00 - Offset Y
|-
|-
|0x0C08 ||01 ||01 ||00
|0x0C08 ||01 ||01 ||00 - Weed Border Toggle
|-
|-
|0x0D08 ||03 ||01 ||00 00 00 00
|0x0D08 ||03 ||01 ||00 00 00 00 - Weed Border Distance
|-
|-
|0x2208 ||01 ||01 ||00
|0x2208 ||01 ||01 ||00 - Print Cut Lines
|-
|-
|0x2008 ||01 ||01 ||00
|0x2008 ||01 ||01 ||00
|-
|-
|0x2108 ||02 ||01 ||00 00
|0x2108 ||02 ||01 ||00 00 - Print Rotation Angle (typically 0 or 180)
|-
|-
|0x2308 ||02 ||01 ||01 00
|0x2308 ||02 ||01 ||01 00 - ID for print paper size?
|-
|-
|0x2408 ||03 ||01 ||6F 08 00 00
|0x2408 ||03 ||01 ||6F 08 00 00 - Paper Width (1/254" or 0.1mm units)
|-
|-
|0x2508 ||03 ||01 ||EA 0A 00 00
|0x2508 ||03 ||01 ||EA 0A 00 00 - Paper Height (1/254" or 0.1mm units)
|-
|-
|0x2608 ||02 ||01 ||01 00
|0x2608 ||02 ||01 ||01 00 - Portrait(01) or Landscape(02)
|-
|-
|0x0808 ||02 ||01 ||00 00
|0x0808 ||02 ||01 ||00 00 - Cutting Rotation Angle (typically a multiple of 90)
|-
|-
|0x0E08 ||01 ||01 ||00
|0x0E08 ||01 ||01 ||00
Line 96: Line 118:
|0x1F08 ||01 ||01 ||01
|0x1F08 ||01 ||01 ||01
|-
|-
|0x1108 ||01 ||01 ||00
|0x1108 ||01 ||01 ||00 - Toggle Tiling
|-
|-
|0x1C08 ||03 ||01 ||00 00 00 00
|0x1C08 ||03 ||01 ||00 00 00 00 - Tiling Media Width
|-
|-
|0x1D08 ||03 ||01 ||00 00 00 00
|0x1D08 ||03 ||01 ||00 00 00 00 - Tiling Media Height
|-
|-
|0x1408 ||03 ||01 ||00 00 00 00
|0x1408 ||03 ||01 ||00 00 00 00 - Tiling Overlap
|-
|-
|0x0306 ||00 || ||00
|0x0306 ||00 || ||00

Revision as of 21:04, 4 November 2009


The GSD binary file format

This is my first try to reverse engineer a binary file format. If you like, you could add your thoughts! By comparison between different files with the extention .gsd i try to see what data is stored where. It has some parts in ansi-text and the most parts are just binary numbers of different length. As identification, the file starts with the text "GRAPHTEC PRT&CUT". The next line at offset 0000:0010 starts with binary numbers "03 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00" (I don't know if they make any sense there).

  • From offset 0000:0080 to offset 0000:00cf is unknown binary data.
  • From offset 0000:00d3 to offset 0000:00de is binary data, which is exactly repeated from offset 0000:00fb to 0000:0107. It starts with the hex numbers 40 6a 40 which seems to be a marker for file seek. It ends with 40 00 04. Inbetween those bytes is data which funktion is still unknown.
  • Every object can have a different color in the 8bit-RGB-color-range. E.g. RGB(254,254,254), but most probably it is only black. RGB(0,0,0).
  • The size of the canvas is written in pure ansi text. The value could be "ISO A4" or "Letter".
  • The hex value 40 seems to be the delimiter between chunks of data of different length. Hex value ff ff ff semms to be a start delimiter and ff ff ff ff semms to be the end delimiter.

Footer

The footer is composed of blocks of data. Each block begins with a 2-byte code indicating the type of data, followed by 1 byte code indicating the datatype and a second 1 byte code indicating how many elements of data are stored.

Header

54 bytes - unknown data

Blocks

The first two bytes of the block provide information on the purpose of the block. The following 2 bytes indicate the type of data and the number of data elements of that type.

While the data typically follows this pattern, in some cases (most notably distance measurements) the "datatype" indicates the incorrect length.

Header Description
00 1 byte of data stored in length byte
01 1-byte data chunks
01 1-byte data chunks
02 2-byte data chunks
03 4-byte data chunks
04 8-byte little endian IEEE-754 float. Usually for storing a distance in mm units
05 ASCII data chunks


Sample Block Data
Prefix Type Length Data
0x0006 00 06
0x0106 00 00
0x0007 00 06 - Number of 0x??07 elements?
0x0107 01 01 02
0x0207 03 01 Unknown 32-bit value
0x0307 03 01 Unknown 32-bit value
0x0407 05 00 Unknown text field
0x0507 04 01 Dashed Line Pattern Cut Segment Length
0x0607 04 01 Dashed Line Pattern Spacing Length
0x0206 00 00
0x000A 00 1D - Number of 0x??08 elements?
0x0108 05 13 "Graphtec Craft ROBO" - Optional
0x0208 05 13 "Graphtec Craft ROBO" - Optional
0x0408 05 06 "Letter" - Text Paper Size
0x0508 03 02 56 54 00 00 24 6D 00 00 - Paper size in 1/2540" (ie:0.01mm) units (Little Endian). This seems to have been chosen to allow precise storing of both fractional imperial and metric units. 4-byte width, 4-byte height
0x1B08 01 01 00
0x2708 01 01 00
0x1A08 02 01 64 00 - Scaling
0x0908 01 01 00 - Offset Toggle
0x0A08 03 01 00 00 00 00 - Offset X
0x0B08 03 01 00 00 00 00 - Offset Y
0x0C08 01 01 00 - Weed Border Toggle
0x0D08 03 01 00 00 00 00 - Weed Border Distance
0x2208 01 01 00 - Print Cut Lines
0x2008 01 01 00
0x2108 02 01 00 00 - Print Rotation Angle (typically 0 or 180)
0x2308 02 01 01 00 - ID for print paper size?
0x2408 03 01 6F 08 00 00 - Paper Width (1/254" or 0.1mm units)
0x2508 03 01 EA 0A 00 00 - Paper Height (1/254" or 0.1mm units)
0x2608 02 01 01 00 - Portrait(01) or Landscape(02)
0x0808 02 01 00 00 - Cutting Rotation Angle (typically a multiple of 90)
0x0E08 01 01 00
0x0F08 01 01 01
0x1008 03 01 00 00 00 00
0x1E08 01 01 01
0x1F08 01 01 01
0x1108 01 01 00 - Toggle Tiling
0x1C08 03 01 00 00 00 00 - Tiling Media Width
0x1D08 03 01 00 00 00 00 - Tiling Media Height
0x1408 03 01 00 00 00 00 - Tiling Overlap
0x0306 00 00
0x0009 00 09
0x0109 01 01 00
0x0209 01 01 05
0x0309 01 01 05
0x0409 01 01 00
0x0406 00 00
0x000A 00 0A
0x010A 03 01 00 00 00 00
0x020A 00 00
0x000C 00 01
0x010C 03 01 00 00 00 00
0x0506 00 00
0x000E 00 0A
0x010E 01 01 01 - Show Registration Marks
0x020E 02 01 01 00
0x030E 02 01 01 00
0x0A0E 04 01 CD CC CC CC CC 0C 33 40 - Registration Mark Size
0x0B0E 02 01 A8 C6 4B 37 89 41 E0 3F - Registration Mark Thickness
0x0C0E 03 01 66 66 66 66 66 66 29 40 - Origin X
0x0D0E 03 01 52 B8 1E 85 EB 51 24 40 - Origin Y
0x0E0E 03 01 01 00 00 00 00 D0 67 40 - Distance 1-2
0x0F0E 03 01 48 E1 7A 14 AE 87 6E 40 - Distance 1-3
0x110E 01 01 00
0x0606 00 00
0x000F 00 04
0x010F 01 01 00
0x020F 02 01 00 00
0x030F 04 01 66 66 66 66 66 66 29 40 - Grid Spacing
0x040F 01 01 01
0x0010 03 01 00 00 00 00 - End of file?