/
data-logger
executable file
·129 lines (103 loc) · 4.39 KB
/
data-logger
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/python
import argparse
import logging
import time
import datetime
from data_logger import DataLogger
def print_sample_header():
print("# time sensor measurable value")
def print_sample(sample):
print("%-10d %-2d %-2d %-3.4f" % sample)
def fetch_handler(logger, args):
nsamples = logger.get_sample_count()
start = 0
count = nsamples
if args.start is not None:
start = args.start
count = nsamples - start
if args.count is not None:
if start + args.count > nsamples:
raise RuntimeError('Too many samples requested')
count = args.count
print_sample_header()
for sample in logger.fetch_samples(start, count):
(_, sensor, _, _) = sample
if args.sensor is not None and sensor != args.sensor:
continue
print_sample(sample)
def start_handler(logger, args):
# Ensure that time is set
if logger.get_rtc_time() == 0:
print("The device time doesn't look valid. I've updated it for you.")
set_rtc_handler(logger, args)
if args.sample_period is not None:
logger.set_sample_period(args.sample_period)
logger.set_acquisition_state(True)
t = logger.get_sample_period()
print("Acquisition started sampling every %d seconds" % t)
def stop_handler(logger, args):
logger.set_acquisition_state(False)
print("Acquisition stopped")
def erase_handler(logger, args):
logger.erase_samples()
print("Samples erased")
def info_handler(logger, args):
count = logger.get_sample_count()
print('firmware version: %s' % logger.get_firmware_version())
print('device ID: %s' % logger.get_device_id())
print('samples collected: %d' % count)
print(logger.identify_flash())
t = logger.get_rtc_time()
dt = datetime.datetime.utcfromtimestamp(t).isoformat()
print('RTC time: %s = %d' % (dt, t))
print('sample period: %d seconds' % logger.get_sample_period())
print('acquisition: %s' %
('running' if logger.get_acquisition_state() else 'stopped'))
print('')
print("sensors:")
sensors = list(logger.list_sensors())
for (sid, name) in sensors:
print("%-2d\t%-20s" % (sid, name))
for (mid, name, unit) in logger.list_sensor_measurables(sid):
print(" %-2d\t%-20s\t%-20s" % (mid, name, unit))
print
def print_last_handler(logger, args):
if args.force_sample:
logger.force_sample()
time.sleep(0.1)
print_sample_header()
for sample in logger.get_last_sample():
print_sample(sample)
def set_rtc_handler(logger, args):
epoch_time = time.time()
logger.set_rtc_time(epoch_time)
parser = argparse.ArgumentParser(description="Interface to mchck data-logger firmware")
parser.add_argument('-d', '--device', metavar='FILE', help='data-logger ACM device')
parser.add_argument('-v', '--verbose', action='store_true', help='Produce debug output')
subparsers = parser.add_subparsers(help='sub-command help', dest='mode')
fetch = subparsers.add_parser('fetch', help='fetch samples from device')
fetch.set_defaults(func=fetch_handler)
fetch.add_argument('-s', '--start', type=int, help='sample index to start from')
fetch.add_argument('-n', '--count', type=int, help='number of samples to dump')
fetch.add_argument('-S', '--sensor', type=int, help='only from given sensor')
start = subparsers.add_parser('start', help='start sample acquisition')
start.set_defaults(func=start_handler)
start.add_argument('-T', '--sample-period', type=int, metavar='SECONDS',
help='time between samples in seconds')
start = subparsers.add_parser('stop', help='stop sample acquisition')
start.set_defaults(func=stop_handler)
erase = subparsers.add_parser('erase', help='erase acquired samples')
erase.set_defaults(func=erase_handler)
info = subparsers.add_parser('info', help='fetch various information about device')
info.set_defaults(func=info_handler)
set_rtc = subparsers.add_parser('set-rtc', help='set the real-time clock time on the device')
set_rtc.set_defaults(func=set_rtc_handler)
last = subparsers.add_parser('last', help='fetch samples from device')
last.add_argument('-f', '--force-sample', action='store_true', help='Force a sample')
last.set_defaults(func=print_last_handler)
args = parser.parse_args()
if args.verbose:
logging.basicConfig(level=logging.DEBUG)
logger = DataLogger(args.device)
if args.func:
args.func(logger, args)