#include #include #include #include #include #include #include #include #include #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) { show(DEBUG_2, ON); MQTTYield(&mqttClient, data.keepAliveInterval); show(DEBUG_2, OFF); } 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, 100); } }