/at

AT is a framework written in Go for communication with AT-compatible devices like Huawei modems via serial port.

Primary LanguageGoMIT LicenseMIT

AT

Go Reference Build Status Coverage

Package at is a framework for communication with AT-compatible devices like Huawei modems via serial port. Currently this package is well-suited for Huawei devices and since AT-commands set may vary from device to device, sometimes you'll be forced to implement some logic by yourself.

Installation

go get github.com/xlab/at

Full documentation: godoc.

Features

This framework includes facilities for device monitoring, sending and receiving AT-commands, encoding and decoding SMS messages from or to PDU octet representation (as specified in 3GPP TS 23.040). An example of incoming SMS monitor application is given in example/daemon.

Examples

To get an SMS in a PDU octet representation:

smsSubmitGsm7 := Message{
	Text:                 "hello world",
	Encoding:             Encodings.Gsm7Bit,
	Type:                 MessageTypes.Submit,
	Address:              "+79261234567",
	ServiceCenterAddress: "+79262000331",
	VP:                   ValidityPeriod(time.Hour * 24 * 4),
	VPFormat:             ValidityPeriodFormats.Relative,
}
n, octets, err := smsSubmitGsm7.PDU()

To open a modem device:

dev = &Device{
	CommandPort: CommandPortPath,
	NotifyPort:  NotifyPortPath,
}
if err = dev.Open(); err != nil {
	return
}

If you're going to use this framework and its methods instead of plain R/W you should initialize the modem beforehand:

if err = dev.Init(DeviceE173()); err != nil {
	return
}

To use the wrapped version of a command:

err = dev.Commands.CUSD(UssdResultReporting.Enable, pdu.Encode7Bit(`*100#`), Encodings.Gsm7Bit)

Or to send a completely generic command:

str, err := dev.Send(`AT+GMM`)
log.Println(str, err)

Device-specific config

In order to introduce your own logic (i.e. custom modem Init function), you should derive your profile from the default DeviceProfile and override its methods.

License

MIT