gsm

package module
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 21, 2025 License: MIT Imports: 11 Imported by: 0

README

GSM Modem Library for Go

Библиотека для работы с GSM модемами через последовательный порт (USB to COM) на языке Go. Предоставляет удобную обертку над AT-командами.

Возможности

  • 🔍 Автоматическое обнаружение модемов
  • 📱 Отправка и получение SMS
  • 🌍 Поддержка Unicode/кириллицы в SMS
  • 📞 Управление звонками
  • 🌐 Мониторинг состояния сети
  • 📡 USSD запросы
  • 🔔 Асинхронная обработка событий
  • 🖥️ Поддержка Linux, macOS и Windows

Структуры данных

SMS

Представляет текстовое сообщение:

type SMS struct {
Index    int       // Индекс сообщения в памяти модема
Status   string    // Статус: "REC UNREAD", "REC READ", "STO SENT", "STO UNSENT"
Sender   string    // Номер телефона отправителя (формат: "+79991234567")
Receiver string    // Номер телефона получателя (для отправленных)
Time     time.Time // Время получения/отправки сообщения
Text     string    // Текст сообщения
}
ModemInfo

Информация о модеме:

type ModemInfo struct {
Port         string // Последовательный порт (например: "/dev/ttyUSB0", "COM3")
Manufacturer string // Производитель модема (например: "Huawei")
Model        string // Модель модема (например: "E3372")
Revision     string // Версия прошивки
IMEI         string // IMEI модема (15 цифр)
Description  string // Составное описание: "Manufacturer Model"
}
SignalQuality

Качество сигнала:

type SignalQuality struct {
RSSI int // Уровень сигнала (0-31, где 31 = отличный, 99 = неизвестно)
BER  int // Bit Error Rate (0-7, где 0 = отлично, 99 = неизвестно)
}
OperatorInfo

Информация об операторе:

type OperatorInfo struct {
Status    string // Статус оператора: "0"=неизвестно, "1"=доступен, "2"=текущий, "3"=запрещен
LongName  string // Полное название (например: "MegaFon")
ShortName string // Короткое название (например: "MegaFon")
Numeric   string // Числовой код оператора (например: "25002" для МегаФон)
}
Event

Событие от модема:

type Event struct {
Type      EventType              // Тип события (см. ниже)
Timestamp time.Time              // Время события
Data      map[string]interface{} // Данные события (зависят от типа)
}
Типы событий (EventType)
const (
EventNewSMS          EventType = "NEW_SMS"          // Новое SMS (Data: "index", "storage")
EventIncomingCall    EventType = "INCOMING_CALL"    // Входящий звонок (Data: "number")
EventCallEnded       EventType = "CALL_ENDED"       // Звонок завершен (Data: "reason")
EventNetworkChange   EventType = "NETWORK_CHANGE"   // Изменение сети (Data: "status", "lac", "cellId")
EventSignalChange    EventType = "SIGNAL_CHANGE"    // Изменение сигнала
EventUSSD            EventType = "USSD"             // USSD ответ (Data: "message")
EventModemError      EventType = "MODEM_ERROR"      // Ошибка модема (Data: "error")
EventSMSDeliveryReport EventType = "SMS_DELIVERY_REPORT" // Отчет о доставке
)
NetworkStatus

Статус регистрации в сети:

const (
NetworkNotRegistered      NetworkStatus = 0 // Не зарегистрирован
NetworkRegisteredHome     NetworkStatus = 1 // Зарегистрирован (домашняя сеть)
NetworkSearching          NetworkStatus = 2 // Поиск сети
NetworkRegistrationDenied NetworkStatus = 3 // Регистрация отклонена
NetworkUnknown            NetworkStatus = 4 // Неизвестный статус
NetworkRegisteredRoaming  NetworkStatus = 5 // Зарегистрирован (роуминг)
)
PinStatus

Статус PIN-кода:

const (
PinReady    PinStatus = "READY"     // SIM готова к работе
PinRequired PinStatus = "SIM PIN"   // Требуется ввод PIN
PukRequired PinStatus = "SIM PUK"   // Требуется ввод PUK
PinBlocked  PinStatus = "SIM PIN2"  // PIN2 заблокирован
PukBlocked  PinStatus = "SIM PUK2"  // PUK2 заблокирован
)
ModemMode

