-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcontroller.py
More file actions
executable file
·114 lines (100 loc) · 4.72 KB
/
Copy pathcontroller.py
File metadata and controls
executable file
·114 lines (100 loc) · 4.72 KB
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
from evdev import InputDevice, categorize, ecodes
from csf_db import fetch_count_and_day_lot, save_count_and_day_lot
from csf_network import RequestSender
from printer import Printer, get_printer_serial
from label import generate_label
from threading import Thread
from math import ceil
import uuid
from config import (
buttons_pad_src,
LABEL_PATH
)
class ButtonsReader(Thread):
def __init__(self, scanner_controller, scale_controller, label_path=LABEL_PATH):
Thread.__init__(self, name="ButtonsReader")
self.label_path = label_path
self.scanner_controller = scanner_controller
self.scale_controller = scale_controller
self.count, self.day_lot = 0, 0
# creates object 'gamepad' to store the data
# you can call it whatever you like
self.buttons_pad = InputDevice(buttons_pad_src)
# print label
self.blue_btn = 288
# start new count new lot
self.yellow_btn = 290
# pause machine
self.red_btn = 298
# re-print last label
self.green_btn = 292
# reset machine
self.white_btn = 294
self.last_label = ''
# Start new lot and count
def start_new_lot(self, reset_day_lot=False):
self.day_lot = 0 if reset_day_lot is True else self.day_lot + 1
self.count = 0
save_count_and_day_lot(self.count, self.day_lot)
def re_print(self):
Printer(self.label_path).start()
def send_print_helper(self, rounded_weight, unique_id):
print("ButtonsReader:send_print_helper")
self.count = self.count + 1
save_count_and_day_lot(self.count, self.day_lot)
print("ButtonsReader:send_print_helper:unique_id:", unique_id)
generate_label(self.day_lot, self.count, str(rounded_weight), self.scanner_controller.scanned_code,
unique_id, get_printer_serial())
Printer(self.label_path).start()
print("ButtonsReader:send_print_helper:Printer:sent")
def send_url_request(self, weight_str, unique_id):
print("ButtonsReader:send_url_request")
scanned_code = self.scanner_controller.scanned_code
if not scanned_code:
print("ButtonsReader:send_url_request:NO CODE, NO REQUEST")
return
print("ButtonsReader:send_url_request:send_request:", unique_id, scanned_code, weight_str)
RequestSender(unique_id, scanned_code, weight_str).start()
print("ButtonsReader:send_url_request:sent:")
def run(self):
self.count, self.day_lot = fetch_count_and_day_lot()
while True:
try:
previous_event_code = None
# evdev takes care of polling the controller in a loop
for event in self.buttons_pad.read_loop():
# filters by event type
if event.type != ecodes.EV_KEY:
continue
if event.value != 1:
continue
print("ButtonReader:run:event:", event)
if event.code == self.blue_btn:
print("controller.py:ButtonsReader:run:blue_btn")
unique_id = str(uuid.uuid4())
weight = self.scale_controller.current_value
if weight is not None and float(weight) > 0:
if float(weight) <= 0.50:
weight_str = str(0.5)
else:
weight_str = ceil(float(format(float(weight), ".2f")))
self.send_print_helper(weight_str, unique_id)
self.send_url_request(weight_str, unique_id)
self.scanner_controller.reset()
if event.code == self.yellow_btn:
print("Let's start a new lot")
if previous_event_code == self.yellow_btn:
self.start_new_lot(True)
else:
self.start_new_lot()
if event.code == self.green_btn:
print("controller.py:ButtonsReader:run:green_btn")
self.re_print()
if event.code == self.white_btn:
self.send_print_helper(str(0.5))
# we always store the last event.code
previous_event_code = event.code
except Exception as e:
print("controller.py:ButtonsReader:error: For some reason the buttons failed")
print("controller.py:ButtonsReader:error: But we will try again, I promise:")
print("controller.py:ButtonsReader:error:", e)