View Source VintageNetMobile (vintage_net_mobile v0.11.5)
Use cellular modems with VintageNet
This module is not intended to be called directly but via calls to VintageNet
. Here's a
typical example:
VintageNet.configure(
"ppp0",
%{
type: VintageNetMobile,
vintage_net_mobile: %{
modem: VintageNetMobile.Modem.QuectelBG96,
service_providers: [%{apn: "super"}]
}
}
)
The :modem
key should be set to your modem implementation. Cellular modems
tend to be very similar. If vintage_net_mobile
doesn't support your modem, see
the customizing section. It may just be a copy/paste away. See your modem
module for modem-specific options. The following keys are supported by all modems:
:service_providers
- This is a list of service provider information:chatscript_additions
- This is a string (technically iodata) for custom modem initialization.
The :service_providers
key should be set to information provided by each of
your service providers. It is common that this is a list of one item.
Circumstances may require you to list more than one, though. Additionally, modem
implementations may require more or less information depending on their
implementation. (It's possible to hard-code the service provider in the modem
implementation. In that case, this key isn't used and should be set to an empty
list. This is useful when your cellular modem provides instructions that
magically work and the AT commands that they give are confusing.)
Information for each service provider is a map with some or all of the following fields:
:apn
(required) - e.g.,"access_point_name"
:usage
(optional) -:eps_bearer
(LTE) or:pdp
(UMTS/GPRS)
Your service provider should provide you with the information that you need to connect. Often it is just an APN. The Gnome project provides a database of service provider information that may also be useful.
Here's an example with a service provider list:
%{
type: VintageNetMobile,
modem: your_modem,
vintage_net_mobile: %{
service_providers: [
%{apn: "wireless.twilio.com"}
],
chatscript_additions: "OK AT"
}
}
Custom modems
VintageNetMobile
allows you add custom modem implementations if the built-in
ones don't work for you. See the VintageNetMobile.Modem
behaviour.
In order to implement a modem, you will need:
- Instructions for connecting to the modem via your Linux. Sometimes this
involves
usb_modeswitch
or knowing which serial ports the modem exposes. - Example chat scripts. These are lists of
AT
commands and their expected responses for configuring the service provider and enteringPPP
mode. - (Optional) Instructions for checking the signal strength when connected.
One strategy is to see if there's an existing modem that looks similar to yours and modify it.
Summary
Types
The :vintage_net_mobile
option in the configuration map
Radio Access Technology (RAT)
Information about a service provider
Types
@type mobile_options() :: %{ :service_providers => service_provider_info(), optional(:chatscript_additions) => iodata(), optional(any()) => any() }
The :vintage_net_mobile
option in the configuration map
Only the :service_providers
key must be specified. Modems may
add keys of their own.
@type rat() :: :gsm | :td_scdma | :wcdma | :lte | :cdma | :lte_cat_nb1 | :lte_cat_m1
Radio Access Technology (RAT)
These define how to connect to the cellular network.
@type service_provider_info() :: %{ :apn => String.t(), optional(:usage) => :eps_bearer | :pdp }
Information about a service provider
:apn
(required) - e.g.,"access_point_name"
:usage
(optional) -:eps_bearer
(LTE) or:pdp
(UMTS/GPRS)