85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
import vhal_consts_2_0 as c
|
|
from vhal_emulator import Vhal
|
|
|
|
import argparse
|
|
import json
|
|
import sys
|
|
|
|
vhal_types = c.vhal_types_2_0
|
|
|
|
def propType(con):
|
|
return getattr(c, con)
|
|
|
|
def parseVal(val, valType):
|
|
parserFn = {
|
|
c.VEHICLEPROPERTYTYPE_STRING: str,
|
|
c.VEHICLEPROPERTYTYPE_BOOLEAN: int,
|
|
c.VEHICLEPROPERTYTYPE_INT32: int,
|
|
c.VEHICLEPROPERTYTYPE_INT32_VEC: lambda v: map(int, v.split(',')),
|
|
c.VEHICLEPROPERTYTYPE_INT64: int,
|
|
c.VEHICLEPROPERTYTYPE_INT64_VEC: lambda v: map(int, v.split(',')),
|
|
c.VEHICLEPROPERTYTYPE_FLOAT: float,
|
|
c.VEHICLEPROPERTYTYPE_FLOAT_VEC: lambda v: map(float, v.split(',')),
|
|
c.VEHICLEPROPERTYTYPE_BYTES: None,
|
|
c.VEHICLEPROPERTYTYPE_MIXED: json.loads
|
|
}[valType]
|
|
if not parserFn:
|
|
raise ValueError('Property value type not recognized:', valType)
|
|
|
|
return parserFn(val)
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description='Execute vehicle simulation to simulate actual car sceanrios.')
|
|
parser.add_argument(
|
|
'-s',
|
|
type=str,
|
|
action='store',
|
|
dest='device',
|
|
default=None,
|
|
help='Device serial number. Optional')
|
|
parser.add_argument(
|
|
'--property',
|
|
type=propType,
|
|
help='Property name from vhal_consts_2_0.py, e.g. VEHICLEPROPERTY_EV_CHARGE_PORT_OPEN')
|
|
parser.add_argument(
|
|
'--area',
|
|
default=0,
|
|
type=int,
|
|
help='Area id for the property, "0" for global')
|
|
parser.add_argument(
|
|
'--value',
|
|
type=str,
|
|
help='Property value. If the value is MIXED type, you should provide the JSON string \
|
|
of the value, e.g. \'{"int32_values": [0, 291504647], "int64_values": [1000000], \
|
|
"float_values": [0.0, 30, 0.1]}\' which is for fake data generation controlling \
|
|
property in default VHAL. If the value is array, use comma to split values')
|
|
args = parser.parse_args()
|
|
if not args.property:
|
|
print('Property is required. Use --help to see options.')
|
|
sys.exit(1)
|
|
|
|
executeCommand(args)
|
|
|
|
def executeCommand(args):
|
|
# Create an instance of vhal class. Need to pass the vhal_types constants.
|
|
v = Vhal(c.vhal_types_2_0, args.device)
|
|
|
|
# Get the property config (if desired)
|
|
print(args.property)
|
|
v.getConfig(args.property)
|
|
|
|
# Get the response message to getConfig()
|
|
reply = v.rxMsg()
|
|
print(reply)
|
|
|
|
value = parseVal(args.value, reply.config[0].value_type)
|
|
v.setProperty(args.property, args.area, value)
|
|
|
|
# Get the response message to setProperty()
|
|
reply = v.rxMsg()
|
|
print(reply)
|
|
|
|
if __name__=='__main__':
|
|
main()
|