-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpi_modem.py
61 lines (47 loc) · 1.78 KB
/
pi_modem.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
from pi_hardware import pi_hardware
class pi_modem:
def __init__(self, hardware, power_pin, allow_restart, debugger):
self.debugger = debugger
self.hardware = hardware
self.power_pin = power_pin
self.allow_restart = allow_restart
self.hardware.set_pin_out(self.power_pin)
self.empty_response_count = 0
def power_on(self):
self.empty_response_count = 0
self.hardware.pin_on(self.power_pin, 2.0)
def caller_id(self):
self.hardware.serial_write('AT+CLIP=1')
rcv = self.hardware.serial_read()
def check_status(self):
self.debugger.wait(0.1)
self.hardware.serial_write('AT')
rcv = self.hardware.serial_read()
status = 'OK' in rcv
self.debugger.out('Modem status=%s' % str(status))
if len(rcv.strip()) == 0:
self.empty_response_count += 1
self.debugger.out('Modem off? (%d)' % self.empty_response_count)
return status
def no_modem_response(self):
return (self.empty_response_count > 3)
def call(self, number):
if not self.check_status():
return
self.hardware.serial_write('ATD' + number + ';')
rcv = self.hardware.serial_read()
def hang_up(self):
self.hardware.serial_write('ATH')
rcv = self.hardware.serial_read()
def check_incoming_call(self):
if not self.check_status():
return
rcv = self.hardware.serial_read()
if 'RING' in rcv:
number = rcv.split(',')[0].split(': ')[1].replace('"', '')
self.debugger.out("Incoming number='" + number + "'")
return number
return None
def receive(self):
self.hardware.serial_write('ATA')
rcv = self.hardware.serial_read()