101 lines
2.5 KiB
C
101 lines
2.5 KiB
C
#include <mqttComm.h>
|
|
#include <logger.h>
|
|
#include <PontCoopScheduler.h>
|
|
#include <wizHelper.h>
|
|
|
|
#include <stdint.h>
|
|
#include <string.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;
|
|
uint8_t *host;
|
|
uint16_t port;
|
|
int showtopics;
|
|
} opts ={ (char*)"stdout-subscriber", 0, (char*)"\n", QOS0, NULL, NULL, NULL, 0, 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);
|
|
logMsg("Connected %d\r\n", rc);
|
|
|
|
// opts.showtopics = 1;
|
|
|
|
// logMsg("Subscribing to %s\r\n", "hello/wiznet");
|
|
// rc = MQTTSubscribe(&mqttClient, "hello/wiznet", opts.qos, messageArrived);
|
|
// logMsg("Subscribed %d\r\n", rc);
|
|
|
|
// schAdd(mqttHandler, NULL, 0, 10);
|
|
}
|
|
}
|