Looking for a 4G / USB / LTE dongle that supports voice (circuit-switched voice) or VoLTE / PCM audio / audio over USB + ideas and suggestions

Hello.

I'm looking for a product like this (or similar) :

https://www.exvist.com/products/4g-lte-usb-dongle-ec25-lcc-sim-gps-usb-ph2/4736458000002065355

I would like to know if you bought that or something like that. I'm looking for a dongle like that,that supports voice (circuit-switched voice) or VoLTE / PCM audio / audio over USB (I'm not sure if the dongle of the link does it). The module/firmware model I need should be usable in EU or even better,globally.

I plan to use it with FreeBSD because I'm building a phablet based on that OS. But also Linux is ok. What I want to do is to find a relatively easy "path" to add the opportunity for the phablet to place and receive phone calls by using,for example,some kind of basic script. For example like the one below :

Code:
#!/usr/bin/env python3
import serial
import time

# Adjust to your modem’s AT command port
MODEM_TTY = "/dev/ttyUSB2"
BAUD = 115200

def send_at(command, wait=1):
    ser.write((command + "\r").encode())
    time.sleep(wait)
    resp = ser.readlines()
    return [line.decode(errors="ignore").strip() for line in resp]

def dial(number):
    print(f"📞 Dialing {number}...")
    print("\n".join(send_at(f"ATD{number};")))

def answer():
    print("✅ Answering call...")
    print("\n".join(send_at("ATA")))

def hangup():
    print("📴 Hanging up...")
    print("\n".join(send_at("ATH")))

def check():
    print("🔍 Checking modem...")
    print("\n".join(send_at("AT")))

def monitor():
    print("📡 Monitoring incoming calls (Ctrl+C to stop)...")
    try:
        while True:
            line = ser.readline().decode(errors="ignore").strip()
            if line:
                print(f"<< {line}")
    except KeyboardInterrupt:
        print("\n🛑 Monitor stopped.")

if __name__ == "__main__":
    try:
        ser = serial.Serial(MODEM_TTY, BAUD, timeout=1)
    except Exception as e:
        print(f"❌ Could not open {MODEM_TTY}: {e}")
        exit(1)

    while True:
        print("\n=== Edge-V Phone Menu ===")
        print("1. Check modem")
        print("2. Dial number")
        print("3. Answer call")
        print("4. Hang up")
        print("5. Monitor incoming calls")
        print("6. Exit")
        choice = input("Select option: ")

        if choice == "1":
            check()
        elif choice == "2":
            number = input("Enter phone number: ")
            dial(number)
        elif choice == "3":
            answer()
        elif choice == "4":
            hangup()
        elif choice == "5":
            monitor()
        elif choice == "6":
            break
        else:
            print("❓ Invalid choice")

I've asked to ChatGPT :

Quectel EC25-E is a 4G LTE USB Dongle with EC25-E LCC module and only supports AT commands Voice. But for PCM audio, it doesn’t support it. So,can it be used to place and receive phone calls ?

and it replied like this :

However, PCM/I²S digital audio interfaces are not available on the EC25-E. That means you cannot directly attach a microphone/speaker at the hardware level.

So,I want to ask : Can someone suggest a model of 4G/LTE/USB Dongle that supports the "PCM/I²S digital audio interfaces" ?

Thanks.
 
You might be putting the cart before the horse.
Have you checked that any carriers in your area allow VoLTE?

Look at Sierras IOT offering. It should offer what you need. But any modem that offers VoLTE should as well.

I dunno about Q-EC25. Does it say VoLTE supported?
 
Very thanks.

This seems to be the best option for me :

Istantanea_2025-09-29_20-32-24.jpg



Anyway,as u can see on the table below,there aren't drivers for FreeBSD. Is there some chances that I can place and receive phone calls attaching the dongle via USB to the radxa zero 3W or to the Khadas Edge-V if there aren't drivers for FreeBSD ? Without drivers,the code that I have shared on the post 1 will work ? What kind of limitations will I encounter ?


Istantanea_2025-09-29_20-31-25.jpg
 
Hello again.

I went rummaging through the electronic gadgets I purchased several years ago and found this USB dongle :


Dongle-SIM-70.jpg



For sure I want to try to configure it in FreeBSD for placing and receiving phone calls. I will read docs,but at the moment I need some of your help to understand why it disconnects in loop when I attach it on the USB port of my PC running with FreeBSD 14.3...


