AT Command Set for a GSM/Cellular Modem (Hayes + 3GPP TS 27.007 subset) V.250 / TS 27.007

Plain text command/response lines. No length field, no CRC, and no escaping -- a delimiter-framed protocol with only an end marker, CRLF, for almost every message. One command (SendSmsBody) is the exception: its body is terminated by Ctrl-Z instead, via endDelimiterOverride -- see its own description.

Servers

Operations

  • PUB omniuart/cmd/AttentionCheck

    Send command AttentionCheck (ID: AT)

    The base 'is anybody there' command every AT command set supports.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    AttentionCheck Command
    object

    The base 'is anybody there' command every AT command set supports.

    Examples

  • PUB omniuart/cmd/SetEchoOff

    Send command SetEchoOff (ID: ATE0)

    ATE0 -- stop the modem echoing back everything it receives. Most scripted/automated use wants this; interactive terminal use usually wants echo on (ATE1) so what you type is visible.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetEchoOff Command
    object

    ATE0 -- stop the modem echoing back everything it receives. Most scripted/automated use wants this; interactive terminal use usually wants echo on (ATE1) so what you type is visible.

    Examples

  • PUB omniuart/cmd/SetEchoOn

    Send command SetEchoOn (ID: ATE1)

    ATE1 -- the modem's power-on default on most hardware.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetEchoOn Command
    object

    ATE1 -- the modem's power-on default on most hardware.

    Examples

  • PUB omniuart/cmd/Reset

    Send command Reset (ID: ATZ)

    ATZ -- reset to the profile stored in non-volatile memory (not necessarily factory defaults -- see FactoryDefaults for that).

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    Reset Command
    object

    ATZ -- reset to the profile stored in non-volatile memory (not necessarily factory defaults -- see FactoryDefaults for that).

    Examples

  • PUB omniuart/cmd/FactoryDefaults

    Send command FactoryDefaults (ID: AT&F)

    AT&F -- restore factory default configuration.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    FactoryDefaults Command
    object

    AT&F -- restore factory default configuration.

    Examples

  • PUB omniuart/cmd/Identify

    Send command Identify (ID: ATI)

    ATI -- a free-form multi-line identification string, format entirely vendor-specific.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    Identify Command
    object

    ATI -- a free-form multi-line identification string, format entirely vendor-specific.

    Examples

  • PUB omniuart/cmd/GetManufacturer

    Send command GetManufacturer (ID: AT+CGMI)

    AT+CGMI.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetManufacturer Command
    object

    AT+CGMI.

    Examples

  • PUB omniuart/cmd/GetModel

    Send command GetModel (ID: AT+CGMM)

    AT+CGMM.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetModel Command
    object

    AT+CGMM.

    Examples

  • PUB omniuart/cmd/GetSerialNumber

    Send command GetSerialNumber (ID: AT+CGSN)

    AT+CGSN -- returns the modem's IMEI.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetSerialNumber Command
    object

    AT+CGSN -- returns the modem's IMEI.

    Examples

  • PUB omniuart/cmd/GetPinStatus

    Send command GetPinStatus (ID: AT+CPIN?)

    AT+CPIN? -- whether the SIM needs a PIN/PUK entered before it can be used.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetPinStatus Command
    object

    AT+CPIN? -- whether the SIM needs a PIN/PUK entered before it can be used.

    Examples

  • PUB omniuart/cmd/GetNetworkRegistration

    Send command GetNetworkRegistration (ID: AT+CREG?)

    AT+CREG? -- whether, and how, the modem is registered on the network.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetNetworkRegistration Command
    object

    AT+CREG? -- whether, and how, the modem is registered on the network.

    Examples

  • PUB omniuart/cmd/SignalQuery

    Send command SignalQuery (ID: AT+CSQ)

    AT+CSQ

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SignalQuery Command
    object

    AT+CSQ

    Examples

  • PUB omniuart/cmd/GetExtendedSignalQuality

    Send command GetExtendedSignalQuality (ID: AT+CESQ)

    AT+CESQ -- supersedes CSQ with metrics meaningful for UMTS/LTE (RSCP, EcNo, RSRQ, RSRP), not just GSM RSSI/BER.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetExtendedSignalQuality Command
    object

    AT+CESQ -- supersedes CSQ with metrics meaningful for UMTS/LTE (RSCP, EcNo, RSRQ, RSRP), not just GSM RSSI/BER.

    Examples

  • PUB omniuart/cmd/GetOperator

    Send command GetOperator (ID: AT+COPS?)

    AT+COPS? -- the currently selected network operator and how it was selected.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetOperator Command
    object

    AT+COPS? -- the currently selected network operator and how it was selected.

    Examples

  • PUB omniuart/cmd/SetOperatorAutomatic

    Send command SetOperatorAutomatic (ID: AT+COPS=0)

    AT+COPS=0 -- automatic network/operator selection. Each COPS mode is its own command here, the same way SetEchoOff/SetEchoOn are separate rather than one parameterized command: the trailing parameters COPS actually accepts genuinely differ by mode (0 and 2 take none at all; 1 and 4 require an operator; 3 takes only a format), and this schema has no way to make a message's own required fields conditional on another field's value within the same message.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetOperatorAutomatic Command
    object

    AT+COPS=0 -- automatic network/operator selection. Each COPS mode is its own command here, the same way SetEchoOff/SetEchoOn are separate rather than one parameterized command: the trailing parameters COPS actually accepts genuinely differ by mode (0 and 2 take none at all; 1 and 4 require an operator; 3 takes only a format), and this schema has no way to make a message's own required fields conditional on another field's value within the same message.

    Examples

  • PUB omniuart/cmd/SetOperatorManual

    Send command SetOperatorManual (ID: AT+COPS=1,)

    AT+COPS=1,, -- manually select a specific operator. The real command also accepts an optional trailing (radio access technology); left out of this modeled version for simplicity rather than made a genuinely optional positional field, which this delimiter-based field model handles awkwardly.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetOperatorManual Command
    object

    AT+COPS=1,, -- manually select a specific operator. The real command also accepts an optional trailing (radio access technology); left out of this modeled version for simplicity rather than made a genuinely optional positional field, which this delimiter-based field model handles awkwardly.

    Examples

  • PUB omniuart/cmd/SetOperatorDeregister

    Send command SetOperatorDeregister (ID: AT+COPS=2)

    AT+COPS=2 -- deregister from the network and remain deregistered until told otherwise.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetOperatorDeregister Command
    object

    AT+COPS=2 -- deregister from the network and remain deregistered until told otherwise.

    Examples

  • PUB omniuart/cmd/SetOperatorFormatOnly

    Send command SetOperatorFormatOnly (ID: AT+COPS=3,)

    AT+COPS=3, -- sets how OperatorResult's oper field will be formatted on future queries, without changing registration at all.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetOperatorFormatOnly Command
    object

    AT+COPS=3, -- sets how OperatorResult's oper field will be formatted on future queries, without changing registration at all.

    Examples

  • PUB omniuart/cmd/SetOperatorManualAutomatic

    Send command SetOperatorManualAutomatic (ID: AT+COPS=4,)

    AT+COPS=4,, -- try the given operator manually; fall back to automatic selection if that specific one can't be reached. Same AcT simplification as SetOperatorManual.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetOperatorManualAutomatic Command
    object

    AT+COPS=4,, -- try the given operator manually; fall back to automatic selection if that specific one can't be reached. Same AcT simplification as SetOperatorManual.

    Examples

  • PUB omniuart/cmd/EnterPin

    Send command EnterPin (ID: AT+CPIN=)

    AT+CPIN= -- from the Quectel BC660K-GL manual (AT+CPIN, section 8.6): entering a plain SIM PIN. See EnterPukWithNewPin for the other shape this same command takes.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    EnterPin Command
    object

    AT+CPIN= -- from the Quectel BC660K-GL manual (AT+CPIN, section 8.6): entering a plain SIM PIN. See EnterPukWithNewPin for the other shape this same command takes.

    Examples

  • PUB omniuart/cmd/EnterPukWithNewPin

    Send command EnterPukWithNewPin (ID: AT+CPIN=)

    AT+CPIN=, -- when the SIM demands PUK (not plain PIN), a second argument -- the new PIN to set -- is required. Genuinely COPS-like: same command name, argument COUNT (not a leading mode digit this time) selects which shape applies, and this schema has no way to make newpin conditionally required on pin actually being a PUK rather than a PIN -- an engine, or a human, has to know which case applies from GetPinStatus's own +CPIN: SIM PUK result first.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    EnterPukWithNewPin Command
    object

    AT+CPIN=, -- when the SIM demands PUK (not plain PIN), a second argument -- the new PIN to set -- is required. Genuinely COPS-like: same command name, argument COUNT (not a leading mode digit this time) selects which shape applies, and this schema has no way to make newpin conditionally required on pin actually being a PUK rather than a PIN -- an engine, or a human, has to know which case applies from GetPinStatus's own +CPIN: SIM PUK result first.

    Examples

  • PUB omniuart/cmd/UnlockFacility

    Send command UnlockFacility (ID: AT+CLCK=)

    AT+CLCK=,0[,] -- from the manual's AT+CLCK (section 8.5). fac is quoted, e.g. "SC" for the SIM facility.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    UnlockFacility Command
    object

    AT+CLCK=,0[,] -- from the manual's AT+CLCK (section 8.5). fac is quoted, e.g. "SC" for the SIM facility.

    Examples

  • PUB omniuart/cmd/LockFacility

    Send command LockFacility (ID: AT+CLCK=)

    AT+CLCK=,1[,].

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    LockFacility Command
    object

    AT+CLCK=,1[,].

    Examples

  • PUB omniuart/cmd/QueryFacilityLock

    Send command QueryFacilityLock (ID: AT+CLCK=)

    AT+CLCK=,2 -- the third CLCK shape: mode=2 needs no password, and gets a genuinely different response format (FacilityLockResult lines, not a bare OK) from mode=0/1 -- but that's not actually ambiguous for this schema's dispatch algorithm, since FacilityLockResult has its own +CLCK: prefix distinguishing it from Ok. Worth including precisely because it's a case where a mode-dependent response DOESN'T need special handling, unlike G460's write-variant ambiguity.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    QueryFacilityLock Command
    object

    AT+CLCK=,2 -- the third CLCK shape: mode=2 needs no password, and gets a genuinely different response format (FacilityLockResult lines, not a bare OK) from mode=0/1 -- but that's not actually ambiguous for this schema's dispatch algorithm, since FacilityLockResult has its own +CLCK: prefix distinguishing it from Ok. Worth including precisely because it's a case where a mode-dependent response DOESN'T need special handling, unlike G460's write-variant ambiguity.

    Examples

  • PUB omniuart/cmd/SetPsmDisabled

    Send command SetPsmDisabled (ID: AT+CPSMS=2)

    AT+CPSMS=2 -- from the manual's AT+CPSMS (section 9.4): mode=2 is a 'special form' that takes no further parameters at all and resets everything to defaults, unlike mode=0/1 below.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetPsmDisabled Command
    object

    AT+CPSMS=2 -- from the manual's AT+CPSMS (section 9.4): mode=2 is a 'special form' that takes no further parameters at all and resets everything to defaults, unlike mode=0/1 below.

    Examples

  • PUB omniuart/cmd/SetPsmParameters

    Send command SetPsmParameters (ID: AT+CPSMS=)

    AT+CPSMS=,,,, -- mode 0 (disable) or 1 (enable) plus the requested timer values. Two literal empty positions (the manual's own ',,,' -- unused parameters this module doesn't support) sit between mode and TAU; modeled as a literal separator field rather than tidied away, since that's genuinely how the command is written on the wire. mode is restricted to {0,1} via a named enum type specifically so this can't overlap with SetPsmDisabled's mode=2 -- with a plain unrestricted uint here, an engine could wrongly treat 'AT+CPSMS=2' as this command's prefix plus mode=2 rather than SetPsmDisabled's own single constValue, a genuine ambiguity risk this fixes rather than leaves.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetPsmParameters Command
    object

    AT+CPSMS=,,,, -- mode 0 (disable) or 1 (enable) plus the requested timer values. Two literal empty positions (the manual's own ',,,' -- unused parameters this module doesn't support) sit between mode and TAU; modeled as a literal separator field rather than tidied away, since that's genuinely how the command is written on the wire. mode is restricted to {0,1} via a named enum type specifically so this can't overlap with SetPsmDisabled's mode=2 -- with a plain unrestricted uint here, an engine could wrongly treat 'AT+CPSMS=2' as this command's prefix plus mode=2 rather than SetPsmDisabled's own single constValue, a genuine ambiguity risk this fixes rather than leaves.

    Examples

  • PUB omniuart/cmd/QcfgGetDataInactTimer

    Send command QcfgGetDataInactTimer (ID: AT+QCFG=\"DataInactTimer\")

    AT+QCFG="DataInactTimer" -- Quectel's AT+QCFG (section 11.1) is itself a text-based sub-command dispatcher: its first argument, a quoted function name, selects an entirely different parameter set for everything after it -- the same COPS-like pattern, but keyed on a string rather than a mode digit. Modeled as separate commands per function, the same way COPS's modes are. Omitting the value here means query.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    QcfgGetDataInactTimer Command
    object

    AT+QCFG="DataInactTimer" -- Quectel's AT+QCFG (section 11.1) is itself a text-based sub-command dispatcher: its first argument, a quoted function name, selects an entirely different parameter set for everything after it -- the same COPS-like pattern, but keyed on a string rather than a mode digit. Modeled as separate commands per function, the same way COPS's modes are. Omitting the value here means query.

    Examples

  • PUB omniuart/cmd/QcfgSetDataInactTimer

    Send command QcfgSetDataInactTimer (ID: AT+QCFG=\"DataInactTimer\",)

    AT+QCFG="DataInactTimer", -- supplying the value switches this from a query to a set.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    QcfgSetDataInactTimer Command
    object

    AT+QCFG="DataInactTimer", -- supplying the value switches this from a query to a set.

    Examples

  • PUB omniuart/cmd/QcfgGpioInitialize

    Send command QcfgGpioInitialize (ID: AT+QCFG=\"GPIO\",1,)

    AT+QCFG="GPIO",1,,

    ,, -- a SECOND, nested level of the same COPS-like pattern: within the 'GPIO' function specifically, a further digit (1/2/3) selects yet another shape. mode=1 (initialize) requires every parameter; contrast QcfgGpioQuery and QcfgGpioConfigure below, which need fewer. This is genuinely a two-level dispatch (function name, then mode within it), and it validates fine with nothing beyond the ordinary field/constValue/role mechanism already used for COPS -- no new schema capability was needed for this, just more layers of the same one.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    QcfgGpioInitialize Command
    object

    AT+QCFG="GPIO",1,,

    ,, -- a SECOND, nested level of the same COPS-like pattern: within the 'GPIO' function specifically, a further digit (1/2/3) selects yet another shape. mode=1 (initialize) requires every parameter; contrast QcfgGpioQuery and QcfgGpioConfigure below, which need fewer. This is genuinely a two-level dispatch (function name, then mode within it), and it validates fine with nothing beyond the ordinary field/constValue/role mechanism already used for COPS -- no new schema capability was needed for this, just more layers of the same one.

    Examples

  • PUB omniuart/cmd/QcfgGpioQuery

    Send command QcfgGpioQuery (ID: AT+QCFG=\"GPIO\",2,)

    AT+QCFG="GPIO"[,2[,]] -- mode=2 (the default if omitted entirely) with pin optional: omit it for every GPIO's status, or give one for just that pin. Modeled here as the explicit mode=2,pin form; the bare AT+QCFG="GPIO" (mode and pin both omitted) is QcfgGetDataInactTimer's sibling case and isn't separately modeled to keep this set from growing unboundedly -- the pattern is established by the two variants that are here.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    QcfgGpioQuery Command
    object

    AT+QCFG="GPIO"[,2[,]] -- mode=2 (the default if omitted entirely) with pin optional: omit it for every GPIO's status, or give one for just that pin. Modeled here as the explicit mode=2,pin form; the bare AT+QCFG="GPIO" (mode and pin both omitted) is QcfgGetDataInactTimer's sibling case and isn't separately modeled to keep this set from growing unboundedly -- the pattern is established by the two variants that are here.

    Examples

  • PUB omniuart/cmd/QcfgGpioConfigure

    Send command QcfgGpioConfigure (ID: AT+QCFG=\"GPIO\",3,)

    AT+QCFG="GPIO",3,, -- mode=3: set one GPIO's output level. Per the manual, 'only and must set value of a specified GPIO' -- pin and level only, no dir/pullsel, a third distinct trailing shape for the same function name.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    QcfgGpioConfigure Command
    object

    AT+QCFG="GPIO",3,, -- mode=3: set one GPIO's output level. Per the manual, 'only and must set value of a specified GPIO' -- pin and level only, no dir/pullsel, a third distinct trailing shape for the same function name.

    Examples

  • PUB omniuart/cmd/GetIccidQuectel

    Send command GetIccidQuectel (ID: AT+QCCID)

    AT+QCCID -- correction: an earlier version of this file modeled a generic, vendor-unspecified 'AT+CCID' for this. The Quectel BC660K-GL manual's actual command (section 8.11) is AT+QCCID, an execution command with no arguments at all; response is +QCCID:, not +CCID:. Kept alongside the generic GetIccid/IccidResult below rather than replacing them, since other vendors do genuinely use the generic form -- but where you have the real target module's manual, as here, prefer the sourced command over the generic guess.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetIccidQuectel Command
    object

    AT+QCCID -- correction: an earlier version of this file modeled a generic, vendor-unspecified 'AT+CCID' for this. The Quectel BC660K-GL manual's actual command (section 8.11) is AT+QCCID, an execution command with no arguments at all; response is +QCCID:, not +CCID:. Kept alongside the generic GetIccid/IccidResult below rather than replacing them, since other vendors do genuinely use the generic form -- but where you have the real target module's manual, as here, prefer the sourced command over the generic guess.

    Examples

  • PUB omniuart/cmd/GetFirmwareRevision

    Send command GetFirmwareRevision (ID: AT+CGMR)

    AT+CGMR -- from the BC660K-GL manual (section 2.4). Worth flagging: its response line is literally 'Revision: ', not a '+CGMR: prefix the way almost every other query response here works -- a genuine, sourced exception to the pattern, not a modeling choice.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetFirmwareRevision Command
    object

    AT+CGMR -- from the BC660K-GL manual (section 2.4). Worth flagging: its response line is literally 'Revision: ', not a '+CGMR: prefix the way almost every other query response here works -- a genuine, sourced exception to the pattern, not a modeling choice.

    Examples

  • PUB omniuart/cmd/GetBaudRate

    Send command GetBaudRate (ID: AT+IPR?)

    AT+IPR? (section 3.2).

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetBaudRate Command
    object

    AT+IPR? (section 3.2).

    Examples

  • PUB omniuart/cmd/SetBaudRate

    Send command SetBaudRate (ID: AT+IPR=)

    AT+IPR= -- one of the module's own real supported rates (2400-460800). Wired up to this whole interface's own baudRateNegotiation (see the top-level property): the module acks at the OLD rate, then the host must reconfigure its own UART to match.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetBaudRate Command
    object

    AT+IPR= -- one of the module's own real supported rates (2400-460800). Wired up to this whole interface's own baudRateNegotiation (see the top-level property): the module acks at the OLD rate, then the host must reconfigure its own UART to match.

    Examples

  • PUB omniuart/cmd/SetVerboseErrors

    Send command SetVerboseErrors (ID: AT+CMEE=2)

    AT+CMEE=2 (section 10.2) -- without this, most of the CmeError responses modeled throughout this whole file wouldn't actually be returned at all; the module would send plain ERROR instead. Worth sending early in any real integration's init sequence, right after SetEchoOff.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetVerboseErrors Command
    object

    AT+CMEE=2 (section 10.2) -- without this, most of the CmeError responses modeled throughout this whole file wouldn't actually be returned at all; the module would send plain ERROR instead. Worth sending early in any real integration's init sequence, right after SetEchoOff.

    Examples

  • PUB omniuart/cmd/SetPdpContextActivation

    Send command SetPdpContextActivation (ID: AT+CGACT=)

    AT+CGACT=, (section 5.1) -- brings the data connection actually up (or down). DefinePdpContext only defines the context's parameters; nothing flows until this activates it.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetPdpContextActivation Command
    object

    AT+CGACT=, (section 5.1) -- brings the data connection actually up (or down). DefinePdpContext only defines the context's parameters; nothing flows until this activates it.

    Examples

  • PUB omniuart/cmd/GetPdpAddress

    Send command GetPdpAddress (ID: AT+CGPADDR)

    AT+CGPADDR (section 4.4, bare execution form) -- the IP address actually assigned to the device once its PDP context is active.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetPdpAddress Command
    object

    AT+CGPADDR (section 4.4, bare execution form) -- the IP address actually assigned to the device once its PDP context is active.

    Examples

  • PUB omniuart/cmd/SendControlPlaneData

    Send command SendControlPlaneData (ID: AT+CSODCP=)

    AT+CSODCP=,, (section 7.4) -- the actual point of this NB-IoT module for many real products: small non-IP data sent via the control plane (NIDD), avoiding the overhead of a full IP stack. This, not a PPP-style data-mode switch, is the primary data path this specific hardware is built for. Simplified from the manual's full AT+CSODCP=,,[,[,]] by omitting the two trailing optional parameters, the same simplification already used for SetOperatorManual.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SendControlPlaneData Command
    object

    AT+CSODCP=,, (section 7.4) -- the actual point of this NB-IoT module for many real products: small non-IP data sent via the control plane (NIDD), avoiding the overhead of a full IP stack. This, not a PPP-style data-mode switch, is the primary data path this specific hardware is built for. Simplified from the manual's full AT+CSODCP=,,[,[,]] by omitting the two trailing optional parameters, the same simplification already used for SetOperatorManual.

    Examples

  • PUB omniuart/cmd/SetControlPlaneDataReporting

    Send command SetControlPlaneDataReporting (ID: AT+CRTDCP=)

    AT+CRTDCP= (section 7.3) -- enables the +CRTDCP: URC (ControlPlaneDataReceived) for downlink data arriving the same way SendControlPlaneData sends it uplink.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetControlPlaneDataReporting Command
    object

    AT+CRTDCP= (section 7.3) -- enables the +CRTDCP: URC (ControlPlaneDataReceived) for downlink data arriving the same way SendControlPlaneData sends it uplink.

    Examples

  • PUB omniuart/cmd/GetBatteryVoltage

    Send command GetBatteryVoltage (ID: AT+CBC)

    AT+CBC (section 10.1) -- for a battery-powered deployment, worth polling before/after any high-current radio activity.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetBatteryVoltage Command
    object

    AT+CBC (section 10.1) -- for a battery-powered deployment, worth polling before/after any high-current radio activity.

    Examples

  • PUB omniuart/cmd/ResetModule

    Send command ResetModule (ID: AT+QRST=1)

    AT+QRST=1 (section 10.4) -- immediate reset, without a clean network detach first.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    ResetModule Command
    object

    AT+QRST=1 (section 10.4) -- immediate reset, without a clean network detach first.

    Examples

  • PUB omniuart/cmd/GetClock

    Send command GetClock (ID: AT+CCLK?)

    AT+CCLK? (section 12.1).

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetClock Command
    object

    AT+CCLK? (section 12.1).

    Examples

  • PUB omniuart/cmd/SetClock

    Send command SetClock (ID: AT+CCLK=)

    AT+CCLK=

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetClock Command
    object

    AT+CCLK=

    Examples

  • PUB omniuart/cmd/SetEdrxDisabled

    Send command SetEdrxDisabled (ID: AT+CEDRXS=3)

    AT+CEDRXS=3 (section 9.1) -- the exact same COPS/CPSMS-like pattern again: a bare mode value that takes no further parameters and resets everything, distinct from mode 0/1/2 below which all need AcT_type and a requested value.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetEdrxDisabled Command
    object

    AT+CEDRXS=3 (section 9.1) -- the exact same COPS/CPSMS-like pattern again: a bare mode value that takes no further parameters and resets everything, distinct from mode 0/1/2 below which all need AcT_type and a requested value.

    Examples

  • PUB omniuart/cmd/SetEdrxParameters

    Send command SetEdrxParameters (ID: AT+CEDRXS=)

    AT+CEDRXS=,, -- mode restricted to {0,1,2} via a named enum type for the same reason SetPsmParameters restricts its own mode: so this can't overlap with SetEdrxDisabled's mode=3.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetEdrxParameters Command
    object

    AT+CEDRXS=,, -- mode restricted to {0,1,2} via a named enum type for the same reason SetPsmParameters restricts its own mode: so this can't overlap with SetEdrxDisabled's mode=3.

    Examples

  • PUB omniuart/cmd/GetOperatorNames

    Send command GetOperatorNames (ID: AT+COPN)

    AT+COPN -- dumps the modem's whole built-in numeric-to-alphanumeric operator name table. The device sends one OperatorNameResult line per known operator, then OK -- a burst of many same-shaped response frames, not one. No special modeling needed for that: each line dispatches independently like any other response, there just happen to be a lot of them in a row.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetOperatorNames Command
    object

    AT+COPN -- dumps the modem's whole built-in numeric-to-alphanumeric operator name table. The device sends one OperatorNameResult line per known operator, then OK -- a burst of many same-shaped response frames, not one. No special modeling needed for that: each line dispatches independently like any other response, there just happen to be a lot of them in a row.

    Examples

  • PUB omniuart/cmd/GetPreferredListSelection

    Send command GetPreferredListSelection (ID: AT+CPLS?)

    AT+CPLS? -- which preferred-PLMN list is currently active: 0=SIM/USIM (user-controlled), 1=operator-controlled, 2=HPLMN selector.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetPreferredListSelection Command
    object

    AT+CPLS? -- which preferred-PLMN list is currently active: 0=SIM/USIM (user-controlled), 1=operator-controlled, 2=HPLMN selector.

    Examples

  • PUB omniuart/cmd/GetPreferredOperatorList

    Send command GetPreferredOperatorList (ID: AT+CPOL?)

    AT+CPOL? -- entries stored in the list GetPreferredListSelection points at. Like GetOperatorNames, typically returns several PreferredOperatorResult lines, one per stored entry, before OK.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetPreferredOperatorList Command
    object

    AT+CPOL? -- entries stored in the list GetPreferredListSelection points at. Like GetOperatorNames, typically returns several PreferredOperatorResult lines, one per stored entry, before OK.

    Examples

  • PUB omniuart/cmd/GetImsi

    Send command GetImsi (ID: AT+CIMI)

    AT+CIMI -- the SIM's IMSI. Response is the raw digit string with no +CIMI: prefix at all, unlike most other query responses here -- see ImsiResult.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetImsi Command
    object

    AT+CIMI -- the SIM's IMSI. Response is the raw digit string with no +CIMI: prefix at all, unlike most other query responses here -- see ImsiResult.

    Examples

  • PUB omniuart/cmd/GetIccid

    Send command GetIccid (ID: AT+CCID)

    Reads the SIM's ICCID. Genuinely non-standardized across vendors (AT+CCID, AT+ICCID, AT+QCCID and others all exist) -- AT+CCID modeled here as one common form, not a universal one.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetIccid Command
    object

    Reads the SIM's ICCID. Genuinely non-standardized across vendors (AT+CCID, AT+ICCID, AT+QCCID and others all exist) -- AT+CCID modeled here as one common form, not a universal one.

    Examples

  • PUB omniuart/cmd/GetSerialNumberLegacy

    Send command GetSerialNumberLegacy (ID: AT+GSN)

    AT+GSN -- the older Hayes-style serial number query. Response is the raw IMEI digit string with no prefix, unlike GetSerialNumber's AT+CGSN which modern modules also usually support; both often return the same value.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetSerialNumberLegacy Command
    object

    AT+GSN -- the older Hayes-style serial number query. Response is the raw IMEI digit string with no prefix, unlike GetSerialNumber's AT+CGSN which modern modules also usually support; both often return the same value.

    Examples

  • PUB omniuart/cmd/GetGprsRegistration

    Send command GetGprsRegistration (ID: AT+CGREG?)

    AT+CGREG? -- packet-switched (GPRS/UMTS) registration status, analogous to GetNetworkRegistration's AT+CREG? for circuit-switched.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetGprsRegistration Command
    object

    AT+CGREG? -- packet-switched (GPRS/UMTS) registration status, analogous to GetNetworkRegistration's AT+CREG? for circuit-switched.

    Examples

  • PUB omniuart/cmd/GetEpsRegistration

    Send command GetEpsRegistration (ID: AT+CEREG?)

    AT+CEREG? -- LTE/EPS registration status, the AT+CREG?/AT+CGREG? equivalent for 4G.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    GetEpsRegistration Command
    object

    AT+CEREG? -- LTE/EPS registration status, the AT+CREG?/AT+CGREG? equivalent for 4G.

    Examples

  • PUB omniuart/cmd/SetGprsAttach

    Send command SetGprsAttach (ID: AT+CGATT=1)

    AT+CGATT=1 -- attach to the GPRS/packet-data service, a precondition for DefinePdpContext.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SetGprsAttach Command
    object

    AT+CGATT=1 -- attach to the GPRS/packet-data service, a precondition for DefinePdpContext.

    Examples

  • PUB omniuart/cmd/DefinePdpContext

    Send command DefinePdpContext (ID: AT+CGDCONT=)

    AT+CGDCONT=,, -- the first genuinely parameterized command here, showing delimiter-separated arguments rather than a single constValue line.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    DefinePdpContext Command
    object

    AT+CGDCONT=,, -- the first genuinely parameterized command here, showing delimiter-separated arguments rather than a single constValue line.

    Examples

  • PUB omniuart/cmd/Dial

    Send command Dial (ID: ATD)

    ATD -- for a circuit-switched or legacy dial-up data call.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    Dial Command
    object

    ATD -- for a circuit-switched or legacy dial-up data call.

    Examples

  • PUB omniuart/cmd/HangUp

    Send command HangUp (ID: ATH)

    ATH.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    HangUp Command
    object

    ATH.

    Examples

  • PUB omniuart/cmd/EnterDataMode

    Send command EnterDataMode (ID: AT+CGDATA=\"PPP\",1)

    AT+CGDATA="PPP",1 -- switches this same link from AT command mode into raw PPP. See relatedInterfaces.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    EnterDataMode Command
    object

    AT+CGDATA="PPP",1 -- switches this same link from AT command mode into raw PPP. See relatedInterfaces.

    Examples

  • PUB omniuart/cmd/SmsTextMode

    Send command SmsTextMode (ID: AT+CMGF=1)

    AT+CMGF=1 -- text mode rather than PDU mode, a precondition for SendSmsHeader as modeled here.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SmsTextMode Command
    object

    AT+CMGF=1 -- text mode rather than PDU mode, a precondition for SendSmsHeader as modeled here.

    Examples

  • PUB omniuart/cmd/SendSmsHeader

    Send command SendSmsHeader (ID: AT+CMGS=\")

    AT+CMGS="" -- the modem replies with a bare '> ' prompt (not modeled as its own response here -- it's a 2-character prompt, not a CRLF-terminated line, and this schema's message model assumes the latter), then waits for SendSmsBody.

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SendSmsHeader Command
    object

    AT+CMGS="" -- the modem replies with a bare '> ' prompt (not modeled as its own response here -- it's a 2-character prompt, not a CRLF-terminated line, and this schema's message model assumes the latter), then waits for SendSmsBody.

    Examples

  • PUB omniuart/cmd/SendSmsBody

    Send command SendSmsBody (ID: 0x3D)

    The actual message text, sent only after SendSmsHeader's '> ' prompt. Terminated by Ctrl-Z (0x1A), NOT this interface's usual CRLF -- endDelimiterOverride exists specifically for this case. (Esc instead of Ctrl-Z cancels the send instead; not separately modeled here.)

    Operation IDpublish

    Available only on servers:

    Accepts the following message:

    SendSmsBody Command
    object

    The actual message text, sent only after SendSmsHeader's '> ' prompt. Terminated by Ctrl-Z (0x1A), NOT this interface's usual CRLF -- endDelimiterOverride exists specifically for this case. (Esc instead of Ctrl-Z cancels the send instead; not separately modeled here.)

    Examples

  • SUB omniuart/telemetry/Ok

    Unsolicited telemetry message Ok (ID: OK)

    The generic success response to almost any command.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    Ok Telemetry
    object

    The generic success response to almost any command.

    Examples

  • SUB omniuart/telemetry/Error

    Unsolicited telemetry message Error (ID: ERROR)

    Generic failure with no further detail -- contrast CmeError, which at least gives a code.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    Error Telemetry
    object

    Generic failure with no further detail -- contrast CmeError, which at least gives a code.

    Examples

  • SUB omniuart/telemetry/CmeError

    Unsolicited telemetry message CmeError (ID: +CME ERROR:)

    +CME ERROR: -- an extended error report, typically only enabled after AT+CMEE=1 (not separately modeled here).

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    CmeError Telemetry
    object

    +CME ERROR: -- an extended error report, typically only enabled after AT+CMEE=1 (not separately modeled here).

    Examples

  • SUB omniuart/telemetry/PinStatusResult

    Unsolicited telemetry message PinStatusResult (ID: +CPIN:)

    +CPIN: READY (no PIN needed) or +CPIN: SIM PIN (one is required), among other states.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    PinStatusResult Telemetry
    object

    +CPIN: READY (no PIN needed) or +CPIN: SIM PIN (one is required), among other states.

    Examples

  • SUB omniuart/telemetry/NetworkRegistrationResult

    Unsolicited telemetry message NetworkRegistrationResult (ID: +CREG:)

    +CREG: , -- n is the reporting mode previously set; stat is the registration state (1=registered home, 5=registered roaming, etc.).

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    NetworkRegistrationResult Telemetry
    object

    +CREG: , -- n is the reporting mode previously set; stat is the registration state (1=registered home, 5=registered roaming, etc.).

    Examples

  • SUB omniuart/telemetry/SignalQueryResult

    Unsolicited telemetry message SignalQueryResult (ID: +CSQ:)

    +CSQ: 15,99 followed by OK, each its own CRLF-terminated line.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    SignalQueryResult Telemetry
    object

    +CSQ: 15,99 followed by OK, each its own CRLF-terminated line.

    Examples

  • SUB omniuart/telemetry/ExtendedSignalQualityResult

    Unsolicited telemetry message ExtendedSignalQualityResult (ID: +CESQ:)

    +CESQ: ,,,,, -- 6 comma-separated values, most using 99/255-style sentinels for 'not known/not detectable on fields that don't apply to the current radio access technology.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    ExtendedSignalQualityResult Telemetry
    object

    +CESQ: ,,,,, -- 6 comma-separated values, most using 99/255-style sentinels for 'not known/not detectable on fields that don't apply to the current radio access technology.

    Examples

  • SUB omniuart/telemetry/OperatorResult

    Unsolicited telemetry message OperatorResult (ID: +COPS:)

    +COPS: [,,][,] -- per the manual (section 7.2): format/oper/AcT are genuinely OPTIONAL, omitted together when no operator is selected -- modeled below as always-present for simplicity, a real gap against the manual's own read-command response shape, not fixed here. AcT on THIS module is 9 (E-UTRAN NB-S1 mode) -- an earlier version of this file used 7 (generic LTE from the wider 3GPP TS 27.007 AcT table), which is wrong for this specific module; corrected.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    OperatorResult Telemetry
    object

    +COPS: [,,][,] -- per the manual (section 7.2): format/oper/AcT are genuinely OPTIONAL, omitted together when no operator is selected -- modeled below as always-present for simplicity, a real gap against the manual's own read-command response shape, not fixed here. AcT on THIS module is 9 (E-UTRAN NB-S1 mode) -- an earlier version of this file used 7 (generic LTE from the wider 3GPP TS 27.007 AcT table), which is wrong for this specific module; corrected.

    Examples

  • SUB omniuart/telemetry/TestOperators

    Unsolicited telemetry message TestOperators (ID: AT+COPS=?)

    AT+COPS=? -- the test command form, genuinely distinct from GetOperator (AT+COPS?): scans and lists every operator the module currently sees, not just the selected one. Response (OperatorScanResult) is a compound per-operator list, not the simple mode/format/oper/AcT shape.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    TestOperators Telemetry
    object

    AT+COPS=? -- the test command form, genuinely distinct from GetOperator (AT+COPS?): scans and lists every operator the module currently sees, not just the selected one. Response (OperatorScanResult) is a compound per-operator list, not the simple mode/format/oper/AcT shape.

    Examples

  • SUB omniuart/telemetry/OperatorScanResult

    Unsolicited telemetry message OperatorScanResult (ID: +COPS:)

    +COPS: (,,,,),(...),...,,(list of supported s),(list of supported s) -- TestOperators's response, and genuinely too structurally complex for this schema to decompose field-by-field: an arbitrary-count LIST of parenthesized 5-tuples (one per operator the module currently sees), followed by two more parenthesized compound lists for supported modes/formats. Nothing in this schema models 'a variable number of grouped, parenthesized sub-fields' -- there's no equivalent to variableLength for a repeating STRUCTURED group, only for a single flat run of bytes/text. Modeled as one opaque remainder string rather than force a wrong decomposition; a real implementation needs its own parser for this one response, not this schema's ordinary field model. stat: 0=unknown, 1=available, 2=currently selected, 3=forbidden.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    OperatorScanResult Telemetry
    object

    +COPS: (,,,,),(...),...,,(list of supported s),(list of supported s) -- TestOperators's response, and genuinely too structurally complex for this schema to decompose field-by-field: an arbitrary-count LIST of parenthesized 5-tuples (one per operator the module currently sees), followed by two more parenthesized compound lists for supported modes/formats. Nothing in this schema models 'a variable number of grouped, parenthesized sub-fields' -- there's no equivalent to variableLength for a repeating STRUCTURED group, only for a single flat run of bytes/text. Modeled as one opaque remainder string rather than force a wrong decomposition; a real implementation needs its own parser for this one response, not this schema's ordinary field model. stat: 0=unknown, 1=available, 2=currently selected, 3=forbidden.

    Examples

  • SUB omniuart/telemetry/OperatorNameResult

    Unsolicited telemetry message OperatorNameResult (ID: +COPN:)

    +COPN: , -- one line per operator in the modem's built-in table; GetOperatorNames's own description covers the multi-line pattern this and PreferredOperatorResult both share.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    OperatorNameResult Telemetry
    object

    +COPN: , -- one line per operator in the modem's built-in table; GetOperatorNames's own description covers the multi-line pattern this and PreferredOperatorResult both share.

    Examples

  • SUB omniuart/telemetry/PreferredListSelectionResult

    Unsolicited telemetry message PreferredListSelectionResult (ID: +CPLS:)

    +CPLS:

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    PreferredListSelectionResult Telemetry
    object

    +CPLS:

    Examples

  • SUB omniuart/telemetry/PreferredOperatorResult

    Unsolicited telemetry message PreferredOperatorResult (ID: +CPOL:)

    +CPOL: ,, -- one line per stored preferred-operator entry.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    PreferredOperatorResult Telemetry
    object

    +CPOL: ,, -- one line per stored preferred-operator entry.

    Examples

  • SUB omniuart/telemetry/ImsiResult

    Unsolicited telemetry message ImsiResult (ID: ImsiResult)

    Raw IMSI digit string, no +CIMI: prefix -- unlike almost every other query response here, so nothing to use as role=discriminator. Worth flagging: IMSI and IMEI (SerialNumberLegacyResult) are both commonly 15 prefix-less digits, so if their lengths coincide, this schema's dispatch algorithm genuinely cannot tell them apart by content alone -- real disambiguation relies entirely on which request (GetImsi vs GetSerialNumberLegacy) is outstanding, the same correlation problem noted for G460's AckResponse.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    ImsiResult Telemetry
    object

    Raw IMSI digit string, no +CIMI: prefix -- unlike almost every other query response here, so nothing to use as role=discriminator. Worth flagging: IMSI and IMEI (SerialNumberLegacyResult) are both commonly 15 prefix-less digits, so if their lengths coincide, this schema's dispatch algorithm genuinely cannot tell them apart by content alone -- real disambiguation relies entirely on which request (GetImsi vs GetSerialNumberLegacy) is outstanding, the same correlation problem noted for G460's AckResponse.

    Examples

  • SUB omniuart/telemetry/IccidResult

    Unsolicited telemetry message IccidResult (ID: +CCID:)

    +CCID: as modeled here (vendor-specific -- see GetIccid).

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    IccidResult Telemetry
    object

    +CCID: as modeled here (vendor-specific -- see GetIccid).

    Examples

  • SUB omniuart/telemetry/IccidQuectelResult

    Unsolicited telemetry message IccidQuectelResult (ID: +QCCID:)

    +QCCID: -- the Quectel BC660K-GL manual's actual response to AT+QCCID (GetIccidQuectel), with its own distinct prefix from the generic IccidResult above.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    IccidQuectelResult Telemetry
    object

    +QCCID: -- the Quectel BC660K-GL manual's actual response to AT+QCCID (GetIccidQuectel), with its own distinct prefix from the generic IccidResult above.

    Examples

  • SUB omniuart/telemetry/FacilityLockResult

    Unsolicited telemetry message FacilityLockResult (ID: +CLCK:)

    +CLCK: [,] -- QueryFacilityLock's response. class is optional and omitted here for simplicity; a real implementation may see it, or several repeated lines for different classes.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    FacilityLockResult Telemetry
    object

    +CLCK: [,] -- QueryFacilityLock's response. class is optional and omitted here for simplicity; a real implementation may see it, or several repeated lines for different classes.

    Examples

  • SUB omniuart/telemetry/DataInactTimerResult

    Unsolicited telemetry message DataInactTimerResult (ID: +QCFG:\"DataInactTimer\",)

    +QCFG: "DataInactTimer", -- QcfgGetDataInactTimer's response.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    DataInactTimerResult Telemetry
    object

    +QCFG: "DataInactTimer", -- QcfgGetDataInactTimer's response.

    Examples

  • SUB omniuart/telemetry/GpioStatusResult

    Unsolicited telemetry message GpioStatusResult (ID: +QCFG:\"GPIO\",)

    +QCFG: "GPIO",[,,,] -- QcfgGpioQuery's response: one level if a specific pin was queried, four (comma-joined) if all were. Modeled as a single variable-length string covering however many comma-separated levels are actually present, rather than as separate optional fields -- this schema has no clean way to say 'either 1 or 4 of this field, never 2 or 3.'

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    GpioStatusResult Telemetry
    object

    +QCFG: "GPIO",[,,,] -- QcfgGpioQuery's response: one level if a specific pin was queried, four (comma-joined) if all were. Modeled as a single variable-length string covering however many comma-separated levels are actually present, rather than as separate optional fields -- this schema has no clean way to say 'either 1 or 4 of this field, never 2 or 3.'

    Examples

  • SUB omniuart/telemetry/FirmwareRevisionResult

    Unsolicited telemetry message FirmwareRevisionResult (ID: Revision:)

    Revision: -- see GetFirmwareRevision for why this doesn't follow the usual '+CGMR:' shape.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    FirmwareRevisionResult Telemetry
    object

    Revision: -- see GetFirmwareRevision for why this doesn't follow the usual '+CGMR:' shape.

    Examples

  • SUB omniuart/telemetry/BaudRateResult

    Unsolicited telemetry message BaudRateResult (ID: +IPR:)

    +IPR: -- GetBaudRate's response.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    BaudRateResult Telemetry
    object

    +IPR: -- GetBaudRate's response.

    Examples

  • SUB omniuart/telemetry/PdpAddressResult

    Unsolicited telemetry message PdpAddressResult (ID: +CGPADDR:)

    +CGPADDR: ,

    -- GetPdpAddress's response.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    PdpAddressResult Telemetry
    object

    +CGPADDR: ,

    -- GetPdpAddress's response.

    Examples

  • SUB omniuart/telemetry/ControlPlaneDataReceived

    Unsolicited telemetry message ControlPlaneDataReceived (ID: +CRTDCP:)

    +CRTDCP: ,, -- an unsolicited result code (URC), not a reply to any specific command: arrives whenever the network sends downlink data via the control plane, once SetControlPlaneDataReporting has enabled it.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    ControlPlaneDataReceived Telemetry
    object

    +CRTDCP: ,, -- an unsolicited result code (URC), not a reply to any specific command: arrives whenever the network sends downlink data via the control plane, once SetControlPlaneDataReporting has enabled it.

    Examples

  • SUB omniuart/telemetry/NonIpDataReceived

    Unsolicited telemetry message NonIpDataReceived (ID: +RECVNONIP:)

    +RECVNONIP: ,, -- a second, distinct URC for incoming non-IP data, via the user plane rather than SendControlPlaneData/ControlPlaneDataReceived's control-plane path.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    NonIpDataReceived Telemetry
    object

    +RECVNONIP: ,, -- a second, distinct URC for incoming non-IP data, via the user plane rather than SendControlPlaneData/ControlPlaneDataReceived's control-plane path.

    Examples

  • SUB omniuart/telemetry/BatteryVoltageResult

    Unsolicited telemetry message BatteryVoltageResult (ID: +CBC:)

    +CBC: in mV -- GetBatteryVoltage's response.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    BatteryVoltageResult Telemetry
    object

    +CBC: in mV -- GetBatteryVoltage's response.

    Examples

  • SUB omniuart/telemetry/ClockResult

    Unsolicited telemetry message ClockResult (ID: +CCLK:)

    +CCLK:

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    ClockResult Telemetry
    object

    +CCLK:

    Examples

  • SUB omniuart/telemetry/SerialNumberLegacyResult

    Unsolicited telemetry message SerialNumberLegacyResult (ID: SerialNumberLegacyResult)

    Raw IMEI digit string, no prefix -- same shape as ImsiResult; see its description for the resulting dispatch ambiguity when lengths coincide.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    SerialNumberLegacyResult Telemetry
    object

    Raw IMEI digit string, no prefix -- same shape as ImsiResult; see its description for the resulting dispatch ambiguity when lengths coincide.

    Examples

  • SUB omniuart/telemetry/GprsRegistrationResult

    Unsolicited telemetry message GprsRegistrationResult (ID: +CGREG:)

    +CGREG: , -- same stat encoding as NetworkRegistrationResult, for packet-switched registration.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    GprsRegistrationResult Telemetry
    object

    +CGREG: , -- same stat encoding as NetworkRegistrationResult, for packet-switched registration.

    Examples

  • SUB omniuart/telemetry/EpsRegistrationResult

    Unsolicited telemetry message EpsRegistrationResult (ID: +CEREG:)

    +CEREG: , -- same shape again, for LTE/EPS registration.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    EpsRegistrationResult Telemetry
    object

    +CEREG: , -- same shape again, for LTE/EPS registration.

    Examples

  • SUB omniuart/telemetry/SmsSentResult

    Unsolicited telemetry message SmsSentResult (ID: +CMGS:)

    +CMGS: -- confirms SendSmsBody's message was actually sent, with a reference number for delivery-status tracking.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    SmsSentResult Telemetry
    object

    +CMGS: -- confirms SendSmsBody's message was actually sent, with a reference number for delivery-status tracking.

    Examples

  • SUB omniuart/telemetry/Connect

    Unsolicited telemetry message Connect (ID: CONNECT)

    Sent instead of OK for EnterDataMode: confirms the switch, after which every byte on the wire is PPP, not AT text, until the link drops back to command mode.

    Operation IDsubscribe

    Available only on servers:

    Accepts the following message:

    Connect Telemetry
    object

    Sent instead of OK for EnterDataMode: confirms the switch, after which every byte on the wire is PPP, not AT text, until the link drops back to command mode.

    Examples

Schemas

  • object

    The base 'is anybody there' command every AT command set supports.

  • object

    ATE0 -- stop the modem echoing back everything it receives. Most scripted/automated use wants this; interactive terminal use usually wants echo on (ATE1) so what you type is visible.

  • object

    ATE1 -- the modem's power-on default on most hardware.

  • object

    ATZ -- reset to the profile stored in non-volatile memory (not necessarily factory defaults -- see FactoryDefaults for that).

  • object

    AT&F -- restore factory default configuration.

  • object

    ATI -- a free-form multi-line identification string, format entirely vendor-specific.

  • object

    AT+CGMI.

  • object

    AT+CGMM.

  • object

    AT+CGSN -- returns the modem's IMEI.

  • object

    AT+CPIN? -- whether the SIM needs a PIN/PUK entered before it can be used.

  • object

    AT+CREG? -- whether, and how, the modem is registered on the network.

  • object

    AT+CSQ

  • object

    AT+CESQ -- supersedes CSQ with metrics meaningful for UMTS/LTE (RSCP, EcNo, RSRQ, RSRP), not just GSM RSSI/BER.

  • object

    AT+COPS? -- the currently selected network operator and how it was selected.

  • object

    AT+COPS=0 -- automatic network/operator selection. Each COPS mode is its own command here, the same way SetEchoOff/SetEchoOn are separate rather than one parameterized command: the trailing parameters COPS actually accepts genuinely differ by mode (0 and 2 take none at all; 1 and 4 require an operator; 3 takes only a format), and this schema has no way to make a message's own required fields conditional on another field's value within the same message.

  • object

    AT+COPS=1,, -- manually select a specific operator. The real command also accepts an optional trailing (radio access technology); left out of this modeled version for simplicity rather than made a genuinely optional positional field, which this delimiter-based field model handles awkwardly.

  • object

    AT+COPS=2 -- deregister from the network and remain deregistered until told otherwise.

  • object

    AT+COPS=3, -- sets how OperatorResult's oper field will be formatted on future queries, without changing registration at all.

  • object

    AT+COPS=4,, -- try the given operator manually; fall back to automatic selection if that specific one can't be reached. Same AcT simplification as SetOperatorManual.

  • object

    AT+CPIN= -- from the Quectel BC660K-GL manual (AT+CPIN, section 8.6): entering a plain SIM PIN. See EnterPukWithNewPin for the other shape this same command takes.

  • object

    AT+CPIN=, -- when the SIM demands PUK (not plain PIN), a second argument -- the new PIN to set -- is required. Genuinely COPS-like: same command name, argument COUNT (not a leading mode digit this time) selects which shape applies, and this schema has no way to make newpin conditionally required on pin actually being a PUK rather than a PIN -- an engine, or a human, has to know which case applies from GetPinStatus's own +CPIN: SIM PUK result first.

  • object

    AT+CLCK=,0[,] -- from the manual's AT+CLCK (section 8.5). fac is quoted, e.g. "SC" for the SIM facility.

  • object

    AT+CLCK=,1[,].

  • object

    AT+CLCK=,2 -- the third CLCK shape: mode=2 needs no password, and gets a genuinely different response format (FacilityLockResult lines, not a bare OK) from mode=0/1 -- but that's not actually ambiguous for this schema's dispatch algorithm, since FacilityLockResult has its own +CLCK: prefix distinguishing it from Ok. Worth including precisely because it's a case where a mode-dependent response DOESN'T need special handling, unlike G460's write-variant ambiguity.

  • object

    AT+CPSMS=2 -- from the manual's AT+CPSMS (section 9.4): mode=2 is a 'special form' that takes no further parameters at all and resets everything to defaults, unlike mode=0/1 below.

  • object

    AT+CPSMS=,,,, -- mode 0 (disable) or 1 (enable) plus the requested timer values. Two literal empty positions (the manual's own ',,,' -- unused parameters this module doesn't support) sit between mode and TAU; modeled as a literal separator field rather than tidied away, since that's genuinely how the command is written on the wire. mode is restricted to {0,1} via a named enum type specifically so this can't overlap with SetPsmDisabled's mode=2 -- with a plain unrestricted uint here, an engine could wrongly treat 'AT+CPSMS=2' as this command's prefix plus mode=2 rather than SetPsmDisabled's own single constValue, a genuine ambiguity risk this fixes rather than leaves.

  • object

    AT+QCFG="DataInactTimer" -- Quectel's AT+QCFG (section 11.1) is itself a text-based sub-command dispatcher: its first argument, a quoted function name, selects an entirely different parameter set for everything after it -- the same COPS-like pattern, but keyed on a string rather than a mode digit. Modeled as separate commands per function, the same way COPS's modes are. Omitting the value here means query.

  • object

    AT+QCFG="DataInactTimer", -- supplying the value switches this from a query to a set.

  • object

    AT+QCFG="GPIO",1,,

    ,, -- a SECOND, nested level of the same COPS-like pattern: within the 'GPIO' function specifically, a further digit (1/2/3) selects yet another shape. mode=1 (initialize) requires every parameter; contrast QcfgGpioQuery and QcfgGpioConfigure below, which need fewer. This is genuinely a two-level dispatch (function name, then mode within it), and it validates fine with nothing beyond the ordinary field/constValue/role mechanism already used for COPS -- no new schema capability was needed for this, just more layers of the same one.

  • object

    AT+QCFG="GPIO"[,2[,]] -- mode=2 (the default if omitted entirely) with pin optional: omit it for every GPIO's status, or give one for just that pin. Modeled here as the explicit mode=2,pin form; the bare AT+QCFG="GPIO" (mode and pin both omitted) is QcfgGetDataInactTimer's sibling case and isn't separately modeled to keep this set from growing unboundedly -- the pattern is established by the two variants that are here.

  • object

    AT+QCFG="GPIO",3,, -- mode=3: set one GPIO's output level. Per the manual, 'only and must set value of a specified GPIO' -- pin and level only, no dir/pullsel, a third distinct trailing shape for the same function name.

  • object

    AT+QCCID -- correction: an earlier version of this file modeled a generic, vendor-unspecified 'AT+CCID' for this. The Quectel BC660K-GL manual's actual command (section 8.11) is AT+QCCID, an execution command with no arguments at all; response is +QCCID:, not +CCID:. Kept alongside the generic GetIccid/IccidResult below rather than replacing them, since other vendors do genuinely use the generic form -- but where you have the real target module's manual, as here, prefer the sourced command over the generic guess.

  • object

    AT+CGMR -- from the BC660K-GL manual (section 2.4). Worth flagging: its response line is literally 'Revision: ', not a '+CGMR: prefix the way almost every other query response here works -- a genuine, sourced exception to the pattern, not a modeling choice.

  • object

    AT+IPR? (section 3.2).

  • object

    AT+IPR= -- one of the module's own real supported rates (2400-460800). Wired up to this whole interface's own baudRateNegotiation (see the top-level property): the module acks at the OLD rate, then the host must reconfigure its own UART to match.

  • object

    AT+CMEE=2 (section 10.2) -- without this, most of the CmeError responses modeled throughout this whole file wouldn't actually be returned at all; the module would send plain ERROR instead. Worth sending early in any real integration's init sequence, right after SetEchoOff.

  • object

    AT+CGACT=, (section 5.1) -- brings the data connection actually up (or down). DefinePdpContext only defines the context's parameters; nothing flows until this activates it.

  • object

    AT+CGPADDR (section 4.4, bare execution form) -- the IP address actually assigned to the device once its PDP context is active.

  • object

    AT+CSODCP=,, (section 7.4) -- the actual point of this NB-IoT module for many real products: small non-IP data sent via the control plane (NIDD), avoiding the overhead of a full IP stack. This, not a PPP-style data-mode switch, is the primary data path this specific hardware is built for. Simplified from the manual's full AT+CSODCP=,,[,[,]] by omitting the two trailing optional parameters, the same simplification already used for SetOperatorManual.

  • object

    AT+CRTDCP= (section 7.3) -- enables the +CRTDCP: URC (ControlPlaneDataReceived) for downlink data arriving the same way SendControlPlaneData sends it uplink.

  • object

    AT+CBC (section 10.1) -- for a battery-powered deployment, worth polling before/after any high-current radio activity.

  • object

    AT+QRST=1 (section 10.4) -- immediate reset, without a clean network detach first.

  • object

    AT+CCLK? (section 12.1).

  • object

    AT+CCLK=

  • object

    AT+CEDRXS=3 (section 9.1) -- the exact same COPS/CPSMS-like pattern again: a bare mode value that takes no further parameters and resets everything, distinct from mode 0/1/2 below which all need AcT_type and a requested value.

  • object

    AT+CEDRXS=,, -- mode restricted to {0,1,2} via a named enum type for the same reason SetPsmParameters restricts its own mode: so this can't overlap with SetEdrxDisabled's mode=3.

  • object

    AT+COPN -- dumps the modem's whole built-in numeric-to-alphanumeric operator name table. The device sends one OperatorNameResult line per known operator, then OK -- a burst of many same-shaped response frames, not one. No special modeling needed for that: each line dispatches independently like any other response, there just happen to be a lot of them in a row.

  • object

    AT+CPLS? -- which preferred-PLMN list is currently active: 0=SIM/USIM (user-controlled), 1=operator-controlled, 2=HPLMN selector.

  • object

    AT+CPOL? -- entries stored in the list GetPreferredListSelection points at. Like GetOperatorNames, typically returns several PreferredOperatorResult lines, one per stored entry, before OK.

  • object

    AT+CIMI -- the SIM's IMSI. Response is the raw digit string with no +CIMI: prefix at all, unlike most other query responses here -- see ImsiResult.

  • object

    Reads the SIM's ICCID. Genuinely non-standardized across vendors (AT+CCID, AT+ICCID, AT+QCCID and others all exist) -- AT+CCID modeled here as one common form, not a universal one.

  • object

    AT+GSN -- the older Hayes-style serial number query. Response is the raw IMEI digit string with no prefix, unlike GetSerialNumber's AT+CGSN which modern modules also usually support; both often return the same value.

  • object

    AT+CGREG? -- packet-switched (GPRS/UMTS) registration status, analogous to GetNetworkRegistration's AT+CREG? for circuit-switched.

  • object

    AT+CEREG? -- LTE/EPS registration status, the AT+CREG?/AT+CGREG? equivalent for 4G.

  • object

    AT+CGATT=1 -- attach to the GPRS/packet-data service, a precondition for DefinePdpContext.

  • object

    AT+CGDCONT=,, -- the first genuinely parameterized command here, showing delimiter-separated arguments rather than a single constValue line.

  • object

    ATD -- for a circuit-switched or legacy dial-up data call.

  • object

    ATH.

  • object

    AT+CGDATA="PPP",1 -- switches this same link from AT command mode into raw PPP. See relatedInterfaces.

  • object

    AT+CMGF=1 -- text mode rather than PDU mode, a precondition for SendSmsHeader as modeled here.

  • object

    AT+CMGS="" -- the modem replies with a bare '> ' prompt (not modeled as its own response here -- it's a 2-character prompt, not a CRLF-terminated line, and this schema's message model assumes the latter), then waits for SendSmsBody.

  • object

    The actual message text, sent only after SendSmsHeader's '> ' prompt. Terminated by Ctrl-Z (0x1A), NOT this interface's usual CRLF -- endDelimiterOverride exists specifically for this case. (Esc instead of Ctrl-Z cancels the send instead; not separately modeled here.)

  • object

    The generic success response to almost any command.

  • object

    Generic failure with no further detail -- contrast CmeError, which at least gives a code.

  • object

    +CME ERROR: -- an extended error report, typically only enabled after AT+CMEE=1 (not separately modeled here).

  • object

    +CPIN: READY (no PIN needed) or +CPIN: SIM PIN (one is required), among other states.

  • object

    +CREG: , -- n is the reporting mode previously set; stat is the registration state (1=registered home, 5=registered roaming, etc.).

  • object

    +CSQ: 15,99 followed by OK, each its own CRLF-terminated line.

  • object

    +CESQ: ,,,,, -- 6 comma-separated values, most using 99/255-style sentinels for 'not known/not detectable on fields that don't apply to the current radio access technology.

  • object

    +COPS: [,,][,] -- per the manual (section 7.2): format/oper/AcT are genuinely OPTIONAL, omitted together when no operator is selected -- modeled below as always-present for simplicity, a real gap against the manual's own read-command response shape, not fixed here. AcT on THIS module is 9 (E-UTRAN NB-S1 mode) -- an earlier version of this file used 7 (generic LTE from the wider 3GPP TS 27.007 AcT table), which is wrong for this specific module; corrected.

  • object

    AT+COPS=? -- the test command form, genuinely distinct from GetOperator (AT+COPS?): scans and lists every operator the module currently sees, not just the selected one. Response (OperatorScanResult) is a compound per-operator list, not the simple mode/format/oper/AcT shape.

  • object

    +COPS: (,,,,),(...),...,,(list of supported s),(list of supported s) -- TestOperators's response, and genuinely too structurally complex for this schema to decompose field-by-field: an arbitrary-count LIST of parenthesized 5-tuples (one per operator the module currently sees), followed by two more parenthesized compound lists for supported modes/formats. Nothing in this schema models 'a variable number of grouped, parenthesized sub-fields' -- there's no equivalent to variableLength for a repeating STRUCTURED group, only for a single flat run of bytes/text. Modeled as one opaque remainder string rather than force a wrong decomposition; a real implementation needs its own parser for this one response, not this schema's ordinary field model. stat: 0=unknown, 1=available, 2=currently selected, 3=forbidden.

  • object

    +COPN: , -- one line per operator in the modem's built-in table; GetOperatorNames's own description covers the multi-line pattern this and PreferredOperatorResult both share.

  • object

    +CPLS:

  • object

    +CPOL: ,, -- one line per stored preferred-operator entry.

  • object

    Raw IMSI digit string, no +CIMI: prefix -- unlike almost every other query response here, so nothing to use as role=discriminator. Worth flagging: IMSI and IMEI (SerialNumberLegacyResult) are both commonly 15 prefix-less digits, so if their lengths coincide, this schema's dispatch algorithm genuinely cannot tell them apart by content alone -- real disambiguation relies entirely on which request (GetImsi vs GetSerialNumberLegacy) is outstanding, the same correlation problem noted for G460's AckResponse.

  • object

    +CCID: as modeled here (vendor-specific -- see GetIccid).

  • object

    +QCCID: -- the Quectel BC660K-GL manual's actual response to AT+QCCID (GetIccidQuectel), with its own distinct prefix from the generic IccidResult above.

  • object

    +CLCK: [,] -- QueryFacilityLock's response. class is optional and omitted here for simplicity; a real implementation may see it, or several repeated lines for different classes.

  • object

    +QCFG: "DataInactTimer", -- QcfgGetDataInactTimer's response.

  • object

    +QCFG: "GPIO",[,,,] -- QcfgGpioQuery's response: one level if a specific pin was queried, four (comma-joined) if all were. Modeled as a single variable-length string covering however many comma-separated levels are actually present, rather than as separate optional fields -- this schema has no clean way to say 'either 1 or 4 of this field, never 2 or 3.'

  • object

    Revision: -- see GetFirmwareRevision for why this doesn't follow the usual '+CGMR:' shape.

  • object

    +IPR: -- GetBaudRate's response.

  • object

    +CGPADDR: ,

    -- GetPdpAddress's response.

  • object

    +CRTDCP: ,, -- an unsolicited result code (URC), not a reply to any specific command: arrives whenever the network sends downlink data via the control plane, once SetControlPlaneDataReporting has enabled it.

  • object

    +RECVNONIP: ,, -- a second, distinct URC for incoming non-IP data, via the user plane rather than SendControlPlaneData/ControlPlaneDataReceived's control-plane path.

  • object

    +CBC: in mV -- GetBatteryVoltage's response.

  • object

    +CCLK:

  • object

    Raw IMEI digit string, no prefix -- same shape as ImsiResult; see its description for the resulting dispatch ambiguity when lengths coincide.

  • object

    +CGREG: , -- same stat encoding as NetworkRegistrationResult, for packet-switched registration.

  • object

    +CEREG: , -- same shape again, for LTE/EPS registration.

  • object

    +CMGS: -- confirms SendSmsBody's message was actually sent, with a reference number for delivery-status tracking.

  • object

    Sent instead of OK for EnterDataMode: confirms the switch, after which every byte on the wire is PPP, not AT text, until the link drops back to command mode.