You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

273 lines
12 KiB

#!/usr/bin/python
# -*- coding:utf-8 -*-
# -*-mode:python ; tab-width:4 -*- ex:set tabstop=4 shiftwidth=4 expandtab: -*-
import numpy
from .gxwrapper import *
from .dxwrapper import *
from .gxidef import *
from .Feature_s import *
from .StatusProcessor import *
import types
class FeatureControl:
def __init__(self,handle):
"""
:brief Constructor for instance initialization
:param handle:
"""
self.__handle = handle
def is_implemented(self,feature_name):
"""
:brief Get feature node is implemented
:param feature_name: Feature node name
:return: Is implemented
"""
if not isinstance(feature_name, str):
raise ParameterTypeError("FeatureControl.is_implemented: "
"Expected feature_name type is int, not %s" % type(feature_name))
status, node_access = gx_get_node_access_mode( self.__handle ,feature_name)
StatusProcessor.process(status, 'FeatureControl', 'is_implemented')
if ((node_access == GxNodeAccessMode.MODE_NI) or (node_access == GxNodeAccessMode.MODE_UNDEF)):
return False
else:
return True
def is_readable(self, feature_name):
"""
brief: Determining whether the feature is readable
return: is_readable
"""
if not isinstance(feature_name, str):
raise ParameterTypeError("FeatureControl.get_int_feature: "
"Expected feature_name type is str, not %s" % type(feature_name))
status, node_access = gx_get_node_access_mode( self.__handle ,feature_name)
StatusProcessor.process(status, 'FeatureControl', 'is_readable')
if ((node_access == GxNodeAccessMode.MODE_RO) or (node_access == GxNodeAccessMode.MODE_RW)):
return True
else:
return False
def is_writable(self, feature_name):
"""
brief: Determining whether the feature is writable
return: is_writable
"""
if not isinstance(feature_name, str):
raise ParameterTypeError("FeatureControl.get_int_feature: "
"Expected feature_name type is str, not %s" % type(feature_name))
status, node_access = gx_get_node_access_mode( self.__handle ,feature_name)
StatusProcessor.process(status, 'FeatureControl', 'is_readable')
if ((node_access == GxNodeAccessMode.MODE_WO) or (node_access == GxNodeAccessMode.MODE_RW)):
return True
else:
return False
def get_int_feature(self, feature_name):
"""
:brief Get int type feature object
:param feature_name: Feature node name
:return: Int type feature object
"""
if not isinstance(feature_name, str):
raise ParameterTypeError("FeatureControl.get_int_feature: "
"Expected feature_name type is str, not %s" % type(feature_name))
if not self.is_implemented( feature_name):
raise UnexpectedError( "FeatureControl.get_int_feature: "
"The feature '%s' is not implemented" %feature_name)
int_feature = IntFeature_s( self.__handle, feature_name)
return int_feature
def get_enum_feature(self, feature_name):
"""
:brief Get enum type feature object
:param feature_name: Feature node name
:return: Enum type feature object
"""
if not isinstance(feature_name, str):
raise ParameterTypeError("FeatureControl.get_enum_feature: "
"Expected feature_name type is str, not %s" % type(feature_name))
if not self.is_implemented( feature_name):
raise UnexpectedError( "FeatureControl.get_enum_feature: "
"The feature '%s' is not implemented" %feature_name)
enum_feature = EnumFeature_s( self.__handle, feature_name)
return enum_feature
def get_float_feature(self, feature_name):
"""
:brief Get float type feature object
:param feature_name: Feature node name
:return: Float type feature object
"""
if not isinstance(feature_name, str):
raise ParameterTypeError("FeatureControl.get_float_feature: "
"Expected feature_name type is str, not %s" % type(feature_name))
if not self.is_implemented( feature_name):
raise UnexpectedError( "FeatureControl.get_float_feature: "
"The feature '%s' is not implemented" %feature_name)
float_feature = FloatFeature_s( self.__handle, feature_name)
return float_feature
def get_bool_feature(self, feature_name):
"""
:brief Get bool type feature object
:param feature_name: Feature node name
:return: Bool type feature object
"""
if not isinstance(feature_name, str):
raise ParameterTypeError("FeatureControl.get_bool_feature: "
"Expected feature_name type is str, not %s" % type(feature_name))
if not self.is_implemented( feature_name):
raise UnexpectedError( "FeatureControl.get_bool_feature: "
"The feature '%s' is not implemented" %feature_name)
bool_feature = BoolFeature_s( self.__handle, feature_name)
return bool_feature
def get_string_feature(self, feature_name):
"""
:brief Get string type feature object
:param feature_name: Feature node name
:return: String type feature object
"""
if not isinstance(feature_name, str):
raise ParameterTypeError("FeatureControl.get_string_feature: "
"Expected feature_name type is str, not %s" % type(feature_name))
if not self.is_implemented( feature_name):
raise UnexpectedError( "FeatureControl.get_string_feature: "
"The feature '%s' is not implemented" %feature_name)
string_feature = StringFeature_s( self.__handle, feature_name)
return string_feature
def get_command_feature(self, feature_name):
"""
:brief Get command type feature object
:param feature_name: Feature node name
:return: Command type feature object
"""
if not isinstance(feature_name, str):
raise ParameterTypeError("FeatureControl.get_command_feature: "
"Expected feature_name type is str, not %s" % type(feature_name))
if not self.is_implemented( feature_name):
raise UnexpectedError( "FeatureControl.get_command_feature: "
"The feature '%s' is not implemented" %feature_name)
command_feature = CommandFeature_s( self.__handle, feature_name)
return command_feature
def get_register_feature(self, feature_name):
"""
:brief Get register type feature object
:param feature_name: Feature node name
:return: Register type feature object
"""
if not isinstance(feature_name, str):
raise ParameterTypeError("FeatureControl.get_register_feature: "
"Expected feature_name type is str, not %s" % type(feature_name))
if not self.is_implemented( feature_name):
raise UnexpectedError( "FeatureControl.get_register_feature: "
"The feature '%s' is not implemented" %feature_name)
register_feature = RegisterFeature_s( self.__handle, feature_name)
return register_feature
def feature_save(self, file_path):
"""
:brief Save User Parameter Group
:param file_path: Save Parameter file path
:return: None
"""
status = gx_feature_save( self.__handle, file_path)
StatusProcessor.process(status, 'FeatureControl', 'feature_save')
def feature_load(self, file_path, verify=False):
"""
:brief Load User Parameter Group
:param file_path: Load Parameter file path
:return: None
"""
status = gx_feature_load(self.__handle, file_path, verify)
StatusProcessor.process(status, 'FeatureControl', 'feature_load')
def read_port(self, address, size):
"""
:brief Read register
:param address: The address of the register to be read.(type: int)
:param bytearray: The data to be read from user.(type: buffer)
:return: none
"""
if not isinstance(address, INT_TYPE):
raise ParameterTypeError("Device.read_port: "
"Expected address type is int, not %s" % type(address))
if not isinstance(size, INT_TYPE):
raise ParameterTypeError("Device.read_port: "
"Expected size type is int, not %s" % type(size))
status, buff_value = gx_read_port( self.__handle, address, size)
StatusProcessor.process(status, 'FeatureControl', 'read_port')
return buff_value
def write_port(self, address, buff, size):
"""
:brief Write register
:param address: The address of the register to be written.(type: int)
:param bytearray: The data to be written from user.(type: buffer)
:return: none
"""
if not isinstance(address, INT_TYPE):
raise ParameterTypeError("Device.write_remote_device_port: "
"Expected address type is int, not %s" % type(address))
status = gx_writer_port( self.__handle, address, buff, size)
StatusProcessor.process(status, 'FeatureControl', 'write_port')
def read_port_stacked(self, entries, size):
"""
:brief Batch read the value of a user-specified register (only for registers with a command value of 4 bytes in length)
:entries [in]Batch read register addresses and values
[out]Read the data to the corresponding register
:read_num [in]Read the number of device registers
[out]The number of registers that were successfully read
:return: none
"""
if not isinstance(size, INT_TYPE):
raise ParameterTypeError("Device.set_read_remote_device_port_stacked: "
"Expected size type is int, not %s" % type(size))
status = gx_read_port_stacked(self.__handle, entries, size)
StatusProcessor.process(status, 'Device', 'read_remote_device_port_stacked')
return status
def write_port_stacked(self, entries, size):
"""
:brief Batch read the value of a user-specified register (only for registers with a command value of 4 bytes in length)
:entries [in]The address and value of the batch write register
:read_num [in]Sets the number of device registers
[out]The number of registers that were successfully written
:return: none
"""
if not isinstance(size, INT_TYPE):
raise ParameterTypeError("Device.set_read_remote_device_port_stacked: "
"Expected size type is int, not %s" % type(size))
status = gx_set_write_remote_device_port_stacked(self.__handle, entries, size)
StatusProcessor.process(status, 'Device', 'set_write_remote_device_port_stacked')
return status