Initial hatctl state
This commit is contained in:
parent
aab2ec1c33
commit
c4283e4be1
4 changed files with 1100 additions and 0 deletions
15
projects/hatctl/BUILD
Normal file
15
projects/hatctl/BUILD
Normal file
|
@ -0,0 +1,15 @@
|
|||
py_project(
|
||||
name = "lib"
|
||||
)
|
||||
|
||||
zapp_binary(
|
||||
name = "hatctl",
|
||||
main = "src/python/hatctl/__main__.py",
|
||||
imports = [
|
||||
"src/python",
|
||||
],
|
||||
deps = [
|
||||
":lib",
|
||||
py_requirement("click"),
|
||||
],
|
||||
)
|
10
projects/hatctl/README.md
Normal file
10
projects/hatctl/README.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# hatctl
|
||||
|
||||
A fork of [clusterctl](https://github.com/burtyb/clusterhat-image/blob/master/files/usr/sbin/clusterctrl) which serves to fix innumerable packaging problems.
|
||||
|
||||
## license
|
||||
|
||||
This software is published under the MIT License
|
||||
|
||||
Copyright (c) 2018 Chris Burton (8086 consultancy)
|
||||
Copyright (c) 2021 Reid McKenzie
|
1010
projects/hatctl/src/python/hatctl/__main__.py
Normal file
1010
projects/hatctl/src/python/hatctl/__main__.py
Normal file
File diff suppressed because it is too large
Load diff
65
projects/hatctl/src/python/hatctl/xra1200.py
Normal file
65
projects/hatctl/src/python/hatctl/xra1200.py
Normal file
|
@ -0,0 +1,65 @@
|
|||
import smbus
|
||||
|
||||
|
||||
# Registers
|
||||
# Direction
|
||||
IN = 0x00
|
||||
OUT = 0x01
|
||||
DIR = 0x03
|
||||
PUR = 0x04
|
||||
|
||||
INPUT = 1
|
||||
OUTPUT = 0
|
||||
|
||||
|
||||
class Xra1200:
|
||||
bus = -1
|
||||
address = -1
|
||||
port = -1
|
||||
|
||||
def __init__(self, bus=0, address=0x39, port=0, dir="Null"):
|
||||
self.bus = smbus.SMBus(bus)
|
||||
self.address = address
|
||||
self.port = port
|
||||
if dir == 1:
|
||||
self.set_input()
|
||||
elif dir == 0:
|
||||
self.set_output()
|
||||
|
||||
def set_dir(self, dir):
|
||||
self.bus.write_byte_data(self.address, DIR, dir)
|
||||
|
||||
def get_dir(self):
|
||||
return self.bus.read_byte_data(self.address, DIR)
|
||||
|
||||
def set_pur(self, pur):
|
||||
self.bus.write_byte_data(self.address, PUR, pur)
|
||||
|
||||
def get_pur(self):
|
||||
try:
|
||||
reg = self.bus.read_byte_data(self.address, PUR)
|
||||
except IOError as err:
|
||||
return -1
|
||||
return reg
|
||||
|
||||
def set_input(self):
|
||||
state = self.bus.read_byte_data(self.address, DIR)
|
||||
self.bus.write_byte_data(self.address, DIR, state | 1 << self.port)
|
||||
|
||||
def write_byte(self, data):
|
||||
self.bus.write_byte_data(self.address, OUT, data)
|
||||
|
||||
def read_byte(self):
|
||||
return self.bus.read_byte_data(self.address, IN)
|
||||
|
||||
def on(self):
|
||||
state = self.bus.read_byte_data(self.address, OUT)
|
||||
self.bus.write_byte_data(self.address, OUT, state | 1 << self.port)
|
||||
|
||||
def off(self):
|
||||
state = self.bus.read_byte_data(self.address, OUT)
|
||||
self.bus.write_byte_data(self.address, OUT, state & (255 - (1 << self.port)))
|
||||
|
||||
def get(self):
|
||||
state = self.bus.read_byte_data(self.address, IN)
|
||||
return (state >> self.port) & 1
|
Loading…
Reference in a new issue