Giter VIP home page Giter VIP logo

lwcell's Introduction

Lightweight Cellular AT parser

LwCELL is lightweight, platform independent, cellular modem AT commands parser, targeting (as of today) communicion with SIMCOM based modules SIM800/SIM900 or SIM70xx. Module is written in C11 and is independent from used platform. Its main targets are embedded system devices like ARM Cortex-M, AVR, PIC and others, but can easily work under Windows, Linux or MAC environments.

Read first: Documentation

Features

  • Supports SIM800/SIM900 (2G) and SIM7000/SIM7020 (NB-Iot LTE) modules
  • Platform independent and very easy to port
    • Development of library under Win32 platform
    • Provided examples for ARM Cortex-M or Win32 platforms
  • Written in C language (C11)
  • Allows different configurations to optimize user requirements
  • Supports implementation with operating systems with advanced inter-thread communications
    • Currently only OS mode is supported
    • 2 different threads handling user data and received data
      • First (producer) thread (collects user commands from user threads and starts the command processing)
      • Second (process) thread reads the data from GSM device and does the job accordingly
  • Allows sequential API for connections in client and server mode
  • Includes several applications built on top of library:
    • MQTT client for MQTT connection
  • User friendly MIT license

Contribute

Fresh contributions are always welcome. Simple instructions to proceed:

  1. Fork Github repository
  2. Follow C style & coding rules already used in the project
  3. Create a pull request to develop branch with new features or bug fixes

Alternatively you may:

  1. Report a bug
  2. Ask for a feature request

lwcell's People

Contributors

blomnik avatar d3vil-st avatar dependabot[bot] avatar fuhw avatar majerle avatar matstm avatar sergio-rudenko avatar straend avatar vsanisimova avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lwcell's Issues

Error in FreeRTOS port

I want to express my gratitude for your work and point out ( unfortunately ) an error -
https://github.com/MaJerle/lwgsm/blob/433e80a49f1951c25466ab3e7f18b7c3471f5df5/lwgsm/src/system/lwgsm_sys_freeRTOS.c#L51-L56

sys_mutex is created as recursive and try give ( ? ) as regular.

And unprotect ( L91-L95 ) correctly like this -

uint8_t
lwgsm_sys_unprotect(void) {
return xSemaphoreGiveRecursive(sys_mutex);
}
https://www.freertos.org/a00123.html
<This macro must also not be used on semaphores created using xSemaphoreCreateRecursiveMutex().>

Event Callback Config

Hello @MaJerle

Great thanks again for this great job.

I implemented this library successfully for Quectel M66 and make it work for HTTP GET, POST requests via tcp connection.

But it was little hard to get received data for me. I thought there is a event callback function for this. I still do. But could not find it.

Can you help me with this event callback mechanism? How to use these and how to configure it?

PWRKEY pin

Hello!
I have a custom PCB with PWRKEY pin instead of RST. Is it possible utilize it on init with lwGSM or I have to implement some additional code by myself?

Thank you.

Example code without RTOS

Hi,
I need basic example.
Can this library run on non os without RTOS.
I am using CUBE MX with HAL driver api.

Read phonebook entry bug

I noticed a bug in parsing the response to the AT+CPBR command.
According to the documentation on SIM900 (or other GSM module), the response to this command looks like
+CPBR:<index1>,<number>,<type>,text

However, parsing in the gsm_parse_cpbr function (gsm_parser.c ~800 line) occurs for the case when the name comes first, then the type and number:

e = &lwgsm.msg->msg.pb_list.entries[lwgsm.msg->msg.pb_list.ei];
e->pos = LWGSM_SZ(lwgsmi_parse_number(&str));
lwgsmi_parse_string(&str, e->name, sizeof(e->name), 1);
e->type = (lwgsm_number_type_t)lwgsmi_parse_number(&str);
lwgsmi_parse_string(&str, e->number, sizeof(e->number), 1);

This is the reason for the incorrect display of information in gsm_pb_entry_t structure.

I think it should be:

e = &lwgsm.msg->msg.pb_list.entries[lwgsm.msg->msg.pb_list.ei];
e->pos = LWGSM_SZ(lwgsmi_parse_number(&str));
lwgsmi_parse_string(&str, e->number, sizeof(e->number), 1);
e->type = (lwgsm_number_type_t)lwgsmi_parse_number(&str);
lwgsmi_parse_string(&str, e->name, sizeof(e->name), 1);