Режим работы модема:

const (
ModemModeOffline      ModemMode = 0 // Оффлайн режим (режим полета)
ModemModeOnline       ModemMode = 1 // Полная функциональность
ModemModeLowPower     ModemMode = 2 // Режим энергосбережения
ModemModeFactoryTest  ModemMode = 3 // Заводской тест
ModemModeReset        ModemMode = 4 // Сброс
ModemModeShuttingDown ModemMode = 5 // Выключение
)
SMSStorage

Хранилище SMS:

const (
StorageSIM       SMSStorage = "SM" // SIM карта
StoragePhone     SMSStorage = "ME" // Память телефона/модема
StorageAny       SMSStorage = "MT" // Любое хранилище
StorageBroadcast SMSStorage = "BM" // Широковещательные сообщения
StorageStatus    SMSStorage = "SR" // Отчеты о статусе
)

Примеры использования структур

Работа с SMS
// Получение SMS возвращает структуру SMS
sms, err := modem.ReadSMS(1)
if err == nil {
fmt.Printf("От: %s\n", sms.Sender)
fmt.Printf("Текст: %s\n", sms.Text)
fmt.Printf("Время: %s\n", sms.Time.Format("02.01.2006 15:04"))
fmt.Printf("Статус: %s\n", sms.Status)
}

// ListSMS возвращает слайс указателей на SMS
messages, err := modem.ListUnreadSMS()
for _, msg := range messages {
// msg имеет тип *SMS
fmt.Printf("[%d] %s: %s\n", msg.Index, msg.Sender, msg.Text)
}
Работа с информацией о модеме
// GetExtendedInfo возвращает map[string]string
info, err := modem.GetExtendedInfo()
if err == nil {
fmt.Printf("Производитель: %s\n", info["Manufacturer"])
fmt.Printf("Модель: %s\n", info["Model"])
fmt.Printf("IMEI: %s\n", info["IMEI"])
fmt.Printf("Оператор: %s\n", info["Operator"])
fmt.Printf("Уровень сигнала: %s/31\n", info["SignalRSSI"])
}

// GetSignalQuality возвращает структуру SignalQuality
signal, err := modem.GetSignalQuality()
if err == nil {
percentage := (signal.RSSI * 100) / 31
fmt.Printf("Сигнал: %d%% (RSSI: %d, BER: %d)\n",
percentage, signal.RSSI, signal.BER)
}
Работа с событиями
// Включаем события
err := modem.StartEventListener()
if err == nil {
eventChan, _ := modem.GetEventChannel()

for event := range eventChan {
switch event.Type {
case gsm.EventNewSMS:
// Data содержит: index (int), storage (string)
index := event.Data["index"].(int)
storage := event.Data["storage"].(string)
fmt.Printf("Новое SMS #%d в %s\n", index, storage)

case gsm.EventIncomingCall:
// Data содержит: number (string)
if number, ok := event.Data["number"].(string); ok {
fmt.Printf("Звонок от: %s\n", number)
}

case gsm.EventNetworkChange:
// Data содержит: status (NetworkStatus), statusText (string), 
// lac (string), cellId (string)
status := event.Data["status"].(NetworkStatus)
fmt.Printf("Сеть изменилась: %v\n", status)
}
}
}
Работа с операторами
// GetCurrentOperator возвращает *OperatorInfo
operator, err := modem.GetCurrentOperator()
if err == nil {
fmt.Printf("Оператор: %s (%s)\n",
operator.LongName, operator.Numeric)
}

// ScanOperators возвращает []OperatorInfo
operators, err := modem.ScanOperators()
for _, op := range operators {
fmt.Printf("%s - %s (код: %s, статус: %s)\n",
op.LongName, op.ShortName, op.Numeric, op.Status)
}

Установка

go get github.com/yourusername/gsm
Зависимости
go get github.com/tarm/serial

Быстрый старт

package main

import (
	"fmt"
	"log"
	"github.com/yourusername/gsm"
)

func main() {
	// Поиск доступных модемов
	modems, _ := gsm.GetAvailableModems()
	for _, m := range modems {
		fmt.Printf("Найден модем: %s - %s\n", m.Port, m.Description)
	}

	// Подключение к модему
	modem, err := gsm.New("/dev/ttyUSB0", 115200)
	if err != nil {
		log.Fatal(err)
	}
	defer modem.Close()

	// Отправка SMS
	err = modem.SendSMS("+79991234567", "Привет из Go!")
	if err != nil {
		log.Printf("Ошибка отправки SMS: %v", err)
	}
}

