




            PACSAT Data Specification Standards

                    

          

                      Harold E. Price, NK6K
                       Jeff Ward, G0/K8KA

                                

                            ABSTRACT
          


     This  document provides a standard way of describing  PACSAT  data 
     formats  in specifications, and provides certain  assumptions  for 
     implementors.




Purpose

This document describes the standard format for PACSAT data.


Background

This standard is based on the following assumptions:

1)  The spacecraft are the critical resources in the PACSAT/groundstation net-
work.  If a particular data representation can conserve memory space and CPU 
cycles in the spacecraft, all other items being equal, the representation that 
favors the spacecraft should take precedence.

2) The UoSAT and the AMSAT-NA PACSAT hardware are based on an Intel 80186-
compatible device.  Therefore, all internal multi-byte numeric data is stored 
with the least-significant byte in low-order memory.

3) The UoSAT and the AMSAT-NA PACSAT software is largely based on the Micro-
soft C programming language.

4) The UoSAT and the AMSAT-NA PACSAT software development systems are based on 
IBM PCs or compatibles.


Discussion

The primary decision to be made in PACSAT data formats is "big endian" (BE) 
vs. "little endian" (LE).  Most network standards are defined as BE, meaning 
the Most Significant Byte (MSB) of multi-byte data appears in low order ad-
dress space, and the Least Significant Byte (LSB) appear in high order memory.  
The UoSAT and Microsat spacecraft all use Intel 80186 or compatible CPUs, 
which store data with the LSB first, and are LE.

Multi-byte data appears in many places in PACSAT data, including the file 
headers and the control structures of the broadcast and FTL0 protocols.  If 
these protocols were BE, the spacecraft software would need to swap byte order 
in several places.  Whether done as in-line code or as function calls, these 
conversions use both CPU cycles and code space.  It is clear that a native 
data representation will result in a more efficient utilization of the space-
craft CPU, and that the data format conversions, if any, should be done on the 
ground.  Experimentation was done showing that avoiding byte swapping on the 
spacecraft resulted in significant space savings.

This will not affect the actual high-level software code, as prudent program-
mers who wish to write transportable code that is applicable to BE and LE 
hosts will use macro calls to swap the byte order when moving data from an 
external source to local variables.  By using the somewhat less common LE in 
the protocol specification, the macro will be active on BE systems when it 
would normally be active on LE systems.  In any case, the macros would still 
be present in the source file.

For example, 

fnum = NETSWAP32(broadcast_head.fnum);

would be the line of code to read in the file number from a broadcast protocol 
frame.  This code will be the same no matter which order the protocol required 
the 4-byte integer field to be in.

Taking these assumptions into account, the standard to be used when defining 
data exchange formats between PACSAT and a ground station are as defined 
below.


Intended Applicability

This document is primarily intended to apply to shared file formats, such as 
the standard PACSAT File Header; and to PACSAT specific protocols such as the 
PACSAT Broadcast Protocol.  It is not meant to infer that existing protocols, 
such as IP, are to have integers byte-swapped when transmitted to a PACSAT.


PACSAT Data Structure Specification Standard

1)  All structure definitions in PACSAT standards documents should provide C 
structures wherever possible to describe data formats.  

2)  All structures are assumed to be packed; do not assume slack bytes are  
provided to align words and doublewords.

3)  All multi-byte numeric data is assumed to be stored and transmitted with 
the Least Significant Byte first.

4)  Where it is necessary to number bits, the least significant bit is zero.

5)  The standard method for referring to hexadecimal constants will be the C 
standard 0xhh.

6)  The assumed length of an unsigned or int type is 16 bits.

7)  The "left" end of a string is stored and transmitted first.

8)  "ASCII" characters are the printable ASCII characters 0x20-0x7f.

9)  Times are represented by the UNIX 4-byte unsigned integer counting the 
number of seconds since 0000 UTC 1 January, 1970.