lwgsm-0.6.0 release

gsm_sys.h
line 78 esp instead of gsm

are there any patches to correct these?

I first tested on lwgsm-develop branch and lwgsm_init(lwgsm_callback_func, 1) never returned. all commands response was being received proper on a STM32F103 Board I have.

Then switched to release branch to find that naming convention of files was different.

Could you please explain a bit.

Thanks for the library!!!

AT Messages Debug

Hello,

Is it possible to see sended and received at messages between mcu and module?

I enabled all the debug modes but no luck.

I dont want to make any changes on the library functions. But i think it could add on the received data process function. Am i correct?

HTTP Support

Hello @MaJerle

Are you planning to add some basic http functionality?

I could not get work over tcp.

Library Cannot initialized message

Dear Majerle,
Thank you very much for your library work.
I'm testing SMS Send Receive RTOS exampla on windows. I get the following message from the app:
Cannot initialize GSM-AT Library
than application starts and ready for receiving SMS.
I sended a SMS to device. Than I get the following message from the app:
New SMS received!
Cannot start SMS read procedure!

What I did wrong?

I'm using Visual Stıdio 2019 Community Edtion(v142).

Regards,

Wrong data send to MODEM UART

`ATE1
OK
AT+CFUN=1
OK
AT+CMEE=1
OK
AT+CGMI
SIMCOM_Ltd

OK
AT+CGMM
SIMCOM_SIM868

OK
AT+CGSN
867010032343809

OK
AT+CGMR
Revision:1418B03SIM868M32_BT

OK
AT+CREG}1
+CME ERROR: 100
AT+CLCC}1
+CME ERROR: 100
AT+CPI
+CME ERROR: 100`

Why some times sends '}'?
or
AT+CPI instead AT+CPIN?

There is no interface layer with other third party library

Hello @MaJerle

This is very nice and great code.

I am using your library successfully for sim808 and work with mqtt app.

i am confused how i can use from other library on top of your code?, how can use lwip or new library that ST released which name is Network library or Cloud general library on top of your code?

do you have plan for implement standard interface that we can use other library on top of your code?

for example if you implement interface like netif in lwip, your library can work with other third party libraries.

gsmi_parse_string return value contains CRLF

calling gsmi_parse_string will return a new string end of CRLF, Is this result expected?

In my project, i combining model serial number with other string, subsequent processing errors due to this extra string.

`uint8_t
gsmi_parse_string(const char** src, char* dst, size_t dst_len, uint8_t trim) {
const char* p = *src;
size_t i;

if (*p == ',') {
    ++p;
}
if (*p == '"') {
    ++p;
}
i = 0;
if (dst_len > 0) {
    --dst_len;
}
while (*p) {
    if (*p == '"' && (p[1] == ',' || p[1] == '\r' || p[1] == '\n') || 
    (*p == '\r' || *p == '\n')) {
        ++p;
        break;
    }
    if (dst != NULL) {
        if (i < dst_len) {
            *dst++ = *p;
            ++i;
        } else if (!trim) {
            break;
        }
    }
    ++p;
}
if (dst != NULL) {
    *dst = 0;
}
*src = p;
return 1;

}`

Porting to POSIX

Hello,

Thanks for your library ! I am working on porting to posix platform. I've managed to create the sys part and I am starting the low level.

I have an issue with the uart port device path which should be an argument inside the gsm_ll_t struct. Other platforms seem to not use it since cmsis has a dedicated port, and on windows a list of COM port is defined.

I would like to add it to gsm_ll_t, and the user would pass the path to the device through the gsm_init function call. What do you think about it ?

If you do not want to modify the existing API, we can add a "set_device_path" function.

MQTT with SSL

Hi Mr. Tilen,

Did you implement any MQTT example with SSL encryption. I changed:

res = gsm_conn_start(&client->conn, GSM_CONN_TYPE_TCP, host, port, client, mqtt_conn_cb, 0);

with:
res = gsm_conn_start(&client->conn, GSM_CONN_TYPE_SLL, host, port, client, mqtt_conn_cb, 0);

at gsm_mqtt_client.c Line: #1103 and changed port of broker to 8883. It gives me GSM_MQTT_CONN_STATUS_TCP_FAILED error code.

