Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
gasagna committed May 28, 2023
1 parent 0a4611f commit f38ba76
Showing 1 changed file with 18 additions and 5 deletions.
23 changes: 18 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,15 @@ There are a number of great libraries out there to allow IoT devices to connect
However, the latest SIMCOM firmware provides native clients for several network protocols that are popular in IoT, accessible through standard AT commands and with optional SSL/TLS security built-in! The goal of this library is to make all these protocols and features easibly accessible from a single library.

## Supported protocols and features
The latest AT command manual for the A76XX family is the 1.08 version, released on 2022/10/12. This is not easily found on SIMCOM's website (why??), but a copy can be found by searching the string "A76XX_Series_AT_Command_Manual_V1.08" in Google.

Based on the AT command manual, the table below shows the protocols that are natively supported by the firmware described in the v1.08 version of the firmware documentation, along with their current support in this library. Native clients that have a secure option (SSL/TLS) are indicated with a trailing [S].
The table below shows the protocols that are natively supported by the firmware described in the latest AT command manual for the A76XX family of modems, along with their current support in this library. Native clients that have a secure option (SSL/TLS) are indicated with a trailing [S].

| Protocol/Feature | Currently supported |
| ---------------- | ------------------ |
| BlueTooth | No |
| COAP | No |
| FTP[S] | No |
| HTTP[S] | Yes |
| LwM2M | No |
| LWM2M | No |
| MQTT[S] | Yes |
| SMS | No |
| SMTPS | No |
Expand All @@ -41,4 +39,19 @@ The table below shows a list of A76XX modules and the protocols/features that ha


## Documentation and examples
The documentation is a bit lacking at the moment, as I am focusing on implementing new features. There are several examples available in this repo that demonstrate what functionality is enabled with this library. Pull requests are welcome!
There are no proper documentation pages at the moment, but doxygen-like documentation is available in the header files and will at some point collected into a proper auto-generated documentation page. There are several examples available in this repo that demonstrate what functionality is enabled with this library. Pull requests are welcome!

## Library structure
This section's purpose is to illustrate the code structure and to introduce some of the key classes defined in this library. More details on the usage of various components can be inferred from the documentation embedded in the source code.

### `ModemSerial` – an Arduino's `Serial` object on steroids
The foundation of the library is the class `ModemSerial`. This is a thin wrapper around the Arduino's `Serial` object used to talk to the SIMCOM module. This class adds several features that are required to send, receive and parse AT commands, in addition to capturing and queueing unsolicited result codes emitted by the module (e.g. when receiving an MQTT message of a subscription). You do not need to use this class, but it's used everywhere else in the library, so you might want to look at it first if you want to contribute to this repo.

### AT commands wrappers (low-level)
Given an instance of `ModemSerial`, AT commands can be issued to the module and the response can be read and parsed appropriately. One of the goals of this library is to mirror quite closely the AT command manual from SIMCOM. In the manual, AT commands are grouped by category in chapters, e.g. network, status control, packet domain, etc. For each of this category, the library defines a header files defining a class in the directory `src/commands`, where some of commands are implemented by member functions. These are low level wrappers to send and parse AT commands, so that other parts of the library or user code does not need to deal with tedious parsing, leading to more robust and reusable code. Most of these member functions return an `int8_t` return code, signalling a successful operation or an error code.

### `A76XX` - the modem (high level)
This class is what you will use directly most of the time to connect to the network, etc. It is a wrapper around a `ModemSerial` object and the low-level AT commands implementations, and provides a more intuitive interface to use in sketches.

### Native clients for network protocols supported by the SIMCOM firmware
The SIMCOM firmware provides native clients for some network protocols, e.g. MQTT. The AT commands required for these protocols are quite low level and quite annoying to use directy. Hence, each protocol can be accessed through a high-level client object, wrapping the low-level interface, and providing a more intuitive interface.

0 comments on commit f38ba76

Please sign in to comment.