Re: Custom device plugin



>>>> I'll assume these are the Yota LTE (LU150?) USB sticks based on the GCT
>>>> chipset, vid 1076
>>>
>>> That's right.
>>>
>>>
>>>> pid 8003.  If not please elighten me :)
>>>
>>> At least my modem has pid 8002.
>>>
>>>
>>>> I'm happy to take a patch for these devices, but first we'd want a bit
>>>> more information about it.  How do they communicate with the host?  Does
>>>> the host actually need to configure them at all, or is the configuration
>>>> all done through the device's web interface?
>>>
>>> They use RNDIS, so the host sees them as network interfaces (the
>>> driver is rndis_host).
>>>
>>> lsusb:
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>   bDeviceClass            2 Communications
>>>   idVendor           0x1076 GCT Semiconductor, Inc.
>>>   idProduct          0x8002
>>>   iManufacturer           1 GCT SEMICONDUCTOR Inc
>>>   iProduct                2 Modem Yota
>>>       bInterfaceClass       224 Wireless
>>>       bInterfaceSubClass      1 Radio Frequency
>>>       bInterfaceProtocol      3 RNDIS
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>
>>> dmesg:
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> [37908.902059] usb 2-1: new high-speed USB device number 5 using ehci_hcd
>>> [37909.016784] usb 2-1: New USB device found, idVendor=1076, idProduct=8001
>>> [37909.016790] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
>>> [37909.016795] usb 2-1: Product: Modem Yota
>>> [37909.016799] usb 2-1: Manufacturer: GCT SEMICONDUCTOR Inc
>>> [37909.017941] scsi7 : usb-storage 2-1:1.0
>>> [37910.020806] scsi 7:0:0:0: CD-ROM            GDM Mass
>>>        PQ: 0 ANSI: 0 CCS
>>> [37910.040402] sr1: scsi3-mmc drive: 0x/0x caddy
>>> [37910.040821] sr 7:0:0:0: Attached scsi CD-ROM sr1
>>> [37911.023887] usb 2-1: USB disconnect, device number 5
>>> [37911.780107] usb 2-1: new high-speed USB device number 6 using ehci_hcd
>>> [37911.894782] usb 2-1: New USB device found, idVendor=1076, idProduct=8002
>>> [37911.894788] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
>>> [37911.894792] usb 2-1: Product: Modem Yota
>>> [37911.894796] usb 2-1: Manufacturer: GCT SEMICONDUCTOR Inc
>>> [37911.895640] rndis_host 2-1:1.0: dev can't take 1558 byte packets
>>> (max 1458), adjusting MTU to 1400
>>> [37911.896799] rndis_host 2-1:1.0: eth1: register 'rndis_host' at
>>> usb-0000:00:1d.7-1, RNDIS device, 00:09:3b:f0:1a:40
>>> [37911.910891] systemd-udevd[14153]: renamed network interface eth1 to yota
>>> [37922.034017] yota: no IPv6 routers present
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>
>>> The device seems to contain a DHCP-server that always provides the
>>> same settings: 10.0.0.10/24 gw/dns 10.0.0.1.
>>> The server is rather buggy so I've sticked to static IP configuration in NM.
>>>
>>> You can't really configure it — it just works. Through the web
>>> interface you can check connection status,
>>> update firmware (they say, you won't need this, because it will be
>>> updated automatically), and
>>> switch the device on/off (the relevant code is commented out in HTML
>>> for some reason, though it does work).
>>>
>>> Web GUI gets status from http://10.0.0.1/status. I bet, their software
>>> for Windows and Mac
>>> gets data the same way.The data looks like this:
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> InterfaceType=lte
>>> 3GPP.IMSI=<not really interesting>
>>> 3GPP.UICC-ID=<not really interesting>
>>> 3GPP.IMEI=<not really interesting>
>>> 3GPP.IMEISV=<not really interesting>
>>> DeviceName=Modem Yota
>>> RfVersion=no information
>>> AsicVersion=GDM7240R1
>>> FirmwareVersion=3.7
>>> State=Connected
>>> UpdateState=NotStarted
>>> UpdateProgress=0
>>> ConnectedTime=894
>>> 3GPP.SINR=4
>>> 3GPP.RSSI=-86
>>> 3GPP.MCC=250
>>> 3GPP.MNC=11
>>> 3GPP.PLMN=25011
>>> 3GPP.RoamingStatus=0
>>> 3GPP.CGI=25011BF2A900
>>> 3GPP.CI=BF2A900
>>> 3GPP.eNBID=BF2A9
>>> 3GPP.HNBN=
>>> 3GPP.CSGT=
>>> 3GPP.CenterFreq=2642500
>>> 3GPP.TxPWR=23.0
>>> 3GPP.SPN=Yota
>>> SessionID=3420730
>>> 3GPP.IsIdle=0
>>> IP=10.138.173.239
>>> SubnetMask=255.255.255.0
>>> DefaultGateway=10.0.0.1
>>> DHCP=10.0.0.1
>>> DNS=10.0.0.1
>>> SentBytes=97808
>>> ReceivedBytes=253845
>>> MaxDownlinkThroughput=99232
>>> MaxUplinkThroughput=88064
>>> CurDownlinkThroughput=53480
>>> CurUplinkThroughput=13048
>>> TotalHandoversCount=0
>>> SucceededHandoversCount=0
>>> NewFirmwareVersion=
>>> 3GPP.RSRP=-116
>>> 3GPP.RSRQ=-11.0
>>> MSISDN=
>>> SupportsConnectDisabling=0
>>> CQI=8
>>> DownlinkMCSMain=3,9,6
>>> DownlinkMCSDiv=3,6,4
>>> UplinkMCS=3,4,2
>>> NBRi=earfcn,ci,rsrp
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>
>>
>> ModemManager as in git master is really port-type agnostic; which means
>> that a plugin may use whatever method it needs to run specific steps in
>> each of the state machines available.
>>
>> For this specific usecase, I don't think it would be too hard to develop
>> a plugin using libsoup to run the periodic HTTP-GET requests to the
>> built-in webserver in order to get these values.
>>
>> Additional changes in the core may still be needed, though, as currently
>> we always require to have a 'primary' port available, either AT or QMI.
>> In this case we could extend the list with an 'HTTP-based' primary port :-)
> 
> Haha, that seems like a hack :)
> 

But a pretty pretty one!

> But yeah, I think given the details available via the HTTP interface,
> this is better as ModemManager plugin.  It would implement the 3GPP
> interface (due to the LTE support, obviously) but wouldn't support much
> other than reporting registration state, signal, access technology, and
> service-provider name.  Obviously wouldn't be able to do stuff like set
> a technology preference (which isn't surprising, as Yota doesn't have a
> 2G/3G network) or read any of the SIM details or whatever, but those
> methods should just return a "not implemented" error.
> 

Exactly, yes, that's the idea.

-- 
Aleksander


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]