# THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
# APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
# HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
# OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
# IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
# ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

# IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
# WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
# THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
# GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
# USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
# DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
# PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
# EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGES.

# Copyright (c) 2018 Dr. Oliver Barth <info@drb-electronic.de>
# spi driver for ADC124S051

from threading import Lock

ADC_keywords = ['self.anio.getADValues']

#
class ADC_ADC124S051():

	#
	def __init__(self, spi):
		self.spi = spi
		self.adc = [0, 0, 0, 0, 0, 0, 0, 0]
		self.mutex = Lock()

	#
	def update(self):
		self.mutex.acquire()
		ad = self.spi.xfer2([0x00, 0x00])
		self.adc[0] = (ad[0] << 8) + ad[1]
		ad = self.spi.xfer2([0x08, 0x00])
		self.adc[1] = (ad[0] << 8) + ad[1]
		ad = self.spi.xfer2([0x10, 0x00])
		self.adc[2] = (ad[0] << 8) + ad[1]
		ad = self.spi.xfer2([0x18, 0x00])
		self.adc[3] = (ad[0] << 8) + ad[1]
		self.mutex.release()

	#
	def getADValues(self):
		self.mutex.acquire()
		ret = self.adc
		self.mutex.release()
		return  ret
