99 lines
2.5 KiB
C
Raw Normal View History

2020-11-10 15:56:07 +01:00
#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);
}
}