Основные функции

Подключение и информация
// Создание подключения
modem, err := gsm.New(port, baudRate)

// Тест соединения
err := modem.TestConnection()

// Получение информации
manufacturer, _ := modem.GetManufacturer()
model, _ := modem.GetModel()
imei, _ := modem.GetIMEI()
revision, _ := modem.GetRevision()

// Расширенная информация
info, _ := modem.GetExtendedInfo()
Работа с сетью
// Статус регистрации
status, _ := modem.GetNetworkStatus()
gprsStatus, _ := modem.GetGPRSStatus()

// Информация об операторе
operator, _ := modem.GetCurrentOperator()

// Качество сигнала (0-31)
signal, _ := modem.GetSignalQuality()

// Поиск операторов (может занять до 3 минут)
operators, _ := modem.ScanOperators()

// Выбор оператора
err := modem.SelectOperator("25002") // МегаФон
SIM-карта
// Статус SIM
status, _ := modem.GetSIMStatus()

// Ввод PIN-кода
if status == gsm.PinRequired {
err := modem.EnterPIN("1234")
}

// Получение номера телефона (если сохранен на SIM)
number, _ := modem.GetSIMNumber()
SMS
// Отправка SMS (автоматически определяет кодировку)
err := modem.SendSMS("+79991234567", "Привет!") // Кириллица
err := modem.SendSMS("+79991234567", "Hello!")  // ASCII

// Отправка длинного SMS (автоматическая разбивка)
err := modem.SendLongSMS("+79991234567", "Очень длинное сообщение...")

// Чтение SMS по индексу (автоматическое декодирование)
sms, _ := modem.ReadSMS(1)
fmt.Printf("От: %s\nТекст: %s\n", sms.Sender, sms.Text)

// Список всех SMS
messages, _ := modem.ListSMS("ALL")

// Список непрочитанных SMS
unreadMessages, _ := modem.ListUnreadSMS()

// Список прочитанных SMS
readMessages, _ := modem.ListReadSMS()

// Количество непрочитанных
count, _ := modem.CountUnreadSMS()

// Пометить как прочитанное
err := modem.MarkSMSAsRead(1)

// Удаление SMS
err := modem.DeleteSMS(1)
err := modem.DeleteAllSMS()
err := modem.DeleteReadSMS()

// Настройка хранилища
err := modem.SetSMSStorage(gsm.StorageSIM, gsm.StorageSIM, gsm.StorageSIM)
Работа с Unicode/кириллицей

Библиотека автоматически обрабатывает Unicode текст в SMS:

// Отправка на русском
err := modem.SendSMS("+79991234567", "Привет, как дела?")

// Отправка с emoji
err := modem.SendSMS("+79991234567", "Hello 👋 🚀")

// Смешанный текст
err := modem.SendSMS("+79991234567", "Test тест 测试")

// Ручное декодирование UCS2
decoded, err := gsm.DecodeUCS2("043F044004380432043504420021")
// decoded = "привет!"

// Ручное кодирование в UCS2
encoded := gsm.EncodeUCS2("Привет!")
// encoded = "041F04400438043204350442002100"

// Автоматическое определение и декодирование
text := gsm.DecodeGSMText("043F044004380432043504420021")
// text = "привет!"
Звонки
// Совершить звонок
err := modem.MakeCall("+79991234567")

// Ответить на входящий
err := modem.AnswerCall()

// Завершить вызов
err := modem.HangUp()

// Статус активных вызовов
calls, _ := modem.GetCallStatus()
USSD
// Отправка USSD запроса
response, _ := modem.SendUSSD("*100#") // Проверка баланса
События

События в библиотеке опциональны и должны быть явно включены:

// Проверка статуса обработчика событий
if !modem.IsEventListenerRunning() {
// Запуск обработчика событий
err := modem.StartEventListener()
if err != nil {
log.Printf("Ошибка запуска событий: %v", err)
}
}

// Получение канала событий
eventChan, err := modem.GetEventChannel()
if err != nil {
log.Printf("События не запущены: %v", err)
return
}

