blob: 934f753e2c8da86ba883ee4a568edb6a523ab102 [file] [log] [blame]
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Driver for board config controls of type=uart.
"""
import logging
import hw_driver
class uartError(Exception):
"""Error class for uart class."""
class uart(hw_driver.HwDriver):
"""Object to access type=uart controls.
Note, instances of this object get dispatched via base class,
HwDriver's get/set method. That method ultimately calls:
"_[GS]et_%s" % params['subtype'] below.
For example, a control to read pty attached to the uart device would
be dispatched to call _Get_pty.
"""
def _Get_pty(self):
"""Get pty device attached to uart.
Retuns:
Path to pty attached to the uart.
"""
self._logger.debug('')
return self._interface.get_pty()
def _check_and_get_line_prop(self, valid_props):
"""Check line property request and return it.
Args:
valid_props: dict, valid line properties to configure
Returns:
string of line property to get or set
Raises:
uartError: if key 'line_prop' not in params dict
uartError: If unrecognized line_prop requested.
"""
if 'line_prop' not in self._params:
raise uartError("line_prop key not defined in params dict")
line_prop = self._params['line_prop']
if line_prop not in valid_props:
raise uartError("Unknown uart line_prop %s requested" % line_prop)
return line_prop
def _Get_props(self):
"""Gets the requested uart line property.
Line property is determined by string value in params['line_prop']
Returns:
uart line property requested
Raises:
uartError: unable to locate line property in interface dict
"""
self._logger.debug('')
prop_dict = self._interface.get_uart_props()
line_prop = self._check_and_get_line_prop(prop_dict)
return prop_dict[line_prop]
def _Set_props(self, value):
"""Sets the requested uart control's line property.
Line property is determined by string value in params['line_prop']
Args:
value: integer, to write to line property
Raises:
uartError: unable to locate line property in interface dict
"""
self._logger.debug('')
prop_dict = self._interface.get_uart_props()
line_prop = self._check_and_get_line_prop(prop_dict)
prop_dict[line_prop] = value
self._interface.set_uart_props(prop_dict)