Do I miss anything?

Appreciate for your help.

Aykut.

sim7000 auto baudrate

The sim7000 from default is on auto baud rate. The MCU must transmit some AT after sim7000 reset for sync. Is there a provision for this?

http function

http request is usually used, e.g OTA download and other http request. http support is appreciated.

Init timeout with SIM7000E

Hello!
I'm having a problem with LwGSM on SIM7000E. I ported the library to ESP32+FreeRTOS, and after init everything works fine, but fails due to timeout. SIM7000E module is reset to factory settings, excluding baud rate (LwGSM didn't seem to work with auto-baud).
lwgsm_init fails with lwgsmTIMEOUT. Later LwGSM tries AT+CNUM a few times but modem replies with ERROR.
During the lwgsm_network_attach, LwGSM sends AT+CGACT=0, replied with OK, and AT+CGACT=1 replied with ERROR.
If I set LWGSM_CFG_NETWORK_IGNORE_CGACT_RESULT to 1, it can successfully connect.

MQTT Reconnection Issue

Hello Mr. Tilen,

I tried to figure out what happens if SIM800 power downs(mcu and sim800 power source are different) for a while or network corrupts when I use mqtt api. I experienced that mqtt api blocks itself at publish call. (For example at line 95 here /snippets/mqtt_client_api.c)

After some trace, I realized that at apps/mqtt/gsm_mqtt_client_api.c Line: 444
if (gsm_mqtt_client_publish(client->mc, topic, data, GSM_U16(btw), qos, retain, NULL) == gsmOK) { gsm_sys_sem_wait(&client->sync_sem, 0); res = client->sub_pub_resp; }

Here gsm_sys_sem_wait(&client->sync_sem, 0); blocks the program. And I changed it by adding timeout to:

if (gsm_mqtt_client_publish(client->mc, topic, data, GSM_U16(btw), qos, retain, NULL) == gsmOK) { if(gsm_sys_sem_wait(&client->sync_sem, 10000) == GSM_SYS_TIMEOUT){ res = gsmERR; }else{ res = client->sub_pub_resp; } }

After this in mqtt_client_api.c I am checking return value of publish. If it is gsmERR I am restarting SIM800, reattach to network and reconnect mqtt sequence.

Actually I couldn't find any other way to detect corruption and solution for blocking.What do you think about this solution? Is it ok or do you suggest more elegant way?

Best Regards,
Oguz.

Network Attachment

Hello Tijen,

Fİrstly great thanks for this great job. Congurats!

Secondly, i am trying to make some changes for Quectel M66 module.

I have a question for you.

When i looked at SIM800+Series_TCPIP_Application+Note_V1.01.pdf document, i see that gprs attachment and tcp connection flow (page 7). But different from yours.

In your code (gsm_int.c after line 1523)

  • at+cgact=0
  • at+cgact=1
  • at+cgatt=0
  • at+cgatt=1

and goes on. I dont think your code matches with document. But more importantly how can i implement this for M66?

AT+CIPSTART wrong format for SSL

Hello @MaJerle ,

I was trying to enable the SSL and it seems there is some issue with the AT cmd for SSL.

This is the snipet from my actual log files using lastest release source.

AT+CIPSSL=1
AT+CIPSSL=1
OK
AT+CIPSTART=5,"device.connectivity-suite.cloud",443
AT+CIPSTART=5,"device.connectivity-suite.cloud",443
+CME ERROR: 3

According to the AT cmd document from SIMCOM for SIM800 series command format is as follows.

AT+CIPSSL=1 
OK
AT+CIPSTART=1,"TCP","116.228.221.51","9600" 
OK

1,CONNECT OK

I think you are missing "TCP" in your format and dobule quote in the port

Can you please let me know how can i patch these in my code. I am actually stuck in the middle of my workflow due to this.

I am looking forward for your reply.

Thank and Regards,
Samir

Sim800C Reset Pin

Hi Majerle,
I'm using Sim800C. It hasn't got a reset pin. in gsm.c i added defines below. fyi.

#if defined(GSM_RESET_PIN)
/* Try with hardware reset */
if (gsm.ll.reset_fn != NULL && gsm.ll.reset_fn(1)) {
gsm_delay(2);
gsm.ll.reset_fn(0);
gsm_delay(500);
}
#endif

        /* Send manual AT command */
        AT_PORT_SEND_BEGIN_AT();

