RockBLOCK 9704 C Library
Doxygen documentation for the RockBLOCK 9704 C Library.
Loading...
Searching...
No Matches
rockblock_9704.h
Go to the documentation of this file.
1#ifndef ROCKBLOCK_9704_H
2#define ROCKBLOCK_9704_H
3
10#if defined(__linux__) || defined(__APPLE__)
11 #include "serial_presets/serial_linux/serial_linux.h"
12#elif defined(_WIN32)
13 #include "serial_presets/serial_windows/serial_windows.h"
14#elif defined(ARDUINO) && defined(__cplusplus)
15 #include "serial_presets/serial_arduino/serial_arduino.h"
16#endif
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22#include "serial.h"
23#include "jspr.h"
24#include <stdio.h>
25#include <stdint.h>
26#include <stdbool.h>
27#include <string.h>
28#include <stddef.h>
29
49
57typedef struct
58{
64 void (*messageProvisioning)(const jsprMessageProvisioning_t *messageProvisioning);
65
73 void (*moMessageComplete)(const uint16_t id, const rbMsgStatus_t status);
74
82 void (*mtMessageComplete)(const uint16_t id, const rbMsgStatus_t status);
83
89 void (*constellationState)(const jsprConstellationState_t *state);
90
96 void (*moMessageStarted)(const uint16_t id);
97
108 void (*messageActivityStatus)(const bool active);
110
119void rbRegisterCallbacks(const rbCallbacks_t *callbacks);
120
124#define BASE64_TEMP_BUFFER 2048U
125
131#define RB9704_BAUD 230400U
132
151#ifndef SERIAL_CONTEXT_SETUP_FUNC
152 #ifdef __linux__
153 #define SERIAL_CONTEXT_SETUP_FUNC setContextLinux
154 #elif __APPLE__
155 #define SERIAL_CONTEXT_SETUP_FUNC setContextLinux
156 #elif _WIN32
157 #define SERIAL_CONTEXT_SETUP_FUNC setContextWindows
158 #elif ARDUINO
159 #define SERIAL_CONTEXT_SETUP_FUNC setContextArduino
160 #endif
161#endif
162
169typedef enum
170{
173
176
179
182
185
187 YELLOW_TOPIC = 317
189
190
191#if defined(ARDUINO) && defined(__cplusplus)
192 } // End extern "C"
193
206 bool rbBegin(Stream &port);
207
208 // Redefine extern C
209 extern "C" {
210#else
223 bool rbBegin(const char * port);
224#endif
225
231bool rbEnd(void);
232
241bool rbSendMessage(const char * data, const size_t length, const int timeout);
242
252bool rbSendMessageCloudloop(cloudloopTopics_t topic, const char * data, const size_t length, const int timeout);
253
263bool rbSendMessageAny(uint16_t topic, const char * data, const size_t length, const int timeout);
264
275size_t rbReceiveMessage(char ** buffer);
276
288size_t rbReceiveMessageWithTopic(char ** buffer, uint16_t topic);
289
300size_t rbReceiveMessageAsync(char ** buffer);
301
313
321void rbReceiveLockAsync(void);
322
330void rbReceiveUnlockAsync(void);
331
339void rbSendLockAsync(void);
340
345void rbSendUnlockAsync(void);
346
359bool rbSendMessageAsync(uint16_t topic, const char * data, const size_t length);
360
373bool rbCancelMessage(const uint16_t topic, const uint16_t id);
374
381void rbPoll(void);
382
395int8_t rbGetSignal(void);
396
402char * rbGetHwVersion(void);
403
409char * rbGetSerialNumber(void);
410
416char * rbGetImei(void);
417
423int8_t rbGetBoardTemp(void);
424
432bool rbGetCardPresent(void);
433
443bool rbGetSimConnected(void);
444
450char * rbGetIccid(void);
451
459char * rbGetFirmwareVersion(void);
460
477bool rbResyncServiceConfig(void);
478
491bool rbSetMessageActivityStatus(const bool enabled);
492
503
504#if defined(KERMIT)
514typedef void(*updateProgressCallback)(void * context, const unsigned long sofar, const unsigned long total);
515
526bool rbUpdateFirmware (const char * firmwareFile, updateProgressCallback progress, void * context);
527#endif
528
529#ifdef RB_GPIO
530#include "gpio.h"
531
548bool rbBeginGpio(char * port, const rbGpioTable_t * gpioInfo, const int timeout);
549
558bool rbEndGpio(const rbGpioTable_t * gpioInfo);
559#endif
560
569static uint16_t calculateCrc(const uint8_t * buffer, const size_t bufferLength, const uint16_t initialCRC);
570
578static bool appendCrc(uint8_t * buffer, size_t length);
579
589static size_t encodeData(const char * srcBuffer, const size_t srcLength, char * destBuffer, const size_t destLength);
590
600static size_t decodeData(const char * srcBuffer, const size_t srcLength, char * destBuffer, const size_t destLength);
601
606void clearLeftoverData(void);
607
613bool setApi(void);
614
620bool setSim(void);
621
627bool setState(void);
628
635static bool checkProvisioning(uint16_t topic);
636
643static bool sendMoFromQueue(const int timeout);
644
650static bool listenForMt(void);
651
659
667
673static bool sendMoFromQueueAsync(void);
674
680static bool checkMoQueue(void);
681
682
683#ifdef __cplusplus
684}
685#endif
686
687#endif
serialContext context
Definition serial.c:6
jsprSimStatus_t simStatus
Definition rockblock_9704.c:38
jsprHwInfo_t hwInfo
Definition rockblock_9704.c:37
size_t rbReceiveMessage(char **buffer)
Listen for a mobile terminated message from the modem.
Definition rockblock_9704.c:491
static bool sendMoFromQueue(const int timeout)
Send a queued message using mobile originated (MO) transmission.
void clearLeftoverData(void)
Clear any stale data leftover in serial buffers.
Definition rockblock_9704.c:154
int8_t rbGetSignal(void)
Get the current signal strength from the modem.
Definition rockblock_9704.c:947
static bool getHwInfo(jsprHwInfo_t *hwInfo)
Retrieve hardware information from the modem.
bool rbSendMessageAny(uint16_t topic, const char *data, const size_t length, const int timeout)
Send a mobile originated message from the modem on any topic.
Definition rockblock_9704.c:406
bool rbEnd(void)
Uninitialise/close the the serial connection.
Definition rockblock_9704.c:1207
bool rbGetSimConnected(void)
Check if SIM card is present, communicating properly with, and has presented no errors in SIM transac...
Definition rockblock_9704.c:1047
static bool getSimStatus(jsprSimStatus_t *simStatus)
Get current SIM card status.
size_t rbReceiveMessageAsync(char **buffer)
Check if a valid message exists, stored at the head of the receiving queue.
Definition rockblock_9704.c:655
static size_t encodeData(const char *srcBuffer, const size_t srcLength, char *destBuffer, const size_t destLength)
Encode binary data to base64 format.
static bool checkProvisioning(uint16_t topic)
Check if the given topic is provisioned.
bool rbSendMessageAsync(uint16_t topic, const char *data, const size_t length)
Queue a message to be sent.
Definition rockblock_9704.c:608
bool rbGetMessageActivityStatus(jsprMessageActivityStatus_t *status)
Get the current messaging activity status from the modem.
Definition rockblock_9704.c:1174
void rbSendUnlockAsync(void)
Unlocks the sending queue so that old messages are discarded to make space for incoming ones.
Definition rockblock_9704.c:695
bool rbEndGpio(const rbGpioTable_t *gpioInfo)
Drives user defined pin (power enable) high and another user defined pin (iridium enable) low to dein...
Definition rockblock_9704.c:101
bool rbGetCardPresent(void)
Check if SIM presence is currently asserted.
Definition rockblock_9704.c:1037
static bool checkMoQueue(void)
Checks if any more messages have been queued, if so, send them.
int8_t rbGetBoardTemp(void)
Get the board temperature.
Definition rockblock_9704.c:1011
bool rbBegin(const char *port)
Initialise the the serial connection in the detected context (or user defined), if successful continu...
Definition rockblock_9704.c:293
static size_t decodeData(const char *srcBuffer, const size_t srcLength, char *destBuffer, const size_t destLength)
Decode base64 data back into binary.
static bool listenForMt(void)
Listen for an incoming mobile terminated (MT) message.
size_t rbReceiveMessageWithTopic(char **buffer, uint16_t topic)
Listen for a mobile terminated message from the modem.
Definition rockblock_9704.c:513
static uint16_t calculateCrc(const uint8_t *buffer, const size_t bufferLength, const uint16_t initialCRC)
Calculate CRC for a buffer.
bool setSim(void)
Initialise SIM card configuration.
Definition rockblock_9704.c:207
static bool appendCrc(uint8_t *buffer, size_t length)
Append CRC to the end of a buffer.
bool rbSetMessageActivityStatus(const bool enabled)
Enable or disable unsolicited messageActivityStatus notifications.
Definition rockblock_9704.c:1161
rbMsgStatus_t
Indicates the result of a message operation.
Definition rockblock_9704.h:38
@ RB_MSG_STATUS_OK
Message was processed successfully.
Definition rockblock_9704.h:42
@ RB_MSG_STATUS_FAIL
Message failed to be processed.
Definition rockblock_9704.h:47
void rbPoll(void)
Polling function that handles all incoming communication from the modem.
Definition rockblock_9704.c:723
bool rbSendMessage(const char *data, const size_t length, const int timeout)
Send a mobile originated message from the modem on the default topic (244).
Definition rockblock_9704.c:362
void rbReceiveUnlockAsync(void)
Unlocks the receiving queue so that old messages are discarded to make space for incoming ones.
Definition rockblock_9704.c:685
bool setState(void)
Set operational state for the modem.
Definition rockblock_9704.c:245
cloudloopTopics_t
Predefined Cloudloop topic identifiers for RockBLOCK 9704.
Definition rockblock_9704.h:170
@ RAW_TOPIC
Definition rockblock_9704.h:172
@ PURPLE_TOPIC
Definition rockblock_9704.h:175
@ PINK_TOPIC
Definition rockblock_9704.h:178
@ ORANGE_TOPIC
Definition rockblock_9704.h:184
@ RED_TOPIC
Definition rockblock_9704.h:181
@ YELLOW_TOPIC
Definition rockblock_9704.h:187
char * rbGetHwVersion(void)
Get the hardware version.
Definition rockblock_9704.c:991
bool rbBeginGpio(char *port, const rbGpioTable_t *gpioInfo, const int timeout)
Drives user defined pin (power enable) low and user defined pin (iridium enable) high to initialise t...
Definition rockblock_9704.c:81
char * rbGetSerialNumber(void)
Get the serial number.
Definition rockblock_9704.c:1001
void rbSendLockAsync(void)
Locks the sending queue so that old messages aren't discarded when incoming ones arrive.
Definition rockblock_9704.c:690
bool rbUpdateFirmware(const char *firmwareFile, updateProgressCallback progress, void *context)
Update 9704 firmware. This is a blocking call and will take approximately 10 minutes to upgrade,...
Definition rockblock_9704.c:1284
char * rbGetImei(void)
Get the imei.
Definition rockblock_9704.c:981
char * rbGetFirmwareVersion(void)
Get the Iridium modem firmware version as vX.Y.X with X being the major number, Y being the minor num...
Definition rockblock_9704.c:1086
static bool sendMoFromQueueAsync(void)
Send a the modem a request to queue a message.
bool rbResyncServiceConfig(void)
Requests a resynchronisation of the service configuration.
Definition rockblock_9704.c:1103
char * rbGetIccid(void)
Get the iccid.
Definition rockblock_9704.c:1057
bool rbSendMessageCloudloop(cloudloopTopics_t topic, const char *data, const size_t length, const int timeout)
Send a mobile originated message from the modem on a cloudloop topic of choice.
Definition rockblock_9704.c:384
bool setApi(void)
Set the modem API version.
Definition rockblock_9704.c:172
void(* updateProgressCallback)(void *context, const unsigned long sofar, const unsigned long total)
A callback definition for the kermit transfer.
Definition rockblock_9704.h:514
void rbRegisterCallbacks(const rbCallbacks_t *callbacks)
Registers a set of user-defined callbacks with the library.
Definition rockblock_9704.c:71
void rbReceiveLockAsync(void)
Locks the receiving queue so that old messages aren't discarded when incoming ones arrive.
Definition rockblock_9704.c:680
bool rbCancelMessage(const uint16_t topic, const uint16_t id)
Cancel a message.
Definition rockblock_9704.c:638
bool rbAcknowledgeReceiveHeadAsync(void)
Acknowledge the head of the receiving queue by discarding it.
Definition rockblock_9704.c:700
Definition jspr.h:202
Definition jspr.h:276
Definition jspr.h:291
Definition jspr.h:269
Definition jspr.h:284
Struct containing user defined callback functions for asynchronous operations.
Definition rockblock_9704.h:58
void(* messageProvisioning)(const jsprMessageProvisioning_t *messageProvisioning)
Callback for message provisioning info once its been obtained.
Definition rockblock_9704.h:64
Definition gpio.h:26