Re: Custom device plugin



On Fri, 2012-09-14 at 09:07 +0200, Aleksander Morgado wrote:
> >> 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 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.

Dan



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