gsm_core_lock problem

Hi MaJerle!

I'm trying to use your library. I ported it to my project on stm32f4-discovery and started by debugging using your example code for message receiving. Here I faced a problem.

GSM initialization is successful, but the driver cannot configure the SIM card after that. The error appears when the command is sent to the producer_mbox queue.
/* Check here if stack is even enabled or shall we disable new command entry? */
gsm_core_lock();
/* If locked more than 1 time, means we were called from callback or internally */
if (gsm.locked_cnt > 1 && msg->is_blocking) {
res = gsmERRBLOCKING; /* Blocking mode not allowed */

(gsm.locked_cnt > 1 )=true (more often this variable is equal to 2) so res = gsmERRBLOCKING

I broke my head over this mistake, so I hope that you can help me

Guidance for implementing LWGSM_CFG_CONN_MANUAL_TCP_RECEIVE

I'm facing an issue with the automatic TCP data retrieval (CIPRXGET=0), where my socket layer's receiving ring buffer is getting overrun by GSM data coming in faster than my application can read and process it. The solution seems to be to switch the GSM architecture to use CIPRXGET=1 manual data retrieval so that my app can control the ingestion rate. My initial thought was to implement the AT commands for manually receiving TCP data (AT+CIPRXGET=1,n,len) and directly call it from my socket layer, but I stumbled upon this lwgsm_conn_recved() stub method, which looks like it was intended to be implemented for this purpose. What was the original intention and roadmap for this function, and does it make sense to piggyback off of the stub started there instead of manually invoking and reading the CIPRXGET data response?

SIM ready call gsmi_get_sim_info(0) cause system deadlock

    /*
     * In case SIM is ready,
     * start with basic info about SIM
     */
    if (gsm.m.sim.state == GSM_SIM_STATE_READY) {
        gsmi_get_sim_info(0);
    }

#define GSM_CFG_INPUT_USE_PROCESS 1

now is in gsm_input_process and gsm_core_lock, gsmi_get_sim_info(0) call gsmi_send_msg_to_producer_mbox will be failed

  1. how to deal with GSM_CMD_SIM_PROCESS_BASIC_CMDS command?

  2. gsmr_t gsmi_get_sim_info(const uint32_t blocking) put in gsm_sim.c (gsm_sim_get_info(const uint32_t blocking) will be better

MQTT on cpanel

How can I install mqtt on cpanel to get data from lwgsm?

Support need for TCP : +RECEIVE missed event

Hello @MaJerle,

I have send a request on TCP and expecting server to respond.

The server respond too but missed the first reveive to call the function callback.
I have marked the breakpoint in the attached log.

For simulation when i send dummy data from server the 2nd time, it hit the marked breakpoint.
I have tested manytimes and tried many approach. But it always miss the 1st response from the server.

Can you please support. In my real application the server is actually responding once. if missed the important data is lost.
Can you suggest any alternatives to track this receive buffer by application?

Regards,
Samir

Missed event breakpoint

MQTT - Keep-alive mechanism - Receive callback

I don't think that the client->poll_time should be reset in the mqtt_recv_cb(): https://github.com/MaJerle/gsm-at-lib/blob/develop/gsm_at_lib/src/apps/mqtt/gsm_mqtt_client.c#L848 .

The Mosquitto server I am testing with was closing the connection until I commented this line out.

Scenario:

  • The device using your GSM AT library connects successfully to MQTT broker - and subscribes to topic of interest
  • Keep-alive interval set to 30 seconds
  • Device does not publish on any topic
  • Another remote client connects to broker and publishes on topic of interest - so (in mqtt_recv_cb) device resets the keep-alive timer (client->poll_time)
  • The time between PINGREQ messages is then too long - so the server closes the connection

Having issue using the gsm_at_lib with STM32F4 discovery board on STM32CUBEIDE

Hello @MaJerle

Great thanks for this great job.
please, I have tried to use the library with the STM32F4dicovery board on STM32CUBEIDE but I can't get it to compile.
and also am little confused about this instruction line

  1. Add port architecture gsm_at_lib/src/include/system/port/arch folder to include path of your toolchain..
    what does this arch mean because I can't see the folder in the path

  2. Add source files from gsm_at_lib/src/ folder to toolchain build

Add source files from gsm_at_lib/src/system/ folder to toolchain build for arch port.

I will be expecting your reply thanks

Getting gsmERRMEM error after some usage or overload

Hi Mr. Tilen,

First of all thanks for this lib. I am using this lib for mqtt conn but after a while or when I send a lot of package from server to the topic which the board uses this library subscribed, it generates memory error. I tried to trace code and solve the problem but I couldn't.

How can I free the memory, or just restart all the library from beginning by freeing the memory. I had a solution by using two stm32f4 mcus, for one this library, another for others tasks. When this error occured , I can restart the mcu and the other mcu can continue to its tasks. But I know, it is not the appropriated way.

(By the way, the code I used is your mqtt client api demo.)
So I need your help. Thanks in advance.

Best Regards,
Oguz.

Hardfault error sometimes

Hello,
Sometimes, I get hardfault error when calling this function to attach network? I'm using Sim800C with STM32
while (lwgsm_network_request_attach() != lwgsmOK) {
lwgsm_delay(1000);
printf("Network request attach FAILED \r\n");
if(count_connect++ >5)
{
goto terminate;
}
}
Any idea to resolve it?

buffer processing issue

There's an issue with the way GSM received data buffer is processed.
1- the function gsmi_process() is called to process the buffer.
https://github.com/MaJerle/GSM_AT_Lib/blob/6653f46d22d2c6fcf61003346616afda28fbed78/src/gsm/gsm_int.c#L964
2- in that function after some process the gsmi_parse_received() function is called which handles the events and calls user callback functions if needed.
https://github.com/MaJerle/GSM_AT_Lib/blob/6653f46d22d2c6fcf61003346616afda28fbed78/src/gsm/gsm_int.c#L1131
3- inside that function any user callback function can be called for example for an SMS this line is called
https://github.com/MaJerle/GSM_AT_Lib/blob/6653f46d22d2c6fcf61003346616afda28fbed78/src/gsm/gsm_int.c#L719

now let's imagine user callback function is called inside gsmi_parse_cmti(). if the user has some blocking code inside his function the whole thread of execution is blocked because of that and if any more data from GSM is received in a considerable amount of time, they will be lost because the processing thread is halted due to user function being the blocking factor here.

this issue is really application dependent. in a house security system that I'm designing this can be a fatal point but I'm still working on it. anyway i still find your library inspiring and I'm writing my own library using your ideas.

a work around for this that i can think of is to make the processing thread completely non blocking by using OS queues. the user thread has to process this messages pushed by processing thread.

I am not getting any response with sim7600e

i am trying to use lwgsm library with esp32 and sim7600e, and i am facing problem, i get

Cannot initialize LwGSM

i have changed following steps in Library

/* Defines ESP uart number to use */
#define GSM_UART_NUM UART_NUM_1

ESP_ERROR_CHECK(uart_set_pin(GSM_UART_NUM, 26, 25, 0, 0));

i had written an uart routine to check AT command with same UART setting i do get AT response from modem.
i have insert a debug line in uart events routine, this line is never invoked

case UART_DATA:
			**printf("[UART DATA]: %d", event.size);**
          uart_get_buffered_data_len(GSM_UART_NUM, &buffer_len);

MQTT disconnection on every single receive

Hi Mr. Tilen,

I am using and testing this library for real product and almost everything fine.

But for example, when I use exactly same code with: GSM_AT_Lib_res/docs/examples/_example_mqtt_client.c mqtt

MQTT works fine except I publish something to topic which this library subscribed. It takes the message but after that it disconnects. At every single received message, it disconnects and reconnects. (retriess++ in the code)

Actually this may be acceptable because of the latency is a few seconds to reconnect. But if the message's retain flag was set which sent to the device, it takes message, then disconnects, then reconnects, and again takes the message.. The same loop. This case makes the device unable to publish any message.

Do you have any suggestion to solve this problem?

Thanks in advance,

Oguz.

Can't subcribe a topic with mqtt client on Sim800

Hi,
I'm testing mqtt client on sim800 and I run the code in example
Look like I can't subscribe a topic even the server was GSM_MQTT_CONN_STATUS_ACCEPTED:

        if (status == GSM_MQTT_CONN_STATUS_ACCEPTED) {
            printf("MQTT accepted!\r\n");
            /*
             * Once we are accepted by server, 
             * it is time to subscribe to different topics
             * We will subscrive to "mqtt_gsm_example_topic" topic,
             * and will also set the same name as subscribe argument for callback later
             */
            gsm_mqtt_client_subscribe(client, "gsm_mqtt_topic", GSM_MQTT_QOS_EXACTLY_ONCE, "gsm_mqtt_topic");
            
            /* Start timeout timer after 5000ms and call mqtt_timeout_cb function */
            gsm_timeout_add(5000, mqtt_timeout_cb, client);
        } else {
            printf("MQTT server connection was not successful: %d\r\n", (int)status);
            
            /* Try to connect all over again */
            example_do_connect(client);
        }

How to give the recieved buffer to library?

Hi,

I find your library very interesting however the documentation that you provided is only about the functions and not how to used them properly.

My question is that how should i give the received character from usart to the library ?
should i use gsm_input() ?

also if i use GSM_CFG_INPUT_USE_PROCESS with DMA , how is the dma going to send the data to gsm_input_process() since DMA doesn't tell us how many bytes are received. (GSM module may send 4 bytes or 10 bytes at once)

Also I'm using Quectel M66 which works very similar to Simcom modules, the only difference is that most of the commands start with Q , for example "AT+QENG" instead of "AT+ENG" and the response also has a Q at the beginning.
from what I've seen the only file i need to configure is gsm_int.c , is that correct ?

also can you implement a way for the library to handle multiple modules this way ? (the commands and responses for a certain functionality in separate files for different modules and also another file for extra functionalities that the specific module has)

a startup tutorial would be very welcome

SIM7020E: Socket commands

HI,
I just started to evaluate this library, and looks like very nice.
Can you tell me if it is on your focus to implement the socket commands of the SIM7020x?
AT+CSOC
AT+CSOCON
AT+CSOB
AT+RETENTION
AT+CSOSEND
AT+CSODSEND
AT+CSOCL
AT+CSOSENDFLAG
AT+CSORCVFLAG
AT+CSOSTATUS
AT+CSOACK
AT+CSOALIVE
+CSONMI
+CSOERR

size of compiled binary

Hello again,

I just tried to compile the library and integrate it into my project but the linker complained about not having enough size which is weird because I've a STM32F091RCT and it has 256Kb of flash. from the source files that i looked , it doesn't sound that much to me. Do you have any estimation of the compiled library ?

Bug in gsmi_send_msg_to_producer_mbox()

In gsmi_send_msg_to_producer_mbox() ...

If the library fails to place the message in the producer queue - and subsequently deallocates the message memory and resets the pointer as it does at
https://github.com/MaJerle/GSM_AT_Lib/blob/86929f299f7b2546af4d258f214e9629ef6322bb/src/gsm/gsm_int.c#L2114 - then it should return straight away. Otherwise it will attempt to dereference a null pointer.

Perhaps the simplest solution is to replace https://github.com/MaJerle/GSM_AT_Lib/blob/86929f299f7b2546af4d258f214e9629ef6322bb/src/gsm/gsm_int.c#L2115 with

return gsmERR;

[Question] Any plan to CMake support?

Thanks for this great project. It seems that there're seldom AT command open source projects I can find.
As a cross-platform project, is there any plan that provide CMake support? Thanks very much!

AT+CELLIST command

Hi. First of all: Thank you for this excellent module!

I am wondering if you are willing to add support for the AT+CELLIST command. This is available in SIM800 devices at least (other ones I am not sure), and returns statistics about GSM cells - such as country code (MCC), network code (MNC), etc.. This information is required in the AIS 140 protocol.

I forked your repository and added experimental support for this command in a development branch - at https://github.com/dslc/GSM_AT_Lib/tree/nmr-api .

Maybe you have already considered this issue and there is a reason you have chosen not to support this feature. In any case ... I would be interested in your thoughts.

dtmf

Detection of DTMF tones - SIM800L module.

I get "OK" when I send 'AT+DDET=1,1000,1,1* ' over uart .
But it doesnt seem to detect anything afterwards.
Perhaps I am doing something wrong.
Would appreciate some feedback.

regards
Atul
ref : *SIM800 Series_AT Command Manual_V1.09

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.