// Обработка событий
go func() {
for event := range eventChan {
switch event.Type {
case gsm.EventNewSMS:
index := event.Data["index"].(int)
fmt.Printf("Новое SMS, индекс: %d\n", index)

case gsm.EventIncomingCall:
number := event.Data["number"].(string)
fmt.Printf("Входящий звонок: %s\n", number)
}
}
}()

// Остановка обработчика событий
err = modem.StopEventListener()

Типы событий

  • EventNewSMS - Новое SMS сообщение
  • EventIncomingCall - Входящий звонок
  • EventCallEnded - Завершение вызова
  • EventNetworkChange - Изменение статуса сети
  • EventSignalChange - Изменение уровня сигнала
  • EventUSSD - USSD ответ
  • EventModemError - Ошибка модема
  • EventSMSDeliveryReport - Отчет о доставке SMS

Режимы модема

// Установка режима
modem.SetModemMode(gsm.ModemModeOnline)     // Полный режим
modem.SetModemMode(gsm.ModemModeOffline)    // Режим полёта
modem.SetModemMode(gsm.ModemModeLowPower)   // Минимальный режим

// Получение текущего режима
mode, _ := modem.GetModemMode()

Примеры использования

Мониторинг входящих SMS
modem.StartEventListener()
events := modem.GetEventChannel()

for event := range events {
    if event.Type == gsm.EventNewSMS {
        index := event.Data["index"].(int)
        sms, _ := modem.ReadSMS(index)
        
        fmt.Printf("SMS от %s: %s\n", sms.Sender, sms.Text)
        
        // Автоответ
        modem.SendSMS(sms.Sender, "Сообщение получено!")
        
        // Удаление после обработки
        modem.DeleteSMS(index)
    }
}
SMS-шлюз
func smsGateway(modem *gsm.Modem) {
// Очистка старых сообщений
modem.DeleteAllSMS()

// Включение уведомлений
modem.EnableNewSMSNotification()

// Обработка команд через SMS
for event := range modem.GetEventChannel() {
if event.Type == gsm.EventNewSMS {
sms, _ := modem.ReadSMS(event.Data["index"].(int))

switch sms.Text {
case "STATUS":
info, _ := modem.GetExtendedInfo()
response := fmt.Sprintf("Signal: %s, Operator: %s",
info["SignalRSSI"], info["Operator"])
modem.SendSMS(sms.Sender, response)

case "BALANCE":
balance, _ := modem.SendUSSD("*100#")
modem.SendSMS(sms.Sender, balance)
}
}
}
}

Поддерживаемые модемы

Библиотека работает с большинством GSM модемов, поддерживающих стандартные AT-команды:

  • Huawei E173, E3372, E3531
  • ZTE MF823, MF831
  • Sierra Wireless
  • Quectel EC25, M66
  • SIMCom SIM800, SIM900
  • И другие совместимые модемы

Требования

  • Go 1.16+
  • Драйверы для вашего GSM модема
  • Активная SIM-карта

Отладка

Для отладки можно использовать прямую отправку AT-команд:

response, err := modem.SendCommand("AT+COPS?", time.Second*2)
fmt.Println("Ответ:", response)

Лицензия

MIT License

Вклад в проект

Приветствуются pull requests! Для больших изменений сначала откройте issue для обсуждения.

TODO

  • Поддержка PDU режима для SMS
  • Работа с контактами SIM-карты
  • Поддержка MMS
  • Работа с несколькими модемами одновременно
  • Более подробная документация AT-команд

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DebugMode = false

DebugMode включает/выключает режим отладки

Functions

func DecodeGSMText

func DecodeGSMText(text string) string

DecodeGSMText автоматически определяет кодировку и декодирует текст

func DecodeUCS2

func DecodeUCS2(hexStr string) (string, error)

DecodeUCS2 декодирует UCS2/UTF-16 текст из hex строки

func DisableDebug

func DisableDebug()

DisableDebug выключает режим отладки

func EnableDebug

func EnableDebug()

EnableDebug включает режим отладки

func EncodeUCS2

func EncodeUCS2(text string) string

EncodeUCS2 кодирует текст в UCS2/UTF-16 hex строку

func FormatResponse

func FormatResponse(response string) string

FormatResponse форматирует ответ для отображения

func IsUCS2Hex

func IsUCS2Hex(str string) bool

