start mqtt stuff
This commit is contained in:
99
cube/User/Src/mqttComm.c
Normal file
99
cube/User/Src/mqttComm.c
Normal file
@ -0,0 +1,99 @@
|
||||
#include <mqttComm.h>
|
||||
#include <logger.h>
|
||||
#include <PontCoopScheduler.h>
|
||||
#include <wizHelper.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <mqtt_interface.h>
|
||||
#include <MQTTClient.h>
|
||||
|
||||
|
||||
|
||||
#define RX_BUFFER_SIZE 2048
|
||||
static uint8_t rxBuffer[RX_BUFFER_SIZE];
|
||||
|
||||
#define TX_BUFFER_SIZE 128
|
||||
static uint8_t txBuffer[TX_BUFFER_SIZE];
|
||||
|
||||
extern const uint8_t MQTT_SOCK;
|
||||
|
||||
|
||||
|
||||
static uint8_t targetIP[4] = { 172, 16, 2, 16 };
|
||||
static uint16_t targetPort = 1883;
|
||||
|
||||
struct opts_struct
|
||||
{
|
||||
char* clientid;
|
||||
int nodelimiter;
|
||||
char* delimiter;
|
||||
enum QoS qos;
|
||||
char* username;
|
||||
char* password;
|
||||
char* host;
|
||||
int port;
|
||||
int showtopics;
|
||||
} opts ={ (char*)"stdout-subscriber", 0, (char*)"\n", QOS0, NULL, NULL, targetIP, targetPort, 0 };
|
||||
|
||||
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
|
||||
|
||||
MQTTClient mqttClient;
|
||||
|
||||
|
||||
static void messageArrived(MessageData* md)
|
||||
{
|
||||
unsigned char testbuffer[100];
|
||||
MQTTMessage* message = md->message;
|
||||
|
||||
if (opts.showtopics)
|
||||
{
|
||||
memcpy(testbuffer,(char*)message->payload,(int)message->payloadlen);
|
||||
*(testbuffer + (int)message->payloadlen + 1) = "\n";
|
||||
logMsg("%s\r\n",testbuffer);
|
||||
}
|
||||
|
||||
if (opts.nodelimiter)
|
||||
logMsg("%.*s", (int)message->payloadlen, (char*)message->payload);
|
||||
else
|
||||
logMsg("%.*s%s", (int)message->payloadlen, (char*)message->payload, opts.delimiter);
|
||||
}
|
||||
|
||||
static void mqttHandler(void *handle) {
|
||||
MQTTYield(&mqttClient, data.keepAliveInterval);
|
||||
}
|
||||
|
||||
void mqttCommInit(void *handle) {
|
||||
if (! isNetworkAvailable()) {
|
||||
coloredMsg(LOG_RED, "mqci, can not start mqtt yet, network unavailable, try again in a second");
|
||||
schAdd(mqttCommInit, NULL, 1000, 0);
|
||||
} else {
|
||||
coloredMsg(LOG_RED, "mqci, starting mqtt");
|
||||
|
||||
Network n;
|
||||
|
||||
NewNetwork(&n, MQTT_SOCK);
|
||||
ConnectNetwork(&n, targetIP, targetPort);
|
||||
MQTTClientInit(&mqttClient, &n, 1000, txBuffer, TX_BUFFER_SIZE, rxBuffer, RX_BUFFER_SIZE);
|
||||
|
||||
data.willFlag = 0;
|
||||
data.MQTTVersion = 3;
|
||||
data.clientID.cstring = opts.clientid;
|
||||
data.username.cstring = opts.username;
|
||||
data.password.cstring = opts.password;
|
||||
|
||||
data.keepAliveInterval = 60;
|
||||
data.cleansession = 1;
|
||||
|
||||
int rc = MQTTConnect(&mqttClient, &data);
|
||||
printf("Connected %d\r\n", rc);
|
||||
|
||||
opts.showtopics = 1;
|
||||
|
||||
printf("Subscribing to %s\r\n", "hello/wiznet");
|
||||
rc = MQTTSubscribe(&mqttClient, "hello/wiznet", opts.qos, messageArrived);
|
||||
printf("Subscribed %d\r\n", rc);
|
||||
|
||||
schAdd(mqttHandler, NULL, 0, 10);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user