-
-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathcli.py
More file actions
154 lines (140 loc) 路 5.2 KB
/
Copy pathcli.py
File metadata and controls
154 lines (140 loc) 路 5.2 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
from argparse import ArgumentParser
from . import Backlight, BoardType, __version__, utils
STRING_TO_BOARD_TYPE = {
"raspberry-pi": BoardType.RASPBERRY_PI,
"tinker-board": BoardType.TINKER_BOARD,
"tinker-board-2": BoardType.TINKER_BOARD_2,
"generic": BoardType.GENERIC,
}
BOARD_TYPE_TO_STRING = {
BoardType.RASPBERRY_PI: "raspberry-pi",
BoardType.TINKER_BOARD: "tinker-board",
BoardType.TINKER_BOARD_2: "tinker-board-2",
BoardType.GENERIC: "generic",
}
def _create_argument_parser():
parser = ArgumentParser(
description='Get/set power and brightness of the official Raspberry Pi 7" touch display.'
)
parser.add_argument(
"sysfs_path",
metavar="SYSFS_PATH",
type=str,
nargs="?",
default=None,
help="Optional path to the backlight sysfs, set to :emulator: to use with rpi-backlight-emulator",
)
parser.add_argument(
"--get-brightness",
action="store_true",
help="get the display brightness (0-100)",
)
parser.add_argument(
"-b",
"--set-brightness",
metavar="VALUE",
type=int,
choices=range(0, 101),
help="set the display brightness (0-100)",
)
parser.add_argument(
"--get-power", action="store_true", help="get the display power (on/off)"
)
parser.add_argument(
"-p",
"--set-power",
metavar="VALUE",
type=str,
choices=("on", "off", "toggle"),
help="set the display power (on/off/toggle)",
)
parser.add_argument(
"-d", "--duration", type=float, default=0, help="fading duration in seconds"
)
parser.add_argument(
"-B",
"--board-type",
default=BOARD_TYPE_TO_STRING.get(utils.detect_board_type(), "raspberry-pi"),
choices=STRING_TO_BOARD_TYPE.keys(),
help="board type",
)
parser.add_argument(
"-V",
"--version",
action="version",
version=f"%(prog)s {__version__}",
)
return parser
def main():
"""Start the command line interface."""
parser = _create_argument_parser()
args = parser.parse_args()
if args.sysfs_path in ("on", "off"):
parser.error(
"invalid SYSFS_PATH. Use -p on/off (or -p toggle) instead of 'rpi-backlight on|off'."
)
backlight = Backlight(
board_type=STRING_TO_BOARD_TYPE[args.board_type],
backlight_sysfs_path=args.sysfs_path,
)
if args.get_brightness:
if any((args.set_brightness, args.get_power, args.set_power, args.duration)):
parser.error("--get-brightness must be used without other options")
print(backlight.brightness)
return
if args.get_power:
if any(
(args.get_brightness, args.set_brightness, args.set_power, args.duration)
):
parser.error("--get-power must be used without other options")
print("on" if backlight.power else "off")
return
if args.set_brightness is not None:
if any((args.get_brightness, args.get_power, args.set_power)):
parser.error(
"-b/--set-brightness must be used without other options except for -d/--duration"
)
# backlight.fade context manager can be used always as args.fade defaults to zero
if (backlight.power is False) and (args.set_brightness > 0):
backlight.power = True
with backlight.fade(duration=args.duration):
backlight.brightness = args.set_brightness
if (backlight.power is True) and (args.set_brightness == 0):
backlight.power = False
return
if args.set_power:
if any((args.get_brightness, args.set_brightness, args.get_power)):
parser.error("-p/--set-power may only be used with -d/--duration")
if args.set_power == "toggle":
if backlight.power:
with backlight.fade(duration=args.duration):
backlight.brightness = 0
if args.board_type == "raspberry-pi":
backlight.power = False
else:
# Ensure brightness is 0 when we turn the display on
backlight.brightness = 0
if args.board_type == "raspberry-pi":
backlight.power = True
with backlight.fade(duration=args.duration):
backlight.brightness = 100
elif args.set_power == "on":
# Ensure brightness is 0 when we turn the display on
backlight.brightness = 0
if args.board_type == "raspberry-pi":
backlight.power = True
with backlight.fade(duration=args.duration):
backlight.brightness = 100
elif args.set_power == "off":
if backlight.power:
with backlight.fade(duration=args.duration):
backlight.brightness = 0
if args.board_type == "raspberry-pi":
backlight.power = False
else:
backlight.power = True if args.set_power == "on" else False
return
if args.duration:
parser.error(
"-d/--duration must be used with -b/--set-brightness or -p/--set-power toggle"
)