IsUCS2Hex проверяет, является ли строка UCS2 в hex формате

Types

type Event

type Event struct {
	Type      EventType
	Timestamp time.Time
	Data      map[string]interface{}
}

Event представляет событие от модема

type EventType

type EventType string

EventType тип события

const (
	EventNewSMS            EventType = "NEW_SMS"
	EventIncomingCall      EventType = "INCOMING_CALL"
	EventCallEnded         EventType = "CALL_ENDED"
	EventNetworkChange     EventType = "NETWORK_CHANGE"
	EventSignalChange      EventType = "SIGNAL_CHANGE"
	EventUSSD              EventType = "USSD"
	EventModemError        EventType = "MODEM_ERROR"
	EventSMSDeliveryReport EventType = "SMS_DELIVERY_REPORT"
)

type Modem

type Modem struct {
	// contains filtered or unexported fields
}

Modem представляет GSM модем

func New

func New(port string, baudRate int) (*Modem, error)

New создает новый экземпляр модема

func (*Modem) AnswerCall

func (m *Modem) AnswerCall() error

AnswerCall отвечает на входящий вызов

func (*Modem) Close

func (m *Modem) Close() error

Close закрывает соединение с модемом

func (*Modem) CountUnreadSMS

func (m *Modem) CountUnreadSMS() (int, error)

CountUnreadSMS возвращает количество непрочитанных SMS

func (*Modem) DeleteAllSMS

func (m *Modem) DeleteAllSMS() error

DeleteAllSMS удаляет все SMS

func (*Modem) DeleteReadSMS

func (m *Modem) DeleteReadSMS() error

DeleteReadSMS удаляет все прочитанные SMS

func (*Modem) DeleteSMS

func (m *Modem) DeleteSMS(index int) error

DeleteSMS удаляет SMS по индексу

func (*Modem) DeleteSMSByStatus

func (m *Modem) DeleteSMSByStatus(status int) error

DeleteSMSByStatus удаляет SMS по статусу

func (*Modem) EnableNewSMSNotification

func (m *Modem) EnableNewSMSNotification() error

EnableNewSMSNotification включает уведомления о новых SMS

func (*Modem) EnterPIN

func (m *Modem) EnterPIN(pin string) error

EnterPIN вводит PIN-код

func (*Modem) GetCallStatus

func (m *Modem) GetCallStatus() ([]map[string]string, error)

GetCallStatus возвращает статус текущих вызовов

func (*Modem) GetCurrentOperator

func (m *Modem) GetCurrentOperator() (*OperatorInfo, error)

GetCurrentOperator возвращает текущего оператора

func (*Modem) GetEventChannel

func (m *Modem) GetEventChannel() (<-chan Event, error)

GetEventChannel возвращает канал событий

func (*Modem) GetExtendedInfo

func (m *Modem) GetExtendedInfo() (map[string]string, error)

GetExtendedInfo возвращает расширенную информацию о модеме

func (*Modem) GetGPRSStatus

func (m *Modem) GetGPRSStatus() (NetworkStatus, error)

GetGPRSStatus возвращает статус регистрации в GPRS

func (*Modem) GetIMEI

func (m *Modem) GetIMEI() (string, error)

GetIMEI возвращает IMEI модема

func (*Modem) GetLastFailureReason

func (m *Modem) GetLastFailureReason() (string, error)

GetLastFailureReason возвращает последнюю причину отказа регистрации

func (*Modem) GetManufacturer

func (m *Modem) GetManufacturer() (string, error)

GetManufacturer возвращает производителя модема

func (*Modem) GetModel

func (m *Modem) GetModel() (string, error)

GetModel возвращает модель модема

func (*Modem) GetModemMode

func (m *Modem) GetModemMode() (ModemMode, error)

GetModemMode возвращает текущий режим модема

func (*Modem) GetNetworkStatus

func (m *Modem) GetNetworkStatus() (NetworkStatus, error)

GetNetworkStatus возвращает статус регистрации в сети GSM

func (*Modem) GetRevision

func (m *Modem) GetRevision() (string, error)

GetRevision возвращает версию прошивки

func (*Modem) GetSIMNumber

func (m *Modem) GetSIMNumber() (string, error)

GetSIMNumber пытается получить номер телефона SIM-карты

func (*Modem) GetSIMStatus

