#!/usr/bin/env python
import sys
#
# From this ASN.1 grammar:
# (file DataView.asn)
#
# DataView DEFINITIONS AUTOMATIC TAGS ::= BEGIN
#
# T-REAL ::= REAL( -10000.0 .. 10000.0 )
#
# END
#
# You process the ASN.1 file like this:
#
# bash$ export ASN2DATAMODEL=/opt/DMT-ToolsAndManual-Linux-090905/asn2dataModel/asn2dataModel
# bash$ mkdir output
# bash$ $ASN2DATAMODEL -o output -toPython DataView.asn
# bash$ cd output/
# bash$ make -f Makefile.python
#
# After that, you can run this script...
from DataView_asn import *
def testReal(val):
# Create a stream buffer to host the encoded data
d1 = DataStream(DV.T_REAL_REQUIRED_BYTES_FOR_ENCODING)
# Create a T_REAL
f1 = T_REAL()
# Set the value
f1.Set(val)
try:
# Encode the value of f1 into the buffer d1
f1.Encode(d1)
except:
print "Encoding failed..."
sys.exit(1)
binaryData = d1.GetPyString() # Get the encoded stream bytes
# as a Python string. You can
# pass these data over sockets,
# save them to files, etc
# Create a second stream buffer, put the encoded data
# inside it, and decode from it.
# Another way (one that avoids a separate DataStream)
# is to re-use d1, calling d1.Reset (which "rewinds"
# the stream indexes to the start, thus making it ready
# for access by the Decoders)
d2 = DataStream(DV.T_REAL_REQUIRED_BYTES_FOR_ENCODING)
d2.SetFromPyString(binaryData)
f2 = T_REAL()
f2.Decode(d2)
#f2.PrintAll()
assert(abs(val - f2.Get())<1e-5)
if __name__ == "__main__":
i = -5.0
while i<5.0:
testReal(i)
i+=0.001