FreeBSD-SimCom-1.png



Instead,it is well recognized by Linux :


Linux-SimCom-1.png



where it doesn't disconnect...


Linux-SimCom-2.png


Thanks.
 
Code:
marietto# usbconfig -d ugen1.19 dump_device_desc
ugen1.19: <product 0x9011 Qualcomm / Option> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0200
  bDeviceClass = 0x00ef  <Miscellaneous device>
  bDeviceSubClass = 0x0002
  bDeviceProtocol = 0x0001
  bMaxPacketSize0 = 0x0040
  idVendor = 0x1e0e
  idProduct = 0x9011
  bcdDevice = 0x0100
  iManufacturer = 0x0001  <retrieving string failed>
  iProduct = 0x0002  <retrieving string failed>
  iSerialNumber = 0x0003  <retrieving string failed>
  bNumConfigurations = 0x000

VID/PID ====> 0x1e0e:0x9011

inside /usr/src-143/sys/dev/usb/usbdevs , removed any Alink reference and added,instead :

Code:
vendor SIMCOM        0x1e0e  SIMCom

/* SIMCOM products */
product SIMCOM DWM652U5        0xce16    DWM-652
product SIMCOM 3G        0x9000    3G modem
product SIMCOM SIM7600E        0x9001    LTE modem
product SIMCOM SIM7600G        0x9011    LTE modem
product SIMCOM 3GU        0x9200    3G modem
product SIMCOM 9011          0x9011  SIMCom USB modem 9011
product SIMCOM 9001        0x9001  SIMCom USB modem 9001

inside /usr/src-143/sys/dev/usb/serial/u3g.c , removed any Alink reference and added,instead :

Code:
#define    U3G_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
        U3G_DEV(SIMCOM, 9011, 0),   /* SIMCom modem 9011 */
        U3G_DEV(SIMCOM, 9001, 0),   /* SIMCom modem 9001 */
    U3G_DEV(SIMCOM, 3G, 0),
    U3G_DEV(SIMCOM, 3GU, 0),
    U3G_DEV(SIMCOM, DWM652U5, 0),
    U3G_DEV(SIMCOM, SIM7600E, 0),
    U3G_DEV(SIMCOM, SIM7600G, 0),

Recompiled u3g module :

Code:
marietto# cd /usr/src-143/sys/modules/u3g
make
make install
OK

Reloaded module :

Code:
marietto# kldunload u3g
marietto# kldload u3g

Checking if a serial / usb port is detected :

Code:
marietto# dmesg | tail -50
marietto# ls /dev/cuaU*
Nothing

Anyway,the disconnections in loop still happen.

Trying to switch from "multi-state" or "flip-flop" USB devices to WWAN (cellular) and WLAN (wireless) modems :

Code:
#!/bin/sh
/usr/local/sbin/usb_modeswitch -v 0x1e0e -p 0x9011 -c /usr/local/share/usb_modeswitch/1e0e:9011

Error: Could not find file /usr/local/share/usb_modeswitch/1e0e:9011. Abort

Code:
marietto# find /usr/local/share/usb_modeswitch -name "1e*"
/usr/local/share/usb_modeswitch/1e0e:f000

marietto# /usr/local/sbin/usb_modeswitch -v 0x1e0e -p 0x9011 -c /usr/local/share/usb_modeswitch/1e0e:f000

Look for target devices ...
 No devices in target mode or class found
Look for default devices ...
 No devices in default mode found. Nothing to do. Bye!

marietto# /usr/local/sbin/usb_modeswitch -v 0x1e0e -p 0x9011 -c /usr/local/share/usb_modeswitch/1e0e:f000

Look for target devices ...
 No devices in target mode or class found
Look for default devices ...
 Found devices in default mode (1)
Access device 019 on bus 001
Get the current device configuration ...
Current configuration number is 1
Use interface number 0
 with class 2
Error: can't use storage command in MessageContent with interface 0; interface class is 2, expected 8. Abort

marietto# find /usr/local/share/usb_modeswitch -name "*9011"
/usr/local/share/usb_modeswitch/1199:9011

marietto# /usr/local/sbin/usb_modeswitch -v 0x1199 -p 0x9011 -c /usr/local/share/usb_modeswitch/1199:9011

Look for default devices ...
 No devices in default mode found. Nothing to do. Bye!

