-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbdp.py
170 lines (148 loc) · 4.16 KB
/
bdp.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
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
import telnetlib
import time
from h import BDHOST, BDPORT
ST1 = 0.1
ST2 = 0.2
ST3 = 0.3
ST4 = 0.5
ST5 = 1.0
ST6 = 3.0
ST7 = 7.0
ST8 = 20.0
POWERON = b"PN\n\r"
POWEROFF = b"PF\n\r"
OPEN = b"OP\n\r"
CLOSE = b"CO\n\r"
STOP2 = b"99RJ\n\r"
PLAY = b"PL\n\r"
MODE = b"?P\n\r"
STOP = b"/A181AF38/RU\n\r"
UP = b"/A184FFFF/RU\n\r"
DOWN = b"/A185FFFF/RU\n\r"
MENU = b"/A181AFB0/RU\n\r"
ENTER = b"/A181AFEF/RU\n\r"
LEFT = b"/A187FFFF/RU\n\r"
RIGHT = b"/A186FFFF/RU\n\r"
NEXT = b"/A181AF3D/RU\n\r"
PREV = b"/A181AF3E/RU\n\r"
RETURN = b"/A181AFF4/RU\n\r"
EXIT = b"/A181AF20/RU\n\r"
STOPTUPLE = (EXIT, RETURN, STOP, STOP, RETURN, RETURN, RETURN, RETURN, EXIT)
HDMION = (UP, ENTER, DOWN, DOWN, ENTER, UP, UP, UP, UP, UP, ENTER, ENTER, RETURN, RETURN, RETURN, RETURN, RETURN)
HDMIOFF = (UP, ENTER, DOWN, DOWN, ENTER, UP, UP, UP, UP, UP, ENTER, UP, ENTER, RETURN, RETURN, RETURN, RETURN, RETURN)
class Bdp:
def __init__(self, host=BDHOST, port=BDPORT):
self.host = host
self.port = port
self.ok = False
self.__connect()
def __del__(self):
if self.ok:
self.dev.close()
close = __del__
def __connect(self):
self.ok = True
try:
self.dev = telnetlib.Telnet(self.host, self.port)
except:
self.ok = False
def __send(self, command):
self.dev.write(command)
time.sleep(ST1)
answer = self.dev.read_until(b"\n", ST6).decode("UTF-8")
if answer[0] == "R":
return True
else:
return False
def __sendTuple(self, input):
for i in input:
if not self.__send(i):
return False
if i == ENTER:
time.sleep(ST4)
time.sleep(ST3)
return True
def hdmiOn(self):
if not self.isOn():
return False
time.sleep(ST7)
if not self.__sendTuple(STOPTUPLE):
return False
time.sleep(ST5)
if not self.__send(MENU):
return False
time.sleep(ST5)
return self.__sendTuple(HDMION)
def hdmiOff(self):
if not self.isOn():
return False
time.sleep(ST7)
if not self.__sendTuple(STOPTUPLE):
return False
time.sleep(ST5)
if not self.__send(MENU):
return False
time.sleep(ST5)
return self.__sendTuple(HDMIOFF)
def on(self):
if self.ok and not self.isOn():
if self.__send(POWERON):
start_time = time.time()
while True:
st = self.status()
if st[0] == "P":
return True
if time.time() - start_time > ST8:
return False
time.sleep(ST4)
else:
return False
else:
return False
def off(self):
if self.isOn():
if self.__send(POWEROFF):
start_time = time.time()
while True:
st = self.status()
if st[0] != "P":
return True
if time.time() - start_time > ST8:
return False
time.sleep(ST4)
else:
return False
else:
return False
def play(self):
if not self.isOn():
return False
else:
return self.__send(PLAY)
def status(self):
self.__connect()
self.dev.write(MODE)
time.sleep(ST1)
answer = self.dev.read_until(b"\n", ST6).decode("UTF-8")
return answer
def isOn(self):
if self.ok and self.status()[0] == "P":
return True
else:
return False
if __name__ == "__main__":
b = Bdp()
print("BDP is ON" if b.isOn() else "BDP is OFF")
print("starting ...")
b.on()
print("BDP is ON" if b.isOn() else "BDP is OFF")
time.sleep(4)
print("hdmi on ...")
b.hdmiOn()
time.sleep(4)
print("hdmi off ...")
b.hdmiOff()
time.sleep(9)
print("stopping ...")
b.off()
print("BDP is ON" if b.isOn() else "BDP is OFF")