1
0
mirror of https://github.com/FreeRTOS/coreMQTT synced 2025-05-12 21:35:41 +08:00
coreMQTT/latest/core__mqtt__serializer_8h.html

1676 lines
162 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.6"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>coreMQTT: core_mqtt_serializer.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">coreMQTT<span id="projectnumber">&#160;v2.3.1</span>
</div>
<div id="projectbrief">MQTT 3.1.1 Client Library</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.6 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('core__mqtt__serializer_8h.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle"><div class="title">core_mqtt_serializer.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>User-facing functions for serializing and deserializing MQTT 3.1.1 packets. This header should be included for building a lighter weight MQTT client than the managed CSDK MQTT library API in <a class="el" href="core__mqtt_8h.html" title="User-facing functions of the MQTT 3.1.1 library.">core_mqtt.h</a>, by using the serializer and de-serializer functions exposed in this file's API.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;stddef.h&gt;</code><br />
<code>#include &lt;stdint.h&gt;</code><br />
<code>#include &lt;stdbool.h&gt;</code><br />
<code>#include &quot;<a class="el" href="transport__interface_8h_source.html">transport_interface.h</a>&quot;</code><br />
</div>
<p><a href="core__mqtt__serializer_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Buffer passed to MQTT library. <a href="struct_m_q_t_t_fixed_buffer__t.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_m_q_t_t_connect_info__t.html">MQTTConnectInfo_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">MQTT CONNECT packet parameters. <a href="struct_m_q_t_t_connect_info__t.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">MQTT SUBSCRIBE packet parameters. <a href="struct_m_q_t_t_subscribe_info__t.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">MQTT PUBLISH packet parameters. <a href="struct_m_q_t_t_publish_info__t.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">MQTT incoming packet parameters. <a href="struct_m_q_t_t_packet_info__t.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga64a0515bda2ecc89e97595535e1cf0ef"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_CONNECT</b>&#160;&#160;&#160;( ( uint8_t ) 0x10U )</td></tr>
<tr class="memdesc:ga64a0515bda2ecc89e97595535e1cf0ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">CONNECT (client-to-server). <br /></td></tr>
<tr class="separator:ga64a0515bda2ecc89e97595535e1cf0ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab14f6c39c303eac1a76816edfde7feab"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_CONNACK</b>&#160;&#160;&#160;( ( uint8_t ) 0x20U )</td></tr>
<tr class="memdesc:gab14f6c39c303eac1a76816edfde7feab"><td class="mdescLeft">&#160;</td><td class="mdescRight">CONNACK (server-to-client). <br /></td></tr>
<tr class="separator:gab14f6c39c303eac1a76816edfde7feab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5b2d79c61f2591c8e5772f974826d4ad"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_PUBLISH</b>&#160;&#160;&#160;( ( uint8_t ) 0x30U )</td></tr>
<tr class="memdesc:ga5b2d79c61f2591c8e5772f974826d4ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUBLISH (bidirectional). <br /></td></tr>
<tr class="separator:ga5b2d79c61f2591c8e5772f974826d4ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5f279d63de47a973b41b95f74f47a4f6"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_PUBACK</b>&#160;&#160;&#160;( ( uint8_t ) 0x40U )</td></tr>
<tr class="memdesc:ga5f279d63de47a973b41b95f74f47a4f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUBACK (bidirectional). <br /></td></tr>
<tr class="separator:ga5f279d63de47a973b41b95f74f47a4f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafa2d8f28da39560f152076b99610e6a3"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_PUBREC</b>&#160;&#160;&#160;( ( uint8_t ) 0x50U )</td></tr>
<tr class="memdesc:gafa2d8f28da39560f152076b99610e6a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUBREC (bidirectional). <br /></td></tr>
<tr class="separator:gafa2d8f28da39560f152076b99610e6a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaeaa2ceecffda50e2d22ccecf046083c6"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_PUBREL</b>&#160;&#160;&#160;( ( uint8_t ) 0x62U )</td></tr>
<tr class="memdesc:gaeaa2ceecffda50e2d22ccecf046083c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUBREL (bidirectional). <br /></td></tr>
<tr class="separator:gaeaa2ceecffda50e2d22ccecf046083c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga478ecbc98d2ca83d4ce7db33622b5c3b"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_PUBCOMP</b>&#160;&#160;&#160;( ( uint8_t ) 0x70U )</td></tr>
<tr class="memdesc:ga478ecbc98d2ca83d4ce7db33622b5c3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUBCOMP (bidirectional). <br /></td></tr>
<tr class="separator:ga478ecbc98d2ca83d4ce7db33622b5c3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga80cfef333e60d967ca927b2e5e665f18"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_SUBSCRIBE</b>&#160;&#160;&#160;( ( uint8_t ) 0x82U )</td></tr>
<tr class="memdesc:ga80cfef333e60d967ca927b2e5e665f18"><td class="mdescLeft">&#160;</td><td class="mdescRight">SUBSCRIBE (client-to-server). <br /></td></tr>
<tr class="separator:ga80cfef333e60d967ca927b2e5e665f18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga307e0186aa17fdd0d6d181d3d2715766"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_SUBACK</b>&#160;&#160;&#160;( ( uint8_t ) 0x90U )</td></tr>
<tr class="memdesc:ga307e0186aa17fdd0d6d181d3d2715766"><td class="mdescLeft">&#160;</td><td class="mdescRight">SUBACK (server-to-client). <br /></td></tr>
<tr class="separator:ga307e0186aa17fdd0d6d181d3d2715766"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4a94c954cfcea31c8fc3e2adf092b228"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_UNSUBSCRIBE</b>&#160;&#160;&#160;( ( uint8_t ) 0xA2U )</td></tr>
<tr class="memdesc:ga4a94c954cfcea31c8fc3e2adf092b228"><td class="mdescLeft">&#160;</td><td class="mdescRight">UNSUBSCRIBE (client-to-server). <br /></td></tr>
<tr class="separator:ga4a94c954cfcea31c8fc3e2adf092b228"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga38bc8ed0b9a1581cf85cecdede7d1a64"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_UNSUBACK</b>&#160;&#160;&#160;( ( uint8_t ) 0xB0U )</td></tr>
<tr class="memdesc:ga38bc8ed0b9a1581cf85cecdede7d1a64"><td class="mdescLeft">&#160;</td><td class="mdescRight">UNSUBACK (server-to-client). <br /></td></tr>
<tr class="separator:ga38bc8ed0b9a1581cf85cecdede7d1a64"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacbe28c7d081275d1805c2142ff792185"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_PINGREQ</b>&#160;&#160;&#160;( ( uint8_t ) 0xC0U )</td></tr>
<tr class="memdesc:gacbe28c7d081275d1805c2142ff792185"><td class="mdescLeft">&#160;</td><td class="mdescRight">PINGREQ (client-to-server). <br /></td></tr>
<tr class="separator:gacbe28c7d081275d1805c2142ff792185"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga285fc02048e2482794042fa98639e514"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_PINGRESP</b>&#160;&#160;&#160;( ( uint8_t ) 0xD0U )</td></tr>
<tr class="memdesc:ga285fc02048e2482794042fa98639e514"><td class="mdescLeft">&#160;</td><td class="mdescRight">PINGRESP (server-to-client). <br /></td></tr>
<tr class="separator:ga285fc02048e2482794042fa98639e514"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaed07155a3d6fa4b7624b9f36ed33ec6d"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PACKET_TYPE_DISCONNECT</b>&#160;&#160;&#160;( ( uint8_t ) 0xE0U )</td></tr>
<tr class="memdesc:gaed07155a3d6fa4b7624b9f36ed33ec6d"><td class="mdescLeft">&#160;</td><td class="mdescRight">DISCONNECT (client-to-server). <br /></td></tr>
<tr class="separator:gaed07155a3d6fa4b7624b9f36ed33ec6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga26994fcfacb1cff892caa45ec31ca7c6"><td class="memItemLeft" align="right" valign="top">
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MQTT_PUBLISH_ACK_PACKET_SIZE</b>&#160;&#160;&#160;( 4UL )</td></tr>
<tr class="memdesc:ga26994fcfacb1cff892caa45ec31ca7c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">The size of MQTT PUBACK, PUBREC, PUBREL, and PUBCOMP packets, per MQTT spec. <br /></td></tr>
<tr class="separator:ga26994fcfacb1cff892caa45ec31ca7c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gaba7ec045874a1c3432f99173367f735c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> { <br />
&#160;&#160;<a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> = 0
, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a>
, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735cab1be4db832a0468f024243bca151a8df">MQTTNoMemory</a>
, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735cafd06b63fe9677fa2af06b0f4c7d4ad55">MQTTSendFailed</a>
, <br />
&#160;&#160;<a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa14bc8aa4ad218702d782366945d43ac">MQTTRecvFailed</a>
, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa5d7507e7664a14d63a8bc44b280093e">MQTTBadResponse</a>
, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca25a3d1747e308e99daa805fe576f84b9">MQTTServerRefused</a>
, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca676f21c0ddf297ae3ec874bc829aa957">MQTTNoDataAvailable</a>
, <br />
&#160;&#160;<a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca67905d7a05f98faa557a73eb5092bd8f">MQTTIllegalState</a>
, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca8d05b92240dea6df08eab5a9e3799c11">MQTTStateCollision</a>
, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca076ca8965e836a06e707a94adb26144f">MQTTKeepAliveTimeout</a>
, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa97df53014d919df5ecd54398f89f9b9">MQTTNeedMoreBytes</a>
<br />
}</td></tr>
<tr class="memdesc:gaba7ec045874a1c3432f99173367f735c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return codes from MQTT functions. <a href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">More...</a><br /></td></tr>
<tr class="separator:gaba7ec045874a1c3432f99173367f735c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae308a5928d7f537379c29a894228093a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mqtt__enum__types.html#gae308a5928d7f537379c29a894228093a">MQTTQoS_t</a> { <a class="el" href="group__mqtt__enum__types.html#ggae308a5928d7f537379c29a894228093aaad51b23a1ae1417f96d8f343c788d1d2">MQTTQoS0</a> = 0
, <a class="el" href="group__mqtt__enum__types.html#ggae308a5928d7f537379c29a894228093aa019d0b8a8cfadb6f98462b046bdacbb2">MQTTQoS1</a> = 1
, <a class="el" href="group__mqtt__enum__types.html#ggae308a5928d7f537379c29a894228093aa85e04ac0465cbdef6dd69ff71b2bbfbb">MQTTQoS2</a> = 2
}</td></tr>
<tr class="memdesc:gae308a5928d7f537379c29a894228093a"><td class="mdescLeft">&#160;</td><td class="mdescRight">MQTT Quality of Service values. <a href="group__mqtt__enum__types.html#gae308a5928d7f537379c29a894228093a">More...</a><br /></td></tr>
<tr class="separator:gae308a5928d7f537379c29a894228093a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a4e57ccef527a25b572dc66eeb2e217c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a4e57ccef527a25b572dc66eeb2e217c5">MQTT_GetConnectPacketSize</a> (const <a class="el" href="struct_m_q_t_t_connect_info__t.html">MQTTConnectInfo_t</a> *pConnectInfo, const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *pWillInfo, size_t *pRemainingLength, size_t *pPacketSize)</td></tr>
<tr class="memdesc:a4e57ccef527a25b572dc66eeb2e217c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size and Remaining Length of an MQTT CONNECT packet. <br /></td></tr>
<tr class="separator:a4e57ccef527a25b572dc66eeb2e217c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2e2300d6c43e61f8f2cf83f7149835c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#aa2e2300d6c43e61f8f2cf83f7149835c">MQTT_SerializeConnect</a> (const <a class="el" href="struct_m_q_t_t_connect_info__t.html">MQTTConnectInfo_t</a> *pConnectInfo, const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *pWillInfo, size_t remainingLength, const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *pFixedBuffer)</td></tr>
<tr class="memdesc:aa2e2300d6c43e61f8f2cf83f7149835c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize an MQTT CONNECT packet in the given fixed buffer <code>pFixedBuffer</code>. <br /></td></tr>
<tr class="separator:aa2e2300d6c43e61f8f2cf83f7149835c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb9a703cb23ab39fdd6fe282a5f3ddc5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#abb9a703cb23ab39fdd6fe282a5f3ddc5">MQTT_GetSubscribePacketSize</a> (const <a class="el" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> *pSubscriptionList, size_t subscriptionCount, size_t *pRemainingLength, size_t *pPacketSize)</td></tr>
<tr class="memdesc:abb9a703cb23ab39fdd6fe282a5f3ddc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get packet size and Remaining Length of an MQTT SUBSCRIBE packet. <br /></td></tr>
<tr class="separator:abb9a703cb23ab39fdd6fe282a5f3ddc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a21273b13070e8340cc33b0f86bf79571"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a21273b13070e8340cc33b0f86bf79571">MQTT_SerializeSubscribe</a> (const <a class="el" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> *pSubscriptionList, size_t subscriptionCount, uint16_t packetId, size_t remainingLength, const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *pFixedBuffer)</td></tr>
<tr class="memdesc:a21273b13070e8340cc33b0f86bf79571"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize an MQTT SUBSCRIBE packet in the given buffer. <br /></td></tr>
<tr class="separator:a21273b13070e8340cc33b0f86bf79571"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a18563d5f63c8975b57118a6836c932"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a2a18563d5f63c8975b57118a6836c932">MQTT_GetUnsubscribePacketSize</a> (const <a class="el" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> *pSubscriptionList, size_t subscriptionCount, size_t *pRemainingLength, size_t *pPacketSize)</td></tr>
<tr class="memdesc:a2a18563d5f63c8975b57118a6836c932"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get packet size and Remaining Length of an MQTT UNSUBSCRIBE packet. <br /></td></tr>
<tr class="separator:a2a18563d5f63c8975b57118a6836c932"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab58219c203077c07ffd7061405e1adb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#aab58219c203077c07ffd7061405e1adb">MQTT_SerializeUnsubscribe</a> (const <a class="el" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> *pSubscriptionList, size_t subscriptionCount, uint16_t packetId, size_t remainingLength, const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *pFixedBuffer)</td></tr>
<tr class="memdesc:aab58219c203077c07ffd7061405e1adb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize an MQTT UNSUBSCRIBE packet in the given buffer. <br /></td></tr>
<tr class="separator:aab58219c203077c07ffd7061405e1adb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9971fb98c6af22b1bfe697d44492a819"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819">MQTT_GetPublishPacketSize</a> (const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *pPublishInfo, size_t *pRemainingLength, size_t *pPacketSize)</td></tr>
<tr class="memdesc:a9971fb98c6af22b1bfe697d44492a819"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the packet size and remaining length of an MQTT PUBLISH packet. <br /></td></tr>
<tr class="separator:a9971fb98c6af22b1bfe697d44492a819"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6c453f9c4b7f48aad511bc677ec7eb9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#ac6c453f9c4b7f48aad511bc677ec7eb9">MQTT_SerializePublish</a> (const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *pPublishInfo, uint16_t packetId, size_t remainingLength, const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *pFixedBuffer)</td></tr>
<tr class="memdesc:ac6c453f9c4b7f48aad511bc677ec7eb9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize an MQTT PUBLISH packet in the given buffer. <br /></td></tr>
<tr class="separator:ac6c453f9c4b7f48aad511bc677ec7eb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a32de7fabeca85a4d360fa1dd06ff7cd0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a32de7fabeca85a4d360fa1dd06ff7cd0">MQTT_SerializePublishHeaderWithoutTopic</a> (const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *pPublishInfo, size_t remainingLength, uint8_t *pBuffer, size_t *headerSize)</td></tr>
<tr class="memdesc:a32de7fabeca85a4d360fa1dd06ff7cd0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize an MQTT PUBLISH packet header without the topic string in the given buffer. This function will add the topic string length to the provided buffer. This helps reduce an unnecessary copy of the topic string into the buffer. <br /></td></tr>
<tr class="separator:a32de7fabeca85a4d360fa1dd06ff7cd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a659cf2bcaf2c5131daa0acc1917401a2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a659cf2bcaf2c5131daa0acc1917401a2">MQTT_SerializePublishHeader</a> (const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *pPublishInfo, uint16_t packetId, size_t remainingLength, const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *pFixedBuffer, size_t *pHeaderSize)</td></tr>
<tr class="memdesc:a659cf2bcaf2c5131daa0acc1917401a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize an MQTT PUBLISH packet header in the given buffer. <br /></td></tr>
<tr class="separator:a659cf2bcaf2c5131daa0acc1917401a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11ea4ac5ea27e93121288e463ca34ee6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a11ea4ac5ea27e93121288e463ca34ee6">MQTT_SerializeAck</a> (const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *pFixedBuffer, uint8_t packetType, uint16_t packetId)</td></tr>
<tr class="memdesc:a11ea4ac5ea27e93121288e463ca34ee6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize an MQTT PUBACK, PUBREC, PUBREL, or PUBCOMP into the given buffer. <br /></td></tr>
<tr class="separator:a11ea4ac5ea27e93121288e463ca34ee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fdd8cbde6b7c4ff85c20aaca0fd8741"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a6fdd8cbde6b7c4ff85c20aaca0fd8741">MQTT_GetDisconnectPacketSize</a> (size_t *pPacketSize)</td></tr>
<tr class="memdesc:a6fdd8cbde6b7c4ff85c20aaca0fd8741"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size of an MQTT DISCONNECT packet. <br /></td></tr>
<tr class="separator:a6fdd8cbde6b7c4ff85c20aaca0fd8741"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6aae40d4656eb533a74b67bf9c827d3b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a6aae40d4656eb533a74b67bf9c827d3b">MQTT_SerializeDisconnect</a> (const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *pFixedBuffer)</td></tr>
<tr class="memdesc:a6aae40d4656eb533a74b67bf9c827d3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize an MQTT DISCONNECT packet into the given buffer. <br /></td></tr>
<tr class="separator:a6aae40d4656eb533a74b67bf9c827d3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a015562f30e220d2534f773bfa45a5cfe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a015562f30e220d2534f773bfa45a5cfe">MQTT_GetPingreqPacketSize</a> (size_t *pPacketSize)</td></tr>
<tr class="memdesc:a015562f30e220d2534f773bfa45a5cfe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size of an MQTT PINGREQ packet. <br /></td></tr>
<tr class="separator:a015562f30e220d2534f773bfa45a5cfe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3b3e40858fd984c871511e02a61e15d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#af3b3e40858fd984c871511e02a61e15d">MQTT_SerializePingreq</a> (const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *pFixedBuffer)</td></tr>
<tr class="memdesc:af3b3e40858fd984c871511e02a61e15d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize an MQTT PINGREQ packet into the given buffer. <br /></td></tr>
<tr class="separator:af3b3e40858fd984c871511e02a61e15d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c2aec031f31d0fe55c1cda46544e95a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a4c2aec031f31d0fe55c1cda46544e95a">MQTT_DeserializePublish</a> (const <a class="el" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> *pIncomingPacket, uint16_t *pPacketId, <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *pPublishInfo)</td></tr>
<tr class="memdesc:a4c2aec031f31d0fe55c1cda46544e95a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserialize an MQTT PUBLISH packet. <br /></td></tr>
<tr class="separator:a4c2aec031f31d0fe55c1cda46544e95a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae9971855df71edf94124116e0625bf18"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#ae9971855df71edf94124116e0625bf18">MQTT_DeserializeAck</a> (const <a class="el" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> *pIncomingPacket, uint16_t *pPacketId, bool *pSessionPresent)</td></tr>
<tr class="memdesc:ae9971855df71edf94124116e0625bf18"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserialize an MQTT CONNACK, SUBACK, UNSUBACK, PUBACK, PUBREC, PUBREL, PUBCOMP, or PINGRESP. <br /></td></tr>
<tr class="separator:ae9971855df71edf94124116e0625bf18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98cdda86f86a0a1888745a584199e930"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a98cdda86f86a0a1888745a584199e930">MQTT_GetIncomingPacketTypeAndLength</a> (<a class="el" href="group__mqtt__callback__types.html#ga227df31d6daf07e5d833537c12130167">TransportRecv_t</a> readFunc, <a class="el" href="group__mqtt__struct__types.html#ga7769e434e7811caed8cd6fd7f9ec26ec">NetworkContext_t</a> *pNetworkContext, <a class="el" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> *pIncomingPacket)</td></tr>
<tr class="memdesc:a98cdda86f86a0a1888745a584199e930"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the MQTT packet type and length from incoming packet. <br /></td></tr>
<tr class="separator:a98cdda86f86a0a1888745a584199e930"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a94fd3f746074b3f6e16ae6b23dad9a28"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="core__mqtt__serializer_8h.html#a94fd3f746074b3f6e16ae6b23dad9a28">MQTT_ProcessIncomingPacketTypeAndLength</a> (const uint8_t *pBuffer, const size_t *pIndex, <a class="el" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> *pIncomingPacket)</td></tr>
<tr class="memdesc:a94fd3f746074b3f6e16ae6b23dad9a28"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the MQTT packet type and length from incoming packet. <br /></td></tr>
<tr class="separator:a94fd3f746074b3f6e16ae6b23dad9a28"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>User-facing functions for serializing and deserializing MQTT 3.1.1 packets. This header should be included for building a lighter weight MQTT client than the managed CSDK MQTT library API in <a class="el" href="core__mqtt_8h.html" title="User-facing functions of the MQTT 3.1.1 library.">core_mqtt.h</a>, by using the serializer and de-serializer functions exposed in this file's API. </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a4e57ccef527a25b572dc66eeb2e217c5" name="a4e57ccef527a25b572dc66eeb2e217c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4e57ccef527a25b572dc66eeb2e217c5">&#9670;&#160;</a></span>MQTT_GetConnectPacketSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_GetConnectPacketSize </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_connect_info__t.html">MQTTConnectInfo_t</a> *&#160;</td>
<td class="paramname"><em>pConnectInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *&#160;</td>
<td class="paramname"><em>pWillInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pRemainingLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pPacketSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the size and Remaining Length of an MQTT CONNECT packet. </p>
<p>This function must be called before <a class="el" href="core__mqtt__serializer_8h.html#aa2e2300d6c43e61f8f2cf83f7149835c" title="Serialize an MQTT CONNECT packet in the given fixed buffer pFixedBuffer.">MQTT_SerializeConnect</a> in order to get the size of the MQTT CONNECT packet that is generated from <a class="el" href="struct_m_q_t_t_connect_info__t.html" title="MQTT CONNECT packet parameters.">MQTTConnectInfo_t</a> and optional <a class="el" href="struct_m_q_t_t_publish_info__t.html" title="MQTT PUBLISH packet parameters.">MQTTPublishInfo_t</a>. The size of the <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> supplied to <a class="el" href="core__mqtt__serializer_8h.html#aa2e2300d6c43e61f8f2cf83f7149835c" title="Serialize an MQTT CONNECT packet in the given fixed buffer pFixedBuffer.">MQTT_SerializeConnect</a> must be at least <code>pPacketSize</code>. The provided <code>pConnectInfo</code> and <code>pWillInfo</code> are valid for serialization with <a class="el" href="core__mqtt__serializer_8h.html#aa2e2300d6c43e61f8f2cf83f7149835c" title="Serialize an MQTT CONNECT packet in the given fixed buffer pFixedBuffer.">MQTT_SerializeConnect</a> only if this function returns <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>. The remaining length returned in <code>pRemainingLength</code> and the packet size returned in <code>pPacketSize</code> are valid only if this function returns <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pConnectInfo</td><td>MQTT CONNECT packet parameters. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">pWillInfo</td><td>Last Will and Testament. Pass NULL if not used. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pRemainingLength</td><td>The Remaining Length of the MQTT CONNECT packet. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pPacketSize</td><td>The total size of the MQTT CONNECT packet.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if the packet would exceed the size allowed by the MQTT spec; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_connect_info__t.html">MQTTConnectInfo_t</a> connectInfo = { 0 };</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> willInfo = { 0 };</div>
<div class="line"><span class="keywordtype">size_t</span> remainingLength = 0, packetSize = 0;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Initialize the connection info, the details are out of scope for this example.</span></div>
<div class="line">initializeConnectInfo( &amp;connectInfo );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Initialize the optional will info, the details are out of scope for this example.</span></div>
<div class="line">initializeWillInfo( &amp;willInfo );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Get the size requirement for the connect packet.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a4e57ccef527a25b572dc66eeb2e217c5">MQTT_GetConnectPacketSize</a>(</div>
<div class="line"> &amp;connectInfo, &amp;willInfo, &amp;remainingLength, &amp;packetSize</div>
<div class="line">);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The application should allocate or use a static #MQTTFixedBuffer_t</span></div>
<div class="line"> <span class="comment">// of size &gt;= packetSize to serialize the connect request.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a4e57ccef527a25b572dc66eeb2e217c5"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a4e57ccef527a25b572dc66eeb2e217c5">MQTT_GetConnectPacketSize</a></div><div class="ttdeci">MQTTStatus_t MQTT_GetConnectPacketSize(const MQTTConnectInfo_t *pConnectInfo, const MQTTPublishInfo_t *pWillInfo, size_t *pRemainingLength, size_t *pPacketSize)</div><div class="ttdoc">Get the size and Remaining Length of an MQTT CONNECT packet.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:1690</div></div>
<div class="ttc" id="agroup__mqtt__enum__types_html_gaba7ec045874a1c3432f99173367f735c"><div class="ttname"><a href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a></div><div class="ttdeci">MQTTStatus_t</div><div class="ttdoc">Return codes from MQTT functions.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:87</div></div>
<div class="ttc" id="agroup__mqtt__enum__types_html_ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056"><div class="ttname"><a href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a></div><div class="ttdeci">@ MQTTSuccess</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:88</div></div>
<div class="ttc" id="astruct_m_q_t_t_connect_info__t_html"><div class="ttname"><a href="struct_m_q_t_t_connect_info__t.html">MQTTConnectInfo_t</a></div><div class="ttdoc">MQTT CONNECT packet parameters.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:133</div></div>
<div class="ttc" id="astruct_m_q_t_t_publish_info__t_html"><div class="ttname"><a href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a></div><div class="ttdoc">MQTT PUBLISH packet parameters.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:202</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="aa2e2300d6c43e61f8f2cf83f7149835c" name="aa2e2300d6c43e61f8f2cf83f7149835c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa2e2300d6c43e61f8f2cf83f7149835c">&#9670;&#160;</a></span>MQTT_SerializeConnect()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_SerializeConnect </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_connect_info__t.html">MQTTConnectInfo_t</a> *&#160;</td>
<td class="paramname"><em>pConnectInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *&#160;</td>
<td class="paramname"><em>pWillInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>remainingLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *&#160;</td>
<td class="paramname"><em>pFixedBuffer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Serialize an MQTT CONNECT packet in the given fixed buffer <code>pFixedBuffer</code>. </p>
<p><a class="el" href="core__mqtt__serializer_8h.html#a4e57ccef527a25b572dc66eeb2e217c5" title="Get the size and Remaining Length of an MQTT CONNECT packet.">MQTT_GetConnectPacketSize</a> should be called with <code>pConnectInfo</code> and <code>pWillInfo</code> before invoking this function to get the size of the required <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> and <code>remainingLength</code>. The <code>remainingLength</code> must be the same as returned by <a class="el" href="core__mqtt__serializer_8h.html#a4e57ccef527a25b572dc66eeb2e217c5" title="Get the size and Remaining Length of an MQTT CONNECT packet.">MQTT_GetConnectPacketSize</a>. The <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> must be at least as large as the size returned by <a class="el" href="core__mqtt__serializer_8h.html#a4e57ccef527a25b572dc66eeb2e217c5" title="Get the size and Remaining Length of an MQTT CONNECT packet.">MQTT_GetConnectPacketSize</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pConnectInfo</td><td>MQTT CONNECT packet parameters. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">pWillInfo</td><td>Last Will and Testament. Pass NULL if not used. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">remainingLength</td><td>Remaining Length provided by <a class="el" href="core__mqtt__serializer_8h.html#a4e57ccef527a25b572dc66eeb2e217c5" title="Get the size and Remaining Length of an MQTT CONNECT packet.">MQTT_GetConnectPacketSize</a>. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pFixedBuffer</td><td>Buffer for packet serialization.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735cab1be4db832a0468f024243bca151a8df">MQTTNoMemory</a> if pFixedBuffer is too small to hold the MQTT packet; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if invalid parameters are passed; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_connect_info__t.html">MQTTConnectInfo_t</a> connectInfo = { 0 };</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> willInfo = { 0 };</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> fixedBuffer;</div>
<div class="line">uint8_t buffer[ BUFFER_SIZE ];</div>
<div class="line"><span class="keywordtype">size_t</span> remainingLength = 0, packetSize = 0;</div>
<div class="line"> </div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#acea147448e044870fb36b7fa2347dbd6">pBuffer</a> = buffer;</div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636">size</a> = BUFFER_SIZE;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Assume connectInfo and willInfo are initialized. Get the size requirement for</span></div>
<div class="line"><span class="comment">// the connect packet.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a4e57ccef527a25b572dc66eeb2e217c5">MQTT_GetConnectPacketSize</a>(</div>
<div class="line"> &amp;connectInfo, &amp;willInfo, &amp;remainingLength, &amp;packetSize</div>
<div class="line">);</div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line">assert( packetSize &lt;= BUFFER_SIZE );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Serialize the connect packet into the fixed buffer.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#aa2e2300d6c43e61f8f2cf83f7149835c">MQTT_SerializeConnect</a>( &amp;connectInfo, &amp;willInfo, remainingLength, &amp;fixedBuffer );</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The connect packet can now be sent to the broker.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_aa2e2300d6c43e61f8f2cf83f7149835c"><div class="ttname"><a href="core__mqtt__serializer_8h.html#aa2e2300d6c43e61f8f2cf83f7149835c">MQTT_SerializeConnect</a></div><div class="ttdeci">MQTTStatus_t MQTT_SerializeConnect(const MQTTConnectInfo_t *pConnectInfo, const MQTTPublishInfo_t *pWillInfo, size_t remainingLength, const MQTTFixedBuffer_t *pFixedBuffer)</div><div class="ttdoc">Serialize an MQTT CONNECT packet in the given fixed buffer pFixedBuffer.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:1790</div></div>
<div class="ttc" id="astruct_m_q_t_t_fixed_buffer__t_html"><div class="ttname"><a href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a></div><div class="ttdoc">Buffer passed to MQTT library.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:123</div></div>
<div class="ttc" id="astruct_m_q_t_t_fixed_buffer__t_html_a0b0b6a93cc62751ebeb03095d5431636"><div class="ttname"><a href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636">MQTTFixedBuffer_t::size</a></div><div class="ttdeci">size_t size</div><div class="ttdoc">Size of buffer.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:125</div></div>
<div class="ttc" id="astruct_m_q_t_t_fixed_buffer__t_html_acea147448e044870fb36b7fa2347dbd6"><div class="ttname"><a href="struct_m_q_t_t_fixed_buffer__t.html#acea147448e044870fb36b7fa2347dbd6">MQTTFixedBuffer_t::pBuffer</a></div><div class="ttdeci">uint8_t * pBuffer</div><div class="ttdoc">Pointer to buffer.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:124</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="abb9a703cb23ab39fdd6fe282a5f3ddc5" name="abb9a703cb23ab39fdd6fe282a5f3ddc5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb9a703cb23ab39fdd6fe282a5f3ddc5">&#9670;&#160;</a></span>MQTT_GetSubscribePacketSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_GetSubscribePacketSize </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> *&#160;</td>
<td class="paramname"><em>pSubscriptionList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>subscriptionCount</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pRemainingLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pPacketSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get packet size and Remaining Length of an MQTT SUBSCRIBE packet. </p>
<p>This function must be called before <a class="el" href="core__mqtt__serializer_8h.html#a21273b13070e8340cc33b0f86bf79571" title="Serialize an MQTT SUBSCRIBE packet in the given buffer.">MQTT_SerializeSubscribe</a> in order to get the size of the MQTT SUBSCRIBE packet that is generated from the list of <a class="el" href="struct_m_q_t_t_subscribe_info__t.html" title="MQTT SUBSCRIBE packet parameters.">MQTTSubscribeInfo_t</a>. The size of the <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> supplied to <a class="el" href="core__mqtt__serializer_8h.html#a21273b13070e8340cc33b0f86bf79571" title="Serialize an MQTT SUBSCRIBE packet in the given buffer.">MQTT_SerializeSubscribe</a> must be at least <code>pPacketSize</code>. The provided <code>pSubscriptionList</code> is valid for serialization with <a class="el" href="core__mqtt__serializer_8h.html#a21273b13070e8340cc33b0f86bf79571" title="Serialize an MQTT SUBSCRIBE packet in the given buffer.">MQTT_SerializeSubscribe</a> only if this function returns <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>. The remaining length returned in <code>pRemainingLength</code> and the packet size returned in <code>pPacketSize</code> are valid only if this function returns <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pSubscriptionList</td><td>List of MQTT subscription info. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">subscriptionCount</td><td>The number of elements in pSubscriptionList. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pRemainingLength</td><td>The Remaining Length of the MQTT SUBSCRIBE packet. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pPacketSize</td><td>The total size of the MQTT SUBSCRIBE packet.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if the packet would exceed the size allowed by the MQTT spec; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> subscriptionList[ NUMBER_OF_SUBSCRIPTIONS ] = { 0 };</div>
<div class="line"><span class="keywordtype">size_t</span> remainingLength = 0, packetSize = 0;</div>
<div class="line"><span class="comment">// This is assumed to be a list of filters we want to subscribe to.</span></div>
<div class="line"><span class="keyword">const</span> <span class="keywordtype">char</span> * filters[ NUMBER_OF_SUBSCRIPTIONS ];</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Set each subscription.</span></div>
<div class="line"><span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; NUMBER_OF_SUBSCRIPTIONS; i++ )</div>
<div class="line">{</div>
<div class="line"> subscriptionList[ i ].<a class="code hl_variable" href="struct_m_q_t_t_subscribe_info__t.html#a64cf2e423f60cfec122eeaef80c0fd86">qos</a> = <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggae308a5928d7f537379c29a894228093aaad51b23a1ae1417f96d8f343c788d1d2">MQTTQoS0</a>;</div>
<div class="line"> <span class="comment">// Each subscription needs a topic filter.</span></div>
<div class="line"> subscriptionList[ i ].<a class="code hl_variable" href="struct_m_q_t_t_subscribe_info__t.html#adb0b28240fdcd82a85f11cf2f8b5bbf0">pTopicFilter</a> = filters[ i ];</div>
<div class="line"> subscriptionList[ i ].<a class="code hl_variable" href="struct_m_q_t_t_subscribe_info__t.html#a6972f8e036f8bde9b1f23a2aacb61382">topicFilterLength</a> = strlen( filters[ i ] );</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Get the size requirement for the subscribe packet.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#abb9a703cb23ab39fdd6fe282a5f3ddc5">MQTT_GetSubscribePacketSize</a>(</div>
<div class="line"> &amp;subscriptionList[ 0 ], NUMBER_OF_SUBSCRIPTIONS, &amp;remainingLength, &amp;packetSize</div>
<div class="line">);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The application should allocate or use a static #MQTTFixedBuffer_t</span></div>
<div class="line"> <span class="comment">// of size &gt;= packetSize to serialize the subscribe request.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_abb9a703cb23ab39fdd6fe282a5f3ddc5"><div class="ttname"><a href="core__mqtt__serializer_8h.html#abb9a703cb23ab39fdd6fe282a5f3ddc5">MQTT_GetSubscribePacketSize</a></div><div class="ttdeci">MQTTStatus_t MQTT_GetSubscribePacketSize(const MQTTSubscribeInfo_t *pSubscriptionList, size_t subscriptionCount, size_t *pRemainingLength, size_t *pPacketSize)</div><div class="ttdoc">Get packet size and Remaining Length of an MQTT SUBSCRIBE packet.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:1848</div></div>
<div class="ttc" id="agroup__mqtt__enum__types_html_ggae308a5928d7f537379c29a894228093aaad51b23a1ae1417f96d8f343c788d1d2"><div class="ttname"><a href="group__mqtt__enum__types.html#ggae308a5928d7f537379c29a894228093aaad51b23a1ae1417f96d8f343c788d1d2">MQTTQoS0</a></div><div class="ttdeci">@ MQTTQoS0</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:110</div></div>
<div class="ttc" id="astruct_m_q_t_t_subscribe_info__t_html"><div class="ttname"><a href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a></div><div class="ttdoc">MQTT SUBSCRIBE packet parameters.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:180</div></div>
<div class="ttc" id="astruct_m_q_t_t_subscribe_info__t_html_a64cf2e423f60cfec122eeaef80c0fd86"><div class="ttname"><a href="struct_m_q_t_t_subscribe_info__t.html#a64cf2e423f60cfec122eeaef80c0fd86">MQTTSubscribeInfo_t::qos</a></div><div class="ttdeci">MQTTQoS_t qos</div><div class="ttdoc">Quality of Service for subscription.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:184</div></div>
<div class="ttc" id="astruct_m_q_t_t_subscribe_info__t_html_a6972f8e036f8bde9b1f23a2aacb61382"><div class="ttname"><a href="struct_m_q_t_t_subscribe_info__t.html#a6972f8e036f8bde9b1f23a2aacb61382">MQTTSubscribeInfo_t::topicFilterLength</a></div><div class="ttdeci">uint16_t topicFilterLength</div><div class="ttdoc">Length of subscription topic filter.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:194</div></div>
<div class="ttc" id="astruct_m_q_t_t_subscribe_info__t_html_adb0b28240fdcd82a85f11cf2f8b5bbf0"><div class="ttname"><a href="struct_m_q_t_t_subscribe_info__t.html#adb0b28240fdcd82a85f11cf2f8b5bbf0">MQTTSubscribeInfo_t::pTopicFilter</a></div><div class="ttdeci">const char * pTopicFilter</div><div class="ttdoc">Topic filter to subscribe to.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:189</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a21273b13070e8340cc33b0f86bf79571" name="a21273b13070e8340cc33b0f86bf79571"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a21273b13070e8340cc33b0f86bf79571">&#9670;&#160;</a></span>MQTT_SerializeSubscribe()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_SerializeSubscribe </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> *&#160;</td>
<td class="paramname"><em>pSubscriptionList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>subscriptionCount</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>packetId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>remainingLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *&#160;</td>
<td class="paramname"><em>pFixedBuffer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Serialize an MQTT SUBSCRIBE packet in the given buffer. </p>
<p><a class="el" href="core__mqtt__serializer_8h.html#abb9a703cb23ab39fdd6fe282a5f3ddc5" title="Get packet size and Remaining Length of an MQTT SUBSCRIBE packet.">MQTT_GetSubscribePacketSize</a> should be called with <code>pSubscriptionList</code> before invoking this function to get the size of the required <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> and <code>remainingLength</code>. The <code>remainingLength</code> must be the same as returned by <a class="el" href="core__mqtt__serializer_8h.html#abb9a703cb23ab39fdd6fe282a5f3ddc5" title="Get packet size and Remaining Length of an MQTT SUBSCRIBE packet.">MQTT_GetSubscribePacketSize</a>. The <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> must be at least as large as the size returned by <a class="el" href="core__mqtt__serializer_8h.html#abb9a703cb23ab39fdd6fe282a5f3ddc5" title="Get packet size and Remaining Length of an MQTT SUBSCRIBE packet.">MQTT_GetSubscribePacketSize</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pSubscriptionList</td><td>List of MQTT subscription info. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">subscriptionCount</td><td>The number of elements in pSubscriptionList. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">packetId</td><td>packet ID generated by <a class="el" href="core__mqtt_8h.html#a00e1a3eba2c21899a6b4312c7d65d090" title="Get a packet ID that is valid according to the MQTT 3.1.1 spec.">MQTT_GetPacketId</a>. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">remainingLength</td><td>Remaining Length provided by <a class="el" href="core__mqtt__serializer_8h.html#abb9a703cb23ab39fdd6fe282a5f3ddc5" title="Get packet size and Remaining Length of an MQTT SUBSCRIBE packet.">MQTT_GetSubscribePacketSize</a>. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pFixedBuffer</td><td>Buffer for packet serialization.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735cab1be4db832a0468f024243bca151a8df">MQTTNoMemory</a> if pFixedBuffer is too small to hold the MQTT packet; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if invalid parameters are passed; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> subscriptionList[ NUMBER_OF_SUBSCRIPTIONS ] = { 0 };</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> fixedBuffer;</div>
<div class="line">uint8_t buffer[ BUFFER_SIZE ];</div>
<div class="line"><span class="keywordtype">size_t</span> remainingLength = 0, packetSize = 0;</div>
<div class="line">uint16_t packetId;</div>
<div class="line"> </div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#acea147448e044870fb36b7fa2347dbd6">pBuffer</a> = buffer;</div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636">size</a> = BUFFER_SIZE;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Function to return a valid, unused packet identifier. The details are out of</span></div>
<div class="line"><span class="comment">// scope for this example.</span></div>
<div class="line">packetId = getNewPacketId();</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Assume subscriptionList has been initialized. Get the subscribe packet size.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#abb9a703cb23ab39fdd6fe282a5f3ddc5">MQTT_GetSubscribePacketSize</a>(</div>
<div class="line"> &amp;subscriptionList[ 0 ], NUMBER_OF_SUBSCRIPTIONS, &amp;remainingLength, &amp;packetSize</div>
<div class="line">);</div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line">assert( packetSize &lt;= BUFFER_SIZE );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Serialize the subscribe packet into the fixed buffer.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a21273b13070e8340cc33b0f86bf79571">MQTT_SerializeSubscribe</a>(</div>
<div class="line"> &amp;subscriptionList[ 0 ],</div>
<div class="line"> NUMBER_OF_SUBSCRIPTIONS,</div>
<div class="line"> packetId,</div>
<div class="line"> remainingLength,</div>
<div class="line"> &amp;fixedBuffer</div>
<div class="line">);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The subscribe packet can now be sent to the broker.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a21273b13070e8340cc33b0f86bf79571"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a21273b13070e8340cc33b0f86bf79571">MQTT_SerializeSubscribe</a></div><div class="ttdeci">MQTTStatus_t MQTT_SerializeSubscribe(const MQTTSubscribeInfo_t *pSubscriptionList, size_t subscriptionCount, uint16_t packetId, size_t remainingLength, const MQTTFixedBuffer_t *pFixedBuffer)</div><div class="ttdoc">Serialize an MQTT SUBSCRIBE packet in the given buffer.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:1932</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a2a18563d5f63c8975b57118a6836c932" name="a2a18563d5f63c8975b57118a6836c932"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2a18563d5f63c8975b57118a6836c932">&#9670;&#160;</a></span>MQTT_GetUnsubscribePacketSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_GetUnsubscribePacketSize </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> *&#160;</td>
<td class="paramname"><em>pSubscriptionList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>subscriptionCount</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pRemainingLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pPacketSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get packet size and Remaining Length of an MQTT UNSUBSCRIBE packet. </p>
<p>This function must be called before <a class="el" href="core__mqtt__serializer_8h.html#aab58219c203077c07ffd7061405e1adb" title="Serialize an MQTT UNSUBSCRIBE packet in the given buffer.">MQTT_SerializeUnsubscribe</a> in order to get the size of the MQTT UNSUBSCRIBE packet that is generated from the list of <a class="el" href="struct_m_q_t_t_subscribe_info__t.html" title="MQTT SUBSCRIBE packet parameters.">MQTTSubscribeInfo_t</a>. The size of the <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> supplied to <a class="el" href="core__mqtt__serializer_8h.html#aab58219c203077c07ffd7061405e1adb" title="Serialize an MQTT UNSUBSCRIBE packet in the given buffer.">MQTT_SerializeUnsubscribe</a> must be at least <code>pPacketSize</code>. The provided <code>pSubscriptionList</code> is valid for serialization with <a class="el" href="core__mqtt__serializer_8h.html#aab58219c203077c07ffd7061405e1adb" title="Serialize an MQTT UNSUBSCRIBE packet in the given buffer.">MQTT_SerializeUnsubscribe</a> only if this function returns <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>. The remaining length returned in <code>pRemainingLength</code> and the packet size returned in <code>pPacketSize</code> are valid only if this function returns <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pSubscriptionList</td><td>List of MQTT subscription info. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">subscriptionCount</td><td>The number of elements in pSubscriptionList. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pRemainingLength</td><td>The Remaining Length of the MQTT UNSUBSCRIBE packet. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pPacketSize</td><td>The total size of the MQTT UNSUBSCRIBE packet.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if the packet would exceed the size allowed by the MQTT spec; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> subscriptionList[ NUMBER_OF_SUBSCRIPTIONS ] = { 0 };</div>
<div class="line"><span class="keywordtype">size_t</span> remainingLength = 0, packetSize = 0;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Initialize the subscribe info. The details are out of scope for this example.</span></div>
<div class="line">initializeSubscribeInfo( &amp;subscriptionList[ 0 ] );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Get the size requirement for the unsubscribe packet.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a2a18563d5f63c8975b57118a6836c932">MQTT_GetUnsubscribePacketSize</a>(</div>
<div class="line"> &amp;subscriptionList[ 0 ], NUMBER_OF_SUBSCRIPTIONS, &amp;remainingLength, &amp;packetSize</div>
<div class="line">);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The application should allocate or use a static #MQTTFixedBuffer_t</span></div>
<div class="line"> <span class="comment">// of size &gt;= packetSize to serialize the unsubscribe request.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a2a18563d5f63c8975b57118a6836c932"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a2a18563d5f63c8975b57118a6836c932">MQTT_GetUnsubscribePacketSize</a></div><div class="ttdeci">MQTTStatus_t MQTT_GetUnsubscribePacketSize(const MQTTSubscribeInfo_t *pSubscriptionList, size_t subscriptionCount, size_t *pRemainingLength, size_t *pPacketSize)</div><div class="ttdoc">Get packet size and Remaining Length of an MQTT UNSUBSCRIBE packet.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:1978</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="aab58219c203077c07ffd7061405e1adb" name="aab58219c203077c07ffd7061405e1adb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aab58219c203077c07ffd7061405e1adb">&#9670;&#160;</a></span>MQTT_SerializeUnsubscribe()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_SerializeUnsubscribe </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> *&#160;</td>
<td class="paramname"><em>pSubscriptionList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>subscriptionCount</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>packetId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>remainingLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *&#160;</td>
<td class="paramname"><em>pFixedBuffer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Serialize an MQTT UNSUBSCRIBE packet in the given buffer. </p>
<p><a class="el" href="core__mqtt__serializer_8h.html#a2a18563d5f63c8975b57118a6836c932" title="Get packet size and Remaining Length of an MQTT UNSUBSCRIBE packet.">MQTT_GetUnsubscribePacketSize</a> should be called with <code>pSubscriptionList</code> before invoking this function to get the size of the required <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> and <code>remainingLength</code>. The <code>remainingLength</code> must be the same as returned by <a class="el" href="core__mqtt__serializer_8h.html#a2a18563d5f63c8975b57118a6836c932" title="Get packet size and Remaining Length of an MQTT UNSUBSCRIBE packet.">MQTT_GetUnsubscribePacketSize</a>. The <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> must be at least as large as the size returned by <a class="el" href="core__mqtt__serializer_8h.html#a2a18563d5f63c8975b57118a6836c932" title="Get packet size and Remaining Length of an MQTT UNSUBSCRIBE packet.">MQTT_GetUnsubscribePacketSize</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pSubscriptionList</td><td>List of MQTT subscription info. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">subscriptionCount</td><td>The number of elements in pSubscriptionList. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">packetId</td><td>packet ID generated by <a class="el" href="core__mqtt_8h.html#a00e1a3eba2c21899a6b4312c7d65d090" title="Get a packet ID that is valid according to the MQTT 3.1.1 spec.">MQTT_GetPacketId</a>. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">remainingLength</td><td>Remaining Length provided by <a class="el" href="core__mqtt__serializer_8h.html#a2a18563d5f63c8975b57118a6836c932" title="Get packet size and Remaining Length of an MQTT UNSUBSCRIBE packet.">MQTT_GetUnsubscribePacketSize</a>. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pFixedBuffer</td><td>Buffer for packet serialization.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735cab1be4db832a0468f024243bca151a8df">MQTTNoMemory</a> if pFixedBuffer is too small to hold the MQTT packet; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if invalid parameters are passed; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_subscribe_info__t.html">MQTTSubscribeInfo_t</a> subscriptionList[ NUMBER_OF_SUBSCRIPTIONS ] = { 0 };</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> fixedBuffer;</div>
<div class="line">uint8_t buffer[ BUFFER_SIZE ];</div>
<div class="line"><span class="keywordtype">size_t</span> remainingLength = 0, packetSize = 0;</div>
<div class="line">uint16_t packetId;</div>
<div class="line"> </div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#acea147448e044870fb36b7fa2347dbd6">pBuffer</a> = buffer;</div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636">size</a> = BUFFER_SIZE;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Function to return a valid, unused packet identifier. The details are out of</span></div>
<div class="line"><span class="comment">// scope for this example.</span></div>
<div class="line">packetId = getNewPacketId();</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Assume subscriptionList has been initialized. Get the unsubscribe packet size.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a2a18563d5f63c8975b57118a6836c932">MQTT_GetUnsubscribePacketSize</a>(</div>
<div class="line"> &amp;subscriptionList[ 0 ], NUMBER_OF_SUBSCRIPTIONS, &amp;remainingLength, &amp;packetSize</div>
<div class="line">);</div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line">assert( packetSize &lt;= BUFFER_SIZE );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Serialize the unsubscribe packet into the fixed buffer.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#aab58219c203077c07ffd7061405e1adb">MQTT_SerializeUnsubscribe</a>(</div>
<div class="line"> &amp;subscriptionList[ 0 ],</div>
<div class="line"> NUMBER_OF_SUBSCRIPTIONS,</div>
<div class="line"> packetId,</div>
<div class="line"> remainingLength,</div>
<div class="line"> &amp;fixedBuffer</div>
<div class="line">);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The unsubscribe packet can now be sent to the broker.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_aab58219c203077c07ffd7061405e1adb"><div class="ttname"><a href="core__mqtt__serializer_8h.html#aab58219c203077c07ffd7061405e1adb">MQTT_SerializeUnsubscribe</a></div><div class="ttdeci">MQTTStatus_t MQTT_SerializeUnsubscribe(const MQTTSubscribeInfo_t *pSubscriptionList, size_t subscriptionCount, uint16_t packetId, size_t remainingLength, const MQTTFixedBuffer_t *pFixedBuffer)</div><div class="ttdoc">Serialize an MQTT UNSUBSCRIBE packet in the given buffer.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2016</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a9971fb98c6af22b1bfe697d44492a819" name="a9971fb98c6af22b1bfe697d44492a819"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9971fb98c6af22b1bfe697d44492a819">&#9670;&#160;</a></span>MQTT_GetPublishPacketSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_GetPublishPacketSize </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *&#160;</td>
<td class="paramname"><em>pPublishInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pRemainingLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pPacketSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the packet size and remaining length of an MQTT PUBLISH packet. </p>
<p>This function must be called before <a class="el" href="core__mqtt__serializer_8h.html#ac6c453f9c4b7f48aad511bc677ec7eb9" title="Serialize an MQTT PUBLISH packet in the given buffer.">MQTT_SerializePublish</a> in order to get the size of the MQTT PUBLISH packet that is generated from <a class="el" href="struct_m_q_t_t_publish_info__t.html" title="MQTT PUBLISH packet parameters.">MQTTPublishInfo_t</a>. The size of the <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> supplied to <a class="el" href="core__mqtt__serializer_8h.html#ac6c453f9c4b7f48aad511bc677ec7eb9" title="Serialize an MQTT PUBLISH packet in the given buffer.">MQTT_SerializePublish</a> must be at least <code>pPacketSize</code>. The provided <code>pPublishInfo</code> is valid for serialization with <a class="el" href="core__mqtt__serializer_8h.html#ac6c453f9c4b7f48aad511bc677ec7eb9" title="Serialize an MQTT PUBLISH packet in the given buffer.">MQTT_SerializePublish</a> only if this function returns <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>. The remaining length returned in <code>pRemainingLength</code> and the packet size returned in <code>pPacketSize</code> are valid only if this function returns <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pPublishInfo</td><td>MQTT PUBLISH packet parameters. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pRemainingLength</td><td>The Remaining Length of the MQTT PUBLISH packet. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pPacketSize</td><td>The total size of the MQTT PUBLISH packet.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if the packet would exceed the size allowed by the MQTT spec or if invalid parameters are passed; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> publishInfo = { 0 };</div>
<div class="line"><span class="keywordtype">size_t</span> remainingLength = 0, packetSize = 0;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Initialize the publish info.</span></div>
<div class="line">publishInfo.<a class="code hl_variable" href="struct_m_q_t_t_publish_info__t.html#a178224d02b4acdec7e08e88de0e4b399">qos</a> = <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggae308a5928d7f537379c29a894228093aaad51b23a1ae1417f96d8f343c788d1d2">MQTTQoS0</a>;</div>
<div class="line">publishInfo.<a class="code hl_variable" href="struct_m_q_t_t_publish_info__t.html#aa80e8ca282d01630f878ad0afe81d7a4">pTopicName</a> = <span class="stringliteral">&quot;/some/topic/name&quot;</span>;</div>
<div class="line">publishInfo.<a class="code hl_variable" href="struct_m_q_t_t_publish_info__t.html#a6161c792d20cc7cf8284c1b71ea1145f">topicNameLength</a> = strlen( publishInfo.<a class="code hl_variable" href="struct_m_q_t_t_publish_info__t.html#aa80e8ca282d01630f878ad0afe81d7a4">pTopicName</a> );</div>
<div class="line">publishInfo.<a class="code hl_variable" href="struct_m_q_t_t_publish_info__t.html#afc28299f4f625f5e674bb61b42f03380">pPayload</a> = <span class="stringliteral">&quot;Hello World!&quot;</span>;</div>
<div class="line">publishInfo.<a class="code hl_variable" href="struct_m_q_t_t_publish_info__t.html#a7997964e11571f35f0c3b729db0f760f">payloadLength</a> = strlen( <span class="stringliteral">&quot;Hello World!&quot;</span> );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Get the size requirement for the publish packet.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819">MQTT_GetPublishPacketSize</a>(</div>
<div class="line"> &amp;publishInfo, &amp;remainingLength, &amp;packetSize</div>
<div class="line">);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The application should allocate or use a static #MQTTFixedBuffer_t</span></div>
<div class="line"> <span class="comment">// of size &gt;= packetSize to serialize the publish.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a9971fb98c6af22b1bfe697d44492a819"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819">MQTT_GetPublishPacketSize</a></div><div class="ttdeci">MQTTStatus_t MQTT_GetPublishPacketSize(const MQTTPublishInfo_t *pPublishInfo, size_t *pRemainingLength, size_t *pPacketSize)</div><div class="ttdoc">Get the packet size and remaining length of an MQTT PUBLISH packet.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2057</div></div>
<div class="ttc" id="astruct_m_q_t_t_publish_info__t_html_a178224d02b4acdec7e08e88de0e4b399"><div class="ttname"><a href="struct_m_q_t_t_publish_info__t.html#a178224d02b4acdec7e08e88de0e4b399">MQTTPublishInfo_t::qos</a></div><div class="ttdeci">MQTTQoS_t qos</div><div class="ttdoc">Quality of Service for message.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:206</div></div>
<div class="ttc" id="astruct_m_q_t_t_publish_info__t_html_a6161c792d20cc7cf8284c1b71ea1145f"><div class="ttname"><a href="struct_m_q_t_t_publish_info__t.html#a6161c792d20cc7cf8284c1b71ea1145f">MQTTPublishInfo_t::topicNameLength</a></div><div class="ttdeci">uint16_t topicNameLength</div><div class="ttdoc">Length of topic name.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:226</div></div>
<div class="ttc" id="astruct_m_q_t_t_publish_info__t_html_a7997964e11571f35f0c3b729db0f760f"><div class="ttname"><a href="struct_m_q_t_t_publish_info__t.html#a7997964e11571f35f0c3b729db0f760f">MQTTPublishInfo_t::payloadLength</a></div><div class="ttdeci">size_t payloadLength</div><div class="ttdoc">Message payload length.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:236</div></div>
<div class="ttc" id="astruct_m_q_t_t_publish_info__t_html_aa80e8ca282d01630f878ad0afe81d7a4"><div class="ttname"><a href="struct_m_q_t_t_publish_info__t.html#aa80e8ca282d01630f878ad0afe81d7a4">MQTTPublishInfo_t::pTopicName</a></div><div class="ttdeci">const char * pTopicName</div><div class="ttdoc">Topic name on which the message is published.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:221</div></div>
<div class="ttc" id="astruct_m_q_t_t_publish_info__t_html_afc28299f4f625f5e674bb61b42f03380"><div class="ttname"><a href="struct_m_q_t_t_publish_info__t.html#afc28299f4f625f5e674bb61b42f03380">MQTTPublishInfo_t::pPayload</a></div><div class="ttdeci">const void * pPayload</div><div class="ttdoc">Message payload.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:231</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ac6c453f9c4b7f48aad511bc677ec7eb9" name="ac6c453f9c4b7f48aad511bc677ec7eb9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac6c453f9c4b7f48aad511bc677ec7eb9">&#9670;&#160;</a></span>MQTT_SerializePublish()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_SerializePublish </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *&#160;</td>
<td class="paramname"><em>pPublishInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>packetId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>remainingLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *&#160;</td>
<td class="paramname"><em>pFixedBuffer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Serialize an MQTT PUBLISH packet in the given buffer. </p>
<p>This function will serialize complete MQTT PUBLISH packet into the given buffer. If the PUBLISH payload can be sent separately, consider using <a class="el" href="core__mqtt__serializer_8h.html#a659cf2bcaf2c5131daa0acc1917401a2" title="Serialize an MQTT PUBLISH packet header in the given buffer.">MQTT_SerializePublishHeader</a>, which will serialize only the PUBLISH header into the buffer.</p>
<p><a class="el" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819" title="Get the packet size and remaining length of an MQTT PUBLISH packet.">MQTT_GetPublishPacketSize</a> should be called with <code>pPublishInfo</code> before invoking this function to get the size of the required <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> and <code>remainingLength</code>. The <code>remainingLength</code> must be the same as returned by <a class="el" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819" title="Get the packet size and remaining length of an MQTT PUBLISH packet.">MQTT_GetPublishPacketSize</a>. The <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> must be at least as large as the size returned by <a class="el" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819" title="Get the packet size and remaining length of an MQTT PUBLISH packet.">MQTT_GetPublishPacketSize</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pPublishInfo</td><td>MQTT PUBLISH packet parameters. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">packetId</td><td>packet ID generated by <a class="el" href="core__mqtt_8h.html#a00e1a3eba2c21899a6b4312c7d65d090" title="Get a packet ID that is valid according to the MQTT 3.1.1 spec.">MQTT_GetPacketId</a>. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">remainingLength</td><td>Remaining Length provided by <a class="el" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819" title="Get the packet size and remaining length of an MQTT PUBLISH packet.">MQTT_GetPublishPacketSize</a>. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pFixedBuffer</td><td>Buffer for packet serialization.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735cab1be4db832a0468f024243bca151a8df">MQTTNoMemory</a> if pFixedBuffer is too small to hold the MQTT packet; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if invalid parameters are passed; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> publishInfo = { 0 };</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> fixedBuffer;</div>
<div class="line">uint8_t buffer[ BUFFER_SIZE ];</div>
<div class="line"><span class="keywordtype">size_t</span> remainingLength = 0, packetSize = 0;</div>
<div class="line">uint16_t packetId;</div>
<div class="line"> </div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#acea147448e044870fb36b7fa2347dbd6">pBuffer</a> = buffer;</div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636">size</a> = BUFFER_SIZE;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// A packet identifier is unused for QoS 0 publishes. Otherwise, a valid, unused packet</span></div>
<div class="line"><span class="comment">// identifier must be used.</span></div>
<div class="line">packetId = 0;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Assume publishInfo has been initialized. Get publish packet size.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819">MQTT_GetPublishPacketSize</a>(</div>
<div class="line"> &amp;publishInfo, &amp;remainingLength, &amp;packetSize</div>
<div class="line">);</div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line">assert( packetSize &lt;= BUFFER_SIZE );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Serialize the publish packet into the fixed buffer.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#ac6c453f9c4b7f48aad511bc677ec7eb9">MQTT_SerializePublish</a>(</div>
<div class="line"> &amp;publishInfo,</div>
<div class="line"> packetId,</div>
<div class="line"> remainingLength,</div>
<div class="line"> &amp;fixedBuffer</div>
<div class="line">);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The publish packet can now be sent to the broker.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_ac6c453f9c4b7f48aad511bc677ec7eb9"><div class="ttname"><a href="core__mqtt__serializer_8h.html#ac6c453f9c4b7f48aad511bc677ec7eb9">MQTT_SerializePublish</a></div><div class="ttdeci">MQTTStatus_t MQTT_SerializePublish(const MQTTPublishInfo_t *pPublishInfo, uint16_t packetId, size_t remainingLength, const MQTTFixedBuffer_t *pFixedBuffer)</div><div class="ttdoc">Serialize an MQTT PUBLISH packet in the given buffer.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2098</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a32de7fabeca85a4d360fa1dd06ff7cd0" name="a32de7fabeca85a4d360fa1dd06ff7cd0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a32de7fabeca85a4d360fa1dd06ff7cd0">&#9670;&#160;</a></span>MQTT_SerializePublishHeaderWithoutTopic()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_SerializePublishHeaderWithoutTopic </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *&#160;</td>
<td class="paramname"><em>pPublishInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>remainingLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>pBuffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>headerSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Serialize an MQTT PUBLISH packet header without the topic string in the given buffer. This function will add the topic string length to the provided buffer. This helps reduce an unnecessary copy of the topic string into the buffer. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pPublishInfo</td><td>MQTT PUBLISH packet parameters. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">remainingLength</td><td>Remaining Length provided by <a class="el" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819" title="Get the packet size and remaining length of an MQTT PUBLISH packet.">MQTT_GetPublishPacketSize</a>. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pBuffer</td><td>Buffer for packet serialization. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">headerSize</td><td>Size of the serialized MQTT PUBLISH header.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> if the serialization is successful. Otherwise, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a>. </dd></dl>
</div>
</div>
<a id="a659cf2bcaf2c5131daa0acc1917401a2" name="a659cf2bcaf2c5131daa0acc1917401a2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a659cf2bcaf2c5131daa0acc1917401a2">&#9670;&#160;</a></span>MQTT_SerializePublishHeader()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_SerializePublishHeader </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *&#160;</td>
<td class="paramname"><em>pPublishInfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>packetId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>remainingLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *&#160;</td>
<td class="paramname"><em>pFixedBuffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pHeaderSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Serialize an MQTT PUBLISH packet header in the given buffer. </p>
<p>This function serializes PUBLISH header in to the given buffer. The payload for PUBLISH will not be copied over to the buffer. This will help reduce the memory needed for the buffer and avoid an unwanted copy operation of the PUBLISH payload into the buffer. If the payload also would need to be part of the serialized buffer, consider using <a class="el" href="core__mqtt__serializer_8h.html#ac6c453f9c4b7f48aad511bc677ec7eb9" title="Serialize an MQTT PUBLISH packet in the given buffer.">MQTT_SerializePublish</a>.</p>
<p><a class="el" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819" title="Get the packet size and remaining length of an MQTT PUBLISH packet.">MQTT_GetPublishPacketSize</a> should be called with <code>pPublishInfo</code> before invoking this function to get the size of the required <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> and <code>remainingLength</code>. The <code>remainingLength</code> must be the same as returned by <a class="el" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819" title="Get the packet size and remaining length of an MQTT PUBLISH packet.">MQTT_GetPublishPacketSize</a>. The <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html" title="Buffer passed to MQTT library.">MQTTFixedBuffer_t</a> must be at least as large as the size returned by <a class="el" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819" title="Get the packet size and remaining length of an MQTT PUBLISH packet.">MQTT_GetPublishPacketSize</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pPublishInfo</td><td>MQTT PUBLISH packet parameters. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">packetId</td><td>packet ID generated by <a class="el" href="core__mqtt_8h.html#a00e1a3eba2c21899a6b4312c7d65d090" title="Get a packet ID that is valid according to the MQTT 3.1.1 spec.">MQTT_GetPacketId</a>. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">remainingLength</td><td>Remaining Length provided by <a class="el" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819" title="Get the packet size and remaining length of an MQTT PUBLISH packet.">MQTT_GetPublishPacketSize</a>. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pFixedBuffer</td><td>Buffer for packet serialization. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pHeaderSize</td><td>Size of the serialized MQTT PUBLISH header.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735cab1be4db832a0468f024243bca151a8df">MQTTNoMemory</a> if pFixedBuffer is too small to hold the MQTT packet; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if invalid parameters are passed; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> publishInfo = { 0 };</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> fixedBuffer;</div>
<div class="line">uint8_t buffer[ BUFFER_SIZE ];</div>
<div class="line"><span class="keywordtype">size_t</span> remainingLength = 0, packetSize = 0, headerSize = 0;</div>
<div class="line">uint16_t packetId;</div>
<div class="line">int32_t bytesSent;</div>
<div class="line"> </div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#acea147448e044870fb36b7fa2347dbd6">pBuffer</a> = buffer;</div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636">size</a> = BUFFER_SIZE;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// A packet identifier is unused for QoS 0 publishes. Otherwise, a valid, unused packet</span></div>
<div class="line"><span class="comment">// identifier must be used.</span></div>
<div class="line">packetId = 0;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Assume publishInfo has been initialized. Get the publish packet size.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a9971fb98c6af22b1bfe697d44492a819">MQTT_GetPublishPacketSize</a>(</div>
<div class="line"> &amp;publishInfo, &amp;remainingLength, &amp;packetSize</div>
<div class="line">);</div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line"><span class="comment">// The payload will not be serialized, so the the fixed buffer does not need to hold it.</span></div>
<div class="line">assert( ( packetSize - publishInfo.<a class="code hl_variable" href="struct_m_q_t_t_publish_info__t.html#a7997964e11571f35f0c3b729db0f760f">payloadLength</a> ) &lt;= BUFFER_SIZE );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Serialize the publish packet header into the fixed buffer.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a659cf2bcaf2c5131daa0acc1917401a2">MQTT_SerializePublishHeader</a>(</div>
<div class="line"> &amp;publishInfo,</div>
<div class="line"> packetId,</div>
<div class="line"> remainingLength,</div>
<div class="line"> &amp;fixedBuffer,</div>
<div class="line"> &amp;headerSize</div>
<div class="line">);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The publish header and payload can now be sent to the broker.</span></div>
<div class="line"> <span class="comment">// mqttSocket here is a socket descriptor created and connected to the MQTT</span></div>
<div class="line"> <span class="comment">// broker outside of this function.</span></div>
<div class="line"> bytesSent = send( mqttSocket, ( <span class="keywordtype">void</span> * ) fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#acea147448e044870fb36b7fa2347dbd6">pBuffer</a>, headerSize, 0 );</div>
<div class="line"> assert( bytesSent == headerSize );</div>
<div class="line"> bytesSent = send( mqttSocket, publishInfo.<a class="code hl_variable" href="struct_m_q_t_t_publish_info__t.html#afc28299f4f625f5e674bb61b42f03380">pPayload</a>, publishInfo.<a class="code hl_variable" href="struct_m_q_t_t_publish_info__t.html#a7997964e11571f35f0c3b729db0f760f">payloadLength</a>, 0 );</div>
<div class="line"> assert( bytesSent == publishInfo.<a class="code hl_variable" href="struct_m_q_t_t_publish_info__t.html#a7997964e11571f35f0c3b729db0f760f">payloadLength</a> );</div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a659cf2bcaf2c5131daa0acc1917401a2"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a659cf2bcaf2c5131daa0acc1917401a2">MQTT_SerializePublishHeader</a></div><div class="ttdeci">MQTTStatus_t MQTT_SerializePublishHeader(const MQTTPublishInfo_t *pPublishInfo, uint16_t packetId, size_t remainingLength, const MQTTFixedBuffer_t *pFixedBuffer, size_t *pHeaderSize)</div><div class="ttdoc">Serialize an MQTT PUBLISH packet header in the given buffer.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2183</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a11ea4ac5ea27e93121288e463ca34ee6" name="a11ea4ac5ea27e93121288e463ca34ee6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11ea4ac5ea27e93121288e463ca34ee6">&#9670;&#160;</a></span>MQTT_SerializeAck()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_SerializeAck </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *&#160;</td>
<td class="paramname"><em>pFixedBuffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>packetType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>packetId</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Serialize an MQTT PUBACK, PUBREC, PUBREL, or PUBCOMP into the given buffer. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">pFixedBuffer</td><td>Buffer for packet serialization. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">packetType</td><td>Byte of the corresponding packet fixed header per the MQTT spec. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">packetId</td><td>Packet ID of the publish.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a>, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735cab1be4db832a0468f024243bca151a8df">MQTTNoMemory</a>, or <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> fixedBuffer;</div>
<div class="line">uint8_t buffer[ BUFFER_SIZE ];</div>
<div class="line">uint16_t packetId;</div>
<div class="line">uint8_t packetType;</div>
<div class="line"> </div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#acea147448e044870fb36b7fa2347dbd6">pBuffer</a> = buffer;</div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636">size</a> = BUFFER_SIZE;</div>
<div class="line"><span class="comment">// The fixed buffer must be large enough to hold 4 bytes.</span></div>
<div class="line">assert( BUFFER_SIZE &gt;= <a class="code hl_define" href="group__mqtt__constants.html#ga26994fcfacb1cff892caa45ec31ca7c6">MQTT_PUBLISH_ACK_PACKET_SIZE</a> );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// The packet ID must be the same as the original publish packet.</span></div>
<div class="line">packetId = publishPacketId;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// The byte representing a packet of type ACK. This function accepts PUBACK, PUBREC, PUBREL, or PUBCOMP.</span></div>
<div class="line">packetType = <a class="code hl_define" href="group__mqtt__constants.html#ga5f279d63de47a973b41b95f74f47a4f6">MQTT_PACKET_TYPE_PUBACK</a>;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Serialize the publish acknowledgment into the fixed buffer.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a11ea4ac5ea27e93121288e463ca34ee6">MQTT_SerializeAck</a>( &amp;fixedBuffer, packetType, packetId );</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The publish acknowledgment can now be sent to the broker.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a11ea4ac5ea27e93121288e463ca34ee6"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a11ea4ac5ea27e93121288e463ca34ee6">MQTT_SerializeAck</a></div><div class="ttdeci">MQTTStatus_t MQTT_SerializeAck(const MQTTFixedBuffer_t *pFixedBuffer, uint8_t packetType, uint16_t packetId)</div><div class="ttdoc">Serialize an MQTT PUBACK, PUBREC, PUBREL, or PUBCOMP into the given buffer.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2266</div></div>
<div class="ttc" id="agroup__mqtt__constants_html_ga26994fcfacb1cff892caa45ec31ca7c6"><div class="ttname"><a href="group__mqtt__constants.html#ga26994fcfacb1cff892caa45ec31ca7c6">MQTT_PUBLISH_ACK_PACKET_SIZE</a></div><div class="ttdeci">#define MQTT_PUBLISH_ACK_PACKET_SIZE</div><div class="ttdoc">The size of MQTT PUBACK, PUBREC, PUBREL, and PUBCOMP packets, per MQTT spec.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:73</div></div>
<div class="ttc" id="agroup__mqtt__constants_html_ga5f279d63de47a973b41b95f74f47a4f6"><div class="ttname"><a href="group__mqtt__constants.html#ga5f279d63de47a973b41b95f74f47a4f6">MQTT_PACKET_TYPE_PUBACK</a></div><div class="ttdeci">#define MQTT_PACKET_TYPE_PUBACK</div><div class="ttdoc">PUBACK (bidirectional).</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:56</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a6fdd8cbde6b7c4ff85c20aaca0fd8741" name="a6fdd8cbde6b7c4ff85c20aaca0fd8741"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6fdd8cbde6b7c4ff85c20aaca0fd8741">&#9670;&#160;</a></span>MQTT_GetDisconnectPacketSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_GetDisconnectPacketSize </td>
<td>(</td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pPacketSize</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the size of an MQTT DISCONNECT packet. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">pPacketSize</td><td>The size of the MQTT DISCONNECT packet.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>, or <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if <code>pPacketSize</code> is NULL.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><span class="keywordtype">size_t</span> packetSize = 0;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Get the size requirement for the disconnect packet.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a6fdd8cbde6b7c4ff85c20aaca0fd8741">MQTT_GetDisconnectPacketSize</a>( &amp;packetSize );</div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line">assert( packetSize == 2 );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// The application should allocate or use a static #MQTTFixedBuffer_t of</span></div>
<div class="line"><span class="comment">// size &gt;= 2 to serialize the disconnect packet.</span></div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a6fdd8cbde6b7c4ff85c20aaca0fd8741"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a6fdd8cbde6b7c4ff85c20aaca0fd8741">MQTT_GetDisconnectPacketSize</a></div><div class="ttdeci">MQTTStatus_t MQTT_GetDisconnectPacketSize(size_t *pPacketSize)</div><div class="ttdoc">Get the size of an MQTT DISCONNECT packet.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2321</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a6aae40d4656eb533a74b67bf9c827d3b" name="a6aae40d4656eb533a74b67bf9c827d3b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6aae40d4656eb533a74b67bf9c827d3b">&#9670;&#160;</a></span>MQTT_SerializeDisconnect()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_SerializeDisconnect </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *&#160;</td>
<td class="paramname"><em>pFixedBuffer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Serialize an MQTT DISCONNECT packet into the given buffer. </p>
<p>The input <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636" title="Size of buffer.">MQTTFixedBuffer_t.size</a> must be at least as large as the size returned by <a class="el" href="core__mqtt__serializer_8h.html#a6fdd8cbde6b7c4ff85c20aaca0fd8741" title="Get the size of an MQTT DISCONNECT packet.">MQTT_GetDisconnectPacketSize</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">pFixedBuffer</td><td>Buffer for packet serialization.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735cab1be4db832a0468f024243bca151a8df">MQTTNoMemory</a> if pFixedBuffer is too small to hold the MQTT packet; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if invalid parameters are passed; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> fixedBuffer;</div>
<div class="line">uint8_t buffer[ BUFFER_SIZE ];</div>
<div class="line"> </div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#acea147448e044870fb36b7fa2347dbd6">pBuffer</a> = buffer;</div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636">size</a> = BUFFER_SIZE;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Get the disconnect packet size.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a6fdd8cbde6b7c4ff85c20aaca0fd8741">MQTT_GetDisconnectPacketSize</a>( &amp;packetSize );</div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line">assert( packetSize &lt;= BUFFER_SIZE );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Serialize the disconnect into the fixed buffer.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a6aae40d4656eb533a74b67bf9c827d3b">MQTT_SerializeDisconnect</a>( &amp;fixedBuffer );</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The disconnect packet can now be sent to the broker.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a6aae40d4656eb533a74b67bf9c827d3b"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a6aae40d4656eb533a74b67bf9c827d3b">MQTT_SerializeDisconnect</a></div><div class="ttdeci">MQTTStatus_t MQTT_SerializeDisconnect(const MQTTFixedBuffer_t *pFixedBuffer)</div><div class="ttdoc">Serialize an MQTT DISCONNECT packet into the given buffer.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2341</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a015562f30e220d2534f773bfa45a5cfe" name="a015562f30e220d2534f773bfa45a5cfe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a015562f30e220d2534f773bfa45a5cfe">&#9670;&#160;</a></span>MQTT_GetPingreqPacketSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_GetPingreqPacketSize </td>
<td>(</td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>pPacketSize</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the size of an MQTT PINGREQ packet. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">pPacketSize</td><td>The size of the MQTT PINGREQ packet.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> or <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if pPacketSize is NULL.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><span class="keywordtype">size_t</span> packetSize = 0;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Get the size requirement for the ping request packet.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a015562f30e220d2534f773bfa45a5cfe">MQTT_GetPingreqPacketSize</a>( &amp;packetSize );</div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line">assert( packetSize == 2 );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// The application should allocate or use a static #MQTTFixedBuffer_t of</span></div>
<div class="line"><span class="comment">// size &gt;= 2 to serialize the ping request.</span></div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a015562f30e220d2534f773bfa45a5cfe"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a015562f30e220d2534f773bfa45a5cfe">MQTT_GetPingreqPacketSize</a></div><div class="ttdeci">MQTTStatus_t MQTT_GetPingreqPacketSize(size_t *pPacketSize)</div><div class="ttdoc">Get the size of an MQTT PINGREQ packet.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2384</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="af3b3e40858fd984c871511e02a61e15d" name="af3b3e40858fd984c871511e02a61e15d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af3b3e40858fd984c871511e02a61e15d">&#9670;&#160;</a></span>MQTT_SerializePingreq()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_SerializePingreq </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> *&#160;</td>
<td class="paramname"><em>pFixedBuffer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Serialize an MQTT PINGREQ packet into the given buffer. </p>
<p>The input <a class="el" href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636" title="Size of buffer.">MQTTFixedBuffer_t.size</a> must be at least as large as the size returned by <a class="el" href="core__mqtt__serializer_8h.html#a015562f30e220d2534f773bfa45a5cfe" title="Get the size of an MQTT PINGREQ packet.">MQTT_GetPingreqPacketSize</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">pFixedBuffer</td><td>Buffer for packet serialization.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735cab1be4db832a0468f024243bca151a8df">MQTTNoMemory</a> if pFixedBuffer is too small to hold the MQTT packet; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if invalid parameters are passed; <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> otherwise.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_fixed_buffer__t.html">MQTTFixedBuffer_t</a> fixedBuffer;</div>
<div class="line">uint8_t buffer[ BUFFER_SIZE ];</div>
<div class="line"> </div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#acea147448e044870fb36b7fa2347dbd6">pBuffer</a> = buffer;</div>
<div class="line">fixedBuffer.<a class="code hl_variable" href="struct_m_q_t_t_fixed_buffer__t.html#a0b0b6a93cc62751ebeb03095d5431636">size</a> = BUFFER_SIZE;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Get the ping request packet size.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a015562f30e220d2534f773bfa45a5cfe">MQTT_GetPingreqPacketSize</a>( &amp;packetSize );</div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line">assert( packetSize &lt;= BUFFER_SIZE );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Serialize the ping request into the fixed buffer.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#af3b3e40858fd984c871511e02a61e15d">MQTT_SerializePingreq</a>( &amp;fixedBuffer );</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The ping request can now be sent to the broker.</span></div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_af3b3e40858fd984c871511e02a61e15d"><div class="ttname"><a href="core__mqtt__serializer_8h.html#af3b3e40858fd984c871511e02a61e15d">MQTT_SerializePingreq</a></div><div class="ttdeci">MQTTStatus_t MQTT_SerializePingreq(const MQTTFixedBuffer_t *pFixedBuffer)</div><div class="ttdoc">Serialize an MQTT PINGREQ packet into the given buffer.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2404</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a4c2aec031f31d0fe55c1cda46544e95a" name="a4c2aec031f31d0fe55c1cda46544e95a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4c2aec031f31d0fe55c1cda46544e95a">&#9670;&#160;</a></span>MQTT_DeserializePublish()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_DeserializePublish </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> *&#160;</td>
<td class="paramname"><em>pIncomingPacket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>pPacketId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> *&#160;</td>
<td class="paramname"><em>pPublishInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Deserialize an MQTT PUBLISH packet. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pIncomingPacket</td><td><a class="el" href="struct_m_q_t_t_packet_info__t.html" title="MQTT incoming packet parameters.">MQTTPacketInfo_t</a> containing the buffer. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pPacketId</td><td>The packet ID obtained from the buffer. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pPublishInfo</td><td>Struct containing information about the publish.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a>, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa5d7507e7664a14d63a8bc44b280093e">MQTTBadResponse</a>, or <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// TransportRecv_t function for reading from the network.</span></div>
<div class="line">int32_t socket_recv(</div>
<div class="line"> <a class="code hl_typedef" href="group__mqtt__struct__types.html#ga7769e434e7811caed8cd6fd7f9ec26ec">NetworkContext_t</a> * pNetworkContext,</div>
<div class="line"> <span class="keywordtype">void</span> * pBuffer,</div>
<div class="line"> <span class="keywordtype">size_t</span> bytesToRecv</div>
<div class="line">);</div>
<div class="line"><span class="comment">// Some context to be used with the above transport receive function.</span></div>
<div class="line"><a class="code hl_typedef" href="group__mqtt__struct__types.html#ga7769e434e7811caed8cd6fd7f9ec26ec">NetworkContext_t</a> networkContext;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Other variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> incomingPacket;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_publish_info__t.html">MQTTPublishInfo_t</a> publishInfo = { 0 };</div>
<div class="line">uint16_t packetId;</div>
<div class="line"> </div>
<div class="line">int32_t bytesRecvd;</div>
<div class="line"><span class="comment">// A buffer to hold remaining data of the incoming packet.</span></div>
<div class="line">uint8_t buffer[ BUFFER_SIZE ];</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Populate all fields of the incoming packet.</span></div>
<div class="line">status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a98cdda86f86a0a1888745a584199e930">MQTT_GetIncomingPacketTypeAndLength</a>(</div>
<div class="line"> socket_recv,</div>
<div class="line"> &amp;networkContext,</div>
<div class="line"> &amp;incomingPacket</div>
<div class="line">);</div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line">assert( incomingPacket.<a class="code hl_variable" href="struct_m_q_t_t_packet_info__t.html#a7c85becf08de0ec9776dd4be1fcc4bf8">remainingLength</a> &lt;= BUFFER_SIZE );</div>
<div class="line">bytesRecvd = socket_recv(</div>
<div class="line"> &amp;networkContext,</div>
<div class="line"> ( <span class="keywordtype">void</span> * ) buffer,</div>
<div class="line"> incomingPacket.<a class="code hl_variable" href="struct_m_q_t_t_packet_info__t.html#a7c85becf08de0ec9776dd4be1fcc4bf8">remainingLength</a></div>
<div class="line">);</div>
<div class="line">incomingPacket.<a class="code hl_variable" href="struct_m_q_t_t_packet_info__t.html#ac66cedff052bc844ec9b296387df60bc">pRemainingData</a> = buffer;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Deserialize the publish information if the incoming packet is a publish.</span></div>
<div class="line"><span class="keywordflow">if</span>( ( incomingPacket.<a class="code hl_variable" href="struct_m_q_t_t_packet_info__t.html#a7fef40548c1aa0f0e7f812a6a7243758">type</a> &amp; 0xF0 ) == <a class="code hl_define" href="group__mqtt__constants.html#ga5b2d79c61f2591c8e5772f974826d4ad">MQTT_PACKET_TYPE_PUBLISH</a> )</div>
<div class="line">{</div>
<div class="line"> status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a4c2aec031f31d0fe55c1cda46544e95a">MQTT_DeserializePublish</a>( &amp;incomingPacket, &amp;packetId, &amp;publishInfo );</div>
<div class="line"> <span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// The deserialized publish information can now be used from `publishInfo`.</span></div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a4c2aec031f31d0fe55c1cda46544e95a"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a4c2aec031f31d0fe55c1cda46544e95a">MQTT_DeserializePublish</a></div><div class="ttdeci">MQTTStatus_t MQTT_DeserializePublish(const MQTTPacketInfo_t *pIncomingPacket, uint16_t *pPacketId, MQTTPublishInfo_t *pPublishInfo)</div><div class="ttdoc">Deserialize an MQTT PUBLISH packet.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2447</div></div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_a98cdda86f86a0a1888745a584199e930"><div class="ttname"><a href="core__mqtt__serializer_8h.html#a98cdda86f86a0a1888745a584199e930">MQTT_GetIncomingPacketTypeAndLength</a></div><div class="ttdeci">MQTTStatus_t MQTT_GetIncomingPacketTypeAndLength(TransportRecv_t readFunc, NetworkContext_t *pNetworkContext, MQTTPacketInfo_t *pIncomingPacket)</div><div class="ttdoc">Extract the MQTT packet type and length from incoming packet.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2561</div></div>
<div class="ttc" id="agroup__mqtt__constants_html_ga5b2d79c61f2591c8e5772f974826d4ad"><div class="ttname"><a href="group__mqtt__constants.html#ga5b2d79c61f2591c8e5772f974826d4ad">MQTT_PACKET_TYPE_PUBLISH</a></div><div class="ttdeci">#define MQTT_PACKET_TYPE_PUBLISH</div><div class="ttdoc">PUBLISH (bidirectional).</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:55</div></div>
<div class="ttc" id="agroup__mqtt__struct__types_html_ga7769e434e7811caed8cd6fd7f9ec26ec"><div class="ttname"><a href="group__mqtt__struct__types.html#ga7769e434e7811caed8cd6fd7f9ec26ec">NetworkContext_t</a></div><div class="ttdeci">struct NetworkContext NetworkContext_t</div><div class="ttdoc">The NetworkContext is an incomplete type. An implementation of this interface must define struct Netw...</div><div class="ttdef"><b>Definition:</b> transport_interface.h:191</div></div>
<div class="ttc" id="astruct_m_q_t_t_packet_info__t_html"><div class="ttname"><a href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a></div><div class="ttdoc">MQTT incoming packet parameters.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:244</div></div>
<div class="ttc" id="astruct_m_q_t_t_packet_info__t_html_a7c85becf08de0ec9776dd4be1fcc4bf8"><div class="ttname"><a href="struct_m_q_t_t_packet_info__t.html#a7c85becf08de0ec9776dd4be1fcc4bf8">MQTTPacketInfo_t::remainingLength</a></div><div class="ttdeci">size_t remainingLength</div><div class="ttdoc">Length of remaining serialized data.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:258</div></div>
<div class="ttc" id="astruct_m_q_t_t_packet_info__t_html_a7fef40548c1aa0f0e7f812a6a7243758"><div class="ttname"><a href="struct_m_q_t_t_packet_info__t.html#a7fef40548c1aa0f0e7f812a6a7243758">MQTTPacketInfo_t::type</a></div><div class="ttdeci">uint8_t type</div><div class="ttdoc">Type of incoming MQTT packet.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:248</div></div>
<div class="ttc" id="astruct_m_q_t_t_packet_info__t_html_ac66cedff052bc844ec9b296387df60bc"><div class="ttname"><a href="struct_m_q_t_t_packet_info__t.html#ac66cedff052bc844ec9b296387df60bc">MQTTPacketInfo_t::pRemainingData</a></div><div class="ttdeci">uint8_t * pRemainingData</div><div class="ttdoc">Remaining serialized data in the MQTT packet.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:253</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ae9971855df71edf94124116e0625bf18" name="ae9971855df71edf94124116e0625bf18"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae9971855df71edf94124116e0625bf18">&#9670;&#160;</a></span>MQTT_DeserializeAck()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_DeserializeAck </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> *&#160;</td>
<td class="paramname"><em>pIncomingPacket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>pPacketId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool *&#160;</td>
<td class="paramname"><em>pSessionPresent</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Deserialize an MQTT CONNACK, SUBACK, UNSUBACK, PUBACK, PUBREC, PUBREL, PUBCOMP, or PINGRESP. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pIncomingPacket</td><td><a class="el" href="struct_m_q_t_t_packet_info__t.html" title="MQTT incoming packet parameters.">MQTTPacketInfo_t</a> containing the buffer. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pPacketId</td><td>The packet ID of obtained from the buffer. Not used in CONNACK or PINGRESP. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pSessionPresent</td><td>Boolean flag from a CONNACK indicating present session.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a>, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa5d7507e7664a14d63a8bc44b280093e">MQTTBadResponse</a>, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca25a3d1747e308e99daa805fe576f84b9">MQTTServerRefused</a>, or <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// Variables used in this example.</span></div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status;</div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> incomingPacket;</div>
<div class="line"><span class="comment">// Used for SUBACK, UNSUBACK, PUBACK, PUBREC, PUBREL, and PUBCOMP.</span></div>
<div class="line">uint16_t packetId;</div>
<div class="line"><span class="comment">// Used for CONNACK.</span></div>
<div class="line"><span class="keywordtype">bool</span> sessionPresent;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Receive an incoming packet and populate all fields. The details are out of scope</span></div>
<div class="line"><span class="comment">// for this example.</span></div>
<div class="line">receiveIncomingPacket( &amp;incomingPacket );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Deserialize ack information if the incoming packet is not a publish.</span></div>
<div class="line"><span class="keywordflow">if</span>( ( incomingPacket.<a class="code hl_variable" href="struct_m_q_t_t_packet_info__t.html#a7fef40548c1aa0f0e7f812a6a7243758">type</a> &amp; 0xF0 ) != <a class="code hl_define" href="group__mqtt__constants.html#ga5b2d79c61f2591c8e5772f974826d4ad">MQTT_PACKET_TYPE_PUBLISH</a> )</div>
<div class="line">{</div>
<div class="line"> status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#ae9971855df71edf94124116e0625bf18">MQTT_DeserializeAck</a>( &amp;incomingPacket, &amp;packetId, &amp;sessionPresent );</div>
<div class="line"> <span class="keywordflow">if</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> )</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// The packet ID or session present flag information is available. For</span></div>
<div class="line"> <span class="comment">// ping response packets, the only information is the status code.</span></div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="ttc" id="acore__mqtt__serializer_8h_html_ae9971855df71edf94124116e0625bf18"><div class="ttname"><a href="core__mqtt__serializer_8h.html#ae9971855df71edf94124116e0625bf18">MQTT_DeserializeAck</a></div><div class="ttdeci">MQTTStatus_t MQTT_DeserializeAck(const MQTTPacketInfo_t *pIncomingPacket, uint16_t *pPacketId, bool *pSessionPresent)</div><div class="ttdoc">Deserialize an MQTT CONNACK, SUBACK, UNSUBACK, PUBACK, PUBREC, PUBREL, PUBCOMP, or PINGRESP.</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.c:2484</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a98cdda86f86a0a1888745a584199e930" name="a98cdda86f86a0a1888745a584199e930"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a98cdda86f86a0a1888745a584199e930">&#9670;&#160;</a></span>MQTT_GetIncomingPacketTypeAndLength()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_GetIncomingPacketTypeAndLength </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__mqtt__callback__types.html#ga227df31d6daf07e5d833537c12130167">TransportRecv_t</a>&#160;</td>
<td class="paramname"><em>readFunc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__mqtt__struct__types.html#ga7769e434e7811caed8cd6fd7f9ec26ec">NetworkContext_t</a> *&#160;</td>
<td class="paramname"><em>pNetworkContext</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> *&#160;</td>
<td class="paramname"><em>pIncomingPacket</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Extract the MQTT packet type and length from incoming packet. </p>
<p>This function must be called for every incoming packet to retrieve the <a class="el" href="struct_m_q_t_t_packet_info__t.html#a7fef40548c1aa0f0e7f812a6a7243758" title="Type of incoming MQTT packet.">MQTTPacketInfo_t.type</a> and <a class="el" href="struct_m_q_t_t_packet_info__t.html#a7c85becf08de0ec9776dd4be1fcc4bf8" title="Length of remaining serialized data.">MQTTPacketInfo_t.remainingLength</a>. A <a class="el" href="struct_m_q_t_t_packet_info__t.html" title="MQTT incoming packet parameters.">MQTTPacketInfo_t</a> is not valid until this routine has been invoked.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">readFunc</td><td>Transport layer read function pointer. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">pNetworkContext</td><td>The network context pointer provided by the application. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pIncomingPacket</td><td>Pointer to <a class="el" href="struct_m_q_t_t_packet_info__t.html" title="MQTT incoming packet parameters.">MQTTPacketInfo_t</a> structure. This is where type, remaining length and packet identifier are stored.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> on successful extraction of type and length, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if <code>pIncomingPacket</code> is invalid, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa14bc8aa4ad218702d782366945d43ac">MQTTRecvFailed</a> on transport receive failure, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa5d7507e7664a14d63a8bc44b280093e">MQTTBadResponse</a> if an invalid packet is read, and <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca676f21c0ddf297ae3ec874bc829aa957">MQTTNoDataAvailable</a> if there is nothing to read.</dd></dl>
<p><b>Example</b> </p><div class="fragment"><div class="line"><span class="comment">// TransportRecv_t function for reading from the network.</span></div>
<div class="line">int32_t socket_recv(</div>
<div class="line"> <a class="code hl_typedef" href="group__mqtt__struct__types.html#ga7769e434e7811caed8cd6fd7f9ec26ec">NetworkContext_t</a> * pNetworkContext,</div>
<div class="line"> <span class="keywordtype">void</span> * pBuffer,</div>
<div class="line"> <span class="keywordtype">size_t</span> bytesToRecv</div>
<div class="line">);</div>
<div class="line"><span class="comment">// Some context to be used with above transport receive function.</span></div>
<div class="line"><a class="code hl_typedef" href="group__mqtt__struct__types.html#ga7769e434e7811caed8cd6fd7f9ec26ec">NetworkContext_t</a> networkContext;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Struct to hold the incoming packet information.</span></div>
<div class="line"><a class="code hl_struct" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> incomingPacket;</div>
<div class="line"><a class="code hl_enumeration" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> status = <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a>;</div>
<div class="line">int32_t bytesRecvd;</div>
<div class="line"><span class="comment">// Buffer to hold the remaining data of the incoming packet.</span></div>
<div class="line">uint8_t buffer[ BUFFER_SIZE ];</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Loop until data is available to be received.</span></div>
<div class="line"><span class="keywordflow">do</span>{</div>
<div class="line"> status = <a class="code hl_function" href="core__mqtt__serializer_8h.html#a98cdda86f86a0a1888745a584199e930">MQTT_GetIncomingPacketTypeAndLength</a>(</div>
<div class="line"> socket_recv,</div>
<div class="line"> &amp;networkContext,</div>
<div class="line"> &amp;incomingPacket</div>
<div class="line"> );</div>
<div class="line">} <span class="keywordflow">while</span>( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca676f21c0ddf297ae3ec874bc829aa957">MQTTNoDataAvailable</a> );</div>
<div class="line"> </div>
<div class="line">assert( status == <a class="code hl_enumvalue" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Receive the rest of the incoming packet.</span></div>
<div class="line">assert( incomingPacket.<a class="code hl_variable" href="struct_m_q_t_t_packet_info__t.html#a7c85becf08de0ec9776dd4be1fcc4bf8">remainingLength</a> &lt;= BUFFER_SIZE );</div>
<div class="line">bytesRecvd = socket_recv(</div>
<div class="line"> &amp;networkContext,</div>
<div class="line"> ( <span class="keywordtype">void</span> * ) buffer,</div>
<div class="line"> incomingPacket.<a class="code hl_variable" href="struct_m_q_t_t_packet_info__t.html#a7c85becf08de0ec9776dd4be1fcc4bf8">remainingLength</a></div>
<div class="line">);</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Set the remaining data field.</span></div>
<div class="line">incomingPacket.<a class="code hl_variable" href="struct_m_q_t_t_packet_info__t.html#ac66cedff052bc844ec9b296387df60bc">pRemainingData</a> = buffer;</div>
<div class="ttc" id="agroup__mqtt__enum__types_html_ggaba7ec045874a1c3432f99173367f735ca676f21c0ddf297ae3ec874bc829aa957"><div class="ttname"><a href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca676f21c0ddf297ae3ec874bc829aa957">MQTTNoDataAvailable</a></div><div class="ttdeci">@ MQTTNoDataAvailable</div><div class="ttdef"><b>Definition:</b> core_mqtt_serializer.h:95</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a94fd3f746074b3f6e16ae6b23dad9a28" name="a94fd3f746074b3f6e16ae6b23dad9a28"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a94fd3f746074b3f6e16ae6b23dad9a28">&#9670;&#160;</a></span>MQTT_ProcessIncomingPacketTypeAndLength()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__mqtt__enum__types.html#gaba7ec045874a1c3432f99173367f735c">MQTTStatus_t</a> MQTT_ProcessIncomingPacketTypeAndLength </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>pBuffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const size_t *&#160;</td>
<td class="paramname"><em>pIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="struct_m_q_t_t_packet_info__t.html">MQTTPacketInfo_t</a> *&#160;</td>
<td class="paramname"><em>pIncomingPacket</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Extract the MQTT packet type and length from incoming packet. </p>
<p>This function must be called for every incoming packet to retrieve the <a class="el" href="struct_m_q_t_t_packet_info__t.html#a7fef40548c1aa0f0e7f812a6a7243758" title="Type of incoming MQTT packet.">MQTTPacketInfo_t.type</a> and <a class="el" href="struct_m_q_t_t_packet_info__t.html#a7c85becf08de0ec9776dd4be1fcc4bf8" title="Length of remaining serialized data.">MQTTPacketInfo_t.remainingLength</a>. A <a class="el" href="struct_m_q_t_t_packet_info__t.html" title="MQTT incoming packet parameters.">MQTTPacketInfo_t</a> is not valid until this routine has been invoked.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">pBuffer</td><td>The buffer holding the raw data to be processed </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">pIndex</td><td>Pointer to the index within the buffer to marking the end of raw data available. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">pIncomingPacket</td><td>Structure used to hold the fields of the incoming packet.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca484e062cb4f3fccc1858dd25cfeee056">MQTTSuccess</a> on successful extraction of type and length, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa39030c93b0263b2699502a074f003b5">MQTTBadParameter</a> if <code>pIncomingPacket</code> is invalid, <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735caa5d7507e7664a14d63a8bc44b280093e">MQTTBadResponse</a> if an invalid packet is read, and <a class="el" href="group__mqtt__enum__types.html#ggaba7ec045874a1c3432f99173367f735ca676f21c0ddf297ae3ec874bc829aa957">MQTTNoDataAvailable</a> if there is nothing to read. </dd></dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_b2f33c71d4aa5e7af42a1ca61ff5af1b.html">source</a></li><li class="navelem"><a class="el" href="dir_8ee1a5e78eaec319fe5d64075812fc61.html">include</a></li><li class="navelem"><a class="el" href="core__mqtt__serializer_8h.html">core_mqtt_serializer.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.6 </li>
</ul>
</div>
</body>
</html>