Cinterion radio bands

Aleksander Morgado aleksander at aleksander.es
Fri May 15 11:48:48 UTC 2020


Hey!

> I am trying to update the code for the Radio/Bands of Cinterion
> modules, and it seems a nasty job, because of the way the indicators
> evolved.
> Today in the code there is a parser for this format (only for the test part):
> AT^SCFG=?
>         ...
>         ^SCFG: "Radio/Band",("1-479","0-1")
>         ...
>
> where all the bands for 2G+3G fit in an unsigned integer on 32 bits,
> ie, the value 511 above.
> The format is decimal, but the interpretation is a bitmap.
> This is done well in the current code and works well.
> One possible flaw is that the detection of the charset is not perfect,
> but the above output is invariant also when UCS2 is used.
>
> When we go to LTE, however, the 32 bits are not enough to host all
> bands, and so it was decided to split the command by technologies.
> In these implementations there are some divergences.
> For instance, the PLS62 reports:
> under GSM charset:
> AT^SCFG=?
>      ...
>      ^SCFG: "Radio/Band/2G",("0x00000004"-"0x00000074")
>      ^SCFG: "Radio/Band/3G",("0x00000001"-"0x0004019B")
>      ^SCFG: "Radio/Band/4G",("0x00000001"-"0x080E08DF")
>      ...
> and under UCS2 charset:
>    AT^SCFG=?
>      ...
>      ^SCFG: "Radio/Band/2G",("0030007800300030003000300030003000300034"-"0030007800300030003000300030003000370034")
>      ^SCFG: "Radio/Band/3G",("0030007800300030003000300030003000300031"-"0030007800300030003000340030003100390042")
>      ^SCFG: "Radio/Band/4G",("0030007800300030003000300030003000300031"-"0030007800300038003000450030003800440046")
>      ...
>
> While the PLPS9 reports (invariant under charset change):
>      ...
>      ^SCFG: "Radio/Band/2G",("00000001-0000000f"),,("0","1")
>      ^SCFG: "Radio/Band/3G",("00000001-000400b5"),,("0","1")
>      ^SCFG: "Radio/Band/4G",("00000001-8a0e00d5"),("00000002-000001e2"),("0","1")
>
>                note also the second range for the LTE bands >32
>      ...
>
> My idea is to parse first the old format, then the newer one. I have a
> regular expression that works well for all 3 formats for the
> Radio/Band/xG syntax.
> Q1: Do you think this strategy is ok?
>

It probably is, yes. The fact that the modem manufacturers don't
usually keep the same AT command reference for all their devices is
extremely annoying as you just found out...

> To determine the charset, I use some heuristics on string length and
> prefix (0x aka 00300078). Note also that a model returns lowercase
> hexa while another uppercase...

Isn't mm_broadband_modem_get_current_charset () not returning the
correct thing? I would definitely avoid doing heuristics to detect
charset if possible.

> The charset transformation with mm_charset_take_and_convert_to_utf8()
> seems to work well only with MM_MODEM_CHARSET_UCS2, which is ok
> because it is the only conversion needed.
> Q2: Is there a better way?
>

If the modem is configured for UCS2,
mm_broadband_modem_get_current_charset() should return
MM_MODEM_CHARSET_UCS2. Would not that be enough? Is that not the case?

> And finally, the main question: please notice above that the PLS62
> range (and modules in this family) for GSM is different than from any
> other module:
>     0x00000004, MM_MODEM_BAND_EGSM
>     0x00000010, MM_MODEM_BAND_DCS
>     0x00000020, MM_MODEM_BAND_PCS
>     0x00000040, MM_MODEM_BAND_G850
>
> I am thinking about passing the USB pid to the fuction, since I can't
> find an internal way to discriminate here (for the
> mm_cinterion_parse_scfg_test() could be possible, but not for the
> mm_cinterion_parse_scfg_response(): in case the current GSM band is
> '4', would be 900MHz for the PLS62, and 850 for all others).
> Is there another way?

You could use the already available
mm_kernel_device_get_physdev_pid(), but for this specific case I would
probably use a different way to handle it. Instead of hardcoding the
PID check in the code, you could use a udev tag to tag the PLS62 and
then use that in the code. See the usage of ID_MM_TELIT_BND_ALTERNATE
in the code for a very similar case in telit modems.

>
> Thank you for your comments.
>

Thank you for your help!

-- 
Aleksander
https://aleksander.es


More information about the ModemManager-devel mailing list