-
Notifications
You must be signed in to change notification settings - Fork 3
/
heads_sensor_rpio.py
executable file
·84 lines (74 loc) · 3.19 KB
/
heads_sensor_rpio.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
log_format = '%(levelname)s | %(asctime)-15s | %(message)s'
logging.basicConfig(format=log_format, level=logging.INFO)
# import RPIO_wrap.RPIO as RPIO
import RPIO
logger = logging.getLogger(__name__)
# hs_handler = logging.FileHandler('moonshine.log')
# hs_handler = logging.StreamHandler()
# formatter = logging.Formatter(log_format)
# hs_handler.setFormatter(formatter)
# logger.addHandler(hs_handler)
class Heads_sensor:
def __init__(self, gpio_heads_start, gpio_heads_stop, timeout):
self.timeout = timeout
self.flag_ignore_start = True
self.flag_ignore_stop = True
self.gpio_heads_start = gpio_heads_start
# RPIO.setup(self.gpio_heads_start,
# RPIO.IN, pull_up_down=RPIO.PUD_DOWN)
self.gpio_heads_stop = gpio_heads_stop
# RPIO.setup(self.gpio_heads_stop, RPIO.IN, pull_up_down=RPIO.PUD_DOWN)
hs_gpios = {'gpio_start': gpio_heads_start,
'gpio_stop': gpio_heads_stop}
logger.info('init heads-sensor GPIO_start={gpio_start}, GPIO_stop={gpio_stop}'.format(**hs_gpios))
def release(self):
self.ignore_start()
self.ignore_stop()
print "heads_sensor ignore start and stop"
# RPIO.stop_waiting_for_interrupts()
# print "heads_sensor stop_waiting_for_interrupts"
# RPIO.cleanup()
def null_callback(self, gpio_id, value):
try:
int(value)
except ValueError:
print("null_callback BAD value="+str(value))
value = -1
pass
def ignore_start(self):
if self.flag_ignore_start:
pass
else:
self.flag_ignore_start = True
logger.info('ignore_start: setup {0} as OUTPUT'.format(self.gpio_heads_start))
RPIO.setup(self.gpio_heads_start, RPIO.OUT)
def ignore_stop(self):
if self.flag_ignore_stop:
pass
else:
self.flag_ignore_stop = True
logger.info('ignore_stop: setup {0} as OUTPUT'.format(self.gpio_heads_stop))
RPIO.setup(self.gpio_heads_stop, RPIO.OUT)
# TODO merge watch_start & watch_stop in a single method
def watch_start(self, start_callback):
self.flag_ignore_start = False
RPIO.setup(self.gpio_heads_start, RPIO.IN, pull_up_down=RPIO.PUD_DOWN)
RPIO.wait_for_interrupts(threaded=True)
RPIO.add_interrupt_callback(self.gpio_heads_start,
start_callback,
edge='rising',
debounce_timeout_ms=self.timeout,
pull_up_down=RPIO.PUD_DOWN)
def watch_stop(self, stop_callback):
self.ignore_start()
self.flag_ignore_stop = False
RPIO.setup(self.gpio_heads_stop, RPIO.IN, pull_up_down=RPIO.PUD_DOWN)
RPIO.wait_for_interrupts(threaded=True)
RPIO.add_interrupt_callback(self.gpio_heads_stop,
stop_callback,
edge='rising',
debounce_timeout_ms=self.timeout,
pull_up_down=RPIO.PUD_DOWN)