func (m *Modem) GetSIMStatus() (PinStatus, error)

GetSIMStatus проверяет статус SIM-карты

func (*Modem) GetSMSStorageInfo

func (m *Modem) GetSMSStorageInfo() (map[string]string, error)

GetSMSStorageInfo возвращает информацию о хранилище SMS

func (*Modem) GetSignalQuality

func (m *Modem) GetSignalQuality() (*SignalQuality, error)

GetSignalQuality возвращает качество сигнала

func (*Modem) HangUp

func (m *Modem) HangUp() error

HangUp завершает текущий вызов

func (*Modem) IsEventListenerRunning

func (m *Modem) IsEventListenerRunning() bool

IsEventListenerRunning проверяет, запущен ли обработчик событий

func (*Modem) ListReadSMS

func (m *Modem) ListReadSMS() ([]*SMS, error)

ListReadSMS возвращает список прочитанных SMS

func (*Modem) ListSMS

func (m *Modem) ListSMS(status string) ([]*SMS, error)

ListSMS возвращает список всех SMS

func (*Modem) ListSentSMS

func (m *Modem) ListSentSMS() ([]*SMS, error)

ListSentSMS возвращает список отправленных SMS

func (*Modem) ListUnreadSMS

func (m *Modem) ListUnreadSMS() ([]*SMS, error)

ListUnreadSMS возвращает список непрочитанных SMS

func (*Modem) ListUnsentSMS

func (m *Modem) ListUnsentSMS() ([]*SMS, error)

ListUnsentSMS возвращает список неотправленных SMS

func (*Modem) MakeCall

func (m *Modem) MakeCall(number string) error

MakeCall совершает звонок

func (*Modem) MarkSMSAsRead

func (m *Modem) MarkSMSAsRead(index int) error

MarkSMSAsRead помечает SMS как прочитанное (читает его)

func (*Modem) ReadSMS

func (m *Modem) ReadSMS(index int) (*SMS, error)

ReadSMS читает SMS по индексу

func (*Modem) ScanOperators

func (m *Modem) ScanOperators() ([]OperatorInfo, error)

ScanOperators ищет доступных операторов

func (*Modem) SelectOperator

func (m *Modem) SelectOperator(numeric string) error

SelectOperator выбирает оператора

func (*Modem) SendCommand

func (m *Modem) SendCommand(cmd string, timeout time.Duration) (string, error)

SendCommand отправляет AT команду и ждет ответ

func (*Modem) SendLongSMS

func (m *Modem) SendLongSMS(number, text string) error

SendLongSMS отправляет длинное SMS (с разбивкой на части)

func (*Modem) SendSMS

func (m *Modem) SendSMS(number, text string) error

SendSMS отправляет SMS сообщение

func (*Modem) SendUSSD

func (m *Modem) SendUSSD(code string) (string, error)

SendUSSD отправляет USSD запрос

func (*Modem) SetAutomaticOperatorSelection

func (m *Modem) SetAutomaticOperatorSelection() error

SetAutomaticOperatorSelection устанавливает автоматический выбор оператора

func (*Modem) SetCallWaiting

func (m *Modem) SetCallWaiting(enable bool) error

SetCallWaiting устанавливает ожидание вызова

func (*Modem) SetModemMode

func (m *Modem) SetModemMode(mode ModemMode) error

SetModemMode устанавливает режим работы модема

func (*Modem) SetNewSMSIndication

func (m *Modem) SetNewSMSIndication(mode int, mt int, bm int, ds int, bfr int) error

SetNewSMSIndication устанавливает индикацию новых SMS

func (*Modem) SetSMSStorage

func (m *Modem) SetSMSStorage(readStorage, writeStorage, receiveStorage SMSStorage) error

SetSMSStorage устанавливает хранилище для SMS

func (*Modem) StartEventListener

func (m *Modem) StartEventListener() error

StartEventListener запускает прослушивание событий

func (*Modem) StopEventListener

func (m *Modem) StopEventListener() error

StopEventListener останавливает прослушивание событий

func (*Modem) TestConnection

func (m *Modem) TestConnection() error

TestConnection проверяет связь с модемом

func (*Modem) WaitForEvent

func (m *Modem) WaitForEvent(eventType EventType, timeout time.Duration) (*Event, error)

WaitForEvent ждет событие определенного типа с таймаутом