Sources :

 
Last edited:
Code:
marietto# usbdump -d ugen1.19 -vvv > log.txt

https://pastebin.ubuntu.com/p/2wDYFdMRBr/

marietto# usbconfig -d ugen1.19 dump_curr_config_desc

ugen1.19: <Arom Usb Boot Port ASR Microelectronics> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (0mA)

 Configuration index 0

    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x0043
    bNumInterfaces = 0x0002
    bConfigurationValue = 0x0001
    iConfiguration = 0x0004  <CDC ACM Gadget Config>
    bmAttributes = 0x00c0
    bMaxPower = 0x0000

    Interface 0
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0000
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0002  <Communication device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0005  <CDC ACM Control Interface>

      Additional Descriptor

      bLength = 0x05
      bDescriptorType = 0x24
      bDescriptorSubType = 0x00
       RAW dump:
       0x00 | 0x05, 0x24, 0x00, 0x00, 0x02


      Additional Descriptor

      bLength = 0x05
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x05, 0x24, 0x01, 0x00, 0x00


      Additional Descriptor

      bLength = 0x04
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x04, 0x24, 0x02, 0x00


      Additional Descriptor

      bLength = 0x05
      bDescriptorType = 0x24
      bDescriptorSubType = 0x06
       RAW dump:
       0x00 | 0x05, 0x24, 0x06, 0x00, 0x01


     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0083  <IN>
        bmAttributes = 0x0003  <INTERRUPT>
        wMaxPacketSize = 0x000a
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0002
      bInterfaceClass = 0x000a  <CDC-data>
      bInterfaceSubClass = 0x0000
      bInterfaceProtocol = 0x0000
      iInterface = 0x0006  <CDC ACM Data Interface>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0002  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0200
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

     Endpoint 1
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0200
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

Code:
marietto# cd /usr/src-143
marietto# patch -p1 < USB_RNDIS.patch

marietto# cd /usr/src-143/sys/modules/usb/urndis
marietto# make

[Creating objdir /usr/obj/usr/src-143/amd64.amd64/sys/modules/usb/urndis...]
machine -> /usr/src-143/sys/amd64/include
x86 -> /usr/src-143/sys/x86/include
i386 -> /usr/src-143/sys/i386/include
:> opt_bus.h
:> opt_usb.h
awk -f /usr/src-143/sys/tools/makeobjops.awk /usr/src-143/sys/kern/device_if.m -h
awk -f /usr/src-143/sys/tools/makeobjops.awk /usr/src-143/sys/kern/bus_if.m -h
awk -f /usr/src-143/sys/tools/makeobjops.awk /usr/src-143/sys/dev/usb/usb_if.m -h
awk -f /usr/src-143/sys/tools/usbdevs2h.awk /usr/src-143/sys/dev/usb/usbdevs -h
awk -f /usr/src-143/sys/tools/makeobjops.awk /usr/src-143/sys/dev/mii/miibus_if.m -h
:> opt_platform.h
touch opt_global.h
cc  -O2 -pipe -fno-common  -fno-strict-aliasing -Werror -D_KERNEL -DKLD_MODULE -nostdinc   -include /usr/obj/usr/src-143/amd64.amd64/sys/modules/usb/urndis/opt_global.h -I. -I/usr/src-143/sys -I/usr/src-143/sys/contrib/ck/include -fno-common  -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fdebug-prefix-map=./machine=/usr/src-143/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src-143/sys/x86/include -fdebug-prefix-map=./i386=/usr/src-143/sys/i386/include     -MD  -MF.depend.if_urndis.o -MTif_urndis.o -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float  -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error=tautological-compare -Wno-error=empty-body -Wno-error=parentheses-equality -Wno-error=unused-function -Wno-error=pointer-sign -Wno-error=shift-negative-value -Wno-address-of-packed-member -Wno-format-zero-length   -mno-aes -mno-avx  -std=gnu99 -c /usr/src-143/sys/dev/usb/net/if_urndis.c -o if_urndis.o
ld -m elf_x86_64_fbsd -d -warn-common --build-id=sha1 -T /usr/src-143/sys/conf/ldscript.kmod.amd64 -r  -o if_urndis.ko if_urndis.o
:> export_syms
awk -f /usr/src-143/sys/conf/kmod_syms.awk if_urndis.ko  export_syms | xargs -J% objcopy % if_urndis.ko
objcopy --strip-debug if_urndis.ko

marietto# make install
install -T release -o root -g wheel -m 444   if_urndis.ko /boot/modules/
kldxref /boot/modules

Jesper Schmitz Mouridsen
freebsd_committer
freebsd_triage
2019-12-29 19:48:22 UTC
(In reply to Bipin Chandra from comment #10)
It works on 12.1-RELEASE by kldunload if_cdce.ko, after the Zero has booted.

Not in my case :

Code:
marietto# kldunload if_cdce.ko
OK

but it still disconnects in loop :

Code:
ugen1.19: <ASR Microelectronics Arom Usb Boot Port> at usbus1
umodem0 on uhub0
umodem0: <ASR Microelectronics Arom Usb Boot Port, class 2/2, rev 2.00/0.00, addr 57> on usbus1
umodem0: data interface 0, has no CM over data, has no break
umodem0: Can't setup transfer
device_attach: umodem0 attach returned 6
ugen1.19: <ASR Microelectronics Arom Usb Boot Port> at usbus1 (disconnected)
ugen1.19: <vendor 0x1e0e product 0x9011> at usbus1
cdce0 on uhub0
cdce0: <vendor 0x1e0e product 0x9011, class 239/2, rev 2.00/1.00, addr 58> on usbus1
cdce0: No valid alternate setting found
device_attach: cdce0 attach returned 6
u3g0 on uhub0
u3g0: <vendor 0x1e0e product 0x9011, class 239/2, rev 2.00/1.00, addr 58> on usbus1
u3g0: Found 3 ports.
ugen1.19: <vendor 0x1e0e product 0x9011> at usbus1 (disconnected)
u3g0: at uhub0, port 6, addr 58 (disconnected)
u3g0: detached

Everytime it disconnects,I can kldunload the module. Even this operation should be done in loop :

Code:
marietto# kldunload if_cdce.ko
marietto# kldunload if_cdce.ko
marietto# kldunload if_cdce.ko
marietto# kldunload if_cdce.ko
marietto# kldunload if_cdce.ko

Sometimes it finds the module already unloaded :D

Code:
kldunload: can't find file if_cdce.ko

but again :

Code:
marietto# kldunload if_cdce.ko
marietto# kldunload if_cdce.ko
marietto# kldunload if_cdce.ko

Code:
kldunload: can't find file if_cdce.ko
 
This is the solution I found that COULD work (not sure) :

Code:
marietto# mv /boot/kernel/if_cdce.ko /boot/kernel/_if_cdce.ko

attached the dongle :

marietto# dmesg :

ugen1.19: <ASR Microelectronics Arom Usb Boot Port> at usbus1
umodem0 on uhub1
umodem0: <ASR Microelectronics Arom Usb Boot Port, class 2/2, rev 2.00/0.00, addr 21> on usbus1
umodem0: data interface 0, has no CM over data, has no break
umodem0: Can't setup transfer
device_attach: umodem0 attach returned 6
ugen1.19: <ASR Microelectronics Arom Usb Boot Port> at usbus1 (disconnected)
ugen1.19: <vendor 0x1e0e product 0x9011> at usbus1
u3g0 on uhub1
u3g0: <vendor 0x1e0e product 0x9011, class 239/2, rev 2.00/1.00, addr 22> on usbus1
u3g0: Found 3 ports.
ugen1.19: <vendor 0x1e0e product 0x9011> at usbus1 (disconnected)
u3g0: at uhub1, port 6, addr 22 (disconnected)
u3g0: detached
ugen1.19: <SIMCom Wireless Solution A76XX Series LTE Module> at usbus1
u3g0 on uhub1
u3g0: <SIMCom Wireless Solution A76XX Series LTE Module, class 239/2, rev 2.00/1.00, addr 23> on usbus1
u3g0: Found 3 ports.

marietto# usbconfig -d ugen1.19 dump_device_desc
ugen1.19: <A76XX Series LTE Module Qualcomm / Option> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0200
  bDeviceClass = 0x00ef  <Miscellaneous device>
  bDeviceSubClass = 0x0002
  bDeviceProtocol = 0x0001
  bMaxPacketSize0 = 0x0040
  idVendor = 0x1e0e
  idProduct = 0x9011
  bcdDevice = 0x0100
  iManufacturer = 0x0001  <SIMCom Wireless Solution>
  iProduct = 0x0002  <A76XX Series LTE Module>
  iSerialNumber = 0x0003  <200806006809080000>
  bNumConfigurations = 0x0001

anyway,no more disconnections and it started and locked 3 serial ports :

Code:
marietto# ls /dev/tty*

/dev/ttyU0.0
/dev/ttyU0.0.init
/dev/ttyU0.0.lock
/dev/ttyU0.1
/dev/ttyU0.1.init
/dev/ttyU0.1.lock
/dev/ttyU0.2
/dev/ttyU0.2.init
/dev/ttyU0.2.lock
 
Code:
#!/usr/bin/env python3
import serial
import time

# Adjust to your modem’s AT command port
MODEM_TTY = "/dev/ttyUSB2"
BAUD = 115200

def send_at(command, wait=1):
    ser.write((command + "\r").encode())
    time.sleep(wait)
    resp = ser.readlines()
    return [line.decode(errors="ignore").strip() for line in resp]

def dial(number):
    print(f"📞 Dialing {number}...")
    print("\n".join(send_at(f"ATD{number};")))

def answer():
    print("✅ Answering call...")
    print("\n".join(send_at("ATA")))

def hangup():
    print("📴 Hanging up...")
    print("\n".join(send_at("ATH")))

def check():
    print("🔍 Checking modem...")
    print("\n".join(send_at("AT")))

def monitor():
    print("📡 Monitoring incoming calls (Ctrl+C to stop)...")
    try:
        while True:
            line = ser.readline().decode(errors="ignore").strip()
            if line:
                print(f"<< {line}")
    except KeyboardInterrupt:
        print("\n🛑 Monitor stopped.")

if __name__ == "__main__":
    try:
        ser = serial.Serial(MODEM_TTY, BAUD, timeout=1)
    except Exception as e:
        print(f"❌ Could not open {MODEM_TTY}: {e}")
        exit(1)

    while True:
        print("\n=== Edge-V Phone Menu ===")
        print("1. Check modem")
        print("2. Dial number")
        print("3. Answer call")
        print("4. Hang up")
        print("5. Monitor incoming calls")
        print("6. Exit")
        choice = input("Select option: ")

        if choice == "1":
            check()
        elif choice == "2":
            number = input("Enter phone number: ")
            dial(number)
        elif choice == "3":
            answer()
        elif choice == "4":
            hangup()
        elif choice == "5":
            monitor()
        elif choice == "6":
            break
        else:
            print("❓ Invalid choice")

=== Edge-V Phone Menu ===
1. Check modem
2. Dial number
3. Answer call
4. Hang up
5. Monitor incoming calls
6. Exit
Select option: 2

Enter phone number: 377xxxxxxx

📞 Dialing 377xxxxxxx

+CME ERROR: no network service
 
IIRC correctly, you first need to make sure your SIM card is connected to the network. There are AT commands for this, but I can't remember them now.
 
IIRC correctly, you first need to make sure your SIM card is connected to the network. There are AT commands for this, but I can't remember them now.

What do you mean that the SIM card is connected to the network ? I'm making some checks to understand why it does not connect. For example :

marietto# ./phone-calls

=== Edge-V Phone Menu ===
1. Check modem
2. Check SIM
3. Dial number
4. Answer call
5. Hang up
6. Monitor incoming calls
7. Exit
Select option: 2
🔍 Checking sim...

+CPIN: READY
OK

it means that the SIM card is working and it is recognized... (for sure I checked that there is money on the SIM and I can place and receive phone calls if I insert it inside my smartphone Samsung Note 3).
 
Here is where is the error :

Code:
AT+CBAND?
ERROR

AT+CMNB?
ERROR

while :

Code:
AT+CREG?
+CREG: 0,0

AT+CNMP?
+CNMP: 2
OK

AT+CSQ
+CSQ: 99,99
OK

0,0 → Not Registered.
2 = ?

marietto# cu -l /dev/cuaU0.0 -s 115200
Connected

marietto# cu -l /dev/cuaU0.1 -s 115200
Connected

PB DONE
PB DONEE

marietto# cu -l /dev/cuaU0.2 -s 115200
/dev/cuaU0.2: Device busy
link down

AT+CGREG? on /dev/cuaU0.0  = hangs ; AT+CGREG? on /dev/cuaU0.1 = 0,0 ; AT+CGREG? on /dev/cuaU0.2 = 0,0
 
This is not correct for FreeBSD.
You need to use /dev/cuaU0.2 on FreeBSD unless you have made a symlink..

Thanks bro.

I'm trying to understand which is the working port between /dev/cuaU0.0 ; /dev/cuaU0.1 ; /dev/cua0.2 because :

Code:
AT+CGREG? on /dev/cuaU0.0  = hangs
AT+CGREG? on /dev/cuaU0.1 = 0,0
AT+CGREG? on /dev/cuaU0.2 = 0,0

where 0,0 = not registered.

AT+CGMM = A7670E-LASE
AT+CGMR = A110B03A7670M7
AT+CSQ = 99,99
AT+CREG = 0,0

More info here :

 
Usually I start with the most basic command to test ports. ATV

The problem goes beyond the ports. Many times the modems will have firmware on them that may provide different capabilities..
Like GPS. I commonly find modems with GPS disabled on them. I don't know why but it is a special firmware for some client.

So depending on firmware used you will have different comm ports in use. Crux of the matter here is 'modeswitch' might not be needed.
You need the right firmware.

Oh yea and changing firmware might change PID's. You have to dig into the USB Compositions available once you get the right firmware.
Changing compositions might change PID's too.

For Sierra modems I first flash it to mode either CDMA or GSM depending on network. Then I look for carrier firmware. If none found use Generic Firmware.
Then use AT maintenance mode to chose a USB Composition that FreeBSD supports.

Then I do the probing of ports. Sierra modems use between four and six comm ports depending on firmware.
Sierra modems will have a comm port that responds to ATV but not offer full access to maintenance mode with password. Limited access port of some kind.

Firmwares are they first step in getting a modem working for me.
 
You know bug reports are not for support right?

Without knowing what you are doing you are acting like FreeBSD has a bug.

To not automatically load a module you remove it from kernconf // make custom kernel. Then you can manually load and unload modules.
This is a FreeBSD basic.

To put it in a bug report is not correct. In fact the whole bug report is a waste before you have tried all options. It is a last resort.
 
You know bug reports are not for support right ?

I think there is a bug. Because the module if_cdce.ko interferes with modules u3g.ko and umodem. ko. The solution I found to exclude it :

Code:
marietto# mv /boot/kernel/if_cdce.ko /boot/kernel/_if_cdce.ko

is clearly not common,not regular. Not optimal. And maybe it is producing problems right now. JSM pointed me in a similar situation,this one :


as u can see,has been opened a bug report and has been produced a patch for that problem. Well,I had a similar problem,so I have opened another bug report. I tried to apply that patch,it didn't work,so I have found another solution,after having tried unsuccesfully some others tricks.

---> To not automatically load a module you remove it from kernconf // make custom kernel.

Usually do you want to follow the longer and unnecessary time consuming road ? Yeah,me too. But not today. I think that the module if_cdce.ko should be excluded using a faster and more immediate technique. Linux uses modprobe to ban the unwanted modules in a very fast and immediate way,but in FreeBSD there isn't something fast like that. I think we need it.

Anyway I have already excluded the if_cdce.ko module,so let's move on.

To focus where is the problem now :

Code:
AT+CGREG? on /dev/cuaU0.0 = hangs
AT+CGREG? on /dev/cuaU0.1 = 0,0
AT+CGREG? on /dev/cuaU0.2 = 0,0

where 0,0 = not registered.

You need the right firmware.

I suspect that you are right. No idea where I can grab a new firmware,anyway. I should document myself.

At the moment I'm trying to configure it correctly in Linux,following this nice and focused tutorial (it's not man page,but it is useful anyway :P) :


If I will be able to make it work on Linux,it will be already a partial achievement....
 
Sorry for my ignorance,but I didn't attach the antenna :(. Probably that's the reason why it does not work. I see that it can't be attached without solder it to the port. Do you confirm it ?
 
The correct way to check if the device is connected to the network is the
Code:
AT+CREG?
command.

Next up, you can check for supported operators with the
Code:
AT+COPS=?
command.
 
The correct way to check if the device is connected to the network is the
Code:
AT+CREG?
command.

Next up, you can check for supported operators with the
Code:
AT+COPS=?
command.

Thanks. I'm not able to attach the gold plate of the antenna to the LTE port of the Dongle. It does not stick.
 
Back
Top