This library streamlines communication with a dam1021 device. The dam1021 is a DAC module based on a discrete R-2R sign magnitude DAC design, with FPGA based FIFO buffering/reclocking and custom digital filters.
- Load firmware or filter set
- Filter management
- Digital volume control (two modes)
- Input source selection
- Mode of operation management
- Command-line utility
You need Python 2.7.x and additional libraries pyserial and xmodem. Then fetch dam1021.py file or whole this repository and you are done.
- Install Python 2.7.8 or later from the 2.7.x branch.
- Then grab needed virtualenv package:
pip install virtualenv
Windows users might find virtualenvwrapper-win handy.
- Create a new virtualenv.
- In your new environment:
pip install dam1021
- You are ready to use the library:
$ cd path/to/new/environment/lib/python2.7/site-packages
$ python dam1021.py -h
- ...or to use through Python shell directly (see API)
All API functionality is exposed via a built-in utility. So you don't need to code yourself:
$ python dam1021.py -h usage: dam1021.py [-h] [-v] [-V] [-s SERIAL] [-t TIMEOUT] (-d DOWNLOAD | -u DOWNLOAD_AND_UPDATE | --mode MODE | -l VOLUME_LEVEL | --flash-volume-level FLASH_VOLUME_LEVEL | -i INPUT_SOURCE | -f FILTER_SET | --default-filter-set DEFAULT_FILTER_SET | -c | -a) This script is designed to operate with a dam1021 DAC. Exclusive access to a serial device is a prerequisite. optional arguments: -h, --help show this help message and exit -v, --verbose increase output verbosity -V, --Version show program's version number and exit -s SERIAL, --serial-device SERIAL serial device to use [default: /dev/ttyAMA0] -t TIMEOUT, --timeout TIMEOUT serial read timeout to use in seconds [default: 2] -d DOWNLOAD, --download DOWNLOAD download a new firmware or filter set -u DOWNLOAD_AND_UPDATE, --download-and-update DOWNLOAD_AND_UPDATE download a new firmware and update uManager --mode MODE select mode of operation [normal,invert,bal-left,bal- right] -l VOLUME_LEVEL, --volume-level VOLUME_LEVEL set a current volume level [-80,10] and -99 for potentiometer control --flash-volume-level FLASH_VOLUME_LEVEL set a volume level on flash [-80,10] and -99 for potentiometer control -i INPUT_SOURCE, --input-source INPUT_SOURCE set input source [0,3] -f FILTER_SET, --filter-set FILTER_SET set a current filter set [(1|linear)|(2|mixed)|(3|minimum)|(4|soft)] --default-filter-set DEFAULT_FILTER_SET set a default filter set on flash [(1|linear)|(2|mixed)|(3|minimum)|(4|soft)] -c, --current-filter-set show currently selected filter set -a, --all-filters show all available filters Example: python dam1021.py -s /dev/ttyUSB0 -d firmware.skr
Obviously you can create your own too. API is pretty simple:
>>> import dam1021
>>> conn = dam1021.Connection('/dev/ttyS0')
>>> conn.download(open('newfilter.skr').read())
>>> conn.set_current_volume_level(-14)
>>> conn.set_flash_volume_level(-22)
>>> conn.set_input_source(0)
...
POSIX systems are quite consistent in this regard. Usually your serial port is described as /dev/ttysomething
(e.g. /dev/ttyUSB0
in case of a USB serial converter on Linux platform).
Windows users should try either COMxx
or \\.\COMxx
where xx
is 1,2 and so on. YMMV.
Please use issue tracker for reporting.