Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

175 Commits

Repository files navigation

Auto-Interface Code Generator

Quick Start

Generate python bindings:

# Generate Code
python src/python_files/Py_Generator.py \
src/json_files/basetypes.json \
src/json_files/example.json py

Use the generated python to serialize and de-serialize objects:

# Use the interface
import interface as ii
# Stand up an object and set defaults
a = ii.all_types()
# Serialize
fout=open('a.bin','wb')
a.write_binary(fout)
fclose(fout)
# Deserialize
fin = open('a.bin','rb')
b = ii.all_types()
b.read_binary(fin)
fclose(fin)

Sample Commands

Generate CPP:

python src/python_files/CPP_Generator.py \
src/json_files/basetypes.json \
src/json_files/example.json cpp cpp

Generate Python:

python src/python_files/Py_Generator.py \
src/json_files/basetypes.json \
src/json_files/example.json py

Generate Matlab:

python src/python_files/MAT_Generator.py \
src/json_files/basetypes.json \
src/json_files/example.json mat

Generate C:

python src/python_files/C_Generator.py \
src/json_files/basetypes.json \
src/json_files/example.json mat

Generate Sphinx Docs:

python src/python_files/Doc_Generator.py \
src/json_files/basetypes.json \
src/json_files/example.json doc

Test AutoInterface Class:

python src/python_files/AutoInterface.py \
src/json_files/basetypes.json \
src/json_files/example.json

Syntax

  • Format is JSON
  • A Project is a set of key value pairs
    • 'PROJECT' : optional string
    • 'VERSION' : optional string
    • 'NAMESPACE' : optional string
    • 'STRUCTURES' : required, array of structure defs
  • Each structure is defined as:
    • 'NAME' : required struct name (no spaces)
    • 'DESCRIPTION' : optional string
    • 'FIELDS' : [ array of fields ]
  • A field is:
    • 'NAME' : string
    • 'TYPE' : basetype or struct name, see list of basetypes
    • 'DESCRIPTION' : optional description (used for doxygen output)
    • 'DEFAULT_VALUE' : optional default value, if not specified, basetype's default value will be used
    • 'LENGTH' : 1,N,VECTOR - if not specified, will be set to 1
    • 'VALID_MIN' : optional
    • 'VALID_MAX' : optional

Generated Code

Code can be generated for CPP, Matlab or Python. The following functions are currently supported:

  • CPP
    • set_defaults
    • write_binary
    • read_binary
    • read_props
    • write_props
    • validate
  • Matlab
    • set_defaults_STRUCT_NAME()
    • read_binary_STRUCT_NAME()
    • write_binary_STRUCT_NAME()
  • Python
    • read_binary
    • write_binary
    • set_defaults
  • C
    • read_binary
    • write_binary
    • set_defaults
    • write_props

BASETYPES

TYPEC++MATLABPythonBinary
UINT_8uint8_tuint8intByte
UINT_16uint16_tuint16int(2)Byte
UINT_32uint32_tuint32int(4)Byte
UINT_64uint64_tuint64int(8)Byte
INT_8int8_tint8intByte
INT_16int16_tint16int(2)Byte
INT_32int32_tint32int(4)Byte
INT_64int64_tint64int(8)Byte
SINGLEfloatsinglefloat(4)Byte
DOUBLEdoubledoublefloat(8)Byte

Serialization Format

  • Data is serialized as packed binary in native endian order

Example

Given the following Sample File:

{
"PROJECT" : "SampleProject",
"VERSION" : "1.0.0",
"NAMESPACE" : "SP",
"DESCRIPTION" : "This is a project description",
"STRUCTURES" : [
{
"NAME" : "sample",
"DESCRIPTION" : "Sample Struct",
"FIELDS" : [
{
"NAME" : "field_1",
"TYPE" : "UINT_8"
},
{
"NAME" : "field2",
"TYPE" : "SINGLE",
"LENGTH" : "VECTOR",
"DEFAULT_VALUE" : [ 1,2,3,4,5 ]
} ]
}
]
}

Generate python code as follows:

Py_Generator.py <basetypes.json> <sample.json> <output_directory>

For example:

python src/python_files/Py_Generator.py \
src/json_files/basetypes.json \
src/json_files/sample.json \
py

The following python will be generated:

class sAmple(object):
"""
Auto Generated Class sAmple
Methods:
__init__ : Sets defaults
read_binary( file_handle )
write_binary( file_handle )
"""
__slots__ = [
"fiEld_1",
"Field2",
]
def __repr__(self):
ret = ''
for field in self.__slots__:
val = getattr(self, field)
#for key, val in sorted(vars(self).items()):
ret = ret + "{0}: {1}\n".format( field, val )
return ret
# end __repr__
def set_defaults(self):
"""
Initializes and sets defaults
"""
self.fiEld_1 = 0;
self.Field2 = [ 1,2,3,4,5 ]
# end set_defaults
def from_dict( self, d ):
"""
.. function:: from_dict( dict )
Read this class from a dict object - useful for JSON
:param dict :rtype None
"""
if "fiEld_1" in d:
self.fiEld_1 = d["fiEld_1"]
if "Field2" in d:
self.Field2 = []
self.Field2 = d["Field2"]
# end from_dict
def to_dict( self ):
"""
.. function:: to_dict()
Write this class to a dict - useful for JSON
:rtype dict
"""
d = {}
d["fiEld_1"] = self.fiEld_1
d["Field2"] = []
d["Field2"] = self.Field2
return d
# end to_dict
def to_json( self ):
"""
.. function:: to_json()
JSONify this object
:param None :rtype string
"""
d = self.to_dict()
return json.dumps(d)
# end to_json
def from_json( self, r_stream ):
"""
.. function:: from_json()
read JSON into this object
:param file handle :rtype None
"""
json_obj = json.loads(r_stream.read())
self.from_dict(json_obj)
# end from_json
def read_binary( self, r_stream ):
"""
.. function:: read_binary( file_handle )
Read this class from a packed binary message
:param r_stream an open filehandle (opened in mode rb )
:rtype None
"""
self.fiEld_1 = io.read_UINT_8( r_stream )
self.Field2 = []
num_elems = 5
if num_elems > 0:
self.Field2 = io.read_SINGLE( r_stream, nElements=num_elems )
else:
self.Field2 = []
# end read_binary
def write_binary( self, r_stream, typecheck=False ):
"""
.. function:: read_binary( file_handle )
Write this class to a packed binary message
:param r_stream an open filehandle (opened in mode wb )
:typecheck if True, verify structures are correct type before including in arrays
:rtype None
"""
io.write_UINT_8( r_stream, self.fiEld_1 )
num_elems = 5
if num_elems > 0:
io.write_SINGLE( r_stream, self.Field2, nElements=num_elems )
# end write_binary
# end class sAmple

About

Automatically exported from code.google.com/p/auto-interface

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages