How to 'talk' to USB modem in Linux?
You can use cu.
$ sudo apt-get install cu
You can connect to your modem with:
$ cu -l ttyACM0
(with: ttyACM0 being the device /dev/ttyACM0) You should get a response:
connected
At this point you can use any of the standard AT commands such as to test dialing:
ATDT 123-456-7890
You should have your userid set to the group dialout for permission to access the modem.
You can exit the cu application with "~." (tilde dot).
You can find other Hayese commands at:
http://en.wikipedia.org/wiki/Hayes_command_set
If by talk you mean send AT commands in the form
echo "ATi" > /dev/usbDev
try this: http://brunomgalmeida.wordpress.com/2012/04/06/send-at-commands-to-usb-modem/
Use minicom
, socat
or screen
:
socat - /dev/ttyUSB1
minicom -D /dev/ttyUSB1
screen /dev/ttyUSB1
NOTE: I used real device name /dev/ttyUSB1
instead of fake /dev/usbDev
.
I believe the answer you're looking for is here: Using a USB winmodem with a Conexant driver in (K)Ubuntu 11.10 (Oneiric).
Important stuff (extracted from the site):
When I plugged a Conexant modem, I executed
lsusb
and it said:
[...]
Bus 006 Device 002: ID 0572:1300 Conexant Systems (Rockwell), Inc. SoftK56 Data Fax Voice CARP
[...]
so I knew that the HSF modem was recognized by the system.
As I had a previous internet connection, I upgraded the system
sudo apt-get update && sudo apt-get dist-upgrade
I checked that I had no previous Conexant drivers installed. For example: I executed
ls /usr/sbin/hsfconfig
and it said that that file did not exist; if it existed I would have thought that something was still installed.
I made sure that I had "gcc" and "make" ready, executing
sudo apt-get install gcc make
Then I executed those steps told there:
sudo -s
cd /lib/modules/$(uname -r)/build/include/linux
ln -s ../generated/utsrelease.h
ln -s ../generated/autoconf.h
exit
I prepared the files for the driver compilation, executing
mkdir ~/conexant_modem
cd ~/conexant_modem
and if I had a 64-bit operating system I executed
wget http://linux.dell.com/files/ubuntu/hardy/modem-drivers/hsf/hsfmodem-7.68.00.09x86_64oem.tar.gz
tar xzf hsfmodem-7.68.00.09x86_64oem.tar.gz
wget http://www.bargweb.net/images/2009/november/hsfmodem-7.80.02.05-DiacoEdition.zip
unzip hsfmodem-7.80.02.05-DiacoEdition.zip
cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/framewrk.h hsfmodem-7.68.00.09x86_64oem/modules/imported/include/framewrk.h
cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/osservices.h hsfmodem-7.68.00.09x86_64oem/modules/imported/include/osservices.h
else, if I had a 32-bit operating system I executed
wget http://linux.dell.com/files/ubuntu/hardy/modem-drivers/hsf/hsfmodem-7.68.00.09oem.tar.gz
tar xzf hsfmodem-7.68.00.09oem.tar.gz
wget http://www.bargweb.net/images/2009/november/hsfmodem-7.80.02.05-DiacoEdition.zip
unzip hsfmodem-7.80.02.05-DiacoEdition.zip
cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/framewrk.h hsfmodem-7.68.00.09oem/modules/imported/include/framewrk.h
cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/osservices.h hsfmodem-7.68.00.09oem/modules/imported/include/osservices.h
A note for the curious ones: those "framewrk.h" and "osservices.h" files were the different ones between the directories "hsfmodem-7.68.00.09oem/modules/imported" and "hsfmodem-7.80.02.05-DiacoEdition/modules/imported".
If I had a 64-bit operating system I executed
wget http://www.linuxant.com/drivers/hsf/full/archive/hsfmodem-7.80.02.06x86_64full/hsfmodem-7.80.02.06x86_64full.tar.gz
else, if I had a 32-bit operating system I executed
wget http://www.linuxant.com/drivers/hsf/full/archive/hsfmodem-7.80.02.06full/hsfmodem-7.80.02.06full.tar.gz
A note for the curious ones: that file was the newest one in http://www.linuxant.com/drivers/hsf/full/downloads.php
And then, if I had a 64-bit operating system I executed
tar xzf hsfmodem-7.80.02.06x86_64full.tar.gz
rm -r hsfmodem-7.80.02.06x86_64full/modules/imported
cp -R hsfmodem-7.68.00.09x86_64oem/modules/imported hsfmodem-7.80.02.06x86_64full/modules/
cp -R hsfmodem-7.68.00.09x86_64oem/modules/imported hsfmodem-7.80.02.06x86_64full/modules/
else, if I had a 32-bit operating system I executed
tar xzf hsfmodem-7.80.02.06full.tar.gz
rm -r hsfmodem-7.80.02.06full/modules/imported
cp -R hsfmodem-7.68.00.09oem/modules/imported hsfmodem-7.80.02.06full/modules/
cp -R hsfmodem-7.68.00.09oem/modules/imported hsfmodem-7.80.02.06full/modules/
The next step was to clean the present directory.
If I had a 64-bit operating system I executed
rm -rf hsfmodem-7.68.00.09x86_64oem
rm -rf hsfmodem-7.80.02.05-DiacoEdition
rm hsfmodem-7.68.00.09x86_64oem.tar.gz
rm hsfmodem-7.80.02.05-DiacoEdition.zip
rm hsfmodem-7.80.02.06x86_64full.tar.gz
else, if I had a 32-bit operating system I executed
rm -rf hsfmodem-7.68.00.09oem
rm -rf hsfmodem-7.80.02.05-DiacoEdition
rm hsfmodem-7.68.00.09oem.tar.gz
rm hsfmodem-7.80.02.05-DiacoEdition.zip
rm hsfmodem-7.80.02.06full.tar.gz
Then I had to change some files to adapt them to work with the 3.0.0 version of the Linux kernel. If I had a 64-bit operating system I executed
cd hsfmodem-7.80.02.06x86_64full
xdg-open modules/GPL/serial_cnxt.c
else, if I had a 32-bit operating system I executed
cd hsfmodem-7.80.02.06full
xdg-open modules/GPL/serial_cnxt.c
and then a text editor was launched. I searched for the string
#ifndef FOUND_UART_REGISTER_PORT
and below I found the string
static DECLARE_MUTEX(cnxt_port_sem);
I deleted that last string, and wrote there
static DEFINE_SEMAPHORE(cnxt_port_sem);
and I saved and closed that file. I executed
xdg-open modules/osdiag.c
and then a text editor was launched. I searched for the string
THIS_MODULE,
and below I found the string
.ioctl = diag_ioctl,
I deleted that string, and wrote there
.compat_ioctl = diag_ioctl,
and I saved and closed that file. I executed
xdg-open modules/osnvm.c
and then a text editor was launched. I searched for the string
static LIST_HEAD(nvm_newinst_list);
and below I found the string
static DECLARE_MUTEX(nvmelem_writelist_sem);
I deleted that last string, and wrote there
static DEFINE_SEMAPHORE(nvmelem_writelist_sem);
and I saved and closed that file.
A note for the curious ones: the source of those changes in those files was http://www.openmamba.org/showfile.ht...l-2.6.37.patch
The user named Chiaseth helped telling those steps that I followed, this way:
-
I executed
xdg-open modules/osservices.c
and then a text editor was launched. I searched for the string
#include <linux/smp_lock.h>
and I deleted that string, and wrote there
#include <linux/mutex.h>
DEFINE_MUTEX(os_mutex); // Define a mutex
In that file I searched for the strings
unlock_kernel()
replacing all of them with
mutex_unlock(&os_mutex)
Also, in that file I searched for the strings
lock_kernel()
replacing all of them with
mutex_lock(&os_mutex)
and I saved and closed that file.
-
I executed
xdg-open modules/osdcp.c
In that file I searched for the string
static spinlock_t dcp_lock = SPIN_LOCK_UNLOCKED;
replacing it with
static DEFINE_SPINLOCK(dcp_lock);
and I saved and closed that file.
-
I executed
xdg-open modules/osdiag.c
In that file I searched for the string
static spinlock_t diag_lock = SPIN_LOCK_UNLOCKED;
replacing it with
static DEFINE_SPINLOCK(diag_lock);
and I saved and closed that file.
-
I executed
xdg-open modules/osfloat.c
In that file I searched for the string
static spinlock_t fpstates_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;
replacing it with
static DEFINE_SPINLOCK(fpstates_lock);
and I saved and closed that file.
-
I executed
xdg-open modules/osservices.c
In that file I searched for the string
static spinlock_t atomic_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;
replacing it with
static DEFINE_SPINLOCK(atomic_lock);
and I saved and closed that file.
-
I executed
xdg-open modules/GPL/oscompat.h
In that file I searched for the string
static spinlock_t tqueue_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;
replacing it with
static DEFINE_SPINLOCK(tqueue_lock);
and I saved and closed that file.
Finally... If executed
sudo make install
sudo hsfconfig
It asked "Where is the linux source build directory that matches your running kernel?", then I simply pressed the return key to accept the default answer. I also accepted the default answer in other questions.
Finally the command reported that
The /dev/modem alias (symlink) points to ttySHSF0
I executed
dmesg
and at the end I saw
[59190.782005] hsfengine: module license 'see LICENSE file distributed with driver' taints kernel.
[59190.782011] Disabling lock debugging due to kernel taint
[59192.564398] ttySHSF0 at MMIO 0x0 (irq = 0) is a Conexant HSF softmodem (USB-0572:1300)
[59192.600274] usbcore: registered new interface driver hsfusbcd2
[59194.416241] usbcore: deregistering interface driver hsfusbcd2
[59194.600064] usb 6-1: reset full speed USB device using uhci_hcd and address 2
[59194.811746] cnxthsf_DcpDestroy: units still active, waiting..
[59194.811764] cnxthsf_DcpDestroy: units still active, waiting..
[59194.811778] cnxthsf_DcpDestroy: units still active, waiting..
[59196.967466] ttySHSF0 at MMIO 0x0 (irq = 0) is a Conexant HSF softmodem (USB-0572:1300)
[59196.994150] usbcore: registered new interface driver hsfusbcd2
which meant, among other things, that the USB modem was detected at /dev/ttySHSF0
.
Note: as they said in https://help.ubuntu.com/community/Di...Howto/Conexant: "do not delete or move the source tree [in our case: ~/conexant_modem] from your system after these steps, it will be required to uninstall and patch the driver."
I launched kppp
(for example) and configured a new "connection", specifying that the modem was at /dev/ttySHSF0
. You could also use a program like efax-gtk
to send faxes through the modem.