MQTT client to test the ENC28J60-EMAC on NUCLEO-F446RE.

Dependencies:   ENC28J60-EMAC

Committer:
hudakz
Date:
Mon Mar 29 09:32:44 2021 +0000
Revision:
5:d9570dbf2f82
Parent:
0:238f0d0c0ba3
MQTT client to test the ENC28J60-EMAC on NUCLEO-F446RE.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:238f0d0c0ba3 1 /*******************************************************************************
hudakz 0:238f0d0c0ba3 2 * Copyright (c) 2014 IBM Corp.
hudakz 0:238f0d0c0ba3 3 *
hudakz 0:238f0d0c0ba3 4 * All rights reserved. This program and the accompanying materials
hudakz 0:238f0d0c0ba3 5 * are made available under the terms of the Eclipse Public License v1.0
hudakz 0:238f0d0c0ba3 6 * and Eclipse Distribution License v1.0 which accompany this distribution.
hudakz 0:238f0d0c0ba3 7 *
hudakz 0:238f0d0c0ba3 8 * The Eclipse Public License is available at
hudakz 0:238f0d0c0ba3 9 * http://www.eclipse.org/legal/epl-v10.html
hudakz 0:238f0d0c0ba3 10 * and the Eclipse Distribution License is available at
hudakz 0:238f0d0c0ba3 11 * http://www.eclipse.org/org/documents/edl-v10.php.
hudakz 0:238f0d0c0ba3 12 *
hudakz 0:238f0d0c0ba3 13 * Contributors:
hudakz 0:238f0d0c0ba3 14 * Ian Craggs - initial API and implementation and/or initial documentation
hudakz 0:238f0d0c0ba3 15 * Xiang Rong - 442039 Add makefile to Embedded C client
hudakz 0:238f0d0c0ba3 16 *******************************************************************************/
hudakz 0:238f0d0c0ba3 17
hudakz 0:238f0d0c0ba3 18 #ifndef MQTTPACKET_H_
hudakz 0:238f0d0c0ba3 19 #define MQTTPACKET_H_
hudakz 0:238f0d0c0ba3 20
hudakz 0:238f0d0c0ba3 21 #if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */
hudakz 0:238f0d0c0ba3 22 extern "C" {
hudakz 0:238f0d0c0ba3 23 #endif
hudakz 0:238f0d0c0ba3 24
hudakz 0:238f0d0c0ba3 25 #if defined(WIN32_DLL) || defined(WIN64_DLL)
hudakz 0:238f0d0c0ba3 26 #define DLLImport __declspec(dllimport)
hudakz 0:238f0d0c0ba3 27 #define DLLExport __declspec(dllexport)
hudakz 0:238f0d0c0ba3 28 #elif defined(LINUX_SO)
hudakz 0:238f0d0c0ba3 29 #define DLLImport extern
hudakz 0:238f0d0c0ba3 30 #define DLLExport __attribute__ ((visibility ("default")))
hudakz 0:238f0d0c0ba3 31 #else
hudakz 0:238f0d0c0ba3 32 #define DLLImport
hudakz 0:238f0d0c0ba3 33 #define DLLExport
hudakz 0:238f0d0c0ba3 34 #endif
hudakz 0:238f0d0c0ba3 35
hudakz 0:238f0d0c0ba3 36 enum errors
hudakz 0:238f0d0c0ba3 37 {
hudakz 0:238f0d0c0ba3 38 MQTTPACKET_BUFFER_TOO_SHORT = -2,
hudakz 0:238f0d0c0ba3 39 MQTTPACKET_READ_ERROR = -1,
hudakz 0:238f0d0c0ba3 40 MQTTPACKET_READ_COMPLETE
hudakz 0:238f0d0c0ba3 41 };
hudakz 0:238f0d0c0ba3 42
hudakz 0:238f0d0c0ba3 43 enum msgTypes
hudakz 0:238f0d0c0ba3 44 {
hudakz 0:238f0d0c0ba3 45 CONNECT = 1, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL,
hudakz 0:238f0d0c0ba3 46 PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK,
hudakz 0:238f0d0c0ba3 47 PINGREQ, PINGRESP, DISCONNECT
hudakz 0:238f0d0c0ba3 48 };
hudakz 0:238f0d0c0ba3 49
hudakz 0:238f0d0c0ba3 50 /**
hudakz 0:238f0d0c0ba3 51 * Bitfields for the MQTT header byte.
hudakz 0:238f0d0c0ba3 52 */
hudakz 0:238f0d0c0ba3 53 typedef union
hudakz 0:238f0d0c0ba3 54 {
hudakz 0:238f0d0c0ba3 55 unsigned char byte; /**< the whole byte */
hudakz 0:238f0d0c0ba3 56 #if defined(REVERSED)
hudakz 0:238f0d0c0ba3 57 struct
hudakz 0:238f0d0c0ba3 58 {
hudakz 0:238f0d0c0ba3 59 unsigned int type : 4; /**< message type nibble */
hudakz 0:238f0d0c0ba3 60 unsigned int dup : 1; /**< DUP flag bit */
hudakz 0:238f0d0c0ba3 61 unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */
hudakz 0:238f0d0c0ba3 62 unsigned int retain : 1; /**< retained flag bit */
hudakz 0:238f0d0c0ba3 63 } bits;
hudakz 0:238f0d0c0ba3 64 #else
hudakz 0:238f0d0c0ba3 65 struct
hudakz 0:238f0d0c0ba3 66 {
hudakz 0:238f0d0c0ba3 67 unsigned int retain : 1; /**< retained flag bit */
hudakz 0:238f0d0c0ba3 68 unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */
hudakz 0:238f0d0c0ba3 69 unsigned int dup : 1; /**< DUP flag bit */
hudakz 0:238f0d0c0ba3 70 unsigned int type : 4; /**< message type nibble */
hudakz 0:238f0d0c0ba3 71 } bits;
hudakz 0:238f0d0c0ba3 72 #endif
hudakz 0:238f0d0c0ba3 73 } MQTTHeader;
hudakz 0:238f0d0c0ba3 74
hudakz 0:238f0d0c0ba3 75 typedef struct
hudakz 0:238f0d0c0ba3 76 {
hudakz 0:238f0d0c0ba3 77 int len;
hudakz 0:238f0d0c0ba3 78 char* data;
hudakz 0:238f0d0c0ba3 79 } MQTTLenString;
hudakz 0:238f0d0c0ba3 80
hudakz 0:238f0d0c0ba3 81 typedef struct
hudakz 0:238f0d0c0ba3 82 {
hudakz 0:238f0d0c0ba3 83 char* cstring;
hudakz 0:238f0d0c0ba3 84 MQTTLenString lenstring;
hudakz 0:238f0d0c0ba3 85 } MQTTString;
hudakz 0:238f0d0c0ba3 86
hudakz 0:238f0d0c0ba3 87 #define MQTTString_initializer {NULL, {0, NULL}}
hudakz 0:238f0d0c0ba3 88
hudakz 0:238f0d0c0ba3 89 int MQTTstrlen(MQTTString mqttstring);
hudakz 0:238f0d0c0ba3 90
hudakz 0:238f0d0c0ba3 91 #include "MQTTConnect.h"
hudakz 0:238f0d0c0ba3 92 #include "MQTTPublish.h"
hudakz 0:238f0d0c0ba3 93 #include "MQTTSubscribe.h"
hudakz 0:238f0d0c0ba3 94 #include "MQTTUnsubscribe.h"
hudakz 0:238f0d0c0ba3 95 #include "MQTTFormat.h"
hudakz 0:238f0d0c0ba3 96
hudakz 0:238f0d0c0ba3 97 DLLExport int MQTTSerialize_ack(unsigned char* buf, int buflen, unsigned char type, unsigned char dup, unsigned short packetid);
hudakz 0:238f0d0c0ba3 98 DLLExport int MQTTDeserialize_ack(unsigned char* packettype, unsigned char* dup, unsigned short* packetid, unsigned char* buf, int buflen);
hudakz 0:238f0d0c0ba3 99
hudakz 0:238f0d0c0ba3 100 int MQTTPacket_len(int rem_len);
hudakz 0:238f0d0c0ba3 101 DLLExport int MQTTPacket_equals(MQTTString* a, char* b);
hudakz 0:238f0d0c0ba3 102
hudakz 0:238f0d0c0ba3 103 DLLExport int MQTTPacket_encode(unsigned char* buf, int length);
hudakz 0:238f0d0c0ba3 104 int MQTTPacket_decode(int (*getcharfn)(unsigned char*, int), int* value);
hudakz 0:238f0d0c0ba3 105 int MQTTPacket_decodeBuf(unsigned char* buf, int* value);
hudakz 0:238f0d0c0ba3 106
hudakz 0:238f0d0c0ba3 107 int readInt(unsigned char** pptr);
hudakz 0:238f0d0c0ba3 108 char readChar(unsigned char** pptr);
hudakz 0:238f0d0c0ba3 109 void writeChar(unsigned char** pptr, char c);
hudakz 0:238f0d0c0ba3 110 void writeInt(unsigned char** pptr, int anInt);
hudakz 0:238f0d0c0ba3 111 int readMQTTLenString(MQTTString* mqttstring, unsigned char** pptr, unsigned char* enddata);
hudakz 0:238f0d0c0ba3 112 void writeCString(unsigned char** pptr, const char* string);
hudakz 0:238f0d0c0ba3 113 void writeMQTTString(unsigned char** pptr, MQTTString mqttstring);
hudakz 0:238f0d0c0ba3 114
hudakz 0:238f0d0c0ba3 115 DLLExport int MQTTPacket_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int));
hudakz 0:238f0d0c0ba3 116
hudakz 0:238f0d0c0ba3 117 typedef struct {
hudakz 0:238f0d0c0ba3 118 int (*getfn)(void *, unsigned char*, int); /* must return -1 for error, 0 for call again, or the number of bytes read */
hudakz 0:238f0d0c0ba3 119 void *sck; /* pointer to whatever the system may use to identify the transport */
hudakz 0:238f0d0c0ba3 120 int multiplier;
hudakz 0:238f0d0c0ba3 121 int rem_len;
hudakz 0:238f0d0c0ba3 122 int len;
hudakz 0:238f0d0c0ba3 123 char state;
hudakz 0:238f0d0c0ba3 124 }MQTTTransport;
hudakz 0:238f0d0c0ba3 125
hudakz 0:238f0d0c0ba3 126 int MQTTPacket_readnb(unsigned char* buf, int buflen, MQTTTransport *trp);
hudakz 0:238f0d0c0ba3 127
hudakz 0:238f0d0c0ba3 128 #ifdef __cplusplus /* If this is a C++ compiler, use C linkage */
hudakz 0:238f0d0c0ba3 129 }
hudakz 0:238f0d0c0ba3 130 #endif
hudakz 0:238f0d0c0ba3 131
hudakz 0:238f0d0c0ba3 132
hudakz 0:238f0d0c0ba3 133 #endif /* MQTTPACKET_H_ */