SMS PDU codec: GSM 7-bit, UCS-2, user data headers, concatenation, status reports and USSD.
moon add chen333w/moon-sms-pdulet pdu = @lib.parse_pdu("07911326040000F0040B911346610089F60000208062917314080CC8F71D14969741F977FD07")
match pdu {
Deliver(deliver) => {
println(deliver.originating.to_string_display()) // +31641600986
println(deliver.text) // How are you?
println(deliver.timestamp.to_display()) // 1902-08-26T19:37:41+00:00
}
_ => ()
}let submit = @lib.SmsSubmit::new(
Number(International, Isdn, "8613800138000"),
"Hello",
)
println(@lib.Pdu::Submit(submit).to_hex())let parts = @lib.build_submits(destination, long_text, reference=42)
for submit in parts {
send_over_at_command(@lib.Pdu::Submit(submit).to_hex())
}println(@lib.assemble(delivered_parts))let buffer = @lib.ReassemblyBuffer::new(timeout_seconds=600)
match buffer.push(deliver, now) {
Complete(text) => handle(text)
Pending(got, total) => ()
Duplicate => ()
Single(text) => handle(text)
Rejected(reason) => ()
}
// 定时清理发了一半就放弃的消息
buffer.expire(now)let ussd = @lib.UssdMessage::new("*100#")
println(@lib.octets_to_hex(ussd.to_octets()))// AT+CMGS 要的是 TPDU 长度(不含 SMSC 前缀),结尾必须是 Ctrl-Z
for line in @lib.at_send_sequence(pdu) {
write_to_modem(line)
}
// 解析 AT+CMGL 的响应
for message in @lib.parse_cmgl(response) {
println(message.index, message.pdu)
}moon run cmd/main -- decode 07911326040000F0040B911346610089F60000208062917314080CC8F71D14969741F977FD07
moon run cmd/main -- encode '+8613800138000' 'Hello from MoonBit'
moon run cmd/main -- parts '+8613800138000' "$(cat long_message.txt)"
moon run cmd/main -- length '一条比较长的短信……'
moon run cmd/main -- summary <hex>...
moon run cmd/main -- stats <hex>...
moon run cmd/main -- verify <hex>...
moon run cmd/main -- ussd '*100#'moon testInstall
Download zipSMS PDU codec: GSM 7-bit, UCS-2, user data headers, concatenation, status reports and USSD.