type ModemInfo

type ModemInfo struct {
	Port         string // Последовательный порт модема (/dev/ttyUSB0, COM3 и т.д.)
	Manufacturer string // Производитель модема (Huawei, ZTE и т.д.)
	Model        string // Модель модема (E3372, MF823 и т.д.)
	Revision     string // Версия прошивки модема
	IMEI         string // International Mobile Equipment Identity (15 цифр)
	Description  string // Составное описание: "Manufacturer Model"
}

ModemInfo содержит информацию о модеме

func GetAvailableModems

func GetAvailableModems() ([]ModemInfo, error)

GetAvailableModems возвращает список доступных модемов

type ModemMode

type ModemMode int

ModemMode представляет режим работы модема

const (
	ModemModeOffline      ModemMode = iota // 0 - минимальная функциональность (режим полета)
	ModemModeOnline                        // 1 - полная функциональность
	ModemModeLowPower                      // 2 - отключить передатчик RF
	ModemModeFactoryTest                   // 3 - заводской тестовый режим
	ModemModeReset                         // 4 - сброс модема
	ModemModeShuttingDown                  // 5 - выключение модема
)

type NetworkStatus

type NetworkStatus int

NetworkStatus представляет статус регистрации в сети

const (
	NetworkNotRegistered      NetworkStatus = iota // 0 - не зарегистрирован, поиск не выполняется
	NetworkRegisteredHome                          // 1 - зарегистрирован в домашней сети
	NetworkSearching                               // 2 - не зарегистрирован, выполняется поиск сети
	NetworkRegistrationDenied                      // 3 - регистрация отклонена
	NetworkUnknown                                 // 4 - неизвестный статус
	NetworkRegisteredRoaming                       // 5 - зарегистрирован в роуминге
)

type OperatorInfo

type OperatorInfo struct {
	Status    string // "0"=неизвестно, "1"=доступен, "2"=текущий, "3"=запрещен
	LongName  string // Полное название оператора (например: "MegaFon")
	ShortName string // Короткое название оператора
	Numeric   string // Числовой код оператора MCC+MNC (например: "25002" = Россия + МегаФон)
}

OperatorInfo содержит информацию об операторе

type PinStatus

type PinStatus string

PinStatus представляет статус PIN-кода

const (
	PinReady    PinStatus = "READY"    // SIM карта готова к работе
	PinRequired PinStatus = "SIM PIN"  // Требуется ввод PIN-кода
	PukRequired PinStatus = "SIM PUK"  // Требуется ввод PUK-кода (PIN заблокирован)
	PinBlocked  PinStatus = "SIM PIN2" // Требуется ввод PIN2-кода
	PukBlocked  PinStatus = "SIM PUK2" // Требуется ввод PUK2-кода
)

type SMS

type SMS struct {
	Index    int       // Индекс сообщения в памяти модема (1-255)
	Status   string    // Статус сообщения: "REC UNREAD", "REC READ", "STO SENT", "STO UNSENT"
	Sender   string    // Номер телефона отправителя в международном формате (+7...)
	Receiver string    // Номер телефона получателя (для отправленных сообщений)
	Time     time.Time // Время получения/отправки сообщения
	Text     string    // Текст сообщения (до 160 символов для латиницы, 70 для кириллицы)
}

SMS представляет текстовое сообщение

type SMSStorage

type SMSStorage string

SMSStorage представляет хранилище SMS

const (
	StorageSIM       SMSStorage = "SM" // SIM card - хранилище на SIM-карте
	StoragePhone     SMSStorage = "ME" // Phone memory - внутренняя память модема
	StorageAny       SMSStorage = "MT" // Any storage - любое доступное хранилище
	StorageBroadcast SMSStorage = "BM" // Broadcast message - широковещательные сообщения
	StorageStatus    SMSStorage = "SR" // Status report - отчеты о доставке
)

type SignalQuality

type SignalQuality struct {
	RSSI int // Received Signal Strength Indicator (0-31, 99=неизвестно). 0-9=слабый, 10-14=средний, 15-19=хороший, 20-31=отличный
	BER  int // Bit Error Rate (0-7, 99=неизвестно). 0=без ошибок, 7=максимум ошибок
}

SignalQuality представляет качество сигнала

Directories

Path Synopsis
example
func_test command
main command
sms_monitor command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL