2008 Oct 04
SML Files  Type Codes  Function Descriptors 
SMB binary files are made up of a series of fields each of which is host computer independent.
It is assumed all bytes are 8 bits long.
There is a 10 byte header:
[8] MAGIC = 0xFEEDDEEF, 0xDEEFFEED [1] ENDIANNESS = LITTLE_ENDIAN(0) or BIG_ENDIAN(1) [1] VERSION = 0
Tag  Code  Meaning  

reserved0  0  null terminated string of ASCII bytes  
void  1  no value  
ptr1 to  2  value is a type code, followed by the int1 pointer  
ptr2 to  3  value is a type code, followed by the int2 pointer  
ptr4 to  4  value is a type code, followed by the int4 pointer  
ptr8 to  8  value is a type code, followed by the int8 pointer  
string  9  null terminated string of ASCII bytes  
unicode  10  unicode string  
uchar uint1 
11  unsigned byte  
char int1 
12  signed byte  
uint2  13  unsigned 2 byte integer  
int2  14  signed 2 byte integer  
uint4  15  unsigned 4 byte integer  
int4  16  signed 4 byte integer  
uint8  17  unsigned 8 byte integer  
int8  18  signed 8 byte integer  
uint_n  19  unsigned variable (as needed) length integer  
int_n  20  signed variable (as needed) length integer  
float4  21  single precision 4 byte IEEE floating point  
float8  22  double precision 8 byte IEEE floating point  
float_n  23  variable precision IEEE floating point (to be specified later)  
date1  24 
date and time as follows:


date2  25 
date and time as follows:


array1  26  uchar1 specifying array size, followed by type code, followed by array of values  
array2  27  uchar2 specifying array size, followed by type code, followed by array of values  
array4  28  uchar4 specifying array size, followed by type code, followed by array of values  
array8  29  uchar8 specifying array size, followed by type code, followed by array of values  
record1  30  uchar1 specifying number of fields, each field is a type code value pair  
record2  31  uchar2 specifying number of fields, each field is a type code value pair  
record4  32  uchar4 specifying number of fields, each field is a type code value pair  
record8  33  uchar8 specifying number of fields, each field is a type code value pair  
file  34  single_file : an embedded file, in the form of: 1. name : a null terminated string 2. length : an uint8 file length 3. file data : length bytes 

file_n  35  multi_file : multiple embedded files, consisting of an uint2 value specifying the number of packed files, followed by a single_file field for each of the packed files 

func  36  function descriptor  
reserved255  255  null terminated string of ASCII bytes 
3.1 Wave Generator The Wave Generator file specific data consists of two parts: * Overall Descriptor * Segment Descriptor(s) 3.1.1 Overall Descriptor The Overall Descriptor has 3 fields in the following order: 1. Mode : is of type char, and has one of two values 'V' for voltage or 'I' for current 2. Source_Impedeance : has two sub fields, in the order Real : of type float8 Imaginary : of type float8 3. Segment_Count : of type integer4, specifies the number of Segment Descriptors which follow A wave consists of a sequence of Segments, each of which is defined by a Segment Descriptor. The wave is generated over time, one segment after another. When the last segment in the file has been reached, the wave continues as specified by the last state of the last segment. See below on what this means for different kinds of segments. There must be at least one segment in a wave file, or else a fatal error is given. Each segment changes in value relative to the previous segment. The first segment always starts with a relative intensity or amplitude of 0.0 and at a relative time of 0.0. Any subsequent segments are relative in amplitude and duration to the ending of the previous segment. 3.1.2 Segment Descriptor Each Segment Descriptor has 3 parts in the following order: 1. Duration_Type : a field of type char, and has one of 3 values 'C' : constant 'P' : periodic 'F' : finite 2. Source_Impedeance : has two sub fields, in the order Real : of type float8 Imaginary : of type float8 3. Definition : depends on the value of Duration_Type (see below) Note that if the Duration_Type is constant, 'C', or periodic. 'P', no further segments in the file will be processed. A warning message will be given if there is any data after a segment of either of these two durations (constant or periodic). A fatal error results if more segments were specified in the Segment_Count of the Overall Descriptor after encountering a constant or periodic segment. Any number of segments (including 0) of finite duration (up to the limit of type integer4) can exist before a segment which is constant or periodic. 3.2.1 Definition for a Constant Segment Consists of a single field of type float8, which is the constant D.C. amplitude, in volts or amperes according to the Mode in the Overall Descriptor, relative to the amplitude at the end of the Duration of the previous segment. If this is the first segment then the previous amplitude is implicitly 0.0. The wave continues with the resulting amplitude indefinitely in time. 3.2.2 Definition for a Periodic Segment Consists of 2 parts, a field of type integer4, which must be of value >0, which defines the number of subsegments in the periodic wave. This field is followed by that many finite Definitions (see section 3.2.3). Note that the ending value of a periodic signal must be the same intensity as its initial value, or else it is a fatal error. It may also be required that the slope of the wave at the start and end of the Duration for this period are the same (this is to be decided). The wave repeats periodically in time, starting again with the first subsegment after the last subsegment. The period of the wave is the sum of the durations of the subsegments. 3.2.3 Definition for a Finite Segment Has a first field of type float8, name Segment_Duration, which is the duration of the segment in seconds, and must have a value greater than 0.0. Has a second field of type integer2, called math_type, which defines the mathematical nature of this segment. The math_type field is followed by a number of additional fields which depend on the value of the math_type. This is described in the following table, where T represents the value of Segment_Duration. The symbol N, is of type integer4, and represents the value of the first parameter when its defines the number of remaining parameters. Other parameters are in bolditalics and appear in the equation in the order they appear in the file (after N if it exists). The symbol t represents relative time for the segment and runs linearly from 0??t??T. math_type value meaning number and type of parameters equation for relative amplitude change 0 constant 0 0.0 1 step 1 float8 A 2 linear 1 float8 A*t/T 3 quadratic 2 float8 A1*t+A2*t2 4 polynomial 1 integer4 + N float8 5
20052008