Signals inside kernel - linux-kernel

I am trying to write a device driver for a GSM modem that is connected through a serial interface. The basic idea is to send a command on the serial port and get a reply from the modem (if the command was successful the reply is OK and ERROR otherwise). The UART is generating an interrupt each time a character is sent from the modem and I've made a parser that puts each message from the modem in a list.
In order to configure the modem for sending or receiving SMS messages I have to send a sequence of commands to the modem. So from my modem_config() function I have to send a command wait for the response (OK or error) and if the reply was OK then send the next command and so on.
How can I wait in the modem_config() function for a signal from the parser that tells a reply from the modem is available? After I receive this signal modem_config() function will resume execution and interpret the reply from the modem.
Thanks.

Related

Huawei Cdma Modem, How can send sms via C# App OR AT command

I've huawei EC156 cdma modem, I tried to send SMS via AT commands with many commands, But always received response "command not support".
I have used the following commands:
1- AT+CMGS
2- AT + GWWC
Also, I didn't find any C# Libraries dealing with cdma modems.
You definitely need to check the AT commands user manual of your device and check their syntax.
AT+CMGS has two different modes:
in PDU mode its syntax is AT+CMGS=<PDU>
in text mode it is AT+CMGS=< dest phone number>
In both cases AT+CMGS is wrong, and operation not supported is the error you get for a wrong syntax (after setting verbose error mode with AT+CMEE=2).
There are plenty of questions showing the correct AT commands sequence required to send an SMS, for example this one.
I summarize that sequence here briefly:
Some things ti check before starting:
Make sure that the SIM is inserted
Make sure that the PIN code has been correctly inserted (by issuing AT+CPIN? you have to receive the READY response)
Make sure that the device is correctly registered to the network (by issuing AT+CREG? you have to receive the +CREG: 0,1 response)
Then:
Switch to text mode by issuing AT+CMGF=1
Tell to the device the phone number you want send the SMS to, by issuing AT+CMGS=<PHONE NUMBER>. The device will output the > prompt character
Write your text
Close the SMS by providing the Ctrl-Z character (0x1A ASCII code)
On success, the response +CMGS: <N> will be displayed, with N in the range 0-255 meaning the progressive ID of sent messages

Reading SMS Through HSDPA Modem with At Commands

I am trying to Read SMS through HSDPA Modem. I Tried
AT+CMGR=1
AT+CMGR=123
AT+CMGR="ALL'
AT+CMGR="REC ALL"
AT+CMGL="ALL"
Commands but No Sucess. Is Any problem with serialport configuration or something else Any other possible solution please help me
Baud Rate:9600
Data bits:8
Parity:None
Stop bit:1
Once you have connected your terminal emulator to your modem (typically /dev/ttyUSB0 on Linux), try AT. If you get an OK or ERROR that means you have no problem with serial port configuration because the modem is responding to you. If you get nothing (ei, no reply from the modem), then you probably have a serial connection or modem hardware issue. Personnaly I'm using miniterm.py (on Linux) and the configuration is
maurice#mickey> sudo miniterm.py -e /dev/ttyUSB0`
--- Miniterm on /dev/ttyUSB0: 9600,8,N,1 ---
Just as yours.
Regarding reading the SMSes, at+cmgl=? should reply either ERROR or a list of statuses. If you get ERROR, this means your modem doesn't accept SMS. Otherwise you should get something like +cmgl: ("REC UNREAD","REC READ","STO UNSENT","STO SENT","ALL")
Now, if you issue at+cmgr, the answer should look like
+CMGL: 8,"REC UNREAD","+XXXXXXXXXXXX",,"16/02/19,19:52:07+12"
Test 1
+CMGL: 9,"REC UNREAD","+XXXXXXXXXXXX",,"16/02/19,19:52:16+12"
Test 2
where +XXXXXXXXXXXX is the sender MSISDN and "Test 1" is the message sent in the SMS (its content). Again, if you get ERROR, that means your modem doesn't accept SMSes. If you have sent some SMSes but the list is empty, maybe SMS are blocked on the HLR for this specific SIM.
To read the 8th SMS, issue at+cmgr=8 and you should get
+CMGR: "REC READ","+XXXXXXXXXXXX",,"16/02/19,19:52:07+12"
Test 1
OK

How to send SMS with GSM Click Modem?

I can finally make a phone call, receive, and answer it. But if I try to send an SMS I receive CMS ERROR: 500. The GSM modem I am using is Telit GL865-Quad module. Since the Call function is working, what's preventing the SMS to work? please enlightenment me. The Sim Card works fine on my phone to rule out some of the problems. I am using a hyperterminal to type the commands at 19200 speed. This is the user guide with commands for your own convenience.
To send an SMS:
AT+CMGF=1 // Select Text Mode
OK
AT+CMGW=”+xxxxxxxxxxxx” // my number
> Hi
>
+CMGW: 8
OK
AT+CMSS=8
Error: +CMS ERROR: 500
Any ideas to what the error means, since its unknown error? What are some commands to type out to pinpoint the problem?
I would appreciate your help, thanks!
+CMS ERROR: 500 is unfortunately a very generic error message.
I have a few suspicions which may solve your problem:
1) Timing problem
Writing an SMS to the SIM card will take a "significant" amount of time. Between writing the SMS to SIM and sending the SMS wait a couple of seconds.
2) Check that the SMS really did get written to SIM
Using the CMGR command you can verify if the SMS is written to SIM and it's current status.
For example:
AT+CMGR=8
Alternatives:
You can always send an SMS directly without storing on the SIM. This is generally a more favored approach for multiple reasons including SMS sending is quicker and SIM lifetime is extended due to reduced read/writes.
This can be achieved by using:
AT+CMGS=<destination address>
>Hi
You can additionally use the CNMI command to prevent incoming messages being stored on the SIM and being output directly to the console/telnet connection.
Replying on a 7 year old thread - sorry.
Make sure you terminate your message "Hello" with ASCII SUB (0x1A)

Type of RAW socket to send Gratuitous ARP request and receive ARP reply packet on VC++

What type of RAW socket is required to send Gratuitous ARP request and receive ARP reply packet on VC++.
int s = socket(AF_PACKET, SOCK_DGRAM, htons(ETH_P_ARP));
what should be the corresponding code for Windows?
I've been trying to figure out the same thing.
But it appears you just can't do this in windows: in windows you can only construct Internet layer packets, but ARP is in Link layer. So if you really have to do this, you'll need to use winPcap I think.
yes. windows does not allow you to send RAW traffic on top if ethernet, but it is possible to send RAW ethernet traffic.
So, if you construct your own ethernet headers, it is possible to send ARP packets.

Windows UDP sending problems

I have a weird behaviour on windows. I have 2 processes that are talking to each other on UDP protocol.
Scenario: 1 of the proceeses is up and the other is not. The process try to send udp message towards the one that is down. The one that is up gets from OS or soemthing else a signal for the socket to read as it got message from the other process.
How come ?
It sends a signal on the same port, but it not a real message that was sent from the other application. When trying to read it u get an excpetion of number 10054, connection reset.

Resources