-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathbg96.toit
More file actions
85 lines (70 loc) · 2.02 KB
/
bg96.toit
File metadata and controls
85 lines (70 loc) · 2.02 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
// Copyright (C) 2022 Toitware ApS. All rights reserved.
// Use of this source code is governed by an MIT-style license that can be
// found in the LICENSE file.
import gpio
import log
import uart
import .quectel
import ...base.at as at
import ...base.base as cellular
import ...base.cellular as cellular
import ...base.service show CellularServiceProvider
main:
service := BG96Service
service.install
// --------------------------------------------------------------------------
class BG96Service extends CellularServiceProvider:
constructor:
super "quectel/bg96" --major=0 --minor=1 --patch=0
create-driver -> cellular.Cellular
--logger/log.Logger
--port/uart.Port
--rx/gpio.Pin?
--tx/gpio.Pin?
--rts/gpio.Pin?
--cts/gpio.Pin?
--power/gpio.Pin?
--reset/gpio.Pin?
--baud-rates/List?:
return BG96 port logger
--pwrkey=power
--rstkey=reset
--baud-rates=baud-rates
--is-always-online=true
/**
Driver for BG96, LTE-M modem.
*/
class BG96 extends QuectelCellular:
pwrkey/gpio.Pin?
rstkey/gpio.Pin?
constructor port/uart.Port logger/log.Logger --.pwrkey=null --.rstkey=null --baud-rates/List? --is-always-online/bool:
super port
--logger=logger
--uart-baud-rates=baud-rates or [921_600, cellular.Cellular.DEFAULT-BAUD-RATE]
--use-psm=not is-always-online
network-name -> string:
return "cellular:bg96"
on-connected_ session/at.Session:
// Attach to network.
session.set "+QICSGP" [cid_]
session.send (QIACT cid_)
on-reset session/at.Session:
session.set "+CFUN" [1, 1]
power-on -> none:
if not pwrkey: return
critical-do --no-respect-deadline:
pwrkey.set 1
sleep --ms=150
pwrkey.set 0
power-off -> none:
if not pwrkey: return
critical-do --no-respect-deadline:
pwrkey.set 1
sleep --ms=650
pwrkey.set 0
reset -> none:
if not rstkey: return
critical-do --no-respect-deadline:
rstkey.set 1
sleep --ms=150
rstkey.set 0