99 lines
2.5 KiB
C
99 lines
2.5 KiB
C
|
#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);
|
||
|
}
|
||
|
}
|