Deploying to gh-pages from @ espressif/esp-protocols@42565ff5d7 🚀

This commit is contained in:
david-cermak
2022-11-23 19:25:43 +00:00
parent b7112952f7
commit 196242dd0a
85 changed files with 16048 additions and 16201 deletions

View File

@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: e12145161279d5e00aed0f59b2c63a32
config: b8f72f40903ff4c38ebe6ab9bb5c24a7
tags: 549b3d6d0415232fb7e35403b330ff49

View File

@@ -1,134 +0,0 @@
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

View File

@@ -222,7 +222,7 @@ table.modindextable td {
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
min-width: 450px;
max-width: 800px;
}
@@ -237,6 +237,16 @@ a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
@@ -324,15 +334,13 @@ aside.sidebar {
p.sidebar-title {
font-weight: bold;
}
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
@@ -371,8 +379,6 @@ div.body p.centered {
div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
@@ -380,8 +386,6 @@ div.admonition > :last-child {
div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
@@ -424,6 +428,10 @@ table.docutils td, table.docutils th {
border-bottom: 1px solid #aaa;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
@@ -606,26 +614,20 @@ ol.simple p,
ul.simple p {
margin-bottom: 0;
}
aside.footnote > span,
div.citation > span {
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
@@ -642,6 +644,10 @@ dl.field-list > dt {
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;

View File

@@ -2,155 +2,357 @@
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation.
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
this.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE: "unknown",
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined')
return string;
return (typeof translated === 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) === 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
var url = new URL(window.location);
url.searchParams.delete('highlight');
window.history.replaceState({}, '', url);
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
focusSearchBar : function() {
$('input[name=q]').first().focus();
},
/**
* Initialise the domain index toggle buttons
* make the url absolute
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
initOnKeyListeners: () => {
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return;
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
$(document).keydown(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box, textarea, dropdown or button
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
&& activeElementType !== 'BUTTON') {
if (event.altKey || event.ctrlKey || event.metaKey)
return;
if (!event.shiftKey) {
if (!event.shiftKey) {
switch (event.key) {
case 'ArrowLeft':
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
break;
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
break;
case 'ArrowRight':
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
break;
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
break;
case 'Escape':
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
break;
Documentation.hideSearchWords();
return false;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
case '/':
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
break;
Documentation.focusSearchBar();
return false;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
}
};
// quick alias for translations
const _ = Documentation.gettext;
_ = Documentation.gettext;
_ready(Documentation.init);
$(document).ready(function() {
Documentation.init();
});

View File

@@ -1,15 +1,15 @@
/*!
* jQuery JavaScript Library v3.6.0
* jQuery JavaScript Library v3.5.1
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright OpenJS Foundation and other contributors
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2021-03-02T17:08Z
* Date: 2020-05-04T22:49Z
*/
( function( global, factory ) {
@@ -76,16 +76,12 @@ var support = {};
var isFunction = function isFunction( obj ) {
// Support: Chrome <=57, Firefox <=52
// In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function.
// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
// Plus for old WebKit, typeof returns "function" for HTML collections
// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
return typeof obj === "function" && typeof obj.nodeType !== "number" &&
typeof obj.item !== "function";
};
// Support: Chrome <=57, Firefox <=52
// In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function.
return typeof obj === "function" && typeof obj.nodeType !== "number";
};
var isWindow = function isWindow( obj ) {
@@ -151,7 +147,7 @@ function toType( obj ) {
var
version = "3.6.0",
version = "3.5.1",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
@@ -405,7 +401,7 @@ jQuery.extend( {
if ( isArrayLike( Object( arr ) ) ) {
jQuery.merge( ret,
typeof arr === "string" ?
[ arr ] : arr
[ arr ] : arr
);
} else {
push.call( ret, arr );
@@ -500,9 +496,9 @@ if ( typeof Symbol === "function" ) {
// Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
function( _i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
function( _i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
function isArrayLike( obj ) {
@@ -522,14 +518,14 @@ function isArrayLike( obj ) {
}
var Sizzle =
/*!
* Sizzle CSS Selector Engine v2.3.6
* Sizzle CSS Selector Engine v2.3.5
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2021-02-16
* Date: 2020-03-14
*/
( function( window ) {
var i,
@@ -1112,8 +1108,8 @@ support = Sizzle.support = {};
* @returns {Boolean} True iff elem is a non-HTML XML node
*/
isXML = Sizzle.isXML = function( elem ) {
var namespace = elem && elem.namespaceURI,
docElem = elem && ( elem.ownerDocument || elem ).documentElement;
var namespace = elem.namespaceURI,
docElem = ( elem.ownerDocument || elem ).documentElement;
// Support: IE <=8
// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
@@ -3028,9 +3024,9 @@ var rneedsContext = jQuery.expr.match.needsContext;
function nodeName( elem, name ) {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
}
};
var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
@@ -4001,8 +3997,8 @@ jQuery.extend( {
resolveContexts = Array( i ),
resolveValues = slice.call( arguments ),
// the primary Deferred
primary = jQuery.Deferred(),
// the master Deferred
master = jQuery.Deferred(),
// subordinate callback factory
updateFunc = function( i ) {
@@ -4010,30 +4006,30 @@ jQuery.extend( {
resolveContexts[ i ] = this;
resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
if ( !( --remaining ) ) {
primary.resolveWith( resolveContexts, resolveValues );
master.resolveWith( resolveContexts, resolveValues );
}
};
};
// Single- and empty arguments are adopted like Promise.resolve
if ( remaining <= 1 ) {
adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
!remaining );
// Use .then() to unwrap secondary thenables (cf. gh-3000)
if ( primary.state() === "pending" ||
if ( master.state() === "pending" ||
isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
return primary.then();
return master.then();
}
}
// Multiple arguments are aggregated like Promise.all array elements
while ( i-- ) {
adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
}
return primary.promise();
return master.promise();
}
} );
@@ -4184,8 +4180,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
for ( ; i < len; i++ ) {
fn(
elems[ i ], key, raw ?
value :
value.call( elems[ i ], i, fn( elems[ i ], key ) )
value :
value.call( elems[ i ], i, fn( elems[ i ], key ) )
);
}
}
@@ -5093,7 +5089,10 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
}
var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
var
rkeyEvent = /^key/,
rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
function returnTrue() {
return true;
@@ -5388,8 +5387,8 @@ jQuery.event = {
event = jQuery.event.fix( nativeEvent ),
handlers = (
dataPriv.get( this, "events" ) || Object.create( null )
)[ event.type ] || [],
dataPriv.get( this, "events" ) || Object.create( null )
)[ event.type ] || [],
special = jQuery.event.special[ event.type ] || {};
// Use the fix-ed jQuery.Event rather than the (read-only) native event
@@ -5513,12 +5512,12 @@ jQuery.event = {
get: isFunction( hook ) ?
function() {
if ( this.originalEvent ) {
return hook( this.originalEvent );
return hook( this.originalEvent );
}
} :
function() {
if ( this.originalEvent ) {
return this.originalEvent[ name ];
return this.originalEvent[ name ];
}
},
@@ -5657,13 +5656,7 @@ function leverageNative( el, type, expectSync ) {
// Cancel the outer synthetic event
event.stopImmediatePropagation();
event.preventDefault();
// Support: Chrome 86+
// In Chrome, if an element having a focusout handler is blurred by
// clicking outside of it, it invokes the handler synchronously. If
// that handler calls `.remove()` on the element, the data is cleared,
// leaving `result` undefined. We need to guard against this.
return result && result.value;
return result.value;
}
// If this is an inner synthetic event for an event with a bubbling surrogate
@@ -5828,7 +5821,34 @@ jQuery.each( {
targetTouches: true,
toElement: true,
touches: true,
which: true
which: function( event ) {
var button = event.button;
// Add which for key events
if ( event.which == null && rkeyEvent.test( event.type ) ) {
return event.charCode != null ? event.charCode : event.keyCode;
}
// Add which for click: 1 === left; 2 === middle; 3 === right
if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
if ( button & 1 ) {
return 1;
}
if ( button & 2 ) {
return 3;
}
if ( button & 4 ) {
return 2;
}
return 0;
}
return event.which;
}
}, jQuery.event.addProp );
jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
@@ -5854,12 +5874,6 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
return true;
},
// Suppress native focus or blur as it's already being fired
// in leverageNative.
_default: function() {
return true;
},
delegateType: delegateType
};
} );
@@ -6527,10 +6541,6 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
// set in CSS while `offset*` properties report correct values.
// Behavior in IE 9 is more subtle than in newer versions & it passes
// some versions of this test; make sure not to make it pass there!
//
// Support: Firefox 70+
// Only Firefox includes border widths
// in computed dimensions. (gh-4529)
reliableTrDimensions: function() {
var table, tr, trChild, trStyle;
if ( reliableTrDimensionsVal == null ) {
@@ -6538,32 +6548,17 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
tr = document.createElement( "tr" );
trChild = document.createElement( "div" );
table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
tr.style.cssText = "border:1px solid";
// Support: Chrome 86+
// Height set through cssText does not get applied.
// Computed height then comes back as 0.
table.style.cssText = "position:absolute;left:-11111px";
tr.style.height = "1px";
trChild.style.height = "9px";
// Support: Android 8 Chrome 86+
// In our bodyBackground.html iframe,
// display for all div elements is set to "inline",
// which causes a problem only in Android 8 Chrome 86.
// Ensuring the div is display: block
// gets around this issue.
trChild.style.display = "block";
documentElement
.appendChild( table )
.appendChild( tr )
.appendChild( trChild );
trStyle = window.getComputedStyle( tr );
reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
parseInt( trStyle.borderTopWidth, 10 ) +
parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
documentElement.removeChild( table );
}
@@ -7027,10 +7022,10 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) {
// Running getBoundingClientRect on a disconnected node
// in IE throws an error.
( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
swap( elem, cssShow, function() {
return getWidthOrHeight( elem, dimension, extra );
} ) :
getWidthOrHeight( elem, dimension, extra );
swap( elem, cssShow, function() {
return getWidthOrHeight( elem, dimension, extra );
} ) :
getWidthOrHeight( elem, dimension, extra );
}
},
@@ -7089,7 +7084,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
swap( elem, { marginLeft: 0 }, function() {
return elem.getBoundingClientRect().left;
} )
) + "px";
) + "px";
}
}
);
@@ -7228,7 +7223,7 @@ Tween.propHooks = {
if ( jQuery.fx.step[ tween.prop ] ) {
jQuery.fx.step[ tween.prop ]( tween );
} else if ( tween.elem.nodeType === 1 && (
jQuery.cssHooks[ tween.prop ] ||
jQuery.cssHooks[ tween.prop ] ||
tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
} else {
@@ -7473,7 +7468,7 @@ function defaultPrefilter( elem, props, opts ) {
anim.done( function() {
/* eslint-enable no-loop-func */
/* eslint-enable no-loop-func */
// The final step of a "hide" animation is actually hiding the element
if ( !hidden ) {
@@ -7593,7 +7588,7 @@ function Animation( elem, properties, options ) {
tweens: [],
createTween: function( prop, end ) {
var tween = jQuery.Tween( elem, animation.opts, prop, end,
animation.opts.specialEasing[ prop ] || animation.opts.easing );
animation.opts.specialEasing[ prop ] || animation.opts.easing );
animation.tweens.push( tween );
return tween;
},
@@ -7766,8 +7761,7 @@ jQuery.fn.extend( {
anim.stop( true );
}
};
doAnimation.finish = doAnimation;
doAnimation.finish = doAnimation;
return empty || optall.queue === false ?
this.each( doAnimation ) :
@@ -8407,8 +8401,8 @@ jQuery.fn.extend( {
if ( this.setAttribute ) {
this.setAttribute( "class",
className || value === false ?
"" :
dataPriv.get( this, "__className__" ) || ""
"" :
dataPriv.get( this, "__className__" ) || ""
);
}
}
@@ -8423,7 +8417,7 @@ jQuery.fn.extend( {
while ( ( elem = this[ i++ ] ) ) {
if ( elem.nodeType === 1 &&
( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
return true;
return true;
}
}
@@ -8713,7 +8707,9 @@ jQuery.extend( jQuery.event, {
special.bindType || type;
// jQuery handler
handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
handle = (
dataPriv.get( cur, "events" ) || Object.create( null )
)[ event.type ] &&
dataPriv.get( cur, "handle" );
if ( handle ) {
handle.apply( cur, data );
@@ -8860,7 +8856,7 @@ var rquery = ( /\?/ );
// Cross-browser xml parsing
jQuery.parseXML = function( data ) {
var xml, parserErrorElem;
var xml;
if ( !data || typeof data !== "string" ) {
return null;
}
@@ -8869,17 +8865,12 @@ jQuery.parseXML = function( data ) {
// IE throws on parseFromString with invalid input.
try {
xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
} catch ( e ) {}
} catch ( e ) {
xml = undefined;
}
parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
if ( !xml || parserErrorElem ) {
jQuery.error( "Invalid XML: " + (
parserErrorElem ?
jQuery.map( parserErrorElem.childNodes, function( el ) {
return el.textContent;
} ).join( "\n" ) :
data
) );
if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
jQuery.error( "Invalid XML: " + data );
}
return xml;
};
@@ -8980,14 +8971,16 @@ jQuery.fn.extend( {
// Can add propHook for "elements" to filter or add form elements
var elements = jQuery.prop( this, "elements" );
return elements ? jQuery.makeArray( elements ) : this;
} ).filter( function() {
} )
.filter( function() {
var type = this.type;
// Use .is( ":disabled" ) so that fieldset[disabled] works
return this.name && !jQuery( this ).is( ":disabled" ) &&
rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
( this.checked || !rcheckableType.test( type ) );
} ).map( function( _i, elem ) {
} )
.map( function( _i, elem ) {
var val = jQuery( this ).val();
if ( val == null ) {
@@ -9040,8 +9033,7 @@ var
// Anchor tag for parsing the document origin
originAnchor = document.createElement( "a" );
originAnchor.href = location.href;
originAnchor.href = location.href;
// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
function addToPrefiltersOrTransports( structure ) {
@@ -9422,8 +9414,8 @@ jQuery.extend( {
// Context for global events is callbackContext if it is a DOM node or jQuery collection
globalEventContext = s.context &&
( callbackContext.nodeType || callbackContext.jquery ) ?
jQuery( callbackContext ) :
jQuery.event,
jQuery( callbackContext ) :
jQuery.event,
// Deferreds
deferred = jQuery.Deferred(),
@@ -9735,10 +9727,8 @@ jQuery.extend( {
response = ajaxHandleResponses( s, jqXHR, responses );
}
// Use a noop converter for missing script but not if jsonp
if ( !isSuccess &&
jQuery.inArray( "script", s.dataTypes ) > -1 &&
jQuery.inArray( "json", s.dataTypes ) < 0 ) {
// Use a noop converter for missing script
if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
s.converters[ "text script" ] = function() {};
}
@@ -10476,6 +10466,12 @@ jQuery.offset = {
options.using.call( elem, props );
} else {
if ( typeof props.top === "number" ) {
props.top += "px";
}
if ( typeof props.left === "number" ) {
props.left += "px";
}
curElem.css( props );
}
}
@@ -10644,11 +10640,8 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) {
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
jQuery.each( {
padding: "inner" + name,
content: type,
"": "outer" + name
}, function( defaultExtra, funcName ) {
jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
function( defaultExtra, funcName ) {
// Margin is only for outerHeight, outerWidth
jQuery.fn[ funcName ] = function( margin, value ) {
@@ -10733,8 +10726,7 @@ jQuery.fn.extend( {
}
} );
jQuery.each(
( "blur focus focusin focusout resize scroll click dblclick " +
jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup contextmenu" ).split( " " ),
function( _i, name ) {
@@ -10745,8 +10737,7 @@ jQuery.each(
this.on( name, null, data, fn ) :
this.trigger( name );
};
}
);
} );

File diff suppressed because one or more lines are too long

View File

@@ -10,7 +10,7 @@
*
*/
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
/* Non-minified version is copied as a separate JS file, is available */
@@ -197,3 +197,101 @@ var Stemmer = function() {
}
}
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}

View File

@@ -8,20 +8,18 @@
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
/**
* Simple result scoring code.
*/
if (typeof Scorer === "undefined") {
if (!Scorer) {
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [docname, title, anchor, descr, score, filename]
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: result => {
const [docname, title, anchor, descr, score, filename] = result
return score
score: function(result) {
return result[4];
},
*/
@@ -30,11 +28,9 @@ if (typeof Scorer === "undefined") {
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
@@ -43,495 +39,452 @@ if (typeof Scorer === "undefined") {
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
partialTerm: 2
};
}
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr, score, _filename] = item;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
if (!splitQuery) {
function splitQuery(query) {
return query.split(/\s+/);
}
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms)
);
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
}
/**
* Search Module
*/
const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
var Search = {
htmlToText: (htmlString) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
);
return "";
_index : null,
_queued_query : null,
_pulse_status : -1,
htmlToText : function(htmlString) {
var virtualDocument = document.implementation.createHTMLDocument('virtual');
var htmlElement = $(htmlString, virtualDocument);
htmlElement.find('.headerlink').remove();
docContent = htmlElement.find('[role=main]')[0];
if(docContent === undefined) {
console.warn("Content block not found. Sphinx search tries to obtain it " +
"via '[role=main]'. Could you check your theme or template.");
return "";
}
return docContent.textContent || docContent.innerText;
},
init: () => {
const query = new URLSearchParams(window.location.search).get("q");
document
.querySelectorAll('input[name="q"]')
.forEach((el) => (el.value = query));
if (query) Search.performSearch(query);
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex: () => Search._index !== null,
hasIndex : function() {
return this._index !== null;
},
deferQuery: (query) => (Search._queued_query = query),
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse: () => (Search._pulse_status = -1),
stopPulse : function() {
this._pulse_status = 0;
},
startPulse: () => {
if (Search._pulse_status >= 0) return;
const pulse = () => {
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
Search.dots.innerText = ".".repeat(Search._pulse_status);
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
};
var dotString = '';
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch: (query) => {
performSearch : function(query) {
// create the required interface elements
const searchText = document.createElement("h2");
searchText.textContent = _("Searching");
const searchSummary = document.createElement("p");
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
const out = document.getElementById("search-results");
Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (Search.hasIndex()) Search.query(query);
else Search.deferQuery(query);
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
query : function(query) {
var i;
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// maybe skip this "word"
// stopwords array is from language_data.js
if (
stopwords.indexOf(queryTermLower) !== -1 ||
queryTerm.match(/^\d+$/)
)
return;
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
var objectterms = [];
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
let word = stemmer.stemWord(queryTermLower);
var word = stemmer.stemWord(tmp[i].toLowerCase());
var toAppend;
// select the correct list
if (word[0] === "-") excludedTerms.add(word.substr(1));
if (word[0] == '-') {
toAppend = excluded;
word = word.substr(1);
}
else {
searchTerms.add(word);
highlightTerms.add(queryTermLower);
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
// only add if not already in the list
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// array of [docname, title, anchor, descr, score, filename]
let results = [];
_removeChildren(document.getElementById("search-progress"));
// prepare search
var terms = this._index.terms;
var titleterms = this._index.titleterms;
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
);
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
return leftScore > rightScore ? 1 : -1;
});
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
//console.info('search results:', Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms);
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li></li>');
var requestUrl = "";
var linkUrl = "";
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) {
$.ajax({url: requestUrl,
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
var summary = Search.makeSearchSummary(data, searchterms, hlterms);
if (summary) {
listItem.append(summary);
}
}
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}});
} else {
// just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch: (object, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const objects = Search._index.objects;
const objNames = Search._index.objnames;
const titles = Search._index.titles;
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var docnames = this._index.docnames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
const results = [];
var i;
var results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
for (var prefix in objects) {
for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
var match = objects[prefix][iMatch];
var name = match[4];
var fullname = (prefix ? prefix + '.' : '') + name;
var fullnameLower = fullname.toLowerCase()
if (fullnameLower.indexOf(object) > -1) {
var score = 0;
var parts = fullnameLower.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
let score = 0;
const parts = fullnameLower.split(".");
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch;
else if (parts.slice(-1)[0].indexOf(object) > -1)
score += Scorer.objPartialMatch; // matches in last name
const objName = objNames[match[1]][2];
const title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results;
},
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
*/
escapeRegExp : function(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
/**
* search for full-text terms in the index
*/
performTermsSearch: (searchTerms, excludedTerms) => {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var docnames = this._index.docnames;
var filenames = this._index.filenames;
var titles = this._index.titles;
const scoreMap = new Map();
const fileMap = new Map();
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word])
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word])
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
});
var word_regex = this.escapeRegExp(word);
for (var w in terms) {
if (w.match(word_regex) && !terms[word]) {
_o.push({files: terms[w], score: Scorer.partialTerm})
}
}
for (var w in titleterms) {
if (w.match(word_regex) && !titleterms[word]) {
_o.push({files: titleterms[w], score: Scorer.partialTitle})
}
}
}
// no match but word was a required one
if (arr.every((record) => record.files === undefined)) return;
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
arr.forEach((record) => {
if (record.files === undefined) return;
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
let recordFiles = record.files;
if (recordFiles.length === undefined) recordFiles = [recordFiles];
files.push(...recordFiles);
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
});
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {};
scoreMap[file][word] = o.score;
}
});
// create the mapping
files.forEach((file) => {
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
fileMap.get(file).push(word);
else fileMap.set(file, [word]);
});
});
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap && fileMap[file].indexOf(word) === -1)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
const results = [];
for (const [file, wordList] of fileMap) {
// check if all requirements are matched
for (file in fileMap) {
var valid = true;
// as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
// check if all requirements are matched
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
searchterms.filter(function(term){return term.length > 2}).length
if (
wordList.length !== searchTerms.size &&
wordList.length !== filteredTermCount
)
continue;
fileMap[file].length != searchterms.length &&
fileMap[file].length != filteredTermCount
) continue;
// ensure that none of the excluded terms is in the search result
if (
[...excludedTerms].some(
(term) =>
terms[term] === file ||
titleTerms[term] === file ||
(terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break;
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
]);
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
}
}
return results;
},
@@ -539,28 +492,34 @@ const Search = {
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words.
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary: (htmlText, keywords) => {
const text = Search.htmlToText(htmlText);
if (text === "") return null;
const textLower = text.toLowerCase();
const actualStartPosition = [...keywords]
.map((k) => textLower.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("p");
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
return summary;
},
makeSearchSummary : function(htmlText, keywords, hlwords) {
var text = Search.htmlToText(htmlText);
if (text == "") {
return null;
}
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<p class="context"></p>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
};
_ready(Search.init);
$(document).ready(function() {
Search.init();
});

View File

@@ -1,144 +0,0 @@
/* Highlighting utilities for Sphinx HTML documentation. */
"use strict";
const SPHINX_HIGHLIGHT_ENABLED = true
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const SphinxHighlight = {
/**
* highlight the search words provided in localstorage in the text
*/
highlightSearchWords: () => {
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
// get and clear terms from localstorage
const url = new URL(window.location);
const highlight =
localStorage.getItem("sphinx_highlight_terms")
|| url.searchParams.get("highlight")
|| "";
localStorage.removeItem("sphinx_highlight_terms")
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
// get individual terms from highlight string
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
localStorage.removeItem("sphinx_highlight_terms")
},
initEscapeListener: () => {
// only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
SphinxHighlight.hideSearchWords();
event.preventDefault();
}
});
},
};
_ready(SphinxHighlight.highlightSearchWords);
_ready(SphinxHighlight.initEscapeListener);

View File

@@ -15,9 +15,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/js/theme.js"></script>
@@ -91,7 +89,7 @@
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Index</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/espressif/esp-protocols/blob/3f0262d/docs/en/genindex" class="fa fa-github"> Edit on GitHub</a>
<a href="https://github.com/espressif/esp-protocols/blob/42565ff/docs/en/genindex" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>

View File

@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ASIO port - ESP32 - &mdash; ESP-Protocols latest documentation</title>
@@ -16,9 +16,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/js/theme.js"></script>
@@ -103,7 +101,7 @@
<li><a href="#" class="icon icon-home"></a> &raquo;</li>
<li>ASIO port</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/espressif/esp-protocols/blob/3f0262d/docs/en/index.rst" class="fa fa-github"> Edit on GitHub</a>
<a href="https://github.com/espressif/esp-protocols/blob/42565ff/docs/en/index.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
@@ -112,17 +110,17 @@
<div itemprop="articleBody">
<section id="asio-port">
<h1>ASIO port<a class="headerlink" href="#asio-port" title="Permalink to this heading"></a></h1>
<h1>ASIO port<a class="headerlink" href="#asio-port" title="Permalink to this headline"></a></h1>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
<p>Asio is a cross-platform C++ library, see <a class="reference external" href="https://think-async.com/Asio/">https://think-async.com/Asio/</a>. It provides a consistent asynchronous model using a modern C++ approach.</p>
<section id="asio-documentation">
<h3>ASIO documentation<a class="headerlink" href="#asio-documentation" title="Permalink to this heading"></a></h3>
<h3>ASIO documentation<a class="headerlink" href="#asio-documentation" title="Permalink to this headline"></a></h3>
<p>Please refer to the original asio documentation at <a class="reference external" href="https://think-async.com/Asio/Documentation">https://think-async.com/Asio/Documentation</a>.
Asio also comes with a number of examples which could be find under Documentation/Examples on that web site.</p>
</section>
<section id="supported-features">
<h3>Supported features<a class="headerlink" href="#supported-features" title="Permalink to this heading"></a></h3>
<h3>Supported features<a class="headerlink" href="#supported-features" title="Permalink to this headline"></a></h3>
<p>ESP platform port currently supports only network asynchronous socket operations; does not support serial port.
SSL/TLS support is disabled by default and could be enabled in component configuration menu by choosing TLS library from</p>
<ul class="simple">
@@ -143,13 +141,13 @@ SSL/TLS support is disabled by default and could be enabled in component configu
</section>
</section>
<section id="application-example">
<h2>Application Example<a class="headerlink" href="#application-example" title="Permalink to this heading"></a></h2>
<p>ESP examples are based on standard asio <a class="reference external" href="https://github.com/espressif/esp-protocols/tree/3f0262d/examples/../examples">examples </a>:</p>
<h2>Application Example<a class="headerlink" href="#application-example" title="Permalink to this headline"></a></h2>
<p>ESP examples are based on standard asio <a class="reference external" href="https://github.com/espressif/esp-protocols/tree/42565ff/examples/../examples">examples </a>:</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/tree/3f0262d/examples/../examples/udp_echo_server">udp_echo_server </a></p></li>
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/tree/3f0262d/examples/../examples/tcp_echo_server">tcp_echo_server </a></p></li>
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/tree/3f0262d/examples/../examples/asio_chat">asio_chat </a></p></li>
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/tree/3f0262d/examples/../examples/ssl_client_server">ssl_client_server </a></p></li>
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/tree/42565ff/examples/../examples/udp_echo_server">udp_echo_server </a></p></li>
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/tree/42565ff/examples/../examples/tcp_echo_server">tcp_echo_server </a></p></li>
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/tree/42565ff/examples/../examples/asio_chat">asio_chat </a></p></li>
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/tree/42565ff/examples/../examples/ssl_client_server">ssl_client_server </a></p></li>
</ul>
<p>Please refer to the specific example README.md for details</p>
</section>

View File

@@ -16,9 +16,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/js/theme.js"></script>

View File

@@ -1 +1 @@
Search.setIndex({"docnames": ["index"], "filenames": ["index.rst"], "titles": ["ASIO port"], "terms": {"i": 0, "cross": 0, "platform": 0, "c": 0, "librari": 0, "see": 0, "http": 0, "think": 0, "async": 0, "com": 0, "It": 0, "provid": 0, "consist": 0, "asynchron": 0, "model": 0, "us": 0, "modern": 0, "approach": 0, "pleas": 0, "refer": 0, "origin": 0, "also": 0, "come": 0, "number": 0, "which": 0, "could": 0, "find": 0, "under": 0, "web": 0, "site": 0, "esp": 0, "current": 0, "onli": 0, "network": 0, "socket": 0, "oper": 0, "doe": 0, "serial": 0, "ssl": 0, "tl": 0, "disabl": 0, "default": 0, "enabl": 0, "compon": 0, "configur": 0, "menu": 0, "choos": 0, "from": 0, "mbedtl": 0, "openssl": 0, "translat": 0, "layer": 0, "option": 0, "wolfssl": 0, "veri": 0, "basic": 0, "thi": 0, "stage": 0, "includ": 0, "follow": 0, "verif": 0, "callback": 0, "dh": 0, "properti": 0, "file": 0, "certif": 0, "privat": 0, "kei": 0, "api": 0, "intern": 0, "set": 0, "except": 0, "ar": 0, "menuconfig": 0, "typeid": 0, "base": 0, "standard": 0, "udp_echo_serv": 0, "tcp_echo_serv": 0, "asio_chat": 0, "ssl_client_serv": 0, "specif": 0, "readm": 0, "md": 0, "detail": 0}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"asio": 0, "port": 0, "overview": 0, "document": 0, "support": 0, "featur": 0, "applic": 0, "exampl": 0}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.todo": 2, "sphinx": 57}, "alltitles": {"ASIO port": [[0, "asio-port"]], "Overview": [[0, "overview"]], "ASIO documentation": [[0, "asio-documentation"]], "Supported features": [[0, "supported-features"]], "Application Example": [[0, "application-example"]]}, "indexentries": {}})
Search.setIndex({docnames:["index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.todo":2,sphinx:56},filenames:["index.rst"],objects:{},objnames:{},objtypes:{},terms:{"default":0,It:0,also:0,api:0,approach:0,ar:0,asio_chat:0,async:0,asynchron:0,base:0,basic:0,c:0,callback:0,certif:0,choos:0,com:0,come:0,compon:0,configur:0,consist:0,could:0,cross:0,current:0,detail:0,dh:0,disabl:0,doe:0,enabl:0,esp:0,except:0,file:0,find:0,follow:0,from:0,http:0,includ:0,intern:0,kei:0,layer:0,librari:0,mbedtl:0,md:0,menu:0,menuconfig:0,model:0,modern:0,network:0,number:0,onli:0,openssl:0,oper:0,option:0,origin:0,platform:0,pleas:0,privat:0,properti:0,provid:0,readm:0,refer:0,see:0,serial:0,set:0,site:0,socket:0,specif:0,ssl:0,ssl_client_serv:0,stage:0,standard:0,tcp_echo_serv:0,thi:0,think:0,tl:0,translat:0,typeid:0,udp_echo_serv:0,under:0,us:0,veri:0,verif:0,web:0,which:0,wolfssl:0},titles:["ASIO port"],titleterms:{applic:0,asio:0,document:0,exampl:0,featur:0,overview:0,port:0,support:0}})

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -4,7 +4,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>ESP MODEM &#8212; esp-modem documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
@@ -12,9 +12,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="C API Documentation" href="api_docs.html" />
@@ -36,7 +34,7 @@
<div class="body" role="main">
<section id="esp-modem">
<h1>ESP MODEM<a class="headerlink" href="#esp-modem" title="Permalink to this heading"></a></h1>
<h1>ESP MODEM<a class="headerlink" href="#esp-modem" title="Permalink to this headline"></a></h1>
<p>This component is used to communicate with modems in the command mode (using AT commands), as well as the data mode
(over PPPoS protocol).
The modem device is modeled with a DCE (Data Communication Equipment) object, which is composed of:</p>
@@ -60,9 +58,9 @@ The modem device is modeled with a DCE (Data Communication Equipment) object, wh
</pre></div>
</div>
<section id="modem-components">
<h2>Modem components<a class="headerlink" href="#modem-components" title="Permalink to this heading"></a></h2>
<h2>Modem components<a class="headerlink" href="#modem-components" title="Permalink to this headline"></a></h2>
<section id="dce">
<h3>DCE<a class="headerlink" href="#dce" title="Permalink to this heading"></a></h3>
<h3>DCE<a class="headerlink" href="#dce" title="Permalink to this headline"></a></h3>
<p>This is the basic operational unit of the esp_modem component, abstracting a specific module in software,
which is basically configured by</p>
<ul class="simple">
@@ -77,20 +75,20 @@ which is basically configured by</p>
</ul>
</section>
<section id="dte">
<h3>DTE<a class="headerlink" href="#dte" title="Permalink to this heading"></a></h3>
<h3>DTE<a class="headerlink" href="#dte" title="Permalink to this headline"></a></h3>
<p>Is an abstraction of the physical interface connected to the modem. Current implementation supports only UART</p>
</section>
<section id="ppp-netif">
<h3>PPP netif<a class="headerlink" href="#ppp-netif" title="Permalink to this heading"></a></h3>
<h3>PPP netif<a class="headerlink" href="#ppp-netif" title="Permalink to this headline"></a></h3>
<p>Is used to attach the specific network interface to a network communication protocol used by the modem. Currently implementation supports only PPPoS protocol.</p>
</section>
<section id="module">
<h3>Module<a class="headerlink" href="#module" title="Permalink to this heading"></a></h3>
<h3>Module<a class="headerlink" href="#module" title="Permalink to this headline"></a></h3>
<p>Abstraction of the specific modem device. Currently the component supports SIM800, BG96, SIM7600.</p>
</section>
</section>
<section id="use-cases">
<h2>Use cases<a class="headerlink" href="#use-cases" title="Permalink to this heading"></a></h2>
<h2>Use cases<a class="headerlink" href="#use-cases" title="Permalink to this headline"></a></h2>
<p>Users interact with the esp-modem using the DCEs interface, to basically</p>
<ul class="simple">
<li><p>Switch between command and data mode to connect to the internet via cellular network.</p></li>
@@ -106,32 +104,32 @@ IP address changes.</p>
</ul>
</section>
<section id="extensibility">
<h2>Extensibility<a class="headerlink" href="#extensibility" title="Permalink to this heading"></a></h2>
<h2>Extensibility<a class="headerlink" href="#extensibility" title="Permalink to this headline"></a></h2>
<section id="cmux">
<h3>CMUX<a class="headerlink" href="#cmux" title="Permalink to this heading"></a></h3>
<h3>CMUX<a class="headerlink" href="#cmux" title="Permalink to this headline"></a></h3>
<p>Implementation of virtual terminals is an experimental feature, which allows users to also issue commands in the data mode,
after creating multiple virtual terminals, designating some of them solely to data mode, others solely to command mode.</p>
</section>
<section id="dte-s">
<h3>DTEs<a class="headerlink" href="#dte-s" title="Permalink to this heading"></a></h3>
<h3>DTEs<a class="headerlink" href="#dte-s" title="Permalink to this headline"></a></h3>
<p>Currently, we support only UART (and USB as a preview feature), but modern modules support other communication interfaces, such as USB, SPI.</p>
</section>
<section id="other-devices">
<h3>Other devices<a class="headerlink" href="#other-devices" title="Permalink to this heading"></a></h3>
<h3>Other devices<a class="headerlink" href="#other-devices" title="Permalink to this headline"></a></h3>
<p>Adding a new device is a must-have requirement for the esp-modem component. Different modules support different commands,
or some commands might have a different implementation. Adding a new device means to provide a new implementation
as a class derived from <code class="docutils literal notranslate"><span class="pre">GenericModule</span></code>, where we could add new commands or modify the existing ones.</p>
</section>
</section>
<section id="configuration">
<h2>Configuration<a class="headerlink" href="#configuration" title="Permalink to this heading"></a></h2>
<h2>Configuration<a class="headerlink" href="#configuration" title="Permalink to this headline"></a></h2>
<p>Modem abstraction is configurable both compile-time and run-time.</p>
<section id="component-kconfig">
<h3>Component Kconfig<a class="headerlink" href="#component-kconfig" title="Permalink to this heading"></a></h3>
<h3>Component Kconfig<a class="headerlink" href="#component-kconfig" title="Permalink to this headline"></a></h3>
<p>Compile-time configuration is provided using menuconfig. Please check the description for the CMUX mode configuration options.</p>
</section>
<section id="runtime-configuration">
<h3>Runtime configuration<a class="headerlink" href="#runtime-configuration" title="Permalink to this heading"></a></h3>
<h3>Runtime configuration<a class="headerlink" href="#runtime-configuration" title="Permalink to this headline"></a></h3>
<p>Is defined using standard configuration structures for <code class="docutils literal notranslate"><span class="pre">DTE</span></code> and <code class="docutils literal notranslate"><span class="pre">DCE</span></code> objects separately. Please find documentation of</p>
<ul class="simple">
<li><p>:cpp:class:<code class="docutils literal notranslate"><span class="pre">esp_modem_dte_config_t</span></code></p></li>
@@ -206,7 +204,7 @@ as a class derived from <code class="docutils literal notranslate"><span class="
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<script>$('#searchbox').show(0);</script>
@@ -223,7 +221,7 @@ as a class derived from <code class="docutils literal notranslate"><span class="
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@@ -1,4 +1,4 @@
- :cpp:func:`esp_modem::DCE::sync`
- :cpp:func:`esp_modem::DCE::get_operator_name`
- :cpp:func:`esp_modem::DCE::store_profile`

View File

@@ -1,134 +0,0 @@
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

View File

@@ -222,7 +222,7 @@ table.modindextable td {
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
min-width: 450px;
max-width: 800px;
}
@@ -237,6 +237,16 @@ a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
@@ -324,15 +334,13 @@ aside.sidebar {
p.sidebar-title {
font-weight: bold;
}
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
@@ -371,8 +379,6 @@ div.body p.centered {
div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
@@ -380,8 +386,6 @@ div.admonition > :last-child {
div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
@@ -424,6 +428,10 @@ table.docutils td, table.docutils th {
border-bottom: 1px solid #aaa;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
@@ -606,26 +614,20 @@ ol.simple p,
ul.simple p {
margin-bottom: 0;
}
aside.footnote > span,
div.citation > span {
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
@@ -642,6 +644,10 @@ dl.field-list > dt {
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;

View File

@@ -2,155 +2,357 @@
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation.
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
this.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE: "unknown",
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined')
return string;
return (typeof translated === 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) === 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
var url = new URL(window.location);
url.searchParams.delete('highlight');
window.history.replaceState({}, '', url);
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
focusSearchBar : function() {
$('input[name=q]').first().focus();
},
/**
* Initialise the domain index toggle buttons
* make the url absolute
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
initOnKeyListeners: () => {
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return;
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
$(document).keydown(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box, textarea, dropdown or button
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
&& activeElementType !== 'BUTTON') {
if (event.altKey || event.ctrlKey || event.metaKey)
return;
if (!event.shiftKey) {
if (!event.shiftKey) {
switch (event.key) {
case 'ArrowLeft':
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
break;
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
break;
case 'ArrowRight':
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
break;
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
break;
case 'Escape':
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
break;
Documentation.hideSearchWords();
return false;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
case '/':
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
break;
Documentation.focusSearchBar();
return false;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
}
};
// quick alias for translations
const _ = Documentation.gettext;
_ = Documentation.gettext;
_ready(Documentation.init);
$(document).ready(function() {
Documentation.init();
});

View File

@@ -1,15 +1,15 @@
/*!
* jQuery JavaScript Library v3.6.0
* jQuery JavaScript Library v3.5.1
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright OpenJS Foundation and other contributors
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2021-03-02T17:08Z
* Date: 2020-05-04T22:49Z
*/
( function( global, factory ) {
@@ -76,16 +76,12 @@ var support = {};
var isFunction = function isFunction( obj ) {
// Support: Chrome <=57, Firefox <=52
// In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function.
// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
// Plus for old WebKit, typeof returns "function" for HTML collections
// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
return typeof obj === "function" && typeof obj.nodeType !== "number" &&
typeof obj.item !== "function";
};
// Support: Chrome <=57, Firefox <=52
// In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function.
return typeof obj === "function" && typeof obj.nodeType !== "number";
};
var isWindow = function isWindow( obj ) {
@@ -151,7 +147,7 @@ function toType( obj ) {
var
version = "3.6.0",
version = "3.5.1",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
@@ -405,7 +401,7 @@ jQuery.extend( {
if ( isArrayLike( Object( arr ) ) ) {
jQuery.merge( ret,
typeof arr === "string" ?
[ arr ] : arr
[ arr ] : arr
);
} else {
push.call( ret, arr );
@@ -500,9 +496,9 @@ if ( typeof Symbol === "function" ) {
// Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
function( _i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
function( _i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
function isArrayLike( obj ) {
@@ -522,14 +518,14 @@ function isArrayLike( obj ) {
}
var Sizzle =
/*!
* Sizzle CSS Selector Engine v2.3.6
* Sizzle CSS Selector Engine v2.3.5
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2021-02-16
* Date: 2020-03-14
*/
( function( window ) {
var i,
@@ -1112,8 +1108,8 @@ support = Sizzle.support = {};
* @returns {Boolean} True iff elem is a non-HTML XML node
*/
isXML = Sizzle.isXML = function( elem ) {
var namespace = elem && elem.namespaceURI,
docElem = elem && ( elem.ownerDocument || elem ).documentElement;
var namespace = elem.namespaceURI,
docElem = ( elem.ownerDocument || elem ).documentElement;
// Support: IE <=8
// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
@@ -3028,9 +3024,9 @@ var rneedsContext = jQuery.expr.match.needsContext;
function nodeName( elem, name ) {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
}
};
var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
@@ -4001,8 +3997,8 @@ jQuery.extend( {
resolveContexts = Array( i ),
resolveValues = slice.call( arguments ),
// the primary Deferred
primary = jQuery.Deferred(),
// the master Deferred
master = jQuery.Deferred(),
// subordinate callback factory
updateFunc = function( i ) {
@@ -4010,30 +4006,30 @@ jQuery.extend( {
resolveContexts[ i ] = this;
resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
if ( !( --remaining ) ) {
primary.resolveWith( resolveContexts, resolveValues );
master.resolveWith( resolveContexts, resolveValues );
}
};
};
// Single- and empty arguments are adopted like Promise.resolve
if ( remaining <= 1 ) {
adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
!remaining );
// Use .then() to unwrap secondary thenables (cf. gh-3000)
if ( primary.state() === "pending" ||
if ( master.state() === "pending" ||
isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
return primary.then();
return master.then();
}
}
// Multiple arguments are aggregated like Promise.all array elements
while ( i-- ) {
adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
}
return primary.promise();
return master.promise();
}
} );
@@ -4184,8 +4180,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
for ( ; i < len; i++ ) {
fn(
elems[ i ], key, raw ?
value :
value.call( elems[ i ], i, fn( elems[ i ], key ) )
value :
value.call( elems[ i ], i, fn( elems[ i ], key ) )
);
}
}
@@ -5093,7 +5089,10 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
}
var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
var
rkeyEvent = /^key/,
rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
function returnTrue() {
return true;
@@ -5388,8 +5387,8 @@ jQuery.event = {
event = jQuery.event.fix( nativeEvent ),
handlers = (
dataPriv.get( this, "events" ) || Object.create( null )
)[ event.type ] || [],
dataPriv.get( this, "events" ) || Object.create( null )
)[ event.type ] || [],
special = jQuery.event.special[ event.type ] || {};
// Use the fix-ed jQuery.Event rather than the (read-only) native event
@@ -5513,12 +5512,12 @@ jQuery.event = {
get: isFunction( hook ) ?
function() {
if ( this.originalEvent ) {
return hook( this.originalEvent );
return hook( this.originalEvent );
}
} :
function() {
if ( this.originalEvent ) {
return this.originalEvent[ name ];
return this.originalEvent[ name ];
}
},
@@ -5657,13 +5656,7 @@ function leverageNative( el, type, expectSync ) {
// Cancel the outer synthetic event
event.stopImmediatePropagation();
event.preventDefault();
// Support: Chrome 86+
// In Chrome, if an element having a focusout handler is blurred by
// clicking outside of it, it invokes the handler synchronously. If
// that handler calls `.remove()` on the element, the data is cleared,
// leaving `result` undefined. We need to guard against this.
return result && result.value;
return result.value;
}
// If this is an inner synthetic event for an event with a bubbling surrogate
@@ -5828,7 +5821,34 @@ jQuery.each( {
targetTouches: true,
toElement: true,
touches: true,
which: true
which: function( event ) {
var button = event.button;
// Add which for key events
if ( event.which == null && rkeyEvent.test( event.type ) ) {
return event.charCode != null ? event.charCode : event.keyCode;
}
// Add which for click: 1 === left; 2 === middle; 3 === right
if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
if ( button & 1 ) {
return 1;
}
if ( button & 2 ) {
return 3;
}
if ( button & 4 ) {
return 2;
}
return 0;
}
return event.which;
}
}, jQuery.event.addProp );
jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
@@ -5854,12 +5874,6 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
return true;
},
// Suppress native focus or blur as it's already being fired
// in leverageNative.
_default: function() {
return true;
},
delegateType: delegateType
};
} );
@@ -6527,10 +6541,6 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
// set in CSS while `offset*` properties report correct values.
// Behavior in IE 9 is more subtle than in newer versions & it passes
// some versions of this test; make sure not to make it pass there!
//
// Support: Firefox 70+
// Only Firefox includes border widths
// in computed dimensions. (gh-4529)
reliableTrDimensions: function() {
var table, tr, trChild, trStyle;
if ( reliableTrDimensionsVal == null ) {
@@ -6538,32 +6548,17 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
tr = document.createElement( "tr" );
trChild = document.createElement( "div" );
table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
tr.style.cssText = "border:1px solid";
// Support: Chrome 86+
// Height set through cssText does not get applied.
// Computed height then comes back as 0.
table.style.cssText = "position:absolute;left:-11111px";
tr.style.height = "1px";
trChild.style.height = "9px";
// Support: Android 8 Chrome 86+
// In our bodyBackground.html iframe,
// display for all div elements is set to "inline",
// which causes a problem only in Android 8 Chrome 86.
// Ensuring the div is display: block
// gets around this issue.
trChild.style.display = "block";
documentElement
.appendChild( table )
.appendChild( tr )
.appendChild( trChild );
trStyle = window.getComputedStyle( tr );
reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
parseInt( trStyle.borderTopWidth, 10 ) +
parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
documentElement.removeChild( table );
}
@@ -7027,10 +7022,10 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) {
// Running getBoundingClientRect on a disconnected node
// in IE throws an error.
( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
swap( elem, cssShow, function() {
return getWidthOrHeight( elem, dimension, extra );
} ) :
getWidthOrHeight( elem, dimension, extra );
swap( elem, cssShow, function() {
return getWidthOrHeight( elem, dimension, extra );
} ) :
getWidthOrHeight( elem, dimension, extra );
}
},
@@ -7089,7 +7084,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
swap( elem, { marginLeft: 0 }, function() {
return elem.getBoundingClientRect().left;
} )
) + "px";
) + "px";
}
}
);
@@ -7228,7 +7223,7 @@ Tween.propHooks = {
if ( jQuery.fx.step[ tween.prop ] ) {
jQuery.fx.step[ tween.prop ]( tween );
} else if ( tween.elem.nodeType === 1 && (
jQuery.cssHooks[ tween.prop ] ||
jQuery.cssHooks[ tween.prop ] ||
tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
} else {
@@ -7473,7 +7468,7 @@ function defaultPrefilter( elem, props, opts ) {
anim.done( function() {
/* eslint-enable no-loop-func */
/* eslint-enable no-loop-func */
// The final step of a "hide" animation is actually hiding the element
if ( !hidden ) {
@@ -7593,7 +7588,7 @@ function Animation( elem, properties, options ) {
tweens: [],
createTween: function( prop, end ) {
var tween = jQuery.Tween( elem, animation.opts, prop, end,
animation.opts.specialEasing[ prop ] || animation.opts.easing );
animation.opts.specialEasing[ prop ] || animation.opts.easing );
animation.tweens.push( tween );
return tween;
},
@@ -7766,8 +7761,7 @@ jQuery.fn.extend( {
anim.stop( true );
}
};
doAnimation.finish = doAnimation;
doAnimation.finish = doAnimation;
return empty || optall.queue === false ?
this.each( doAnimation ) :
@@ -8407,8 +8401,8 @@ jQuery.fn.extend( {
if ( this.setAttribute ) {
this.setAttribute( "class",
className || value === false ?
"" :
dataPriv.get( this, "__className__" ) || ""
"" :
dataPriv.get( this, "__className__" ) || ""
);
}
}
@@ -8423,7 +8417,7 @@ jQuery.fn.extend( {
while ( ( elem = this[ i++ ] ) ) {
if ( elem.nodeType === 1 &&
( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
return true;
return true;
}
}
@@ -8713,7 +8707,9 @@ jQuery.extend( jQuery.event, {
special.bindType || type;
// jQuery handler
handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
handle = (
dataPriv.get( cur, "events" ) || Object.create( null )
)[ event.type ] &&
dataPriv.get( cur, "handle" );
if ( handle ) {
handle.apply( cur, data );
@@ -8860,7 +8856,7 @@ var rquery = ( /\?/ );
// Cross-browser xml parsing
jQuery.parseXML = function( data ) {
var xml, parserErrorElem;
var xml;
if ( !data || typeof data !== "string" ) {
return null;
}
@@ -8869,17 +8865,12 @@ jQuery.parseXML = function( data ) {
// IE throws on parseFromString with invalid input.
try {
xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
} catch ( e ) {}
} catch ( e ) {
xml = undefined;
}
parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
if ( !xml || parserErrorElem ) {
jQuery.error( "Invalid XML: " + (
parserErrorElem ?
jQuery.map( parserErrorElem.childNodes, function( el ) {
return el.textContent;
} ).join( "\n" ) :
data
) );
if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
jQuery.error( "Invalid XML: " + data );
}
return xml;
};
@@ -8980,14 +8971,16 @@ jQuery.fn.extend( {
// Can add propHook for "elements" to filter or add form elements
var elements = jQuery.prop( this, "elements" );
return elements ? jQuery.makeArray( elements ) : this;
} ).filter( function() {
} )
.filter( function() {
var type = this.type;
// Use .is( ":disabled" ) so that fieldset[disabled] works
return this.name && !jQuery( this ).is( ":disabled" ) &&
rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
( this.checked || !rcheckableType.test( type ) );
} ).map( function( _i, elem ) {
} )
.map( function( _i, elem ) {
var val = jQuery( this ).val();
if ( val == null ) {
@@ -9040,8 +9033,7 @@ var
// Anchor tag for parsing the document origin
originAnchor = document.createElement( "a" );
originAnchor.href = location.href;
originAnchor.href = location.href;
// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
function addToPrefiltersOrTransports( structure ) {
@@ -9422,8 +9414,8 @@ jQuery.extend( {
// Context for global events is callbackContext if it is a DOM node or jQuery collection
globalEventContext = s.context &&
( callbackContext.nodeType || callbackContext.jquery ) ?
jQuery( callbackContext ) :
jQuery.event,
jQuery( callbackContext ) :
jQuery.event,
// Deferreds
deferred = jQuery.Deferred(),
@@ -9735,10 +9727,8 @@ jQuery.extend( {
response = ajaxHandleResponses( s, jqXHR, responses );
}
// Use a noop converter for missing script but not if jsonp
if ( !isSuccess &&
jQuery.inArray( "script", s.dataTypes ) > -1 &&
jQuery.inArray( "json", s.dataTypes ) < 0 ) {
// Use a noop converter for missing script
if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
s.converters[ "text script" ] = function() {};
}
@@ -10476,6 +10466,12 @@ jQuery.offset = {
options.using.call( elem, props );
} else {
if ( typeof props.top === "number" ) {
props.top += "px";
}
if ( typeof props.left === "number" ) {
props.left += "px";
}
curElem.css( props );
}
}
@@ -10644,11 +10640,8 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) {
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
jQuery.each( {
padding: "inner" + name,
content: type,
"": "outer" + name
}, function( defaultExtra, funcName ) {
jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
function( defaultExtra, funcName ) {
// Margin is only for outerHeight, outerWidth
jQuery.fn[ funcName ] = function( margin, value ) {
@@ -10733,8 +10726,7 @@ jQuery.fn.extend( {
}
} );
jQuery.each(
( "blur focus focusin focusout resize scroll click dblclick " +
jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup contextmenu" ).split( " " ),
function( _i, name ) {
@@ -10745,8 +10737,7 @@ jQuery.each(
this.on( name, null, data, fn ) :
this.trigger( name );
};
}
);
} );

File diff suppressed because one or more lines are too long

View File

@@ -10,7 +10,7 @@
*
*/
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
/* Non-minified version is copied as a separate JS file, is available */
@@ -197,3 +197,101 @@ var Stemmer = function() {
}
}
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}

View File

@@ -54,7 +54,6 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #000000 } /* Name.Variable */
.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */
.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
.highlight .mb { color: #990000 } /* Literal.Number.Bin */
.highlight .mf { color: #990000 } /* Literal.Number.Float */

View File

@@ -8,20 +8,18 @@
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
/**
* Simple result scoring code.
*/
if (typeof Scorer === "undefined") {
if (!Scorer) {
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [docname, title, anchor, descr, score, filename]
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: result => {
const [docname, title, anchor, descr, score, filename] = result
return score
score: function(result) {
return result[4];
},
*/
@@ -30,11 +28,9 @@ if (typeof Scorer === "undefined") {
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
@@ -43,495 +39,452 @@ if (typeof Scorer === "undefined") {
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
partialTerm: 2
};
}
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr, score, _filename] = item;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
if (!splitQuery) {
function splitQuery(query) {
return query.split(/\s+/);
}
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms)
);
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
}
/**
* Search Module
*/
const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
var Search = {
htmlToText: (htmlString) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
);
return "";
_index : null,
_queued_query : null,
_pulse_status : -1,
htmlToText : function(htmlString) {
var virtualDocument = document.implementation.createHTMLDocument('virtual');
var htmlElement = $(htmlString, virtualDocument);
htmlElement.find('.headerlink').remove();
docContent = htmlElement.find('[role=main]')[0];
if(docContent === undefined) {
console.warn("Content block not found. Sphinx search tries to obtain it " +
"via '[role=main]'. Could you check your theme or template.");
return "";
}
return docContent.textContent || docContent.innerText;
},
init: () => {
const query = new URLSearchParams(window.location.search).get("q");
document
.querySelectorAll('input[name="q"]')
.forEach((el) => (el.value = query));
if (query) Search.performSearch(query);
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex: () => Search._index !== null,
hasIndex : function() {
return this._index !== null;
},
deferQuery: (query) => (Search._queued_query = query),
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse: () => (Search._pulse_status = -1),
stopPulse : function() {
this._pulse_status = 0;
},
startPulse: () => {
if (Search._pulse_status >= 0) return;
const pulse = () => {
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
Search.dots.innerText = ".".repeat(Search._pulse_status);
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
};
var dotString = '';
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch: (query) => {
performSearch : function(query) {
// create the required interface elements
const searchText = document.createElement("h2");
searchText.textContent = _("Searching");
const searchSummary = document.createElement("p");
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
const out = document.getElementById("search-results");
Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (Search.hasIndex()) Search.query(query);
else Search.deferQuery(query);
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
query : function(query) {
var i;
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// maybe skip this "word"
// stopwords array is from language_data.js
if (
stopwords.indexOf(queryTermLower) !== -1 ||
queryTerm.match(/^\d+$/)
)
return;
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
var objectterms = [];
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
let word = stemmer.stemWord(queryTermLower);
var word = stemmer.stemWord(tmp[i].toLowerCase());
var toAppend;
// select the correct list
if (word[0] === "-") excludedTerms.add(word.substr(1));
if (word[0] == '-') {
toAppend = excluded;
word = word.substr(1);
}
else {
searchTerms.add(word);
highlightTerms.add(queryTermLower);
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
// only add if not already in the list
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// array of [docname, title, anchor, descr, score, filename]
let results = [];
_removeChildren(document.getElementById("search-progress"));
// prepare search
var terms = this._index.terms;
var titleterms = this._index.titleterms;
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
);
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
return leftScore > rightScore ? 1 : -1;
});
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
//console.info('search results:', Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms);
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li></li>');
var requestUrl = "";
var linkUrl = "";
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) {
$.ajax({url: requestUrl,
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
var summary = Search.makeSearchSummary(data, searchterms, hlterms);
if (summary) {
listItem.append(summary);
}
}
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}});
} else {
// just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch: (object, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const objects = Search._index.objects;
const objNames = Search._index.objnames;
const titles = Search._index.titles;
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var docnames = this._index.docnames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
const results = [];
var i;
var results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
for (var prefix in objects) {
for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
var match = objects[prefix][iMatch];
var name = match[4];
var fullname = (prefix ? prefix + '.' : '') + name;
var fullnameLower = fullname.toLowerCase()
if (fullnameLower.indexOf(object) > -1) {
var score = 0;
var parts = fullnameLower.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
let score = 0;
const parts = fullnameLower.split(".");
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch;
else if (parts.slice(-1)[0].indexOf(object) > -1)
score += Scorer.objPartialMatch; // matches in last name
const objName = objNames[match[1]][2];
const title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results;
},
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
*/
escapeRegExp : function(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
/**
* search for full-text terms in the index
*/
performTermsSearch: (searchTerms, excludedTerms) => {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var docnames = this._index.docnames;
var filenames = this._index.filenames;
var titles = this._index.titles;
const scoreMap = new Map();
const fileMap = new Map();
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word])
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word])
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
});
var word_regex = this.escapeRegExp(word);
for (var w in terms) {
if (w.match(word_regex) && !terms[word]) {
_o.push({files: terms[w], score: Scorer.partialTerm})
}
}
for (var w in titleterms) {
if (w.match(word_regex) && !titleterms[word]) {
_o.push({files: titleterms[w], score: Scorer.partialTitle})
}
}
}
// no match but word was a required one
if (arr.every((record) => record.files === undefined)) return;
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
arr.forEach((record) => {
if (record.files === undefined) return;
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
let recordFiles = record.files;
if (recordFiles.length === undefined) recordFiles = [recordFiles];
files.push(...recordFiles);
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
});
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {};
scoreMap[file][word] = o.score;
}
});
// create the mapping
files.forEach((file) => {
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
fileMap.get(file).push(word);
else fileMap.set(file, [word]);
});
});
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap && fileMap[file].indexOf(word) === -1)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
const results = [];
for (const [file, wordList] of fileMap) {
// check if all requirements are matched
for (file in fileMap) {
var valid = true;
// as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
// check if all requirements are matched
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
searchterms.filter(function(term){return term.length > 2}).length
if (
wordList.length !== searchTerms.size &&
wordList.length !== filteredTermCount
)
continue;
fileMap[file].length != searchterms.length &&
fileMap[file].length != filteredTermCount
) continue;
// ensure that none of the excluded terms is in the search result
if (
[...excludedTerms].some(
(term) =>
terms[term] === file ||
titleTerms[term] === file ||
(terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break;
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
]);
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
}
}
return results;
},
@@ -539,28 +492,34 @@ const Search = {
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words.
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary: (htmlText, keywords) => {
const text = Search.htmlToText(htmlText);
if (text === "") return null;
const textLower = text.toLowerCase();
const actualStartPosition = [...keywords]
.map((k) => textLower.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("p");
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
return summary;
},
makeSearchSummary : function(htmlText, keywords, hlwords) {
var text = Search.htmlToText(htmlText);
if (text == "") {
return null;
}
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<p class="context"></p>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
};
_ready(Search.init);
$(document).ready(function() {
Search.init();
});

View File

@@ -1,144 +0,0 @@
/* Highlighting utilities for Sphinx HTML documentation. */
"use strict";
const SPHINX_HIGHLIGHT_ENABLED = true
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const SphinxHighlight = {
/**
* highlight the search words provided in localstorage in the text
*/
highlightSearchWords: () => {
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
// get and clear terms from localstorage
const url = new URL(window.location);
const highlight =
localStorage.getItem("sphinx_highlight_terms")
|| url.searchParams.get("highlight")
|| "";
localStorage.removeItem("sphinx_highlight_terms")
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
// get individual terms from highlight string
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
localStorage.removeItem("sphinx_highlight_terms")
},
initEscapeListener: () => {
// only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
SphinxHighlight.hideSearchWords();
event.preventDefault();
}
});
},
};
_ready(SphinxHighlight.highlightSearchWords);
_ready(SphinxHighlight.initEscapeListener);

View File

@@ -4,7 +4,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Advanced esp-modem use cases &#8212; esp-modem documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
@@ -12,9 +12,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Internal design" href="internal_design.html" />
@@ -36,10 +34,10 @@
<div class="body" role="main">
<section id="advanced-esp-modem-use-cases">
<h1>Advanced esp-modem use cases<a class="headerlink" href="#advanced-esp-modem-use-cases" title="Permalink to this heading"></a></h1>
<h1>Advanced esp-modem use cases<a class="headerlink" href="#advanced-esp-modem-use-cases" title="Permalink to this headline"></a></h1>
<p>This chapter outlines basic extensibility of the esp-modem component.</p>
<section id="custom-instantiation-with-dce-factory">
<span id="dce-factory"></span><h2>Custom instantiation with DCE factory<a class="headerlink" href="#custom-instantiation-with-dce-factory" title="Permalink to this heading"></a></h2>
<span id="dce-factory"></span><h2>Custom instantiation with DCE factory<a class="headerlink" href="#custom-instantiation-with-dce-factory" title="Permalink to this headline"></a></h2>
<p>It is possible to create a modem handle in many different ways:</p>
<ul class="simple">
<li><p>Build a DCE on top a generic module, user defined module or build the module only (in case the application will only use AT command interface)</p></li>
@@ -112,14 +110,14 @@
<em>#include &lt;esp_modem_dce_factory.hpp&gt;</em></div>
<p><a class="reference internal" href="#classesp__modem_1_1dce__factory_1_1_creator"><span class="std std-ref">Creator</span></a> class for building a DCE_T&lt;Module&gt; in a specific way, either from a Module object or by default from the <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> and netif. </p>
<dl class="field-list simple">
<dt class="field-odd">Throws <span class="colon">:</span></dt>
<dt class="field-odd">Throws </dt>
<dd class="field-odd"><p></p></dd>
</dl>
</dd></dl>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem11dce_factory7FactoryE">
<span id="_CPPv3N9esp_modem11dce_factory7FactoryE"></span><span id="_CPPv2N9esp_modem11dce_factory7FactoryE"></span><span id="esp_modem::dce_factory::Factory"></span><span class="target" id="classesp__modem_1_1dce__factory_1_1_factory"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Factory</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem11dce_factory7FactoryE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N9esp_modem11dce_factory7FactoryE"></span><span id="_CPPv2N9esp_modem11dce_factory7FactoryE"></span><span id="esp_modem::dce_factory::Factory"></span><span class="target" id="classesp__modem_1_1dce__factory_1_1_factory"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">dce_factory</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">Factory</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem11dce_factory7FactoryE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_dce_factory.hpp&gt;</em></div>
<p><a class="reference internal" href="#classesp__modem_1_1dce__factory_1_1_factory"><span class="std std-ref">Factory</span></a> class for creating virtual <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> objects based on the configuration of the supplied module. This could also be used to create a custom module or a DCE_T&lt;module&gt;, provided user app derives from this factory. </p>
@@ -130,16 +128,16 @@
<span id="_CPPv3IDpEN9esp_modem11dce_factory7Factory12build_uniqueEPK6configDpRR4Args"></span><span id="_CPPv2IDpEN9esp_modem11dce_factory7Factory12build_uniqueEPK6configDpRR4Args"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="p"><span class="pre">...</span></span><span class="sig-name descname"><span class="n"><span class="pre">Args</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1dce__factory_1_1_factory_1a5fd0210522a31e645f28c0b0f23ffb67"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">unique_ptr</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem3DCEE" title="esp_modem::DCE"><span class="n"><span class="pre">DCE</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">build_unique</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">config</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">cfg</span></span>, <a class="reference internal" href="#_CPPv4IDpEN9esp_modem11dce_factory7Factory12build_uniqueENSt10unique_ptrI3DCEEEPK6configDpRR4Args" title="esp_modem::dce_factory::Factory::build_unique::Args"><span class="n"><span class="pre">Args</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">...</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">args</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4IDpEN9esp_modem11dce_factory7Factory12build_uniqueENSt10unique_ptrI3DCEEEPK6configDpRR4Args" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create a default unique_ptr <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> generically, with the chosen module derived from the <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_generic_module"><span class="std std-ref">GenericModule</span></a>. </p>
<dl class="field-list simple">
<dt class="field-odd">Template Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Template Parameters</dt>
<dd class="field-odd"><p><strong>Args</strong> Arguments to the builder, i.e. constructor of <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e___t"><span class="std std-ref">esp_modem::DCE_T</span></a> class </p>
</dd>
<dt class="field-even">Parameters<span class="colon">:</span></dt>
<dt class="field-even">Parameters</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>cfg</strong> <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> configuration structure <a class="reference internal" href="api_docs.html#structesp__modem__dte__config"><span class="std std-ref">esp_modem_dte_config</span></a> </p></li>
<li><p><strong>args</strong> typically a <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> object and a netif handle for PPP network </p></li>
</ul>
</dd>
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>unique_ptr <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> of the created <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> on success </p>
</dd>
</dl>
@@ -153,19 +151,19 @@
<span id="_CPPv3I0DpEN9esp_modem11dce_factory7Factory12build_uniqueEPK6configDpRR4Args"></span><span id="_CPPv2I0DpEN9esp_modem11dce_factory7Factory12build_uniqueEPK6configDpRR4Args"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">T_Module</span></span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="p"><span class="pre">...</span></span><span class="sig-name descname"><span class="n"><span class="pre">Args</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1dce__factory_1_1_factory_1a2a4686de666658fb89a8d80ce2935bf2"></span><span class="k"><span class="pre">static</span></span><span class="w"> </span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">unique_ptr</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem3DCEE" title="esp_modem::DCE"><span class="n"><span class="pre">DCE</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">build_unique</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">config</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">cfg</span></span>, <a class="reference internal" href="#_CPPv4I0DpEN9esp_modem11dce_factory7Factory12build_uniqueENSt10unique_ptrI3DCEEEPK6configDpRR4Args" title="esp_modem::dce_factory::Factory::build_unique::Args"><span class="n"><span class="pre">Args</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">...</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">args</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I0DpEN9esp_modem11dce_factory7Factory12build_uniqueENSt10unique_ptrI3DCEEEPK6configDpRR4Args" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create a default unique_ptr <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> in a specific way (from the module) </p>
<dl class="field-list simple">
<dt class="field-odd">Template Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Template Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>Module</strong> Specific Module used in this <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> </p></li>
<li><p><strong>Args</strong> Arguments to the builder, i.e. constructor of <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e___t"><span class="std std-ref">esp_modem::DCE_T</span></a> class </p></li>
</ul>
</dd>
<dt class="field-even">Parameters<span class="colon">:</span></dt>
<dt class="field-even">Parameters</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>cfg</strong> <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> configuration structure <a class="reference internal" href="api_docs.html#structesp__modem__dte__config"><span class="std std-ref">esp_modem_dte_config</span></a> </p></li>
<li><p><strong>args</strong> typically a <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> object and a netif handle for PPP network </p></li>
</ul>
</dd>
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>unique_ptr <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> of the created <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> on success </p>
</dd>
</dl>
@@ -176,19 +174,19 @@
<span id="_CPPv3I0DpEN9esp_modem11dce_factory7Factory5buildEPK6configDpRR4Args"></span><span id="_CPPv2I0DpEN9esp_modem11dce_factory7Factory5buildEPK6configDpRR4Args"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">T_Module</span></span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="p"><span class="pre">...</span></span><span class="sig-name descname"><span class="n"><span class="pre">Args</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1dce__factory_1_1_factory_1a2dfb050a53429bb651fb58de5841c04d"></span><span class="k"><span class="pre">static</span></span><span class="w"> </span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem3DCEE" title="esp_modem::DCE"><span class="n"><span class="pre">DCE</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">build</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">config</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">cfg</span></span>, <a class="reference internal" href="#_CPPv4I0DpEN9esp_modem11dce_factory7Factory5buildEP3DCEPK6configDpRR4Args" title="esp_modem::dce_factory::Factory::build::Args"><span class="n"><span class="pre">Args</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">...</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">args</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I0DpEN9esp_modem11dce_factory7Factory5buildEP3DCEPK6configDpRR4Args" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create a <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a>. </p>
<dl class="field-list simple">
<dt class="field-odd">Template Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Template Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>Module</strong> Specific Module used in this <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> </p></li>
<li><p><strong>Args</strong> Arguments to the builder, i.e. constructor of <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e___t"><span class="std std-ref">esp_modem::DCE_T</span></a> class </p></li>
</ul>
</dd>
<dt class="field-even">Parameters<span class="colon">:</span></dt>
<dt class="field-even">Parameters</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>cfg</strong> <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> configuration structure <a class="reference internal" href="api_docs.html#structesp__modem__dte__config"><span class="std std-ref">esp_modem_dte_config</span></a> </p></li>
<li><p><strong>args</strong> typically a <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> object and a netif handle for PPP network </p></li>
</ul>
</dd>
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> pointer the created <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> on success </p>
</dd>
</dl>
@@ -201,7 +199,7 @@
</section>
<section id="create-custom-module">
<span id="id1"></span><h2>Create custom module<a class="headerlink" href="#create-custom-module" title="Permalink to this heading"></a></h2>
<span id="id1"></span><h2>Create custom module<a class="headerlink" href="#create-custom-module" title="Permalink to this headline"></a></h2>
<p>Creating a custom module is necessary if the application needs to use a specific device that is not supported
and their commands differ from any of the supported devices. In this case it is recommended to define a new class
representing this specific device and derive from the <a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem13GenericModuleE" title="esp_modem::GenericModule"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">esp_modem::GenericModule</span></code></a>. In order to instantiate
@@ -212,7 +210,7 @@ the specific module, using <a class="reference internal" href="#_CPPv4I0DpEN9esp
for demonstration purposes only.</p>
</section>
<section id="create-new-communication-interface">
<h2>Create new communication interface<a class="headerlink" href="#create-new-communication-interface" title="Permalink to this heading"></a></h2>
<h2>Create new communication interface<a class="headerlink" href="#create-new-communication-interface" title="Permalink to this headline"></a></h2>
<p>In order to connect to a device using an unsupported interface (e.g. SPI or I2C), it is necessary to implement
a custom DTE object and supply it into <a class="reference internal" href="#dce-factory"><span class="std std-ref">the DCE factory</span></a>. The DCE is typically created in two steps:</p>
<ul class="simple">
@@ -272,7 +270,7 @@ a custom DTE object and supply it into <a class="reference internal" href="#dce-
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<script>$('#searchbox').show(0);</script>
@@ -289,7 +287,7 @@ a custom DTE object and supply it into <a class="reference internal" href="#dce-
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@@ -4,7 +4,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>C API Documentation &#8212; esp-modem documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
@@ -12,9 +12,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="C++ API Documentation" href="cxx_api_docs.html" />
@@ -36,7 +34,7 @@
<div class="body" role="main">
<section id="c-api-documentation">
<span id="c-api"></span><h1>C API Documentation<a class="headerlink" href="#c-api-documentation" title="Permalink to this heading"></a></h1>
<span id="c-api"></span><h1>C API Documentation<a class="headerlink" href="#c-api-documentation" title="Permalink to this headline"></a></h1>
<p>The C API is very simple and consist of these two basic parts:</p>
<ul class="simple">
<li><p><a class="reference internal" href="#lifecycle-api"><span class="std std-ref">Lifecycle API</span></a></p></li>
@@ -53,7 +51,7 @@
</ul>
<p>Note the configuration structures for DTE and DCE, needed for creating the DCE instance, is documented in <a class="reference internal" href="#api-config"><span class="std std-ref">Configuration structures</span></a></p>
<section id="lifecycle-api">
<span id="id1"></span><h2>Lifecycle API<a class="headerlink" href="#lifecycle-api" title="Permalink to this heading"></a></h2>
<span id="id1"></span><h2>Lifecycle API<a class="headerlink" href="#lifecycle-api" title="Permalink to this headline"></a></h2>
<p>These functions are used to create, destroy and set modem working mode.</p>
<ul class="simple">
<li><p><a class="reference internal" href="#_CPPv413esp_modem_newPK22esp_modem_dte_config_tPK22esp_modem_dce_config_tP11esp_netif_t" title="esp_modem_new"><code class="xref cpp cpp-func docutils literal notranslate"><span class="pre">esp_modem_new()</span></code></a></p></li>
@@ -196,14 +194,14 @@
<span id="_CPPv313esp_modem_newPK22esp_modem_dte_config_tPK22esp_modem_dce_config_tP11esp_netif_t"></span><span id="_CPPv213esp_modem_newPK22esp_modem_dte_config_tPK22esp_modem_dce_config_tP11esp_netif_t"></span><span id="esp_modem_new__esp_modem_dte_config_tCP.esp_modem_dce_config_tCP.esp_netif_tP"></span><span class="target" id="group___e_s_p___m_o_d_e_m___c___a_p_i_1ga52970f4ff9c5359857119b7f28707360"></span><span class="n"><span class="pre">esp_modem_dce_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_new</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv422esp_modem_dte_config_t" title="esp_modem_dte_config_t"><span class="n"><span class="pre">esp_modem_dte_config_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">dte_config</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv422esp_modem_dce_config_t" title="esp_modem_dce_config_t"><span class="n"><span class="pre">esp_modem_dce_config_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">dce_config</span></span>, <span class="n"><span class="pre">esp_netif_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">netif</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv413esp_modem_newPK22esp_modem_dte_config_tPK22esp_modem_dce_config_tP11esp_netif_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create a generic DCE handle for new modem API. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>dte_config</strong> DTE configuration (UART config for now) </p></li>
<li><p><strong>dce_config</strong> DCE configuration </p></li>
<li><p><strong>netif</strong> Network interface handle for the data mode</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>DCE pointer on success, NULL on failure </p>
</dd>
</dl>
@@ -214,7 +212,7 @@
<span id="_CPPv317esp_modem_new_dev22esp_modem_dce_device_tPK22esp_modem_dte_config_tPK22esp_modem_dce_config_tP11esp_netif_t"></span><span id="_CPPv217esp_modem_new_dev22esp_modem_dce_device_tPK22esp_modem_dte_config_tPK22esp_modem_dce_config_tP11esp_netif_t"></span><span id="esp_modem_new_dev__esp_modem_dce_device_t.esp_modem_dte_config_tCP.esp_modem_dce_config_tCP.esp_netif_tP"></span><span class="target" id="group___e_s_p___m_o_d_e_m___c___a_p_i_1ga102ace0a2f93dc4838e28b7fee24d290"></span><span class="n"><span class="pre">esp_modem_dce_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_new_dev</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv422esp_modem_dce_device_t" title="esp_modem_dce_device_t"><span class="n"><span class="pre">esp_modem_dce_device_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">module</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv422esp_modem_dte_config_t" title="esp_modem_dte_config_t"><span class="n"><span class="pre">esp_modem_dte_config_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">dte_config</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv422esp_modem_dce_config_t" title="esp_modem_dce_config_t"><span class="n"><span class="pre">esp_modem_dce_config_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">dce_config</span></span>, <span class="n"><span class="pre">esp_netif_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">netif</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv417esp_modem_new_dev22esp_modem_dce_device_tPK22esp_modem_dte_config_tPK22esp_modem_dce_config_tP11esp_netif_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create a DCE handle using the supplied device. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>module</strong> Specific device for creating this DCE </p></li>
<li><p><strong>dte_config</strong> DTE configuration (UART config for now) </p></li>
@@ -222,7 +220,7 @@
<li><p><strong>netif</strong> Network interface handle for the data mode</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>DCE pointer on success, NULL on failure </p>
</dd>
</dl>
@@ -233,7 +231,7 @@
<span id="_CPPv317esp_modem_destroyP15esp_modem_dce_t"></span><span id="_CPPv217esp_modem_destroyP15esp_modem_dce_t"></span><span id="esp_modem_destroy__esp_modem_dce_tP"></span><span class="target" id="group___e_s_p___m_o_d_e_m___c___a_p_i_1gad7ea1bd023285cd7c827b66e00cb085a"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_destroy</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">esp_modem_dce_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">dce</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv417esp_modem_destroyP15esp_modem_dce_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Destroys modems DCE handle. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>dce</strong> DCE to destroy </p>
</dd>
</dl>
@@ -244,13 +242,13 @@
<span id="_CPPv322esp_modem_set_error_cbP15esp_modem_dce_t28esp_modem_terminal_error_cbt"></span><span id="_CPPv222esp_modem_set_error_cbP15esp_modem_dce_t28esp_modem_terminal_error_cbt"></span><span id="esp_modem_set_error_cb__esp_modem_dce_tP.esp_modem_terminal_error_cbt"></span><span class="target" id="group___e_s_p___m_o_d_e_m___c___a_p_i_1ga84df5fd9c4b128c110d614f3b7646134"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_error_cb</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">esp_modem_dce_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">dce</span></span>, <a class="reference internal" href="#_CPPv428esp_modem_terminal_error_cbt" title="esp_modem_terminal_error_cbt"><span class="n"><span class="pre">esp_modem_terminal_error_cbt</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">err_cb</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv422esp_modem_set_error_cbP15esp_modem_dce_t28esp_modem_terminal_error_cbt" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set DTEs error callback. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>dce</strong> Modem DCE handle </p></li>
<li><p><strong>err_cb</strong> <strong>[in]</strong> Error callback </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>ESP_OK on success, ESP_FAIL on failure </p>
</dd>
</dl>
@@ -261,13 +259,13 @@
<span id="_CPPv318esp_modem_set_modeP15esp_modem_dce_t20esp_modem_dce_mode_t"></span><span id="_CPPv218esp_modem_set_modeP15esp_modem_dce_t20esp_modem_dce_mode_t"></span><span id="esp_modem_set_mode__esp_modem_dce_tP.esp_modem_dce_mode_t"></span><span class="target" id="group___e_s_p___m_o_d_e_m___c___a_p_i_1ga8e51dd9d216256fd46bdb768dbfa5e9d"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_mode</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">esp_modem_dce_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">dce</span></span>, <a class="reference internal" href="#_CPPv420esp_modem_dce_mode_t" title="esp_modem_dce_mode_t"><span class="n"><span class="pre">esp_modem_dce_mode_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418esp_modem_set_modeP15esp_modem_dce_t20esp_modem_dce_mode_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set operation mode for this DCE. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>dce</strong> Modem DCE handle </p></li>
<li><p><strong>mode</strong> Desired MODE </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>ESP_OK on success, ESP_FAIL on failure </p>
</dd>
</dl>
@@ -278,7 +276,7 @@
</section>
<section id="modem-commands">
<span id="id2"></span><h2>Modem commands<a class="headerlink" href="#modem-commands" title="Permalink to this heading"></a></h2>
<span id="id2"></span><h2>Modem commands<a class="headerlink" href="#modem-commands" title="Permalink to this headline"></a></h2>
<p>These functions are the actual commands to communicate with the modem using AT command interface.</p>
<p>Note that the functions which implement AT commands returning textual values use plain <code class="docutils literal notranslate"><span class="pre">char</span> <span class="pre">*</span></code>
pointer as the return value. The API expects the output data to point to user allocated space of at least
@@ -290,7 +288,7 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv314esp_modem_syncv"></span><span id="_CPPv214esp_modem_syncv"></span><span id="esp_modem_sync"></span><span class="target" id="esp__modem__api__commands_8h_1aae389a69782d2e373396b07b26ae003b"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_sync</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv414esp_modem_syncv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sends the initial AT sequence to sync up with the device. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -301,13 +299,13 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv327esp_modem_get_operator_namePcPi"></span><span id="_CPPv227esp_modem_get_operator_namePcPi"></span><span id="esp_modem_get_operator_name__cP.iP"></span><span class="target" id="esp__modem__api__commands_8h_1a5fac1591bf4e15d00ad3eb56c19aed21"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_get_operator_name</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">name</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">act</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv427esp_modem_get_operator_namePcPi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reads the operator name. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>operator</strong> <strong>[out]</strong> name </p></li>
<li><p><strong>access</strong> <strong>[out]</strong> technology </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -318,7 +316,7 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv323esp_modem_store_profilev"></span><span id="_CPPv223esp_modem_store_profilev"></span><span id="esp_modem_store_profile"></span><span class="target" id="esp__modem__api__commands_8h_1a7aa4b5cc28b0d1440cfc416e3d60ec74"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_store_profile</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv423esp_modem_store_profilev" title="Permalink to this definition"></a><br /></dt>
<dd><p>Stores current user profile. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -329,10 +327,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv317esp_modem_set_pinPKc"></span><span id="_CPPv217esp_modem_set_pinPKc"></span><span id="esp_modem_set_pin__cCP"></span><span class="target" id="esp__modem__api__commands_8h_1adcf823ecf81bad4469105e051ab74c02"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_pin</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">pin</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv417esp_modem_set_pinPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the supplied PIN code. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>pin</strong> <strong>[in]</strong> Pin </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -343,14 +341,14 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv312esp_modem_atPKcPci"></span><span id="_CPPv212esp_modem_atPKcPci"></span><span id="esp_modem_at__cCP.cP.i"></span><span class="target" id="esp__modem__api__commands_8h_1a4400ba1800003b088a62b7302d3bb186"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_at</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">cmd</span></span>, <span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">out</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv412esp_modem_atPKcPci" title="Permalink to this definition"></a><br /></dt>
<dd><p>Execute the supplied AT command. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>at</strong> <strong>[in]</strong> AT command </p></li>
<li><p><strong>out</strong> <strong>[out]</strong> Command output string </p></li>
<li><p><strong>timeout</strong> <strong>[in]</strong> AT command timeout in milliseconds </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -361,10 +359,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv318esp_modem_read_pinPb"></span><span id="_CPPv218esp_modem_read_pinPb"></span><span id="esp_modem_read_pin__bP"></span><span class="target" id="esp__modem__api__commands_8h_1a5f4eee22b3b0e41850e535c3ef9a2d97"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_read_pin</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">pin_ok</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418esp_modem_read_pinPb" title="Permalink to this definition"></a><br /></dt>
<dd><p>Checks if the SIM needs a PIN. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>pin_ok</strong> <strong>[out]</strong> true if the SIM card doesnt need a PIN to unlock </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -375,10 +373,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv318esp_modem_set_echoKb"></span><span id="_CPPv218esp_modem_set_echoKb"></span><span id="esp_modem_set_echo__bC"></span><span class="target" id="esp__modem__api__commands_8h_1a48bee17bab23e4e245564212ec5230d5"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_echo</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">echo_on</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418esp_modem_set_echoKb" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets echo mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>echo_on</strong> <strong>[in]</strong> true if echo mode on (repeats the commands) </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -389,10 +387,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv322esp_modem_sms_txt_modeKb"></span><span id="_CPPv222esp_modem_sms_txt_modeKb"></span><span id="esp_modem_sms_txt_mode__bC"></span><span class="target" id="esp__modem__api__commands_8h_1a277771d525daa3bf11007554ce7b65dc"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_sms_txt_mode</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">txt</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv422esp_modem_sms_txt_modeKb" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the Txt or Pdu mode for SMS (only txt is supported) </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>txt</strong> <strong>[in]</strong> true if txt mode </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -403,7 +401,7 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv327esp_modem_sms_character_setv"></span><span id="_CPPv227esp_modem_sms_character_setv"></span><span id="esp_modem_sms_character_set"></span><span class="target" id="esp__modem__api__commands_8h_1ae214058edfeecd33fb4e266247c5f9c2"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_sms_character_set</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv427esp_modem_sms_character_setv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the default (GSM) character set. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -414,13 +412,13 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv318esp_modem_send_smsPKcPKc"></span><span id="_CPPv218esp_modem_send_smsPKcPKc"></span><span id="esp_modem_send_sms__cCP.cCP"></span><span class="target" id="esp__modem__api__commands_8h_1a2e5f9ba75172c7a767b86259d405c74a"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_send_sms</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">number</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">message</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418esp_modem_send_smsPKcPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sends SMS message in txt mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>number</strong> <strong>[in]</strong> Phone number to send the message to </p></li>
<li><p><strong>message</strong> <strong>[in]</strong> Text message to be sent </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -431,7 +429,7 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv326esp_modem_resume_data_modev"></span><span id="_CPPv226esp_modem_resume_data_modev"></span><span id="esp_modem_resume_data_mode"></span><span class="target" id="esp__modem__api__commands_8h_1a92e73f6ace9a8516701f85548f6f26be"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_resume_data_mode</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv426esp_modem_resume_data_modev" title="Permalink to this definition"></a><br /></dt>
<dd><p>Resumes data mode (Switches back to the data mode, which was temporarily suspended) </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -442,10 +440,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv325esp_modem_set_pdp_contextP22esp_modem_PdpContext_t"></span><span id="_CPPv225esp_modem_set_pdp_contextP22esp_modem_PdpContext_t"></span><span id="esp_modem_set_pdp_context__esp_modem_PdpContext_tP"></span><span class="target" id="esp__modem__api__commands_8h_1a1907fc2d7312ab1de760b20e39596424"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_pdp_context</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">esp_modem_PdpContext_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">p1</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv425esp_modem_set_pdp_contextP22esp_modem_PdpContext_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets php context. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>p1</strong> <strong>[in]</strong> PdP context struct to setup modem cellular connection </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -456,7 +454,7 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv326esp_modem_set_command_modev"></span><span id="_CPPv226esp_modem_set_command_modev"></span><span id="esp_modem_set_command_mode"></span><span class="target" id="esp__modem__api__commands_8h_1a88e7013264c81f6238920f2e42312bc9"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_command_mode</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv426esp_modem_set_command_modev" title="Permalink to this definition"></a><br /></dt>
<dd><p>Switches to the command mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -467,7 +465,7 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv318esp_modem_set_cmuxv"></span><span id="_CPPv218esp_modem_set_cmuxv"></span><span id="esp_modem_set_cmux"></span><span class="target" id="esp__modem__api__commands_8h_1a5e06c4a95333c696c776a819343cb178"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_cmux</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418esp_modem_set_cmuxv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Switches to the CMUX mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -478,10 +476,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv318esp_modem_get_imsiPc"></span><span id="_CPPv218esp_modem_get_imsiPc"></span><span id="esp_modem_get_imsi__cP"></span><span class="target" id="esp__modem__api__commands_8h_1a741a7428f72055e2fa35939985373643"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_get_imsi</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">imsi</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418esp_modem_get_imsiPc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reads the IMSI number. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>imsi</strong> <strong>[out]</strong> Modules IMSI number </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -492,10 +490,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv318esp_modem_get_imeiPc"></span><span id="_CPPv218esp_modem_get_imeiPc"></span><span id="esp_modem_get_imei__cP"></span><span class="target" id="esp__modem__api__commands_8h_1abf5fd52813daf3e37ffc8e0e72dbb365"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_get_imei</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">imei</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418esp_modem_get_imeiPc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reads the IMEI number. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>imei</strong> <strong>[out]</strong> Modules IMEI number </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -506,10 +504,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv325esp_modem_get_module_namePc"></span><span id="_CPPv225esp_modem_get_module_namePc"></span><span id="esp_modem_get_module_name__cP"></span><span class="target" id="esp__modem__api__commands_8h_1ab104cfa5988a274f3e3e3a4501c1f271"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_get_module_name</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">name</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv425esp_modem_get_module_namePc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reads the module name. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>name</strong> <strong>[out]</strong> module name </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -520,7 +518,7 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv323esp_modem_set_data_modev"></span><span id="_CPPv223esp_modem_set_data_modev"></span><span id="esp_modem_set_data_mode"></span><span class="target" id="esp__modem__api__commands_8h_1aa5ed2c30147eeebeed57b57f989aa8e1"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_data_mode</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv423esp_modem_set_data_modev" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the modem to data mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -531,13 +529,13 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv328esp_modem_get_signal_qualityPiPi"></span><span id="_CPPv228esp_modem_get_signal_qualityPiPi"></span><span id="esp_modem_get_signal_quality__iP.iP"></span><span class="target" id="esp__modem__api__commands_8h_1a19183c257cf1522d2fd65105e81e850e"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_get_signal_quality</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">rssi</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">ber</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv428esp_modem_get_signal_qualityPiPi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get Signal quality. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>rssi</strong> <strong>[out]</strong> signal strength indication </p></li>
<li><p><strong>ber</strong> <strong>[out]</strong> channel bit error rate </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -548,13 +546,13 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv326esp_modem_set_flow_controlii"></span><span id="_CPPv226esp_modem_set_flow_controlii"></span><span id="esp_modem_set_flow_control__i.i"></span><span class="target" id="esp__modem__api__commands_8h_1aa3c08efe9006a239196fc3eb09504989"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_flow_control</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">dce_flow</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">dte_flow</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv426esp_modem_set_flow_controlii" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets HW control flow. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>dce_flow</strong> <strong>[in]</strong> 0=none, 2=RTS hw flow control of DCE </p></li>
<li><p><strong>dte_flow</strong> <strong>[in]</strong> 0=none, 2=CTS hw flow control of DTE </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -565,7 +563,7 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv317esp_modem_hang_upv"></span><span id="_CPPv217esp_modem_hang_upv"></span><span id="esp_modem_hang_up"></span><span class="target" id="esp__modem__api__commands_8h_1ad718da0bb46d6e2e7c2939eb69a9b040"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_hang_up</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv417esp_modem_hang_upv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Hangs up current data call. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -576,14 +574,14 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv328esp_modem_get_battery_statusPiPiPi"></span><span id="_CPPv228esp_modem_get_battery_statusPiPiPi"></span><span id="esp_modem_get_battery_status__iP.iP.iP"></span><span class="target" id="esp__modem__api__commands_8h_1a8e1856361e95e24ccac5afd8cce2028f"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_get_battery_status</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">voltage</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">bcs</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">bcl</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv428esp_modem_get_battery_statusPiPiPi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get voltage levels of modem power up circuitry. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>voltage</strong> <strong>[out]</strong> Current status in mV </p></li>
<li><p><strong>bcs</strong> <strong>[out]</strong> charge status (-1-Not available, 0-Not charging, 1-Charging, 2-Charging done) </p></li>
<li><p><strong>bcl</strong> <strong>[out]</strong> 1-100% battery capacity, -1-Not available </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -594,7 +592,7 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv320esp_modem_power_downv"></span><span id="_CPPv220esp_modem_power_downv"></span><span id="esp_modem_power_down"></span><span class="target" id="esp__modem__api__commands_8h_1a872c6216f9b7d432a2ae79ef8b8132a2"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_power_down</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv420esp_modem_power_downv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Power down the module. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -605,7 +603,7 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv315esp_modem_resetv"></span><span id="_CPPv215esp_modem_resetv"></span><span id="esp_modem_reset"></span><span class="target" id="esp__modem__api__commands_8h_1a35e5bd24fca6dda7f5d328a7876554a1"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_reset</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv415esp_modem_resetv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reset the module. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -616,10 +614,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv318esp_modem_set_baudi"></span><span id="_CPPv218esp_modem_set_baudi"></span><span id="esp_modem_set_baud__i"></span><span class="target" id="esp__modem__api__commands_8h_1a20107425f600190a441c77efbbbb991b"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_baud</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">baud</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418esp_modem_set_baudi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Configures the baudrate. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>baud</strong> <strong>[in]</strong> Desired baud rate of the DTE </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -630,14 +628,14 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv322esp_modem_set_operatoriiPKc"></span><span id="_CPPv222esp_modem_set_operatoriiPKc"></span><span id="esp_modem_set_operator__i.i.cCP"></span><span class="target" id="esp__modem__api__commands_8h_1a0ecc34c5c641bd27f793abe631668cde"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_operator</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">mode</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">format</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">oper</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv422esp_modem_set_operatoriiPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Force an attempt to connect to a specific operator. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>mode</strong> <strong>[in]</strong> mode of attempt mode=0 - automatic mode=1 - manual mode=2 - deregister mode=3 - set format for read operation mode=4 - manual with fallback to automatic </p></li>
<li><p><strong>format</strong> <strong>[in]</strong> what format the operator is given in format=0 - long format format=1 - short format format=2 - numeric </p></li>
<li><p><strong>oper</strong> <strong>[in]</strong> the operator to connect to </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -648,10 +646,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv338esp_modem_set_network_attachment_statei"></span><span id="_CPPv238esp_modem_set_network_attachment_statei"></span><span id="esp_modem_set_network_attachment_state__i"></span><span class="target" id="esp__modem__api__commands_8h_1aa5740b04601815aad17194be83803636"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_network_attachment_state</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv438esp_modem_set_network_attachment_statei" title="Permalink to this definition"></a><br /></dt>
<dd><p>Attach or detach from the GPRS service. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>state</strong> <strong>[in]</strong> 1-attach 0-detach </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -662,10 +660,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv338esp_modem_get_network_attachment_statePi"></span><span id="_CPPv238esp_modem_get_network_attachment_statePi"></span><span id="esp_modem_get_network_attachment_state__iP"></span><span class="target" id="esp__modem__api__commands_8h_1a2e52cc922ab637cd609a351e3854b661"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_get_network_attachment_state</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv438esp_modem_get_network_attachment_statePi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get network attachment state. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>state</strong> <strong>[out]</strong> 1-attached 0-detached </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -676,10 +674,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv325esp_modem_set_radio_statei"></span><span id="_CPPv225esp_modem_set_radio_statei"></span><span id="esp_modem_set_radio_state__i"></span><span class="target" id="esp__modem__api__commands_8h_1a6fdc7fd018de06178c1e5d00e90ac34a"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_radio_state</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv425esp_modem_set_radio_statei" title="Permalink to this definition"></a><br /></dt>
<dd><p>What mode the radio should be set to. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>state</strong> <strong>[in]</strong> state 1-full 0-minimum … </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -690,10 +688,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv325esp_modem_get_radio_statePi"></span><span id="_CPPv225esp_modem_get_radio_statePi"></span><span id="esp_modem_get_radio_state__iP"></span><span class="target" id="esp__modem__api__commands_8h_1a3f789ee98e4f987409e20e6af5357374"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_get_radio_state</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv425esp_modem_get_radio_statePi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get current radio state. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>state</strong> <strong>[out]</strong> 1-full 0-minimum … </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -704,10 +702,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv326esp_modem_set_network_modei"></span><span id="_CPPv226esp_modem_set_network_modei"></span><span id="esp_modem_set_network_mode__i"></span><span class="target" id="esp__modem__api__commands_8h_1ab5115c28a1fd2072457764382d4f80b8"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_network_mode</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv426esp_modem_set_network_modei" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set network mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[in]</strong> preferred mode </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -718,10 +716,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv328esp_modem_set_preferred_modei"></span><span id="_CPPv228esp_modem_set_preferred_modei"></span><span id="esp_modem_set_preferred_mode__i"></span><span class="target" id="esp__modem__api__commands_8h_1a087b1a65483fb08748f716aa12dae83c"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_preferred_mode</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv428esp_modem_set_preferred_modei" title="Permalink to this definition"></a><br /></dt>
<dd><p>Preferred network mode (CAT-M and/or NB-IoT) </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[in]</strong> preferred selection </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -732,10 +730,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv327esp_modem_set_network_bandsPKcPKii"></span><span id="_CPPv227esp_modem_set_network_bandsPKcPKii"></span><span id="esp_modem_set_network_bands__cCP.iCP.i"></span><span class="target" id="esp__modem__api__commands_8h_1a98c17279c541200a882028819524329b"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_network_bands</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">mode</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">bands</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">size</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv427esp_modem_set_network_bandsPKcPKii" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set network bands for CAT-M or NB-IoT. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[in]</strong> CAT-M or NB-IoT </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -746,10 +744,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv333esp_modem_get_network_system_modePi"></span><span id="_CPPv233esp_modem_get_network_system_modePi"></span><span id="esp_modem_get_network_system_mode__iP"></span><span class="target" id="esp__modem__api__commands_8h_1ae484a55162d67056e2e958f2fbd61cfd"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_get_network_system_mode</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv433esp_modem_get_network_system_modePi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Show network system mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[out]</strong> current network mode </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -760,10 +758,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv329esp_modem_set_gnss_power_modei"></span><span id="_CPPv229esp_modem_set_gnss_power_modei"></span><span id="esp_modem_set_gnss_power_mode__i"></span><span class="target" id="esp__modem__api__commands_8h_1a0b1e8b668c2ce03d0865290f3d978c46"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_set_gnss_power_mode</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv429esp_modem_set_gnss_power_modei" title="Permalink to this definition"></a><br /></dt>
<dd><p>GNSS power control. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[out]</strong> power mode (0 - off, 1 - on) </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -774,10 +772,10 @@ pointer as the return value. The API expects the output data to point to user al
<span id="_CPPv329esp_modem_get_gnss_power_modePi"></span><span id="_CPPv229esp_modem_get_gnss_power_modePi"></span><span id="esp_modem_get_gnss_power_mode__iP"></span><span class="target" id="esp__modem__api__commands_8h_1a012e51ed707a82e4e0cd0d1bd0b7b9ae"></span><a class="reference internal" href="internal_docs.html#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_modem_get_gnss_power_mode</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv429esp_modem_get_gnss_power_modePi" title="Permalink to this definition"></a><br /></dt>
<dd><p>GNSS power control. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[out]</strong> power mode (0 - off, 1 - on) </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -786,7 +784,7 @@ pointer as the return value. The API expects the output data to point to user al
</div>
</section>
<section id="configuration-structures">
<span id="api-config"></span><h2>Configuration structures<a class="headerlink" href="#configuration-structures" title="Permalink to this heading"></a></h2>
<span id="api-config"></span><h2>Configuration structures<a class="headerlink" href="#configuration-structures" title="Permalink to this headline"></a></h2>
<dl>
<dt class="sig sig-object cpp">
<span class="target" id="group___e_s_p___m_o_d_e_m___c_o_n_f_i_g"></span><em><span class="pre">group</span></em> <span class="sig-name descname"><span class="pre">ESP_MODEM_CONFIG</span></span></dt>
@@ -1087,7 +1085,7 @@ pointer as the return value. The API expects the output data to point to user al
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<script>$('#searchbox').show(0);</script>
@@ -1104,7 +1102,7 @@ pointer as the return value. The API expects the output data to point to user al
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@@ -4,7 +4,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>C++ API Documentation &#8212; esp-modem documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
@@ -12,9 +12,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Advanced esp-modem use cases" href="advanced_api.html" />
@@ -36,7 +34,7 @@
<div class="body" role="main">
<section id="c-api-documentation">
<h1>C++ API Documentation<a class="headerlink" href="#c-api-documentation" title="Permalink to this heading"></a></h1>
<h1>C++ API Documentation<a class="headerlink" href="#c-api-documentation" title="Permalink to this headline"></a></h1>
<p>Similar to the <a class="reference internal" href="api_docs.html#c-api"><span class="std std-ref">C API Documentation</span></a>, the basic application workflow consist of</p>
<div class="toctree-wrapper compound">
</div>
@@ -47,7 +45,7 @@
<li><p><a class="reference internal" href="#cpp-destroy"><span class="std std-ref">Destroying the DCE</span></a></p></li>
</ul>
<section id="create-dte-and-dce">
<span id="cpp-init"></span><h2>Create DTE and DCE<a class="headerlink" href="#create-dte-and-dce" title="Permalink to this heading"></a></h2>
<span id="cpp-init"></span><h2>Create DTE and DCE<a class="headerlink" href="#create-dte-and-dce" title="Permalink to this headline"></a></h2>
<dl>
<dt class="sig sig-object cpp">
<span class="target" id="group___e_s_p___m_o_d_e_m___i_n_i_t___d_t_e"></span><em><span class="pre">group</span></em> <span class="sig-name descname"><span class="pre">ESP_MODEM_INIT_DTE</span></span></dt>
@@ -72,10 +70,10 @@
<span id="_CPPv315create_uart_dtePK10dte_config"></span><span id="_CPPv215create_uart_dtePK10dte_config"></span><span id="create_uart_dte__dte_configCP"></span><span class="target" id="group___e_s_p___m_o_d_e_m___i_n_i_t___d_t_e_1ga4a4f7f00866211c2d390fd3edb282531"></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">shared_ptr</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">DTE</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">create_uart_dte</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv410dte_config" title="dte_config"><span class="n"><span class="pre">dte_config</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">config</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv415create_uart_dtePK10dte_config" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create UART <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a>. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>config</strong> <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> configuration </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>shared ptr to <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> on success nullptr on failure (either due to insufficient memory or wrong dte configuration) if exceptions are disabled the API abort()s on error </p>
</dd>
</dl>
@@ -86,10 +84,10 @@
<span id="_CPPv314create_vfs_dtePK10dte_config"></span><span id="_CPPv214create_vfs_dtePK10dte_config"></span><span id="create_vfs_dte__dte_configCP"></span><span class="target" id="group___e_s_p___m_o_d_e_m___i_n_i_t___d_t_e_1ga5795216bc8c5a8a3c08e1008c7576253"></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">shared_ptr</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">DTE</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">create_vfs_dte</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv410dte_config" title="dte_config"><span class="n"><span class="pre">dte_config</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">config</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv414create_vfs_dtePK10dte_config" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create VFS <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a>. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>config</strong> <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> configuration </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>shared ptr to <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> on success nullptr on failure (either due to insufficient memory or wrong dte configuration) if exceptions are disabled the API abort()s on error </p>
</dd>
</dl>
@@ -109,14 +107,14 @@
<span id="_CPPv318create_SIM7600_dcePK10dce_configNSt10shared_ptrI3DTEEEP11esp_netif_t"></span><span id="_CPPv218create_SIM7600_dcePK10dce_configNSt10shared_ptrI3DTEEEP11esp_netif_t"></span><span id="create_SIM7600_dce__dce_configCP.std::shared_ptr:DTE:.esp_netif_tP"></span><span class="target" id="group___e_s_p___m_o_d_e_m___i_n_i_t___d_c_e_1ga4afd7f37219025f4dfd936784e5a56e1"></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">unique_ptr</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">DCE</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">create_SIM7600_dce</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv410dce_config" title="dce_config"><span class="n"><span class="pre">dce_config</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">config</span></span>, <span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">shared_ptr</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">DTE</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">dte</span></span>, <span class="n"><span class="pre">esp_netif_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">netif</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418create_SIM7600_dcePK10dce_configNSt10shared_ptrI3DTEEEP11esp_netif_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> based on <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_s_i_m7600"><span class="std std-ref">SIM7600</span></a> module. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>config</strong> <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> configuration </p></li>
<li><p><strong>dte</strong> reference to the communicating <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> </p></li>
<li><p><strong>netif</strong> reference to the network interface</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>unique ptr to the created <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> on success nullptr on failure if exceptions are disabled the API abort()s on error </p>
</dd>
</dl>
@@ -157,10 +155,10 @@
</section>
<section id="mode-switching-commands">
<span id="cpp-mode-switch"></span><h2>Mode switching commands<a class="headerlink" href="#mode-switching-commands" title="Permalink to this heading"></a></h2>
<span id="cpp-mode-switch"></span><h2>Mode switching commands<a class="headerlink" href="#mode-switching-commands" title="Permalink to this headline"></a></h2>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4I0EN9esp_modem5DCE_TE">
<span id="_CPPv3I0EN9esp_modem5DCE_TE"></span><span id="_CPPv2I0EN9esp_modem5DCE_TE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SpecificModule</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1_d_c_e___t"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">DCE_T</span></span></span><a class="headerlink" href="#_CPPv4I0EN9esp_modem5DCE_TE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3I0EN9esp_modem5DCE_TE"></span><span id="_CPPv2I0EN9esp_modem5DCE_TE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SpecificModule</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1_d_c_e___t"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">DCE_T</span></span></span><a class="headerlink" href="#_CPPv4I0EN9esp_modem5DCE_TE" title="Permalink to this definition"></a><br /></dt>
<dd><p>General <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> class templated on a specific module. It is responsible for all the necessary transactions related to switching modes and consequent synergy with aggregated objects of <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a>, <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_netif"><span class="std std-ref">Netif</span></a> and a specific Module. </p>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
@@ -175,7 +173,7 @@
</section>
<section id="modem-commands">
<span id="cpp-modem-commands"></span><h2>Modem commands<a class="headerlink" href="#modem-commands" title="Permalink to this heading"></a></h2>
<span id="cpp-modem-commands"></span><h2>Modem commands<a class="headerlink" href="#modem-commands" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p><a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem3DCE4syncEv" title="esp_modem::DCE::sync"><code class="xref cpp cpp-func docutils literal notranslate"><span class="pre">esp_modem::DCE::sync()</span></code></a></p></li>
<li><p><a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem3DCE17get_operator_nameERNSt6stringERi" title="esp_modem::DCE::get_operator_name"><code class="xref cpp cpp-func docutils literal notranslate"><span class="pre">esp_modem::DCE::get_operator_name()</span></code></a></p></li>
@@ -216,7 +214,7 @@
</ul>
</section>
<section id="destroy-the-dce">
<span id="cpp-destroy"></span><h2>Destroy the DCE<a class="headerlink" href="#destroy-the-dce" title="Permalink to this heading"></a></h2>
<span id="cpp-destroy"></span><h2>Destroy the DCE<a class="headerlink" href="#destroy-the-dce" title="Permalink to this headline"></a></h2>
<p>The DCE object is created as <code class="docutils literal notranslate"><span class="pre">std::unique_ptr</span></code> by default and as such doesnt have to be explicitly destroyed.
It simply gets destroyed and cleaned-up automatically if the object goes out of the block scope.</p>
</section>
@@ -272,7 +270,7 @@ It simply gets destroyed and cleaned-up automatically if the object goes out of
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<script>$('#searchbox').show(0);</script>
@@ -289,7 +287,7 @@ It simply gets destroyed and cleaned-up automatically if the object goes out of
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@@ -4,7 +4,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>&lt;no title&gt; &#8212; esp-modem documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
@@ -12,9 +12,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -114,7 +112,7 @@
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<script>$('#searchbox').show(0);</script>
@@ -131,7 +129,7 @@
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@@ -11,9 +11,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
@@ -613,7 +611,7 @@
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<script>$('#searchbox').show(0);</script>
@@ -630,7 +628,7 @@
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -4,7 +4,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>ESP-MODEM Programmers manual &#8212; esp-modem documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
@@ -12,9 +12,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="ESP MODEM" href="README.html" />
@@ -35,7 +33,7 @@
<div class="body" role="main">
<section id="esp-modem-programmers-manual">
<h1>ESP-MODEM Programmers manual<a class="headerlink" href="#esp-modem-programmers-manual" title="Permalink to this heading"></a></h1>
<h1>ESP-MODEM Programmers manual<a class="headerlink" href="#esp-modem-programmers-manual" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="README.html">Brief intro</a><ul>
@@ -149,7 +147,7 @@
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<script>$('#searchbox').show(0);</script>
@@ -166,7 +164,7 @@
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@@ -4,7 +4,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Internal design &#8212; esp-modem documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
@@ -12,9 +12,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="DCE Internal implementation" href="internal_docs.html" />
@@ -36,9 +34,9 @@
<div class="body" role="main">
<section id="internal-design">
<h1>Internal design<a class="headerlink" href="#internal-design" title="Permalink to this heading"></a></h1>
<h1>Internal design<a class="headerlink" href="#internal-design" title="Permalink to this headline"></a></h1>
<section id="design-decisions">
<h2>Design decisions<a class="headerlink" href="#design-decisions" title="Permalink to this heading"></a></h2>
<h2>Design decisions<a class="headerlink" href="#design-decisions" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Use C++ with additional C API</p></li>
<li><p>Use exceptions</p>
@@ -61,17 +59,17 @@ such as implantation of a minimal device (ModuleIf), add new AT commands (oOnly
</ul>
</section>
<section id="dce-collaboration-model">
<h2>DCE collaboration model<a class="headerlink" href="#dce-collaboration-model" title="Permalink to this heading"></a></h2>
<h2>DCE collaboration model<a class="headerlink" href="#dce-collaboration-model" title="Permalink to this headline"></a></h2>
<p>The diagram describes how the DCE class collaborates with DTE, PPP and the device abstraction</p>
<p><img alt="DCE_architecture" src="_images/DCE_DTE_collaboration.png" /></p>
</section>
<section id="terminal-inheritance">
<h2>Terminal inheritance<a class="headerlink" href="#terminal-inheritance" title="Permalink to this heading"></a></h2>
<h2>Terminal inheritance<a class="headerlink" href="#terminal-inheritance" title="Permalink to this headline"></a></h2>
<p>Terminal is a class which can read or write data, and can handle callbacks when data are available. UART specialization
is provided implementing these method using the uart driver.</p>
</section>
<section id="cmux-terminal">
<h2>CMUX terminal<a class="headerlink" href="#cmux-terminal" title="Permalink to this heading"></a></h2>
<h2>CMUX terminal<a class="headerlink" href="#cmux-terminal" title="Permalink to this headline"></a></h2>
<p>The below diagram depicts the idea of using CMUX terminal mode using the CMuxInstance class which is a terminal
(it implements the basic read/write methods) interfacing arbitrary number of virtual terminals,
but at the same time it is also composed of CMux class, which consumes the original terminal and uses its read/write methods
@@ -130,7 +128,7 @@ to multiplex the terminal.</p>
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<script>$('#searchbox').show(0);</script>
@@ -147,7 +145,7 @@ to multiplex the terminal.</p>
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@@ -4,7 +4,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>DCE Internal implementation &#8212; esp-modem documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
@@ -12,9 +12,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="prev" title="Internal design" href="internal_design.html" />
@@ -35,7 +33,7 @@
<div class="body" role="main">
<section id="dce-internal-implementation">
<h1>DCE Internal implementation<a class="headerlink" href="#dce-internal-implementation" title="Permalink to this heading"></a></h1>
<h1>DCE Internal implementation<a class="headerlink" href="#dce-internal-implementation" title="Permalink to this headline"></a></h1>
<p>This chapter provides a detailed description of the classes and building blocks of the esp-modem component and their responsibilities.</p>
<p>The esp-modem actually implements the DCE class, which in turn aggregates these thee units:</p>
<ul class="simple">
@@ -64,7 +62,7 @@
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4I0EN9esp_modem5DCE_TE">
<span id="_CPPv3I0EN9esp_modem5DCE_TE"></span><span id="_CPPv2I0EN9esp_modem5DCE_TE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SpecificModule</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1_d_c_e___t"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">DCE_T</span></span></span><br /></dt>
<span id="_CPPv3I0EN9esp_modem5DCE_TE"></span><span id="_CPPv2I0EN9esp_modem5DCE_TE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SpecificModule</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1_d_c_e___t"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">DCE_T</span></span></span><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_dce.hpp&gt;</em></div>
<p>General <a class="reference internal" href="#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> class templated on a specific module. It is responsible for all the necessary transactions related to switching modes and consequent synergy with aggregated objects of <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a>, <a class="reference internal" href="#classesp__modem_1_1_netif"><span class="std std-ref">Netif</span></a> and a specific Module. </p>
@@ -81,7 +79,7 @@
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem3DCEE">
<span id="_CPPv3N9esp_modem3DCEE"></span><span id="_CPPv2N9esp_modem3DCEE"></span><span id="esp_modem::DCE"></span><span class="target" id="classesp__modem_1_1_d_c_e"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">DCE</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><a class="reference internal" href="cxx_api_docs.html#_CPPv4I0EN9esp_modem5DCE_TE" title="esp_modem::DCE_T"><span class="n"><span class="pre">DCE_T</span></span></a><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N9esp_modem13GenericModuleE" title="esp_modem::GenericModule"><span class="n"><span class="pre">GenericModule</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N9esp_modem3DCEE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N9esp_modem3DCEE"></span><span id="_CPPv2N9esp_modem3DCEE"></span><span id="esp_modem::DCE"></span><span class="target" id="classesp__modem_1_1_d_c_e"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">DCE</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><a class="reference internal" href="cxx_api_docs.html#_CPPv4I0EN9esp_modem5DCE_TE" title="esp_modem::DCE_T"><span class="n"><span class="pre">DCE_T</span></span></a><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N9esp_modem13GenericModuleE" title="esp_modem::GenericModule"><span class="n"><span class="pre">GenericModule</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><a class="reference internal" href="cxx_api_docs.html#_CPPv4I0EN9esp_modem5DCE_TE" title="esp_modem::DCE_T"><span class="n"><span class="pre">DCE_T</span></span></a><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N9esp_modem13GenericModuleE" title="esp_modem::GenericModule"><span class="n"><span class="pre">GenericModule</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N9esp_modem3DCEE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_dce.hpp&gt;</em></div>
<p>Common abstraction of the modem <a class="reference internal" href="#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a>, specialized by the <a class="reference internal" href="#classesp__modem_1_1_generic_module"><span class="std std-ref">GenericModule</span></a> which is a parent class for the supported devices and most common modems, as well. </p>
@@ -92,7 +90,7 @@
<span id="_CPPv3N9esp_modem3DCE4syncEv"></span><span id="_CPPv2N9esp_modem3DCE4syncEv"></span><span id="esp_modem::DCE::sync"></span><span class="target" id="classesp__modem_1_1_d_c_e_1ab46b147d37e882c18cdaec7527b82e99"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">sync</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE4syncEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sends the initial AT sequence to sync up with the device. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -103,13 +101,13 @@
<span id="_CPPv3N9esp_modem3DCE17get_operator_nameERNSt6stringERi"></span><span id="_CPPv2N9esp_modem3DCE17get_operator_nameERNSt6stringERi"></span><span id="esp_modem::DCE::get_operator_name__ssR.iR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a091b5ab73c50e3e12beca98a4185c586"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">get_operator_name</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">name</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">act</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE17get_operator_nameERNSt6stringERi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reads the operator name. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>operator</strong> <strong>[out]</strong> name </p></li>
<li><p><strong>access</strong> <strong>[out]</strong> technology </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -120,7 +118,7 @@
<span id="_CPPv3N9esp_modem3DCE13store_profileEv"></span><span id="_CPPv2N9esp_modem3DCE13store_profileEv"></span><span id="esp_modem::DCE::store_profile"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a82c8adc3a6d48f7a10a637d0feb90bac"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">store_profile</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE13store_profileEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Stores current user profile. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -131,10 +129,10 @@
<span id="_CPPv3N9esp_modem3DCE7set_pinERKNSt6stringE"></span><span id="_CPPv2N9esp_modem3DCE7set_pinERKNSt6stringE"></span><span id="esp_modem::DCE::set_pin__ssCR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1aa45248169c7ab1979fca17035db57062"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_pin</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">pin</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE7set_pinERKNSt6stringE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the supplied PIN code. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>pin</strong> <strong>[in]</strong> Pin </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -145,14 +143,14 @@
<span id="_CPPv3N9esp_modem3DCE2atERKNSt6stringERNSt6stringEi"></span><span id="_CPPv2N9esp_modem3DCE2atERKNSt6stringERNSt6stringEi"></span><span id="esp_modem::DCE::at__ssCR.ssR.i"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a2d7ff46d0e201175e7ebace765792ff1"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">at</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">cmd</span></span>, <span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">out</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE2atERKNSt6stringERNSt6stringEi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Execute the supplied AT command. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>at</strong> <strong>[in]</strong> AT command </p></li>
<li><p><strong>out</strong> <strong>[out]</strong> Command output string </p></li>
<li><p><strong>timeout</strong> <strong>[in]</strong> AT command timeout in milliseconds </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -163,10 +161,10 @@
<span id="_CPPv3N9esp_modem3DCE8read_pinERb"></span><span id="_CPPv2N9esp_modem3DCE8read_pinERb"></span><span id="esp_modem::DCE::read_pin__bR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a9055f8d714ba23adba7be5acf58f8136"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">read_pin</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">pin_ok</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE8read_pinERb" title="Permalink to this definition"></a><br /></dt>
<dd><p>Checks if the SIM needs a PIN. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>pin_ok</strong> <strong>[out]</strong> true if the SIM card doesnt need a PIN to unlock </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -177,10 +175,10 @@
<span id="_CPPv3N9esp_modem3DCE8set_echoEKb"></span><span id="_CPPv2N9esp_modem3DCE8set_echoEKb"></span><span id="esp_modem::DCE::set_echo__bC"></span><span class="target" id="classesp__modem_1_1_d_c_e_1afe90115748d693a13cf9184d2280b0db"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_echo</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">echo_on</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE8set_echoEKb" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets echo mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>echo_on</strong> <strong>[in]</strong> true if echo mode on (repeats the commands) </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -191,10 +189,10 @@
<span id="_CPPv3N9esp_modem3DCE12sms_txt_modeEKb"></span><span id="_CPPv2N9esp_modem3DCE12sms_txt_modeEKb"></span><span id="esp_modem::DCE::sms_txt_mode__bC"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a016f25608788ab1487bb062c109dc046"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">sms_txt_mode</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">txt</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE12sms_txt_modeEKb" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the Txt or Pdu mode for SMS (only txt is supported) </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>txt</strong> <strong>[in]</strong> true if txt mode </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -205,7 +203,7 @@
<span id="_CPPv3N9esp_modem3DCE17sms_character_setEv"></span><span id="_CPPv2N9esp_modem3DCE17sms_character_setEv"></span><span id="esp_modem::DCE::sms_character_set"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a3b4b1fc2126e0d5c7926f87a64bac37d"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">sms_character_set</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE17sms_character_setEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the default (GSM) character set. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -216,13 +214,13 @@
<span id="_CPPv3N9esp_modem3DCE8send_smsERKNSt6stringERKNSt6stringE"></span><span id="_CPPv2N9esp_modem3DCE8send_smsERKNSt6stringERKNSt6stringE"></span><span id="esp_modem::DCE::send_sms__ssCR.ssCR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1ae33cfaae15a74414039d4c8a865dded3"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">send_sms</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">number</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">message</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE8send_smsERKNSt6stringERKNSt6stringE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sends SMS message in txt mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>number</strong> <strong>[in]</strong> Phone number to send the message to </p></li>
<li><p><strong>message</strong> <strong>[in]</strong> Text message to be sent </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -233,7 +231,7 @@
<span id="_CPPv3N9esp_modem3DCE16resume_data_modeEv"></span><span id="_CPPv2N9esp_modem3DCE16resume_data_modeEv"></span><span id="esp_modem::DCE::resume_data_mode"></span><span class="target" id="classesp__modem_1_1_d_c_e_1aa136b9f3d9ada787535f6df8ed81be0f"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">resume_data_mode</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE16resume_data_modeEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Resumes data mode (Switches back to the data mode, which was temporarily suspended) </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -244,10 +242,10 @@
<span id="_CPPv3N9esp_modem3DCE15set_pdp_contextER10PdpContext"></span><span id="_CPPv2N9esp_modem3DCE15set_pdp_contextER10PdpContext"></span><span id="esp_modem::DCE::set_pdp_context__PdpContextR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a9e58a4197f2b8d34be49dc1b6505f55f"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_pdp_context</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4N9esp_modem10PdpContextE" title="esp_modem::PdpContext"><span class="n"><span class="pre">PdpContext</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">p1</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE15set_pdp_contextER10PdpContext" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets php context. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>p1</strong> <strong>[in]</strong> PdP context struct to setup modem cellular connection </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -258,7 +256,7 @@
<span id="_CPPv3N9esp_modem3DCE16set_command_modeEv"></span><span id="_CPPv2N9esp_modem3DCE16set_command_modeEv"></span><span id="esp_modem::DCE::set_command_mode"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a4118fbfe223e9aef81aa083c993f4277"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_command_mode</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE16set_command_modeEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Switches to the command mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -269,7 +267,7 @@
<span id="_CPPv3N9esp_modem3DCE8set_cmuxEv"></span><span id="_CPPv2N9esp_modem3DCE8set_cmuxEv"></span><span id="esp_modem::DCE::set_cmux"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a2ce1f9df5431f7c6f9c76e38929a866a"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_cmux</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE8set_cmuxEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Switches to the CMUX mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -280,10 +278,10 @@
<span id="_CPPv3N9esp_modem3DCE8get_imsiERNSt6stringE"></span><span id="_CPPv2N9esp_modem3DCE8get_imsiERNSt6stringE"></span><span id="esp_modem::DCE::get_imsi__ssR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1ab03c9675819fe550b174a1f40a122b0a"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">get_imsi</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">imsi</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE8get_imsiERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reads the IMSI number. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>imsi</strong> <strong>[out]</strong> Modules IMSI number </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -294,10 +292,10 @@
<span id="_CPPv3N9esp_modem3DCE8get_imeiERNSt6stringE"></span><span id="_CPPv2N9esp_modem3DCE8get_imeiERNSt6stringE"></span><span id="esp_modem::DCE::get_imei__ssR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1abc0e081ce74bc4f20e4699faaa674966"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">get_imei</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">imei</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE8get_imeiERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reads the IMEI number. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>imei</strong> <strong>[out]</strong> Modules IMEI number </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -308,10 +306,10 @@
<span id="_CPPv3N9esp_modem3DCE15get_module_nameERNSt6stringE"></span><span id="_CPPv2N9esp_modem3DCE15get_module_nameERNSt6stringE"></span><span id="esp_modem::DCE::get_module_name__ssR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1af5763fd6bcdea19f4bca750d387f45c0"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">get_module_name</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">name</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE15get_module_nameERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reads the module name. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>name</strong> <strong>[out]</strong> module name </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -322,7 +320,7 @@
<span id="_CPPv3N9esp_modem3DCE13set_data_modeEv"></span><span id="_CPPv2N9esp_modem3DCE13set_data_modeEv"></span><span id="esp_modem::DCE::set_data_mode"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a2efaf3c37dbc8e6f0d5b27552e8522b6"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_data_mode</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE13set_data_modeEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the modem to data mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -333,13 +331,13 @@
<span id="_CPPv3N9esp_modem3DCE18get_signal_qualityERiRi"></span><span id="_CPPv2N9esp_modem3DCE18get_signal_qualityERiRi"></span><span id="esp_modem::DCE::get_signal_quality__iR.iR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1ad55babb50dc8394420c9ca2fc1282b4e"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">get_signal_quality</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">rssi</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">ber</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE18get_signal_qualityERiRi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get Signal quality. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>rssi</strong> <strong>[out]</strong> signal strength indication </p></li>
<li><p><strong>ber</strong> <strong>[out]</strong> channel bit error rate </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -350,13 +348,13 @@
<span id="_CPPv3N9esp_modem3DCE16set_flow_controlEii"></span><span id="_CPPv2N9esp_modem3DCE16set_flow_controlEii"></span><span id="esp_modem::DCE::set_flow_control__i.i"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a23effa5d3b7f650b7a7874651d16bb42"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_flow_control</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">dce_flow</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">dte_flow</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE16set_flow_controlEii" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets HW control flow. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>dce_flow</strong> <strong>[in]</strong> 0=none, 2=RTS hw flow control of <a class="reference internal" href="#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> </p></li>
<li><p><strong>dte_flow</strong> <strong>[in]</strong> 0=none, 2=CTS hw flow control of <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -367,7 +365,7 @@
<span id="_CPPv3N9esp_modem3DCE7hang_upEv"></span><span id="_CPPv2N9esp_modem3DCE7hang_upEv"></span><span id="esp_modem::DCE::hang_up"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a34b9ac1588b27849f0d1b06ffdc61354"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">hang_up</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE7hang_upEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Hangs up current data call. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -378,14 +376,14 @@
<span id="_CPPv3N9esp_modem3DCE18get_battery_statusERiRiRi"></span><span id="_CPPv2N9esp_modem3DCE18get_battery_statusERiRiRi"></span><span id="esp_modem::DCE::get_battery_status__iR.iR.iR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a9b1b60ffcd71483bc763ad1d2da73ce9"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">get_battery_status</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">voltage</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">bcs</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">bcl</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE18get_battery_statusERiRiRi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get voltage levels of modem power up circuitry. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>voltage</strong> <strong>[out]</strong> Current status in mV </p></li>
<li><p><strong>bcs</strong> <strong>[out]</strong> charge status (-1-Not available, 0-Not charging, 1-Charging, 2-Charging done) </p></li>
<li><p><strong>bcl</strong> <strong>[out]</strong> 1-100% battery capacity, -1-Not available </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -396,7 +394,7 @@
<span id="_CPPv3N9esp_modem3DCE10power_downEv"></span><span id="_CPPv2N9esp_modem3DCE10power_downEv"></span><span id="esp_modem::DCE::power_down"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a0712ea72939e6b864b22f34c441ac950"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">power_down</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE10power_downEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Power down the module. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -407,7 +405,7 @@
<span id="_CPPv3N9esp_modem3DCE5resetEv"></span><span id="_CPPv2N9esp_modem3DCE5resetEv"></span><span id="esp_modem::DCE::reset"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a8dac3544f73414b1df69040542451c79"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">reset</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE5resetEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reset the module. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -418,10 +416,10 @@
<span id="_CPPv3N9esp_modem3DCE8set_baudEi"></span><span id="_CPPv2N9esp_modem3DCE8set_baudEi"></span><span id="esp_modem::DCE::set_baud__i"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a579851a45d862c4400a68183efdd1c7f"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_baud</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">baud</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE8set_baudEi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Configures the baudrate. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>baud</strong> <strong>[in]</strong> Desired baud rate of the <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -432,14 +430,14 @@
<span id="_CPPv3N9esp_modem3DCE12set_operatorEiiRKNSt6stringE"></span><span id="_CPPv2N9esp_modem3DCE12set_operatorEiiRKNSt6stringE"></span><span id="esp_modem::DCE::set_operator__i.i.ssCR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a8de584fff3a10e799b3e9f653cddc9d0"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_operator</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">mode</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">format</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">oper</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE12set_operatorEiiRKNSt6stringE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Force an attempt to connect to a specific operator. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>mode</strong> <strong>[in]</strong> mode of attempt mode=0 - automatic mode=1 - manual mode=2 - deregister mode=3 - set format for read operation mode=4 - manual with fallback to automatic </p></li>
<li><p><strong>format</strong> <strong>[in]</strong> what format the operator is given in format=0 - long format format=1 - short format format=2 - numeric </p></li>
<li><p><strong>oper</strong> <strong>[in]</strong> the operator to connect to </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -450,10 +448,10 @@
<span id="_CPPv3N9esp_modem3DCE28set_network_attachment_stateEi"></span><span id="_CPPv2N9esp_modem3DCE28set_network_attachment_stateEi"></span><span id="esp_modem::DCE::set_network_attachment_state__i"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a4a9ddaabcf93c3059dc9ec9ee0ff4524"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_network_attachment_state</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE28set_network_attachment_stateEi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Attach or detach from the GPRS service. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>state</strong> <strong>[in]</strong> 1-attach 0-detach </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -464,10 +462,10 @@
<span id="_CPPv3N9esp_modem3DCE28get_network_attachment_stateERi"></span><span id="_CPPv2N9esp_modem3DCE28get_network_attachment_stateERi"></span><span id="esp_modem::DCE::get_network_attachment_state__iR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a78d3d8ecf90f068cef5975a5a4359afb"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">get_network_attachment_state</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE28get_network_attachment_stateERi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get network attachment state. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>state</strong> <strong>[out]</strong> 1-attached 0-detached </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -478,10 +476,10 @@
<span id="_CPPv3N9esp_modem3DCE15set_radio_stateEi"></span><span id="_CPPv2N9esp_modem3DCE15set_radio_stateEi"></span><span id="esp_modem::DCE::set_radio_state__i"></span><span class="target" id="classesp__modem_1_1_d_c_e_1ad2a3b7db8dbe2942cf824b84e25e7a9c"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_radio_state</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE15set_radio_stateEi" title="Permalink to this definition"></a><br /></dt>
<dd><p>What mode the radio should be set to. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>state</strong> <strong>[in]</strong> state 1-full 0-minimum … </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -492,10 +490,10 @@
<span id="_CPPv3N9esp_modem3DCE15get_radio_stateERi"></span><span id="_CPPv2N9esp_modem3DCE15get_radio_stateERi"></span><span id="esp_modem::DCE::get_radio_state__iR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a3f3a18928ab1ade320ece8c9167862f6"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">get_radio_state</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE15get_radio_stateERi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get current radio state. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>state</strong> <strong>[out]</strong> 1-full 0-minimum … </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -506,10 +504,10 @@
<span id="_CPPv3N9esp_modem3DCE16set_network_modeEi"></span><span id="_CPPv2N9esp_modem3DCE16set_network_modeEi"></span><span id="esp_modem::DCE::set_network_mode__i"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a49103b6df52b4e35fe7e62cecae3a5d0"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_network_mode</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE16set_network_modeEi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set network mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[in]</strong> preferred mode </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -520,10 +518,10 @@
<span id="_CPPv3N9esp_modem3DCE18set_preferred_modeEi"></span><span id="_CPPv2N9esp_modem3DCE18set_preferred_modeEi"></span><span id="esp_modem::DCE::set_preferred_mode__i"></span><span class="target" id="classesp__modem_1_1_d_c_e_1ad79bdadc3b28aa641e77af56ae749a5b"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_preferred_mode</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE18set_preferred_modeEi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Preferred network mode (CAT-M and/or NB-IoT) </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[in]</strong> preferred selection </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -534,10 +532,10 @@
<span id="_CPPv3N9esp_modem3DCE17set_network_bandsERKNSt6stringEPKii"></span><span id="_CPPv2N9esp_modem3DCE17set_network_bandsERKNSt6stringEPKii"></span><span id="esp_modem::DCE::set_network_bands__ssCR.iCP.i"></span><span class="target" id="classesp__modem_1_1_d_c_e_1ae5b5440ff5dd8bd81c4636eef5c9f9cd"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_network_bands</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">mode</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">bands</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">size</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE17set_network_bandsERKNSt6stringEPKii" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set network bands for CAT-M or NB-IoT. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[in]</strong> CAT-M or NB-IoT </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -548,10 +546,10 @@
<span id="_CPPv3N9esp_modem3DCE23get_network_system_modeERi"></span><span id="_CPPv2N9esp_modem3DCE23get_network_system_modeERi"></span><span id="esp_modem::DCE::get_network_system_mode__iR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1ace6a75b18d97b7e28f52435a9e00e7af"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">get_network_system_mode</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE23get_network_system_modeERi" title="Permalink to this definition"></a><br /></dt>
<dd><p>Show network system mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[out]</strong> current network mode </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -562,10 +560,10 @@
<span id="_CPPv3N9esp_modem3DCE19set_gnss_power_modeEi"></span><span id="_CPPv2N9esp_modem3DCE19set_gnss_power_modeEi"></span><span id="esp_modem::DCE::set_gnss_power_mode__i"></span><span class="target" id="classesp__modem_1_1_d_c_e_1a51d148854c9d5310101e0d1ac67ac015"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_gnss_power_mode</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE19set_gnss_power_modeEi" title="Permalink to this definition"></a><br /></dt>
<dd><p>GNSS power control. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[out]</strong> power mode (0 - off, 1 - on) </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -576,10 +574,10 @@
<span id="_CPPv3N9esp_modem3DCE19get_gnss_power_modeERi"></span><span id="_CPPv2N9esp_modem3DCE19get_gnss_power_modeERi"></span><span id="esp_modem::DCE::get_gnss_power_mode__iR"></span><span class="target" id="classesp__modem_1_1_d_c_e_1afe14e227b79d08779e852857183739a0"></span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">get_gnss_power_mode</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DCE19get_gnss_power_modeERi" title="Permalink to this definition"></a><br /></dt>
<dd><p>GNSS power control. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> <strong>[out]</strong> power mode (0 - off, 1 - on) </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -591,7 +589,7 @@
</dd></dl>
<section id="dte-abstraction">
<span id="dte-impl"></span><h2>DTE abstraction<a class="headerlink" href="#dte-abstraction" title="Permalink to this heading"></a></h2>
<span id="dte-impl"></span><h2>DTE abstraction<a class="headerlink" href="#dte-abstraction" title="Permalink to this headline"></a></h2>
<p>DTE is a basic unit to talk to the module using a Terminal interface. It also implements and uses the CMUX to multiplex
terminals. Besides the DTE documentation, this section also refers to the</p>
<ul class="simple">
@@ -605,7 +603,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<dd><p>Definition of <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> and related classes. </p>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem3DTEE">
<span id="_CPPv3N9esp_modem3DTEE"></span><span id="_CPPv2N9esp_modem3DTEE"></span><span id="esp_modem::DTE"></span><span class="target" id="classesp__modem_1_1_d_t_e"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">DTE</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N9esp_modem13CommandableIfE" title="esp_modem::CommandableIf"><span class="n"><span class="pre">CommandableIf</span></span></a><a class="headerlink" href="#_CPPv4N9esp_modem3DTEE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N9esp_modem3DTEE"></span><span id="_CPPv2N9esp_modem3DTEE"></span><span id="esp_modem::DTE"></span><span class="target" id="classesp__modem_1_1_d_t_e"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">DTE</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N9esp_modem13CommandableIfE" title="esp_modem::CommandableIf"><span class="n"><span class="pre">CommandableIf</span></span></a><a class="headerlink" href="#_CPPv4N9esp_modem3DTEE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_dte.hpp&gt;</em></div>
<p><a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> (Data <a class="reference internal" href="#classesp__modem_1_1_terminal"><span class="std std-ref">Terminal</span></a> Equipment) class </p>
@@ -616,7 +614,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem3DTE3DTEEPK20esp_modem_dte_configNSt10unique_ptrI8TerminalEE"></span><span id="_CPPv2N9esp_modem3DTE3DTEEPK20esp_modem_dte_configNSt10unique_ptrI8TerminalEE"></span><span id="esp_modem::DTE::DTE__esp_modem_dte_configCP.std::unique_ptr:Terminal:"></span><span class="target" id="classesp__modem_1_1_d_t_e_1abcf1d191be79fc6a993077d52203122c"></span><span class="k"><span class="pre">explicit</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">DTE</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="api_docs.html#_CPPv420esp_modem_dte_config" title="esp_modem_dte_config"><span class="n"><span class="pre">esp_modem_dte_config</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">config</span></span>, <span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">unique_ptr</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N9esp_modem8TerminalE" title="esp_modem::Terminal"><span class="n"><span class="pre">Terminal</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">t</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DTE3DTEEPK20esp_modem_dte_configNSt10unique_ptrI8TerminalEE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Creates a <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> instance from the terminal. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>config</strong> <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> config structure </p></li>
<li><p><strong>t</strong> unique-ptr to <a class="reference internal" href="#classesp__modem_1_1_terminal"><span class="std std-ref">Terminal</span></a> </p></li>
@@ -630,13 +628,13 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem3DTE5writeEP7uint8_t6size_t"></span><span id="_CPPv2N9esp_modem3DTE5writeEP7uint8_t6size_t"></span><span id="esp_modem::DTE::write__uint8_tP.s"></span><span class="target" id="classesp__modem_1_1_d_t_e_1a51c11d82d5dec6c502d2f32ffc96d928"></span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">write</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">data</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">len</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DTE5writeEP7uint8_t6size_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Writing to the underlying terminal. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>data</strong> Data pointer to write </p></li>
<li><p><strong>len</strong> Data len to write </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>number of bytes written </p>
</dd>
</dl>
@@ -647,13 +645,13 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem3DTE4readEPP7uint8_t6size_t"></span><span id="_CPPv2N9esp_modem3DTE4readEPP7uint8_t6size_t"></span><span id="esp_modem::DTE::read__uint8_tPP.s"></span><span class="target" id="classesp__modem_1_1_d_t_e_1a9cf529ece97b282ce02b00c0f4720868"></span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">read</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">d</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">len</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DTE4readEPP7uint8_t6size_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reading from the underlying terminal. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>d</strong> Returning the data pointer of the received payload </p></li>
<li><p><strong>len</strong> Length of the data payload </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>number of bytes read </p>
</dd>
</dl>
@@ -664,7 +662,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem3DTE11set_read_cbENSt8functionIFbP7uint8_t6size_tEEE"></span><span id="_CPPv2N9esp_modem3DTE11set_read_cbENSt8functionIFbP7uint8_t6size_tEEE"></span><span class="target" id="classesp__modem_1_1_d_t_e_1a956860c6925bddbd89aa0c7e3121eaa3"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_read_cb</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">function</span></span><span class="p"><span class="pre">&lt;</span></span><span class="kt"><span class="pre">bool</span></span><span class="p"><span class="pre">(</span></span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n"><span class="pre">len</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">f</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DTE11set_read_cbENSt8functionIFbP7uint8_t6size_tEEE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets read callback with valid data and length. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>f</strong> Function to be called on data available </p>
</dd>
</dl>
@@ -675,7 +673,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem3DTE12set_error_cbENSt8functionIFv14terminal_errorEEE"></span><span id="_CPPv2N9esp_modem3DTE12set_error_cbENSt8functionIFv14terminal_errorEEE"></span><span class="target" id="classesp__modem_1_1_d_t_e_1a9142953a2b0cb351fbff5429415b1f81"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_error_cb</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">function</span></span><span class="p"><span class="pre">&lt;</span></span><span class="kt"><span class="pre">void</span></span><span class="p"><span class="pre">(</span></span><a class="reference internal" href="#_CPPv414terminal_error" title="terminal_error"><span class="n"><span class="pre">terminal_error</span></span></a><span class="w"> </span><span class="n"><span class="pre">err</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">f</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DTE12set_error_cbENSt8functionIFv14terminal_errorEEE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> error callback. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>f</strong> Function to be called on <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> error </p>
</dd>
</dl>
@@ -686,10 +684,10 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem3DTE8set_modeE10modem_mode"></span><span id="_CPPv2N9esp_modem3DTE8set_modeE10modem_mode"></span><span id="esp_modem::DTE::set_mode__modem_mode"></span><span class="target" id="classesp__modem_1_1_d_t_e_1af832ec4696cd797148edbedd7e95fa5e"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_mode</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv410modem_mode" title="modem_mode"><span class="n"><span class="pre">modem_mode</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">m</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem3DTE8set_modeE10modem_mode" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> to desired mode (Command/Data/Cmux) </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>m</strong> Desired operation mode </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>true on success </p>
</dd>
</dl>
@@ -700,14 +698,14 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem3DTE7commandERKNSt6stringE11got_line_cb8uint32_t"></span><span id="_CPPv2N9esp_modem3DTE7commandERKNSt6stringE11got_line_cb8uint32_t"></span><span id="esp_modem::DTE::command__ssCR.got_line_cb.uint32_t"></span><span class="target" id="classesp__modem_1_1_d_t_e_1af492fa2a39d90ba394f6e29a675bfd58"></span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">command</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">command</span></span>, <a class="reference internal" href="#_CPPv411got_line_cb" title="got_line_cb"><span class="n"><span class="pre">got_line_cb</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">got_line</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">time_ms</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">override</span></span><a class="headerlink" href="#_CPPv4N9esp_modem3DTE7commandERKNSt6stringE11got_line_cb8uint32_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sends command and provides callback with responding line. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>command</strong> String parameter representing command </p></li>
<li><p><strong>got_line</strong> Function to be called after line available as a response </p></li>
<li><p><strong>time_ms</strong> Time in ms to wait for the answer </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL, TIMEOUT </p>
</dd>
</dl>
@@ -725,7 +723,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
</dd></dl>
<section id="terminal-interface">
<span id="term-impl"></span><h3>Terminal interface<a class="headerlink" href="#terminal-interface" title="Permalink to this heading"></a></h3>
<span id="term-impl"></span><h3>Terminal interface<a class="headerlink" href="#terminal-interface" title="Permalink to this headline"></a></h3>
<dl>
<dt class="sig sig-object cpp">
<span class="target" id="group___e_s_p___m_o_d_e_m___t_e_r_m_i_n_a_l"></span><em><span class="pre">group</span></em> <span class="sig-name descname"><span class="pre">ESP_MODEM_TERMINAL</span></span></dt>
@@ -762,7 +760,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
</div>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem8TerminalE">
<span id="_CPPv3N9esp_modem8TerminalE"></span><span id="_CPPv2N9esp_modem8TerminalE"></span><span id="esp_modem::Terminal"></span><span class="target" id="classesp__modem_1_1_terminal"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Terminal</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem8TerminalE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N9esp_modem8TerminalE"></span><span id="_CPPv2N9esp_modem8TerminalE"></span><span id="esp_modem::Terminal"></span><span class="target" id="classesp__modem_1_1_terminal"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">Terminal</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem8TerminalE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_terminal.hpp&gt;</em></div>
<p><a class="reference internal" href="#classesp__modem_1_1_terminal"><span class="std std-ref">Terminal</span></a> interface. All communication interfaces must comply to this interface in order to be used as a <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a>. </p>
@@ -774,13 +772,13 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem8Terminal5writeEP7uint8_t6size_t"></span><span id="_CPPv2N9esp_modem8Terminal5writeEP7uint8_t6size_t"></span><span id="esp_modem::Terminal::write__uint8_tP.s"></span><span class="target" id="classesp__modem_1_1_terminal_1aaa6b8fe3a2336b8369740e7ca4aeae00"></span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">write</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">data</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">len</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">0</span></span><a class="headerlink" href="#_CPPv4N9esp_modem8Terminal5writeEP7uint8_t6size_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Writes data to the terminal. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>data</strong> Data pointer </p></li>
<li><p><strong>len</strong> Data len </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>length of data written </p>
</dd>
</dl>
@@ -791,13 +789,13 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem8Terminal4readEP7uint8_t6size_t"></span><span id="_CPPv2N9esp_modem8Terminal4readEP7uint8_t6size_t"></span><span id="esp_modem::Terminal::read__uint8_tP.s"></span><span class="target" id="classesp__modem_1_1_terminal_1a66e832c319e7c8f523043a04d4972a31"></span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">read</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">data</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">len</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">0</span></span><a class="headerlink" href="#_CPPv4N9esp_modem8Terminal4readEP7uint8_t6size_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Read from the terminal. This function doesnt block, but return all available data. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>data</strong> Data pointer to store the read payload </p></li>
<li><p><strong>len</strong> Maximum data len to read </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>length of data actually read </p>
</dd>
</dl>
@@ -810,7 +808,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
</section>
<section id="cmux-implementation">
<span id="cmux-impl"></span><h3>CMUX implementation<a class="headerlink" href="#cmux-implementation" title="Permalink to this heading"></a></h3>
<span id="cmux-impl"></span><h3>CMUX implementation<a class="headerlink" href="#cmux-implementation" title="Permalink to this headline"></a></h3>
<dl>
<dt class="sig sig-object cpp">
<span class="target" id="group___e_s_p___m_o_d_e_m___c_m_u_x"></span><em><span class="pre">group</span></em> <span class="sig-name descname"><span class="pre">ESP_MODEM_CMUX</span></span></dt>
@@ -852,7 +850,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
</div>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem4CMuxE">
<span id="_CPPv3N9esp_modem4CMuxE"></span><span id="_CPPv2N9esp_modem4CMuxE"></span><span id="esp_modem::CMux"></span><span class="target" id="classesp__modem_1_1_c_mux"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">CMux</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem4CMuxE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N9esp_modem4CMuxE"></span><span id="_CPPv2N9esp_modem4CMuxE"></span><span id="esp_modem::CMux"></span><span class="target" id="classesp__modem_1_1_c_mux"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">CMux</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem4CMuxE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_cmux.hpp&gt;</em></div>
<p><a class="reference internal" href="#classesp__modem_1_1_c_mux"><span class="std std-ref">CMux</span></a> class which consumes the original terminal and creates multiple virtual terminals from it. This class itself is not usable as a <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> terminal, only via its instances defined in <code class="docutils literal notranslate"><a class="reference internal" href="#classesp__modem_1_1_c_mux_instance"><span class="std std-ref"><span class="pre">CMuxInstance</span></span></a></code> </p>
@@ -863,7 +861,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem4CMux4initEv"></span><span id="_CPPv2N9esp_modem4CMux4initEv"></span><span id="esp_modem::CMux::init"></span><span class="target" id="classesp__modem_1_1_c_mux_1ace5f9a7649c59f1e1f96cf2dfe15974b"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">init</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem4CMux4initEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Initializes <a class="reference internal" href="#classesp__modem_1_1_c_mux"><span class="std std-ref">CMux</span></a> protocol. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>true on success </p>
</dd>
</dl>
@@ -874,7 +872,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem4CMux6deinitEv"></span><span id="_CPPv2N9esp_modem4CMux6deinitEv"></span><span id="esp_modem::CMux::deinit"></span><span class="target" id="classesp__modem_1_1_c_mux_1a0554bbcad822a194050cb9001012f21c"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">deinit</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem4CMux6deinitEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Closes and deinits <a class="reference internal" href="#classesp__modem_1_1_c_mux"><span class="std std-ref">CMux</span></a> protocol. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>true on success </p>
</dd>
</dl>
@@ -885,7 +883,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem4CMux6detachEv"></span><span id="_CPPv2N9esp_modem4CMux6detachEv"></span><span id="esp_modem::CMux::detach"></span><span class="target" id="classesp__modem_1_1_c_mux_1a3ba702194bf013efe9dfe1dd63c3ee3f"></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">pair</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">shared_ptr</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N9esp_modem8TerminalE" title="esp_modem::Terminal"><span class="n"><span class="pre">Terminal</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">unique_buffer</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">detach</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem4CMux6detachEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Ejects the attached terminal and buffer, so they could be used as traditional command/data <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a>s. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>pair of the original terminal and buffer </p>
</dd>
</dl>
@@ -896,7 +894,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem4CMux11set_read_cbEiNSt8functionIFbP7uint8_t6size_tEEE"></span><span id="_CPPv2N9esp_modem4CMux11set_read_cbEiNSt8functionIFbP7uint8_t6size_tEEE"></span><span class="target" id="classesp__modem_1_1_c_mux_1aba3d6829a8c936013d71e81f24f80054"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_read_cb</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">inst</span></span>, <span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">function</span></span><span class="p"><span class="pre">&lt;</span></span><span class="kt"><span class="pre">bool</span></span><span class="p"><span class="pre">(</span></span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n"><span class="pre">len</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">f</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem4CMux11set_read_cbEiNSt8functionIFbP7uint8_t6size_tEEE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets read callback for the appropriate terminal. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>inst</strong> Index of the terminal </p></li>
<li><p><strong>f</strong> function pointer </p></li>
@@ -910,14 +908,14 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem4CMux5writeEiP7uint8_t6size_t"></span><span id="_CPPv2N9esp_modem4CMux5writeEiP7uint8_t6size_t"></span><span id="esp_modem::CMux::write__i.uint8_tP.s"></span><span class="target" id="classesp__modem_1_1_c_mux_1ac3362af09a829ae5001c8667da418f9d"></span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">write</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">i</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">data</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">len</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N9esp_modem4CMux5writeEiP7uint8_t6size_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Writes to the appropriate terminal. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>i</strong> Index of the terminal </p></li>
<li><p><strong>data</strong> Data to write </p></li>
<li><p><strong>len</strong> Data length to write </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The actual written length </p>
</dd>
</dl>
@@ -928,7 +926,7 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem12CMuxInstanceE">
<span id="_CPPv3N9esp_modem12CMuxInstanceE"></span><span id="_CPPv2N9esp_modem12CMuxInstanceE"></span><span id="esp_modem::CMuxInstance"></span><span class="target" id="classesp__modem_1_1_c_mux_instance"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">CMuxInstance</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N9esp_modem8TerminalE" title="esp_modem::Terminal"><span class="n"><span class="pre">Terminal</span></span></a><a class="headerlink" href="#_CPPv4N9esp_modem12CMuxInstanceE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N9esp_modem12CMuxInstanceE"></span><span id="_CPPv2N9esp_modem12CMuxInstanceE"></span><span id="esp_modem::CMuxInstance"></span><span class="target" id="classesp__modem_1_1_c_mux_instance"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">CMuxInstance</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N9esp_modem8TerminalE" title="esp_modem::Terminal"><span class="n"><span class="pre">Terminal</span></span></a><a class="headerlink" href="#_CPPv4N9esp_modem12CMuxInstanceE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_cmux.hpp&gt;</em></div>
<p>This represents a specific instance of a CMUX virtual terminal. This class also implements <a class="reference internal" href="#classesp__modem_1_1_terminal"><span class="std std-ref">Terminal</span></a> interface and as such could be used as a <a class="reference internal" href="#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a>s terminal. </p>
@@ -939,13 +937,13 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem12CMuxInstance5writeEP7uint8_t6size_t"></span><span id="_CPPv2N9esp_modem12CMuxInstance5writeEP7uint8_t6size_t"></span><span id="esp_modem::CMuxInstance::write__uint8_tP.s"></span><span class="target" id="classesp__modem_1_1_c_mux_instance_1a439640b744fbc33d6ae559c3b8dc2cf6"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">write</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">data</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">len</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">override</span></span><a class="headerlink" href="#_CPPv4N9esp_modem12CMuxInstance5writeEP7uint8_t6size_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Writes data to the terminal. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>data</strong> Data pointer </p></li>
<li><p><strong>len</strong> Data len </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>length of data written </p>
</dd>
</dl>
@@ -956,13 +954,13 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
<span id="_CPPv3N9esp_modem12CMuxInstance4readEP7uint8_t6size_t"></span><span id="_CPPv2N9esp_modem12CMuxInstance4readEP7uint8_t6size_t"></span><span id="esp_modem::CMuxInstance::read__uint8_tP.s"></span><span class="target" id="classesp__modem_1_1_c_mux_instance_1ae460145a1298c8afeee0583cdc765bb7"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">read</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">data</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">len</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">override</span></span><a class="headerlink" href="#_CPPv4N9esp_modem12CMuxInstance4readEP7uint8_t6size_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Read from the terminal. This function doesnt block, but return all available data. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>data</strong> Data pointer to store the read payload </p></li>
<li><p><strong>len</strong> Maximum data len to read </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>length of data actually read </p>
</dd>
</dl>
@@ -976,14 +974,14 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
</section>
</section>
<section id="netif">
<span id="netif-impl"></span><h2>Netif<a class="headerlink" href="#netif" title="Permalink to this heading"></a></h2>
<span id="netif-impl"></span><h2>Netif<a class="headerlink" href="#netif" title="Permalink to this headline"></a></h2>
<dl>
<dt class="sig sig-object cpp">
<span class="target" id="group___e_s_p___m_o_d_e_m___n_e_t_i_f"></span><em><span class="pre">group</span></em> <span class="sig-name descname"><span class="pre">ESP_MODEM_NETIF</span></span></dt>
<dd><p>Network interface layer of the esp-modem. </p>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem5NetifE">
<span id="_CPPv3N9esp_modem5NetifE"></span><span id="_CPPv2N9esp_modem5NetifE"></span><span id="esp_modem::Netif"></span><span class="target" id="classesp__modem_1_1_netif"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Netif</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem5NetifE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N9esp_modem5NetifE"></span><span id="_CPPv2N9esp_modem5NetifE"></span><span id="esp_modem::Netif"></span><span class="target" id="classesp__modem_1_1_netif"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">Netif</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem5NetifE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_netif.hpp&gt;</em></div>
<p>Network interface class responsible to glue the esp-netif to the modems <a class="reference internal" href="#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a>. </p>
@@ -1014,14 +1012,14 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
</section>
<section id="module-abstraction">
<span id="module-impl"></span><h2>Module abstraction<a class="headerlink" href="#module-abstraction" title="Permalink to this heading"></a></h2>
<span id="module-impl"></span><h2>Module abstraction<a class="headerlink" href="#module-abstraction" title="Permalink to this headline"></a></h2>
<dl>
<dt class="sig sig-object cpp">
<span class="target" id="group___e_s_p___m_o_d_e_m___m_o_d_u_l_e"></span><em><span class="pre">group</span></em> <span class="sig-name descname"><span class="pre">ESP_MODEM_MODULE</span></span></dt>
<dd><p>Definition of modules representing specific modem devices. </p>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem13GenericModuleE">
<span id="_CPPv3N9esp_modem13GenericModuleE"></span><span id="_CPPv2N9esp_modem13GenericModuleE"></span><span id="esp_modem::GenericModule"></span><span class="target" id="classesp__modem_1_1_generic_module"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GenericModule</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N9esp_modem8ModuleIfE" title="esp_modem::ModuleIf"><span class="n"><span class="pre">ModuleIf</span></span></a><a class="headerlink" href="#_CPPv4N9esp_modem13GenericModuleE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N9esp_modem13GenericModuleE"></span><span id="_CPPv2N9esp_modem13GenericModuleE"></span><span id="esp_modem::GenericModule"></span><span class="target" id="classesp__modem_1_1_generic_module"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">GenericModule</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N9esp_modem8ModuleIfE" title="esp_modem::ModuleIf"><span class="n"><span class="pre">ModuleIf</span></span></a><a class="headerlink" href="#_CPPv4N9esp_modem13GenericModuleE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_dce_module.hpp&gt;</em></div>
<p>This is a basic building block for custom modules as well as for the supported modules in the esp-modem component It derives from the <a class="reference internal" href="#classesp__modem_1_1_module_if"><span class="std std-ref">ModuleIf</span></a>. </p>
@@ -1104,13 +1102,13 @@ terminals. Besides the DTE documentation, this section also refers to the</p>
</dd></dl>
<section id="adding-new-devices">
<span id="module-addition"></span><h3>Adding new devices<a class="headerlink" href="#adding-new-devices" title="Permalink to this heading"></a></h3>
<span id="module-addition"></span><h3>Adding new devices<a class="headerlink" href="#adding-new-devices" title="Permalink to this headline"></a></h3>
<p>To support a new module, developers would have to implement a new class derived from <a class="reference internal" href="#_CPPv4N9esp_modem13GenericModuleE" title="esp_modem::GenericModule"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">esp_modem::GenericModule</span></code></a> the same way
as it is described in the <a class="reference internal" href="advanced_api.html#create-custom-module"><span class="std std-ref">Advanced user manual</span></a>. The only difference is that the new class (and factory extension)
would be available in the esp_modem code base.</p>
</section>
<section id="implement-a-new-generic-command">
<h3>Implement a new generic command<a class="headerlink" href="#implement-a-new-generic-command" title="Permalink to this heading"></a></h3>
<h3>Implement a new generic command<a class="headerlink" href="#implement-a-new-generic-command" title="Permalink to this headline"></a></h3>
<p>Adding a generic command, i.e. the command that is shared for all modules and is included in the <a class="reference internal" href="#_CPPv4N9esp_modem13GenericModuleE" title="esp_modem::GenericModule"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">esp_modem::GenericModule</span></code></a>,
has to be declared first in the <code class="docutils literal notranslate"><span class="pre">include/generate/esp_modem_command_declare.inc</span></code> file, which is the single source
of supported command definitions, that is used in:</p>
@@ -1130,7 +1128,7 @@ of supported command definitions, that is used in:</p>
human readable argument name is <code class="docutils literal notranslate"><span class="pre">baud</span></code>, its the first argument, so expands to <code class="docutils literal notranslate"><span class="pre">p1</span></code> (second argument would be <code class="docutils literal notranslate"><span class="pre">p2</span></code>, etc)</p>
</section>
<section id="command-library">
<h3>Command library<a class="headerlink" href="#command-library" title="Permalink to this heading"></a></h3>
<h3>Command library<a class="headerlink" href="#command-library" title="Permalink to this headline"></a></h3>
<p>This is a namespace holding a library of typical AT commands used by supported devices.
Please refer to the <a class="reference internal" href="api_docs.html#c-api"><span class="std std-ref">C API Documentation</span></a> for the list of supported commands.</p>
<dl>
@@ -1190,7 +1188,7 @@ Please refer to the <a class="reference internal" href="api_docs.html#c-api"><sp
</section>
</section>
<section id="modem-types">
<h2>Modem types<a class="headerlink" href="#modem-types" title="Permalink to this heading"></a></h2>
<h2>Modem types<a class="headerlink" href="#modem-types" title="Permalink to this headline"></a></h2>
<dl>
<dt class="sig sig-object cpp">
<span class="target" id="group___e_s_p___m_o_d_e_m___t_y_p_e_s"></span><em><span class="pre">group</span></em> <span class="sig-name descname"><span class="pre">ESP_MODEM_TYPES</span></span></dt>
@@ -1271,7 +1269,7 @@ Please refer to the <a class="reference internal" href="api_docs.html#c-api"><sp
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem13CommandableIfE">
<span id="_CPPv3N9esp_modem13CommandableIfE"></span><span id="_CPPv2N9esp_modem13CommandableIfE"></span><span id="esp_modem::CommandableIf"></span><span class="target" id="classesp__modem_1_1_commandable_if"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">CommandableIf</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem13CommandableIfE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N9esp_modem13CommandableIfE"></span><span id="_CPPv2N9esp_modem13CommandableIfE"></span><span id="esp_modem::CommandableIf"></span><span class="target" id="classesp__modem_1_1_commandable_if"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">CommandableIf</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem13CommandableIfE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_types.hpp&gt;</em></div>
<p>Interface for classes eligible to send AT commands (Modules, DCEs, DTEs) </p>
@@ -1283,14 +1281,14 @@ Please refer to the <a class="reference internal" href="api_docs.html#c-api"><sp
<span id="_CPPv3N9esp_modem13CommandableIf7commandERKNSt6stringE11got_line_cb8uint32_tKc"></span><span id="_CPPv2N9esp_modem13CommandableIf7commandERKNSt6stringE11got_line_cb8uint32_tKc"></span><span id="esp_modem::CommandableIf::command__ssCR.got_line_cb.uint32_t.cC"></span><span class="target" id="classesp__modem_1_1_commandable_if_1a9af6c6ad4597fb234cfe11e9b6635c0b"></span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv414command_result" title="command_result"><span class="n"><span class="pre">command_result</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">command</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">command</span></span>, <a class="reference internal" href="#_CPPv411got_line_cb" title="got_line_cb"><span class="n"><span class="pre">got_line_cb</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">got_line</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">time_ms</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">separator</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">0</span></span><a class="headerlink" href="#_CPPv4N9esp_modem13CommandableIf7commandERKNSt6stringE11got_line_cb8uint32_tKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sends custom AT command. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>command</strong> Command to be sent </p></li>
<li><p><strong>got_line</strong> callback if a line received </p></li>
<li><p><strong>time_ms</strong> timeout in milliseconds </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>OK, FAIL or TIMEOUT </p>
</dd>
</dl>
@@ -1301,7 +1299,7 @@ Please refer to the <a class="reference internal" href="api_docs.html#c-api"><sp
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem8ModuleIfE">
<span id="_CPPv3N9esp_modem8ModuleIfE"></span><span id="_CPPv2N9esp_modem8ModuleIfE"></span><span id="esp_modem::ModuleIf"></span><span class="target" id="classesp__modem_1_1_module_if"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ModuleIf</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem8ModuleIfE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N9esp_modem8ModuleIfE"></span><span id="_CPPv2N9esp_modem8ModuleIfE"></span><span id="esp_modem::ModuleIf"></span><span class="target" id="classesp__modem_1_1_module_if"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">ModuleIf</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem8ModuleIfE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_types.hpp&gt;</em></div>
<p>Interface for classes implementing a module for the modem. </p>
@@ -1313,7 +1311,7 @@ Please refer to the <a class="reference internal" href="api_docs.html#c-api"><sp
<span id="_CPPv3N9esp_modem8ModuleIf15setup_data_modeEv"></span><span id="_CPPv2N9esp_modem8ModuleIf15setup_data_modeEv"></span><span id="esp_modem::ModuleIf::setup_data_mode"></span><span class="target" id="classesp__modem_1_1_module_if_1adc06f1aec13bcc3674bed47eadf1f3b3"></span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setup_data_mode</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">0</span></span><a class="headerlink" href="#_CPPv4N9esp_modem8ModuleIf15setup_data_modeEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the data mode up (provides the necessary configuration to connect to the cellular network) </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>true on success </p>
</dd>
</dl>
@@ -1324,10 +1322,10 @@ Please refer to the <a class="reference internal" href="api_docs.html#c-api"><sp
<span id="_CPPv3N9esp_modem8ModuleIf8set_modeE10modem_mode"></span><span id="_CPPv2N9esp_modem8ModuleIf8set_modeE10modem_mode"></span><span id="esp_modem::ModuleIf::set_mode__modem_mode"></span><span class="target" id="classesp__modem_1_1_module_if_1ab6bb69e6d18bb16101c20857394a8eab"></span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">set_mode</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv410modem_mode" title="modem_mode"><span class="n"><span class="pre">modem_mode</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">mode</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">0</span></span><a class="headerlink" href="#_CPPv4N9esp_modem8ModuleIf8set_modeE10modem_mode" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the operation mode. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> Desired mode </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>true on success </p>
</dd>
</dl>
@@ -1399,7 +1397,7 @@ Please refer to the <a class="reference internal" href="api_docs.html#c-api"><sp
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<script>$('#searchbox').show(0);</script>
@@ -1416,7 +1414,7 @@ Please refer to the <a class="reference internal" href="api_docs.html#c-api"><sp
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@@ -12,9 +12,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
@@ -117,7 +115,7 @@
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 4fec2b6164c6154f059e28882b4eaad7
config: c16d9f87e40ac76b27d25955482f9fa9
tags: 549b3d6d0415232fb7e35403b330ff49

View File

@@ -1,134 +0,0 @@
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

View File

@@ -222,7 +222,7 @@ table.modindextable td {
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
min-width: 450px;
max-width: 800px;
}
@@ -237,6 +237,16 @@ a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
@@ -324,15 +334,13 @@ aside.sidebar {
p.sidebar-title {
font-weight: bold;
}
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
@@ -371,8 +379,6 @@ div.body p.centered {
div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
@@ -380,8 +386,6 @@ div.admonition > :last-child {
div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
@@ -424,6 +428,10 @@ table.docutils td, table.docutils th {
border-bottom: 1px solid #aaa;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
@@ -606,26 +614,20 @@ ol.simple p,
ul.simple p {
margin-bottom: 0;
}
aside.footnote > span,
div.citation > span {
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
@@ -642,6 +644,10 @@ dl.field-list > dt {
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;

View File

@@ -2,155 +2,357 @@
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation.
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
this.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE: "unknown",
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined')
return string;
return (typeof translated === 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) === 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
var url = new URL(window.location);
url.searchParams.delete('highlight');
window.history.replaceState({}, '', url);
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
focusSearchBar : function() {
$('input[name=q]').first().focus();
},
/**
* Initialise the domain index toggle buttons
* make the url absolute
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
initOnKeyListeners: () => {
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return;
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
$(document).keydown(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box, textarea, dropdown or button
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
&& activeElementType !== 'BUTTON') {
if (event.altKey || event.ctrlKey || event.metaKey)
return;
if (!event.shiftKey) {
if (!event.shiftKey) {
switch (event.key) {
case 'ArrowLeft':
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
break;
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
break;
case 'ArrowRight':
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
break;
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
break;
case 'Escape':
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
break;
Documentation.hideSearchWords();
return false;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
case '/':
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
break;
Documentation.focusSearchBar();
return false;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
}
};
// quick alias for translations
const _ = Documentation.gettext;
_ = Documentation.gettext;
_ready(Documentation.init);
$(document).ready(function() {
Documentation.init();
});

View File

@@ -1,15 +1,15 @@
/*!
* jQuery JavaScript Library v3.6.0
* jQuery JavaScript Library v3.5.1
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright OpenJS Foundation and other contributors
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2021-03-02T17:08Z
* Date: 2020-05-04T22:49Z
*/
( function( global, factory ) {
@@ -76,16 +76,12 @@ var support = {};
var isFunction = function isFunction( obj ) {
// Support: Chrome <=57, Firefox <=52
// In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function.
// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
// Plus for old WebKit, typeof returns "function" for HTML collections
// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
return typeof obj === "function" && typeof obj.nodeType !== "number" &&
typeof obj.item !== "function";
};
// Support: Chrome <=57, Firefox <=52
// In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function.
return typeof obj === "function" && typeof obj.nodeType !== "number";
};
var isWindow = function isWindow( obj ) {
@@ -151,7 +147,7 @@ function toType( obj ) {
var
version = "3.6.0",
version = "3.5.1",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
@@ -405,7 +401,7 @@ jQuery.extend( {
if ( isArrayLike( Object( arr ) ) ) {
jQuery.merge( ret,
typeof arr === "string" ?
[ arr ] : arr
[ arr ] : arr
);
} else {
push.call( ret, arr );
@@ -500,9 +496,9 @@ if ( typeof Symbol === "function" ) {
// Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
function( _i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
function( _i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
function isArrayLike( obj ) {
@@ -522,14 +518,14 @@ function isArrayLike( obj ) {
}
var Sizzle =
/*!
* Sizzle CSS Selector Engine v2.3.6
* Sizzle CSS Selector Engine v2.3.5
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2021-02-16
* Date: 2020-03-14
*/
( function( window ) {
var i,
@@ -1112,8 +1108,8 @@ support = Sizzle.support = {};
* @returns {Boolean} True iff elem is a non-HTML XML node
*/
isXML = Sizzle.isXML = function( elem ) {
var namespace = elem && elem.namespaceURI,
docElem = elem && ( elem.ownerDocument || elem ).documentElement;
var namespace = elem.namespaceURI,
docElem = ( elem.ownerDocument || elem ).documentElement;
// Support: IE <=8
// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
@@ -3028,9 +3024,9 @@ var rneedsContext = jQuery.expr.match.needsContext;
function nodeName( elem, name ) {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
}
};
var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
@@ -4001,8 +3997,8 @@ jQuery.extend( {
resolveContexts = Array( i ),
resolveValues = slice.call( arguments ),
// the primary Deferred
primary = jQuery.Deferred(),
// the master Deferred
master = jQuery.Deferred(),
// subordinate callback factory
updateFunc = function( i ) {
@@ -4010,30 +4006,30 @@ jQuery.extend( {
resolveContexts[ i ] = this;
resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
if ( !( --remaining ) ) {
primary.resolveWith( resolveContexts, resolveValues );
master.resolveWith( resolveContexts, resolveValues );
}
};
};
// Single- and empty arguments are adopted like Promise.resolve
if ( remaining <= 1 ) {
adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
!remaining );
// Use .then() to unwrap secondary thenables (cf. gh-3000)
if ( primary.state() === "pending" ||
if ( master.state() === "pending" ||
isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
return primary.then();
return master.then();
}
}
// Multiple arguments are aggregated like Promise.all array elements
while ( i-- ) {
adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
}
return primary.promise();
return master.promise();
}
} );
@@ -4184,8 +4180,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
for ( ; i < len; i++ ) {
fn(
elems[ i ], key, raw ?
value :
value.call( elems[ i ], i, fn( elems[ i ], key ) )
value :
value.call( elems[ i ], i, fn( elems[ i ], key ) )
);
}
}
@@ -5093,7 +5089,10 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
}
var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
var
rkeyEvent = /^key/,
rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
function returnTrue() {
return true;
@@ -5388,8 +5387,8 @@ jQuery.event = {
event = jQuery.event.fix( nativeEvent ),
handlers = (
dataPriv.get( this, "events" ) || Object.create( null )
)[ event.type ] || [],
dataPriv.get( this, "events" ) || Object.create( null )
)[ event.type ] || [],
special = jQuery.event.special[ event.type ] || {};
// Use the fix-ed jQuery.Event rather than the (read-only) native event
@@ -5513,12 +5512,12 @@ jQuery.event = {
get: isFunction( hook ) ?
function() {
if ( this.originalEvent ) {
return hook( this.originalEvent );
return hook( this.originalEvent );
}
} :
function() {
if ( this.originalEvent ) {
return this.originalEvent[ name ];
return this.originalEvent[ name ];
}
},
@@ -5657,13 +5656,7 @@ function leverageNative( el, type, expectSync ) {
// Cancel the outer synthetic event
event.stopImmediatePropagation();
event.preventDefault();
// Support: Chrome 86+
// In Chrome, if an element having a focusout handler is blurred by
// clicking outside of it, it invokes the handler synchronously. If
// that handler calls `.remove()` on the element, the data is cleared,
// leaving `result` undefined. We need to guard against this.
return result && result.value;
return result.value;
}
// If this is an inner synthetic event for an event with a bubbling surrogate
@@ -5828,7 +5821,34 @@ jQuery.each( {
targetTouches: true,
toElement: true,
touches: true,
which: true
which: function( event ) {
var button = event.button;
// Add which for key events
if ( event.which == null && rkeyEvent.test( event.type ) ) {
return event.charCode != null ? event.charCode : event.keyCode;
}
// Add which for click: 1 === left; 2 === middle; 3 === right
if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
if ( button & 1 ) {
return 1;
}
if ( button & 2 ) {
return 3;
}
if ( button & 4 ) {
return 2;
}
return 0;
}
return event.which;
}
}, jQuery.event.addProp );
jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
@@ -5854,12 +5874,6 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
return true;
},
// Suppress native focus or blur as it's already being fired
// in leverageNative.
_default: function() {
return true;
},
delegateType: delegateType
};
} );
@@ -6527,10 +6541,6 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
// set in CSS while `offset*` properties report correct values.
// Behavior in IE 9 is more subtle than in newer versions & it passes
// some versions of this test; make sure not to make it pass there!
//
// Support: Firefox 70+
// Only Firefox includes border widths
// in computed dimensions. (gh-4529)
reliableTrDimensions: function() {
var table, tr, trChild, trStyle;
if ( reliableTrDimensionsVal == null ) {
@@ -6538,32 +6548,17 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
tr = document.createElement( "tr" );
trChild = document.createElement( "div" );
table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
tr.style.cssText = "border:1px solid";
// Support: Chrome 86+
// Height set through cssText does not get applied.
// Computed height then comes back as 0.
table.style.cssText = "position:absolute;left:-11111px";
tr.style.height = "1px";
trChild.style.height = "9px";
// Support: Android 8 Chrome 86+
// In our bodyBackground.html iframe,
// display for all div elements is set to "inline",
// which causes a problem only in Android 8 Chrome 86.
// Ensuring the div is display: block
// gets around this issue.
trChild.style.display = "block";
documentElement
.appendChild( table )
.appendChild( tr )
.appendChild( trChild );
trStyle = window.getComputedStyle( tr );
reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
parseInt( trStyle.borderTopWidth, 10 ) +
parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
documentElement.removeChild( table );
}
@@ -7027,10 +7022,10 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) {
// Running getBoundingClientRect on a disconnected node
// in IE throws an error.
( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
swap( elem, cssShow, function() {
return getWidthOrHeight( elem, dimension, extra );
} ) :
getWidthOrHeight( elem, dimension, extra );
swap( elem, cssShow, function() {
return getWidthOrHeight( elem, dimension, extra );
} ) :
getWidthOrHeight( elem, dimension, extra );
}
},
@@ -7089,7 +7084,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
swap( elem, { marginLeft: 0 }, function() {
return elem.getBoundingClientRect().left;
} )
) + "px";
) + "px";
}
}
);
@@ -7228,7 +7223,7 @@ Tween.propHooks = {
if ( jQuery.fx.step[ tween.prop ] ) {
jQuery.fx.step[ tween.prop ]( tween );
} else if ( tween.elem.nodeType === 1 && (
jQuery.cssHooks[ tween.prop ] ||
jQuery.cssHooks[ tween.prop ] ||
tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
} else {
@@ -7473,7 +7468,7 @@ function defaultPrefilter( elem, props, opts ) {
anim.done( function() {
/* eslint-enable no-loop-func */
/* eslint-enable no-loop-func */
// The final step of a "hide" animation is actually hiding the element
if ( !hidden ) {
@@ -7593,7 +7588,7 @@ function Animation( elem, properties, options ) {
tweens: [],
createTween: function( prop, end ) {
var tween = jQuery.Tween( elem, animation.opts, prop, end,
animation.opts.specialEasing[ prop ] || animation.opts.easing );
animation.opts.specialEasing[ prop ] || animation.opts.easing );
animation.tweens.push( tween );
return tween;
},
@@ -7766,8 +7761,7 @@ jQuery.fn.extend( {
anim.stop( true );
}
};
doAnimation.finish = doAnimation;
doAnimation.finish = doAnimation;
return empty || optall.queue === false ?
this.each( doAnimation ) :
@@ -8407,8 +8401,8 @@ jQuery.fn.extend( {
if ( this.setAttribute ) {
this.setAttribute( "class",
className || value === false ?
"" :
dataPriv.get( this, "__className__" ) || ""
"" :
dataPriv.get( this, "__className__" ) || ""
);
}
}
@@ -8423,7 +8417,7 @@ jQuery.fn.extend( {
while ( ( elem = this[ i++ ] ) ) {
if ( elem.nodeType === 1 &&
( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
return true;
return true;
}
}
@@ -8713,7 +8707,9 @@ jQuery.extend( jQuery.event, {
special.bindType || type;
// jQuery handler
handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
handle = (
dataPriv.get( cur, "events" ) || Object.create( null )
)[ event.type ] &&
dataPriv.get( cur, "handle" );
if ( handle ) {
handle.apply( cur, data );
@@ -8860,7 +8856,7 @@ var rquery = ( /\?/ );
// Cross-browser xml parsing
jQuery.parseXML = function( data ) {
var xml, parserErrorElem;
var xml;
if ( !data || typeof data !== "string" ) {
return null;
}
@@ -8869,17 +8865,12 @@ jQuery.parseXML = function( data ) {
// IE throws on parseFromString with invalid input.
try {
xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
} catch ( e ) {}
} catch ( e ) {
xml = undefined;
}
parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
if ( !xml || parserErrorElem ) {
jQuery.error( "Invalid XML: " + (
parserErrorElem ?
jQuery.map( parserErrorElem.childNodes, function( el ) {
return el.textContent;
} ).join( "\n" ) :
data
) );
if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
jQuery.error( "Invalid XML: " + data );
}
return xml;
};
@@ -8980,14 +8971,16 @@ jQuery.fn.extend( {
// Can add propHook for "elements" to filter or add form elements
var elements = jQuery.prop( this, "elements" );
return elements ? jQuery.makeArray( elements ) : this;
} ).filter( function() {
} )
.filter( function() {
var type = this.type;
// Use .is( ":disabled" ) so that fieldset[disabled] works
return this.name && !jQuery( this ).is( ":disabled" ) &&
rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
( this.checked || !rcheckableType.test( type ) );
} ).map( function( _i, elem ) {
} )
.map( function( _i, elem ) {
var val = jQuery( this ).val();
if ( val == null ) {
@@ -9040,8 +9033,7 @@ var
// Anchor tag for parsing the document origin
originAnchor = document.createElement( "a" );
originAnchor.href = location.href;
originAnchor.href = location.href;
// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
function addToPrefiltersOrTransports( structure ) {
@@ -9422,8 +9414,8 @@ jQuery.extend( {
// Context for global events is callbackContext if it is a DOM node or jQuery collection
globalEventContext = s.context &&
( callbackContext.nodeType || callbackContext.jquery ) ?
jQuery( callbackContext ) :
jQuery.event,
jQuery( callbackContext ) :
jQuery.event,
// Deferreds
deferred = jQuery.Deferred(),
@@ -9735,10 +9727,8 @@ jQuery.extend( {
response = ajaxHandleResponses( s, jqXHR, responses );
}
// Use a noop converter for missing script but not if jsonp
if ( !isSuccess &&
jQuery.inArray( "script", s.dataTypes ) > -1 &&
jQuery.inArray( "json", s.dataTypes ) < 0 ) {
// Use a noop converter for missing script
if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
s.converters[ "text script" ] = function() {};
}
@@ -10476,6 +10466,12 @@ jQuery.offset = {
options.using.call( elem, props );
} else {
if ( typeof props.top === "number" ) {
props.top += "px";
}
if ( typeof props.left === "number" ) {
props.left += "px";
}
curElem.css( props );
}
}
@@ -10644,11 +10640,8 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) {
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
jQuery.each( {
padding: "inner" + name,
content: type,
"": "outer" + name
}, function( defaultExtra, funcName ) {
jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
function( defaultExtra, funcName ) {
// Margin is only for outerHeight, outerWidth
jQuery.fn[ funcName ] = function( margin, value ) {
@@ -10733,8 +10726,7 @@ jQuery.fn.extend( {
}
} );
jQuery.each(
( "blur focus focusin focusout resize scroll click dblclick " +
jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup contextmenu" ).split( " " ),
function( _i, name ) {
@@ -10745,8 +10737,7 @@ jQuery.each(
this.on( name, null, data, fn ) :
this.trigger( name );
};
}
);
} );

File diff suppressed because one or more lines are too long

View File

@@ -10,7 +10,7 @@
*
*/
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
/* Non-minified version is copied as a separate JS file, is available */
@@ -197,3 +197,101 @@ var Stemmer = function() {
}
}
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}

View File

@@ -8,20 +8,18 @@
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
/**
* Simple result scoring code.
*/
if (typeof Scorer === "undefined") {
if (!Scorer) {
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [docname, title, anchor, descr, score, filename]
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: result => {
const [docname, title, anchor, descr, score, filename] = result
return score
score: function(result) {
return result[4];
},
*/
@@ -30,11 +28,9 @@ if (typeof Scorer === "undefined") {
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
@@ -43,495 +39,452 @@ if (typeof Scorer === "undefined") {
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
partialTerm: 2
};
}
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr, score, _filename] = item;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
if (!splitQuery) {
function splitQuery(query) {
return query.split(/\s+/);
}
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms)
);
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
}
/**
* Search Module
*/
const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
var Search = {
htmlToText: (htmlString) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
);
return "";
_index : null,
_queued_query : null,
_pulse_status : -1,
htmlToText : function(htmlString) {
var virtualDocument = document.implementation.createHTMLDocument('virtual');
var htmlElement = $(htmlString, virtualDocument);
htmlElement.find('.headerlink').remove();
docContent = htmlElement.find('[role=main]')[0];
if(docContent === undefined) {
console.warn("Content block not found. Sphinx search tries to obtain it " +
"via '[role=main]'. Could you check your theme or template.");
return "";
}
return docContent.textContent || docContent.innerText;
},
init: () => {
const query = new URLSearchParams(window.location.search).get("q");
document
.querySelectorAll('input[name="q"]')
.forEach((el) => (el.value = query));
if (query) Search.performSearch(query);
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex: () => Search._index !== null,
hasIndex : function() {
return this._index !== null;
},
deferQuery: (query) => (Search._queued_query = query),
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse: () => (Search._pulse_status = -1),
stopPulse : function() {
this._pulse_status = 0;
},
startPulse: () => {
if (Search._pulse_status >= 0) return;
const pulse = () => {
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
Search.dots.innerText = ".".repeat(Search._pulse_status);
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
};
var dotString = '';
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch: (query) => {
performSearch : function(query) {
// create the required interface elements
const searchText = document.createElement("h2");
searchText.textContent = _("Searching");
const searchSummary = document.createElement("p");
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
const out = document.getElementById("search-results");
Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (Search.hasIndex()) Search.query(query);
else Search.deferQuery(query);
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
query : function(query) {
var i;
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// maybe skip this "word"
// stopwords array is from language_data.js
if (
stopwords.indexOf(queryTermLower) !== -1 ||
queryTerm.match(/^\d+$/)
)
return;
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
var objectterms = [];
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
let word = stemmer.stemWord(queryTermLower);
var word = stemmer.stemWord(tmp[i].toLowerCase());
var toAppend;
// select the correct list
if (word[0] === "-") excludedTerms.add(word.substr(1));
if (word[0] == '-') {
toAppend = excluded;
word = word.substr(1);
}
else {
searchTerms.add(word);
highlightTerms.add(queryTermLower);
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
// only add if not already in the list
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// array of [docname, title, anchor, descr, score, filename]
let results = [];
_removeChildren(document.getElementById("search-progress"));
// prepare search
var terms = this._index.terms;
var titleterms = this._index.titleterms;
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
);
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
return leftScore > rightScore ? 1 : -1;
});
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
//console.info('search results:', Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms);
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li></li>');
var requestUrl = "";
var linkUrl = "";
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) {
$.ajax({url: requestUrl,
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
var summary = Search.makeSearchSummary(data, searchterms, hlterms);
if (summary) {
listItem.append(summary);
}
}
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}});
} else {
// just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch: (object, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const objects = Search._index.objects;
const objNames = Search._index.objnames;
const titles = Search._index.titles;
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var docnames = this._index.docnames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
const results = [];
var i;
var results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
for (var prefix in objects) {
for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
var match = objects[prefix][iMatch];
var name = match[4];
var fullname = (prefix ? prefix + '.' : '') + name;
var fullnameLower = fullname.toLowerCase()
if (fullnameLower.indexOf(object) > -1) {
var score = 0;
var parts = fullnameLower.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
let score = 0;
const parts = fullnameLower.split(".");
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch;
else if (parts.slice(-1)[0].indexOf(object) > -1)
score += Scorer.objPartialMatch; // matches in last name
const objName = objNames[match[1]][2];
const title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results;
},
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
*/
escapeRegExp : function(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
/**
* search for full-text terms in the index
*/
performTermsSearch: (searchTerms, excludedTerms) => {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var docnames = this._index.docnames;
var filenames = this._index.filenames;
var titles = this._index.titles;
const scoreMap = new Map();
const fileMap = new Map();
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word])
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word])
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
});
var word_regex = this.escapeRegExp(word);
for (var w in terms) {
if (w.match(word_regex) && !terms[word]) {
_o.push({files: terms[w], score: Scorer.partialTerm})
}
}
for (var w in titleterms) {
if (w.match(word_regex) && !titleterms[word]) {
_o.push({files: titleterms[w], score: Scorer.partialTitle})
}
}
}
// no match but word was a required one
if (arr.every((record) => record.files === undefined)) return;
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
arr.forEach((record) => {
if (record.files === undefined) return;
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
let recordFiles = record.files;
if (recordFiles.length === undefined) recordFiles = [recordFiles];
files.push(...recordFiles);
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
});
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {};
scoreMap[file][word] = o.score;
}
});
// create the mapping
files.forEach((file) => {
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
fileMap.get(file).push(word);
else fileMap.set(file, [word]);
});
});
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap && fileMap[file].indexOf(word) === -1)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
const results = [];
for (const [file, wordList] of fileMap) {
// check if all requirements are matched
for (file in fileMap) {
var valid = true;
// as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
// check if all requirements are matched
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
searchterms.filter(function(term){return term.length > 2}).length
if (
wordList.length !== searchTerms.size &&
wordList.length !== filteredTermCount
)
continue;
fileMap[file].length != searchterms.length &&
fileMap[file].length != filteredTermCount
) continue;
// ensure that none of the excluded terms is in the search result
if (
[...excludedTerms].some(
(term) =>
terms[term] === file ||
titleTerms[term] === file ||
(terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break;
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
]);
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
}
}
return results;
},
@@ -539,28 +492,34 @@ const Search = {
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words.
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary: (htmlText, keywords) => {
const text = Search.htmlToText(htmlText);
if (text === "") return null;
const textLower = text.toLowerCase();
const actualStartPosition = [...keywords]
.map((k) => textLower.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("p");
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
return summary;
},
makeSearchSummary : function(htmlText, keywords, hlwords) {
var text = Search.htmlToText(htmlText);
if (text == "") {
return null;
}
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<p class="context"></p>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
};
_ready(Search.init);
$(document).ready(function() {
Search.init();
});

View File

@@ -1,144 +0,0 @@
/* Highlighting utilities for Sphinx HTML documentation. */
"use strict";
const SPHINX_HIGHLIGHT_ENABLED = true
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const SphinxHighlight = {
/**
* highlight the search words provided in localstorage in the text
*/
highlightSearchWords: () => {
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
// get and clear terms from localstorage
const url = new URL(window.location);
const highlight =
localStorage.getItem("sphinx_highlight_terms")
|| url.searchParams.get("highlight")
|| "";
localStorage.removeItem("sphinx_highlight_terms")
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
// get individual terms from highlight string
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
localStorage.removeItem("sphinx_highlight_terms")
},
initEscapeListener: () => {
// only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
SphinxHighlight.hideSearchWords();
event.preventDefault();
}
});
},
};
_ready(SphinxHighlight.highlightSearchWords);
_ready(SphinxHighlight.initEscapeListener);

View File

@@ -15,9 +15,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/js/theme.js"></script>
@@ -91,7 +89,7 @@
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Index</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/espressif/esp-docs/blob/3f0262d/docs/en/genindex" class="fa fa-github"> Edit on GitHub</a>
<a href="https://github.com/espressif/esp-docs/blob/42565ff/docs/en/genindex" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>

View File

@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ESP WebSocket Client - ESP32 - &mdash; ESP-Protocols latest documentation</title>
@@ -16,9 +16,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/js/theme.js"></script>
@@ -119,7 +117,7 @@
<li><a href="#" class="icon icon-home"></a> &raquo;</li>
<li>ESP WebSocket Client</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/espressif/esp-docs/blob/3f0262d/docs/en/index.rst" class="fa fa-github"> Edit on GitHub</a>
<a href="https://github.com/espressif/esp-docs/blob/42565ff/docs/en/index.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
@@ -128,13 +126,13 @@
<div itemprop="articleBody">
<section id="esp-websocket-client">
<h1>ESP WebSocket Client<a class="headerlink" href="#esp-websocket-client" title="Permalink to this heading"></a></h1>
<h1>ESP WebSocket Client<a class="headerlink" href="#esp-websocket-client" title="Permalink to this headline"></a></h1>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
<p>The ESP WebSocket client is an implementation of <a class="reference external" href="https://tools.ietf.org/html/rfc6455">WebSocket protocol client</a> for ESP32</p>
</section>
<section id="features">
<h2>Features<a class="headerlink" href="#features" title="Permalink to this heading"></a></h2>
<h2>Features<a class="headerlink" href="#features" title="Permalink to this headline"></a></h2>
<blockquote>
<div><ul class="simple">
<li><p>Supports WebSocket over TCP, TLS with mbedtls</p></li>
@@ -144,9 +142,9 @@
</div></blockquote>
</section>
<section id="configuration">
<h2>Configuration<a class="headerlink" href="#configuration" title="Permalink to this heading"></a></h2>
<h2>Configuration<a class="headerlink" href="#configuration" title="Permalink to this headline"></a></h2>
<section id="uri">
<h3>URI<a class="headerlink" href="#uri" title="Permalink to this heading"></a></h3>
<h3>URI<a class="headerlink" href="#uri" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Supports <code class="docutils literal notranslate"><span class="pre">ws</span></code>, <code class="docutils literal notranslate"><span class="pre">wss</span></code> schemes</p></li>
<li><p>WebSocket samples:</p>
@@ -180,7 +178,7 @@ overridden. Sample:</p>
</div>
</section>
<section id="tls">
<h3>TLS<a class="headerlink" href="#tls" title="Permalink to this heading"></a></h3>
<h3>TLS<a class="headerlink" href="#tls" title="Permalink to this headline"></a></h3>
<p>Configuration:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">const</span><span class="w"> </span><span class="n">esp_websocket_client_config_t</span><span class="w"> </span><span class="n">ws_cfg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="p">.</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;wss://echo.websocket.org&quot;</span><span class="p">,</span><span class="w"></span>
@@ -200,7 +198,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<p>This command will extract the second certificate in the chain and save it as a pem-file.</p>
</section>
<section id="subprotocol">
<h3>Subprotocol<a class="headerlink" href="#subprotocol" title="Permalink to this heading"></a></h3>
<h3>Subprotocol<a class="headerlink" href="#subprotocol" title="Permalink to this headline"></a></h3>
<p>The subprotocol field in the config struct can be used to request a subprotocol</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">const</span><span class="w"> </span><span class="n">esp_websocket_client_config_t</span><span class="w"> </span><span class="n">ws_cfg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="p">.</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;ws://websocket.org&quot;</span><span class="p">,</span><span class="w"></span>
@@ -216,7 +214,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
</section>
</section>
<section id="events">
<h2>Events<a class="headerlink" href="#events" title="Permalink to this heading"></a></h2>
<h2>Events<a class="headerlink" href="#events" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p><cite>WEBSOCKET_EVENT_CONNECTED</cite>: The client has successfully established a connection to the server. The client is now ready to send and receive data. Contains no event data.</p></li>
<li><p><cite>WEBSOCKET_EVENT_DISCONNECTED</cite>: The client has aborted the connection due to the transport layer failing to read data, e.g. because the server is unavailable. Contains no event data.</p></li>
@@ -229,16 +227,16 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
</div>
</section>
<section id="limitations-and-known-issues">
<h2>Limitations and Known Issues<a class="headerlink" href="#limitations-and-known-issues" title="Permalink to this heading"></a></h2>
<h2>Limitations and Known Issues<a class="headerlink" href="#limitations-and-known-issues" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>The client is able to request the use of a subprotocol from the server during the handshake, but does not do any subprotocol related checks on the response from the server.</p></li>
</ul>
</section>
<section id="application-example">
<h2>Application Example<a class="headerlink" href="#application-example" title="Permalink to this heading"></a></h2>
<p>A simple WebSocket example that uses esp_websocket_client to establish a websocket connection and send/receive data with the <a class="reference external" href="https://websocket.org">websocket.org</a> server can be found here: <a class="reference external" href="https://github.com/espressif/esp-protocols/tree/3f0262d/examples/../examples">example </a>.</p>
<h2>Application Example<a class="headerlink" href="#application-example" title="Permalink to this headline"></a></h2>
<p>A simple WebSocket example that uses esp_websocket_client to establish a websocket connection and send/receive data with the <a class="reference external" href="https://websocket.org">websocket.org</a> server can be found here: <a class="reference external" href="https://github.com/espressif/esp-protocols/tree/42565ff/examples/../examples">example </a>.</p>
<section id="sending-text-data">
<h3>Sending Text Data<a class="headerlink" href="#sending-text-data" title="Permalink to this heading"></a></h3>
<h3>Sending Text Data<a class="headerlink" href="#sending-text-data" title="Permalink to this headline"></a></h3>
<p>The WebSocket client supports sending data as a text data frame, which informs the application layer that the payload data is text data encoded as UTF-8. Example:</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="n">esp_websocket_client_send_text</span><span class="p">(</span><span class="n">client</span><span class="p">,</span><span class="w"> </span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="n">len</span><span class="p">,</span><span class="w"> </span><span class="n">portMAX_DELAY</span><span class="p">);</span><span class="w"></span>
</pre></div>
@@ -246,24 +244,24 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
</section>
</section>
<section id="api-reference">
<h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this heading"></a></h2>
<h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this headline"></a></h2>
<section id="header-file">
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this heading"></a></h3>
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/blob/3f0262d/include/esp_websocket_client.h">include/esp_websocket_client.h</a></p></li>
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/blob/42565ff/include/esp_websocket_client.h">include/esp_websocket_client.h</a></p></li>
</ul>
</section>
<section id="functions">
<h3>Functions<a class="headerlink" href="#functions" title="Permalink to this heading"></a></h3>
<h3>Functions<a class="headerlink" href="#functions" title="Permalink to this headline"></a></h3>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv425esp_websocket_client_initPK29esp_websocket_client_config_t">
<span id="_CPPv325esp_websocket_client_initPK29esp_websocket_client_config_t"></span><span id="_CPPv225esp_websocket_client_initPK29esp_websocket_client_config_t"></span><span id="esp_websocket_client_init__esp_websocket_client_config_tCP"></span><span class="target" id="esp__websocket__client_8h_1a243bea9ad290aa71efa02d7fff90d15d"></span><a class="reference internal" href="#_CPPv429esp_websocket_client_handle_t" title="esp_websocket_client_handle_t"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_client_init</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv429esp_websocket_client_config_t" title="esp_websocket_client_config_t"><span class="n"><span class="pre">esp_websocket_client_config_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">config</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv425esp_websocket_client_initPK29esp_websocket_client_config_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Start a Websocket session This function must be the first function to call, and it returns a esp_websocket_client_handle_t that you must use as input to other functions in the interface. This call MUST have a corresponding call to esp_websocket_client_destroy when the operation is complete. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>config</strong> <strong>[in]</strong> The configuration</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">esp_websocket_client_handle_t</span></code></p></li>
<li><p>NULL if any errors </p></li>
@@ -278,13 +276,13 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<span id="_CPPv328esp_websocket_client_set_uri29esp_websocket_client_handle_tPKc"></span><span id="_CPPv228esp_websocket_client_set_uri29esp_websocket_client_handle_tPKc"></span><span id="esp_websocket_client_set_uri__esp_websocket_client_handle_t.cCP"></span><span class="target" id="esp__websocket__client_8h_1a50474c5aa08888672eb7c325ee5b0ac2"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_client_set_uri</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv429esp_websocket_client_handle_t" title="esp_websocket_client_handle_t"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">client</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">uri</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv428esp_websocket_client_set_uri29esp_websocket_client_handle_tPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set URL for client, when performing this behavior, the options in the URL will replace the old ones Must stop the WebSocket client before set URI if the client has been connected. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>client</strong> <strong>[in]</strong> The client </p></li>
<li><p><strong>uri</strong> <strong>[in]</strong> The uri</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>esp_err_t </p>
</dd>
</dl>
@@ -295,10 +293,10 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<span id="_CPPv326esp_websocket_client_start29esp_websocket_client_handle_t"></span><span id="_CPPv226esp_websocket_client_start29esp_websocket_client_handle_t"></span><span id="esp_websocket_client_start__esp_websocket_client_handle_t"></span><span class="target" id="esp__websocket__client_8h_1a693a8aef5e81de4c26db82e398788d71"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_client_start</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv429esp_websocket_client_handle_t" title="esp_websocket_client_handle_t"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">client</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv426esp_websocket_client_start29esp_websocket_client_handle_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Open the WebSocket connection. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>client</strong> <strong>[in]</strong> The client</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>esp_err_t </p>
</dd>
</dl>
@@ -314,10 +312,10 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
</ul>
</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>client</strong> <strong>[in]</strong> The client</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>esp_err_t </p>
</dd>
</dl>
@@ -332,10 +330,10 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
</ul>
</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>client</strong> <strong>[in]</strong> The client</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>esp_err_t </p>
</dd>
</dl>
@@ -346,7 +344,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<span id="_CPPv329esp_websocket_client_send_bin29esp_websocket_client_handle_tPKci10TickType_t"></span><span id="_CPPv229esp_websocket_client_send_bin29esp_websocket_client_handle_tPKci10TickType_t"></span><span id="esp_websocket_client_send_bin__esp_websocket_client_handle_t.cCP.i.TickType_t"></span><span class="target" id="esp__websocket__client_8h_1a7c0f6ba95ed2c5a79aaffdd98c755052"></span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_client_send_bin</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv429esp_websocket_client_handle_t" title="esp_websocket_client_handle_t"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">client</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">data</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">len</span></span>, <span class="n"><span class="pre">TickType_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv429esp_websocket_client_send_bin29esp_websocket_client_handle_tPKci10TickType_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Write binary data to the WebSocket connection (data send with WS OPCODE=02, i.e. binary) </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>client</strong> <strong>[in]</strong> The client </p></li>
<li><p><strong>data</strong> <strong>[in]</strong> The data </p></li>
@@ -354,7 +352,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<li><p><strong>timeout</strong> <strong>[in]</strong> Write data timeout in RTOS ticks</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>Number of data was sent</p></li>
<li><p>(-1) if any errors </p></li>
@@ -369,7 +367,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<span id="_CPPv330esp_websocket_client_send_text29esp_websocket_client_handle_tPKci10TickType_t"></span><span id="_CPPv230esp_websocket_client_send_text29esp_websocket_client_handle_tPKci10TickType_t"></span><span id="esp_websocket_client_send_text__esp_websocket_client_handle_t.cCP.i.TickType_t"></span><span class="target" id="esp__websocket__client_8h_1a68629bdee47e1232c5565e4bfb25e4fe"></span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_client_send_text</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv429esp_websocket_client_handle_t" title="esp_websocket_client_handle_t"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">client</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">data</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">len</span></span>, <span class="n"><span class="pre">TickType_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv430esp_websocket_client_send_text29esp_websocket_client_handle_tPKci10TickType_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Write textual data to the WebSocket connection (data send with WS OPCODE=01, i.e. text) </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>client</strong> <strong>[in]</strong> The client </p></li>
<li><p><strong>data</strong> <strong>[in]</strong> The data </p></li>
@@ -377,7 +375,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<li><p><strong>timeout</strong> <strong>[in]</strong> Write data timeout in RTOS ticks</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>Number of data was sent</p></li>
<li><p>(-1) if any errors </p></li>
@@ -392,7 +390,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<span id="_CPPv337esp_websocket_client_send_with_opcode29esp_websocket_client_handle_t22ws_transport_opcodes_tPK7uint8_ti10TickType_t"></span><span id="_CPPv237esp_websocket_client_send_with_opcode29esp_websocket_client_handle_t22ws_transport_opcodes_tPK7uint8_ti10TickType_t"></span><span id="esp_websocket_client_send_with_opcode__esp_websocket_client_handle_t.ws_transport_opcodes_t.uint8_tCP.i.TickType_t"></span><span class="target" id="esp__websocket__client_8h_1a5d2d11b117224eff0381fa60ae513862"></span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_client_send_with_opcode</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv429esp_websocket_client_handle_t" title="esp_websocket_client_handle_t"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">client</span></span>, <span class="n"><span class="pre">ws_transport_opcodes_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">opcode</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">data</span></span>, <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">len</span></span>, <span class="n"><span class="pre">TickType_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv437esp_websocket_client_send_with_opcode29esp_websocket_client_handle_t22ws_transport_opcodes_tPK7uint8_ti10TickType_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Write opcode data to the WebSocket connection. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>client</strong> <strong>[in]</strong> The client </p></li>
<li><p><strong>opcode</strong> <strong>[in]</strong> The opcode </p></li>
@@ -401,7 +399,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<li><p><strong>timeout</strong> <strong>[in]</strong> Write data timeout in RTOS ticks</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>Number of data was sent</p></li>
<li><p>(-1) if any errors </p></li>
@@ -428,13 +426,13 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
</ul>
</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>client</strong> <strong>[in]</strong> The client </p></li>
<li><p><strong>timeout</strong> <strong>[in]</strong> Timeout in RTOS ticks for waiting</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>esp_err_t </p>
</dd>
</dl>
@@ -449,7 +447,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
</ul>
</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>client</strong> <strong>[in]</strong> The client </p></li>
<li><p><strong>code</strong> <strong>[in]</strong> Close status code as defined in RFC6455 section-7.4 </p></li>
@@ -458,7 +456,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<li><p><strong>timeout</strong> <strong>[in]</strong> Timeout in RTOS ticks for waiting</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>esp_err_t </p>
</dd>
</dl>
@@ -469,10 +467,10 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<span id="_CPPv333esp_websocket_client_is_connected29esp_websocket_client_handle_t"></span><span id="_CPPv233esp_websocket_client_is_connected29esp_websocket_client_handle_t"></span><span id="esp_websocket_client_is_connected__esp_websocket_client_handle_t"></span><span class="target" id="esp__websocket__client_8h_1ab669d31f755182eac55975558ce499c1"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_client_is_connected</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv429esp_websocket_client_handle_t" title="esp_websocket_client_handle_t"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">client</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv433esp_websocket_client_is_connected29esp_websocket_client_handle_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Check the WebSocket client connection state. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>client</strong> <strong>[in]</strong> The client handle</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>true</p></li>
<li><p>false </p></li>
@@ -487,10 +485,10 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<span id="_CPPv342esp_websocket_client_get_ping_interval_sec29esp_websocket_client_handle_t"></span><span id="_CPPv242esp_websocket_client_get_ping_interval_sec29esp_websocket_client_handle_t"></span><span id="esp_websocket_client_get_ping_interval_sec__esp_websocket_client_handle_t"></span><span class="target" id="esp__websocket__client_8h_1ac8f96276df09f56af4b83675cd1487ff"></span><span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_client_get_ping_interval_sec</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv429esp_websocket_client_handle_t" title="esp_websocket_client_handle_t"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">client</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv442esp_websocket_client_get_ping_interval_sec29esp_websocket_client_handle_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get the ping interval sec for client. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>client</strong> <strong>[in]</strong> The client</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The ping interval in sec </p>
</dd>
</dl>
@@ -501,13 +499,13 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<span id="_CPPv342esp_websocket_client_set_ping_interval_sec29esp_websocket_client_handle_t6size_t"></span><span id="_CPPv242esp_websocket_client_set_ping_interval_sec29esp_websocket_client_handle_t6size_t"></span><span id="esp_websocket_client_set_ping_interval_sec__esp_websocket_client_handle_t.s"></span><span class="target" id="esp__websocket__client_8h_1a72e61f91ed9d9424287f376284ffc9b3"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_client_set_ping_interval_sec</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv429esp_websocket_client_handle_t" title="esp_websocket_client_handle_t"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">client</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">ping_interval_sec</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv442esp_websocket_client_set_ping_interval_sec29esp_websocket_client_handle_t6size_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set new ping interval sec for client. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>client</strong> <strong>[in]</strong> The client </p></li>
<li><p><strong>ping_interval_sec</strong> <strong>[in]</strong> The new interval</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>esp_err_t </p>
</dd>
</dl>
@@ -518,7 +516,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<span id="_CPPv329esp_websocket_register_events29esp_websocket_client_handle_t24esp_websocket_event_id_t19esp_event_handler_tPv"></span><span id="_CPPv229esp_websocket_register_events29esp_websocket_client_handle_t24esp_websocket_event_id_t19esp_event_handler_tPv"></span><span id="esp_websocket_register_events__esp_websocket_client_handle_t.esp_websocket_event_id_t.esp_event_handler_t.voidP"></span><span class="target" id="esp__websocket__client_8h_1a8d993808cd78275be7ae4de44e8c11d9"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_register_events</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv429esp_websocket_client_handle_t" title="esp_websocket_client_handle_t"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">client</span></span>, <a class="reference internal" href="#_CPPv424esp_websocket_event_id_t" title="esp_websocket_event_id_t"><span class="n"><span class="pre">esp_websocket_event_id_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">event</span></span>, <span class="n"><span class="pre">esp_event_handler_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">event_handler</span></span>, <span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">event_handler_arg</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv429esp_websocket_register_events29esp_websocket_client_handle_t24esp_websocket_event_id_t19esp_event_handler_tPv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Register the Websocket Events. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>client</strong> The client handle </p></li>
<li><p><strong>event</strong> The event id </p></li>
@@ -526,7 +524,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
<li><p><strong>event_handler_arg</strong> User context </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>esp_err_t </p>
</dd>
</dl>
@@ -534,7 +532,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
</section>
<section id="structures">
<h3>Structures<a class="headerlink" href="#structures" title="Permalink to this heading"></a></h3>
<h3>Structures<a class="headerlink" href="#structures" title="Permalink to this headline"></a></h3>
<dl class="cpp struct">
<dt class="sig sig-object cpp" id="_CPPv426esp_websocket_event_data_t">
<span id="_CPPv326esp_websocket_event_data_t"></span><span id="_CPPv226esp_websocket_event_data_t"></span><span id="esp_websocket_event_data_t"></span><span class="target" id="structesp__websocket__event__data__t"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_event_data_t</span></span></span><a class="headerlink" href="#_CPPv426esp_websocket_event_data_t" title="Permalink to this definition"></a><br /></dt>
@@ -807,7 +805,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
</section>
<section id="type-definitions">
<h3>Type Definitions<a class="headerlink" href="#type-definitions" title="Permalink to this heading"></a></h3>
<h3>Type Definitions<a class="headerlink" href="#type-definitions" title="Permalink to this headline"></a></h3>
<dl class="cpp type">
<dt class="sig sig-object cpp" id="_CPPv429esp_websocket_client_handle_t">
<span id="_CPPv329esp_websocket_client_handle_t"></span><span id="_CPPv229esp_websocket_client_handle_t"></span><span id="esp_websocket_client_handle_t"></span><span class="target" id="esp__websocket__client_8h_1a495fdc2516a29dc75c569f7bb96259a1"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="n"><span class="pre">esp_websocket_client</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_client_handle_t</span></span></span><a class="headerlink" href="#_CPPv429esp_websocket_client_handle_t" title="Permalink to this definition"></a><br /></dt>
@@ -815,7 +813,7 @@ In case a host operating system has <cite>openssl</cite> and <cite>sed</cite> pa
</section>
<section id="enumerations">
<h3>Enumerations<a class="headerlink" href="#enumerations" title="Permalink to this heading"></a></h3>
<h3>Enumerations<a class="headerlink" href="#enumerations" title="Permalink to this headline"></a></h3>
<dl class="cpp enum">
<dt class="sig sig-object cpp" id="_CPPv424esp_websocket_event_id_t">
<span id="_CPPv324esp_websocket_event_id_t"></span><span id="_CPPv224esp_websocket_event_id_t"></span><span class="target" id="esp__websocket__client_8h_1a781bbfb5f24162bd806d09cefe317b10"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">esp_websocket_event_id_t</span></span></span><a class="headerlink" href="#_CPPv424esp_websocket_event_id_t" title="Permalink to this definition"></a><br /></dt>

View File

@@ -16,9 +16,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/js/theme.js"></script>

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: e12145161279d5e00aed0f59b2c63a32
config: b8f72f40903ff4c38ebe6ab9bb5c24a7
tags: 549b3d6d0415232fb7e35403b330ff49

View File

@@ -1,134 +0,0 @@
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

View File

@@ -222,7 +222,7 @@ table.modindextable td {
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
min-width: 450px;
max-width: 800px;
}
@@ -237,6 +237,16 @@ a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
@@ -324,15 +334,13 @@ aside.sidebar {
p.sidebar-title {
font-weight: bold;
}
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
@@ -371,8 +379,6 @@ div.body p.centered {
div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
@@ -380,8 +386,6 @@ div.admonition > :last-child {
div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
@@ -424,6 +428,10 @@ table.docutils td, table.docutils th {
border-bottom: 1px solid #aaa;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
@@ -606,26 +614,20 @@ ol.simple p,
ul.simple p {
margin-bottom: 0;
}
aside.footnote > span,
div.citation > span {
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
@@ -642,6 +644,10 @@ dl.field-list > dt {
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;

View File

@@ -2,155 +2,357 @@
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation.
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
this.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE: "unknown",
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined')
return string;
return (typeof translated === 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) === 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
var url = new URL(window.location);
url.searchParams.delete('highlight');
window.history.replaceState({}, '', url);
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
focusSearchBar : function() {
$('input[name=q]').first().focus();
},
/**
* Initialise the domain index toggle buttons
* make the url absolute
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
initOnKeyListeners: () => {
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return;
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
$(document).keydown(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box, textarea, dropdown or button
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
&& activeElementType !== 'BUTTON') {
if (event.altKey || event.ctrlKey || event.metaKey)
return;
if (!event.shiftKey) {
if (!event.shiftKey) {
switch (event.key) {
case 'ArrowLeft':
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
break;
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
break;
case 'ArrowRight':
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
break;
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
break;
case 'Escape':
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
break;
Documentation.hideSearchWords();
return false;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
case '/':
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
break;
Documentation.focusSearchBar();
return false;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
}
};
// quick alias for translations
const _ = Documentation.gettext;
_ = Documentation.gettext;
_ready(Documentation.init);
$(document).ready(function() {
Documentation.init();
});

View File

@@ -1,15 +1,15 @@
/*!
* jQuery JavaScript Library v3.6.0
* jQuery JavaScript Library v3.5.1
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright OpenJS Foundation and other contributors
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2021-03-02T17:08Z
* Date: 2020-05-04T22:49Z
*/
( function( global, factory ) {
@@ -76,16 +76,12 @@ var support = {};
var isFunction = function isFunction( obj ) {
// Support: Chrome <=57, Firefox <=52
// In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function.
// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
// Plus for old WebKit, typeof returns "function" for HTML collections
// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
return typeof obj === "function" && typeof obj.nodeType !== "number" &&
typeof obj.item !== "function";
};
// Support: Chrome <=57, Firefox <=52
// In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function.
return typeof obj === "function" && typeof obj.nodeType !== "number";
};
var isWindow = function isWindow( obj ) {
@@ -151,7 +147,7 @@ function toType( obj ) {
var
version = "3.6.0",
version = "3.5.1",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
@@ -405,7 +401,7 @@ jQuery.extend( {
if ( isArrayLike( Object( arr ) ) ) {
jQuery.merge( ret,
typeof arr === "string" ?
[ arr ] : arr
[ arr ] : arr
);
} else {
push.call( ret, arr );
@@ -500,9 +496,9 @@ if ( typeof Symbol === "function" ) {
// Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
function( _i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
function( _i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
function isArrayLike( obj ) {
@@ -522,14 +518,14 @@ function isArrayLike( obj ) {
}
var Sizzle =
/*!
* Sizzle CSS Selector Engine v2.3.6
* Sizzle CSS Selector Engine v2.3.5
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2021-02-16
* Date: 2020-03-14
*/
( function( window ) {
var i,
@@ -1112,8 +1108,8 @@ support = Sizzle.support = {};
* @returns {Boolean} True iff elem is a non-HTML XML node
*/
isXML = Sizzle.isXML = function( elem ) {
var namespace = elem && elem.namespaceURI,
docElem = elem && ( elem.ownerDocument || elem ).documentElement;
var namespace = elem.namespaceURI,
docElem = ( elem.ownerDocument || elem ).documentElement;
// Support: IE <=8
// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
@@ -3028,9 +3024,9 @@ var rneedsContext = jQuery.expr.match.needsContext;
function nodeName( elem, name ) {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
}
};
var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
@@ -4001,8 +3997,8 @@ jQuery.extend( {
resolveContexts = Array( i ),
resolveValues = slice.call( arguments ),
// the primary Deferred
primary = jQuery.Deferred(),
// the master Deferred
master = jQuery.Deferred(),
// subordinate callback factory
updateFunc = function( i ) {
@@ -4010,30 +4006,30 @@ jQuery.extend( {
resolveContexts[ i ] = this;
resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
if ( !( --remaining ) ) {
primary.resolveWith( resolveContexts, resolveValues );
master.resolveWith( resolveContexts, resolveValues );
}
};
};
// Single- and empty arguments are adopted like Promise.resolve
if ( remaining <= 1 ) {
adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
!remaining );
// Use .then() to unwrap secondary thenables (cf. gh-3000)
if ( primary.state() === "pending" ||
if ( master.state() === "pending" ||
isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
return primary.then();
return master.then();
}
}
// Multiple arguments are aggregated like Promise.all array elements
while ( i-- ) {
adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
}
return primary.promise();
return master.promise();
}
} );
@@ -4184,8 +4180,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
for ( ; i < len; i++ ) {
fn(
elems[ i ], key, raw ?
value :
value.call( elems[ i ], i, fn( elems[ i ], key ) )
value :
value.call( elems[ i ], i, fn( elems[ i ], key ) )
);
}
}
@@ -5093,7 +5089,10 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
}
var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
var
rkeyEvent = /^key/,
rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
function returnTrue() {
return true;
@@ -5388,8 +5387,8 @@ jQuery.event = {
event = jQuery.event.fix( nativeEvent ),
handlers = (
dataPriv.get( this, "events" ) || Object.create( null )
)[ event.type ] || [],
dataPriv.get( this, "events" ) || Object.create( null )
)[ event.type ] || [],
special = jQuery.event.special[ event.type ] || {};
// Use the fix-ed jQuery.Event rather than the (read-only) native event
@@ -5513,12 +5512,12 @@ jQuery.event = {
get: isFunction( hook ) ?
function() {
if ( this.originalEvent ) {
return hook( this.originalEvent );
return hook( this.originalEvent );
}
} :
function() {
if ( this.originalEvent ) {
return this.originalEvent[ name ];
return this.originalEvent[ name ];
}
},
@@ -5657,13 +5656,7 @@ function leverageNative( el, type, expectSync ) {
// Cancel the outer synthetic event
event.stopImmediatePropagation();
event.preventDefault();
// Support: Chrome 86+
// In Chrome, if an element having a focusout handler is blurred by
// clicking outside of it, it invokes the handler synchronously. If
// that handler calls `.remove()` on the element, the data is cleared,
// leaving `result` undefined. We need to guard against this.
return result && result.value;
return result.value;
}
// If this is an inner synthetic event for an event with a bubbling surrogate
@@ -5828,7 +5821,34 @@ jQuery.each( {
targetTouches: true,
toElement: true,
touches: true,
which: true
which: function( event ) {
var button = event.button;
// Add which for key events
if ( event.which == null && rkeyEvent.test( event.type ) ) {
return event.charCode != null ? event.charCode : event.keyCode;
}
// Add which for click: 1 === left; 2 === middle; 3 === right
if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
if ( button & 1 ) {
return 1;
}
if ( button & 2 ) {
return 3;
}
if ( button & 4 ) {
return 2;
}
return 0;
}
return event.which;
}
}, jQuery.event.addProp );
jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
@@ -5854,12 +5874,6 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
return true;
},
// Suppress native focus or blur as it's already being fired
// in leverageNative.
_default: function() {
return true;
},
delegateType: delegateType
};
} );
@@ -6527,10 +6541,6 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
// set in CSS while `offset*` properties report correct values.
// Behavior in IE 9 is more subtle than in newer versions & it passes
// some versions of this test; make sure not to make it pass there!
//
// Support: Firefox 70+
// Only Firefox includes border widths
// in computed dimensions. (gh-4529)
reliableTrDimensions: function() {
var table, tr, trChild, trStyle;
if ( reliableTrDimensionsVal == null ) {
@@ -6538,32 +6548,17 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
tr = document.createElement( "tr" );
trChild = document.createElement( "div" );
table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
tr.style.cssText = "border:1px solid";
// Support: Chrome 86+
// Height set through cssText does not get applied.
// Computed height then comes back as 0.
table.style.cssText = "position:absolute;left:-11111px";
tr.style.height = "1px";
trChild.style.height = "9px";
// Support: Android 8 Chrome 86+
// In our bodyBackground.html iframe,
// display for all div elements is set to "inline",
// which causes a problem only in Android 8 Chrome 86.
// Ensuring the div is display: block
// gets around this issue.
trChild.style.display = "block";
documentElement
.appendChild( table )
.appendChild( tr )
.appendChild( trChild );
trStyle = window.getComputedStyle( tr );
reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
parseInt( trStyle.borderTopWidth, 10 ) +
parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
documentElement.removeChild( table );
}
@@ -7027,10 +7022,10 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) {
// Running getBoundingClientRect on a disconnected node
// in IE throws an error.
( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
swap( elem, cssShow, function() {
return getWidthOrHeight( elem, dimension, extra );
} ) :
getWidthOrHeight( elem, dimension, extra );
swap( elem, cssShow, function() {
return getWidthOrHeight( elem, dimension, extra );
} ) :
getWidthOrHeight( elem, dimension, extra );
}
},
@@ -7089,7 +7084,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
swap( elem, { marginLeft: 0 }, function() {
return elem.getBoundingClientRect().left;
} )
) + "px";
) + "px";
}
}
);
@@ -7228,7 +7223,7 @@ Tween.propHooks = {
if ( jQuery.fx.step[ tween.prop ] ) {
jQuery.fx.step[ tween.prop ]( tween );
} else if ( tween.elem.nodeType === 1 && (
jQuery.cssHooks[ tween.prop ] ||
jQuery.cssHooks[ tween.prop ] ||
tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
} else {
@@ -7473,7 +7468,7 @@ function defaultPrefilter( elem, props, opts ) {
anim.done( function() {
/* eslint-enable no-loop-func */
/* eslint-enable no-loop-func */
// The final step of a "hide" animation is actually hiding the element
if ( !hidden ) {
@@ -7593,7 +7588,7 @@ function Animation( elem, properties, options ) {
tweens: [],
createTween: function( prop, end ) {
var tween = jQuery.Tween( elem, animation.opts, prop, end,
animation.opts.specialEasing[ prop ] || animation.opts.easing );
animation.opts.specialEasing[ prop ] || animation.opts.easing );
animation.tweens.push( tween );
return tween;
},
@@ -7766,8 +7761,7 @@ jQuery.fn.extend( {
anim.stop( true );
}
};
doAnimation.finish = doAnimation;
doAnimation.finish = doAnimation;
return empty || optall.queue === false ?
this.each( doAnimation ) :
@@ -8407,8 +8401,8 @@ jQuery.fn.extend( {
if ( this.setAttribute ) {
this.setAttribute( "class",
className || value === false ?
"" :
dataPriv.get( this, "__className__" ) || ""
"" :
dataPriv.get( this, "__className__" ) || ""
);
}
}
@@ -8423,7 +8417,7 @@ jQuery.fn.extend( {
while ( ( elem = this[ i++ ] ) ) {
if ( elem.nodeType === 1 &&
( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
return true;
return true;
}
}
@@ -8713,7 +8707,9 @@ jQuery.extend( jQuery.event, {
special.bindType || type;
// jQuery handler
handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
handle = (
dataPriv.get( cur, "events" ) || Object.create( null )
)[ event.type ] &&
dataPriv.get( cur, "handle" );
if ( handle ) {
handle.apply( cur, data );
@@ -8860,7 +8856,7 @@ var rquery = ( /\?/ );
// Cross-browser xml parsing
jQuery.parseXML = function( data ) {
var xml, parserErrorElem;
var xml;
if ( !data || typeof data !== "string" ) {
return null;
}
@@ -8869,17 +8865,12 @@ jQuery.parseXML = function( data ) {
// IE throws on parseFromString with invalid input.
try {
xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
} catch ( e ) {}
} catch ( e ) {
xml = undefined;
}
parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
if ( !xml || parserErrorElem ) {
jQuery.error( "Invalid XML: " + (
parserErrorElem ?
jQuery.map( parserErrorElem.childNodes, function( el ) {
return el.textContent;
} ).join( "\n" ) :
data
) );
if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
jQuery.error( "Invalid XML: " + data );
}
return xml;
};
@@ -8980,14 +8971,16 @@ jQuery.fn.extend( {
// Can add propHook for "elements" to filter or add form elements
var elements = jQuery.prop( this, "elements" );
return elements ? jQuery.makeArray( elements ) : this;
} ).filter( function() {
} )
.filter( function() {
var type = this.type;
// Use .is( ":disabled" ) so that fieldset[disabled] works
return this.name && !jQuery( this ).is( ":disabled" ) &&
rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
( this.checked || !rcheckableType.test( type ) );
} ).map( function( _i, elem ) {
} )
.map( function( _i, elem ) {
var val = jQuery( this ).val();
if ( val == null ) {
@@ -9040,8 +9033,7 @@ var
// Anchor tag for parsing the document origin
originAnchor = document.createElement( "a" );
originAnchor.href = location.href;
originAnchor.href = location.href;
// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
function addToPrefiltersOrTransports( structure ) {
@@ -9422,8 +9414,8 @@ jQuery.extend( {
// Context for global events is callbackContext if it is a DOM node or jQuery collection
globalEventContext = s.context &&
( callbackContext.nodeType || callbackContext.jquery ) ?
jQuery( callbackContext ) :
jQuery.event,
jQuery( callbackContext ) :
jQuery.event,
// Deferreds
deferred = jQuery.Deferred(),
@@ -9735,10 +9727,8 @@ jQuery.extend( {
response = ajaxHandleResponses( s, jqXHR, responses );
}
// Use a noop converter for missing script but not if jsonp
if ( !isSuccess &&
jQuery.inArray( "script", s.dataTypes ) > -1 &&
jQuery.inArray( "json", s.dataTypes ) < 0 ) {
// Use a noop converter for missing script
if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
s.converters[ "text script" ] = function() {};
}
@@ -10476,6 +10466,12 @@ jQuery.offset = {
options.using.call( elem, props );
} else {
if ( typeof props.top === "number" ) {
props.top += "px";
}
if ( typeof props.left === "number" ) {
props.left += "px";
}
curElem.css( props );
}
}
@@ -10644,11 +10640,8 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) {
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
jQuery.each( {
padding: "inner" + name,
content: type,
"": "outer" + name
}, function( defaultExtra, funcName ) {
jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
function( defaultExtra, funcName ) {
// Margin is only for outerHeight, outerWidth
jQuery.fn[ funcName ] = function( margin, value ) {
@@ -10733,8 +10726,7 @@ jQuery.fn.extend( {
}
} );
jQuery.each(
( "blur focus focusin focusout resize scroll click dblclick " +
jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup contextmenu" ).split( " " ),
function( _i, name ) {
@@ -10745,8 +10737,7 @@ jQuery.each(
this.on( name, null, data, fn ) :
this.trigger( name );
};
}
);
} );

File diff suppressed because one or more lines are too long

View File

@@ -10,7 +10,7 @@
*
*/
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
/* Non-minified version is copied as a separate JS file, is available */
@@ -197,3 +197,101 @@ var Stemmer = function() {
}
}
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}

View File

@@ -8,20 +8,18 @@
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
/**
* Simple result scoring code.
*/
if (typeof Scorer === "undefined") {
if (!Scorer) {
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [docname, title, anchor, descr, score, filename]
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: result => {
const [docname, title, anchor, descr, score, filename] = result
return score
score: function(result) {
return result[4];
},
*/
@@ -30,11 +28,9 @@ if (typeof Scorer === "undefined") {
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
@@ -43,495 +39,452 @@ if (typeof Scorer === "undefined") {
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
partialTerm: 2
};
}
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr, score, _filename] = item;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
if (!splitQuery) {
function splitQuery(query) {
return query.split(/\s+/);
}
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms)
);
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
}
/**
* Search Module
*/
const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
var Search = {
htmlToText: (htmlString) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
);
return "";
_index : null,
_queued_query : null,
_pulse_status : -1,
htmlToText : function(htmlString) {
var virtualDocument = document.implementation.createHTMLDocument('virtual');
var htmlElement = $(htmlString, virtualDocument);
htmlElement.find('.headerlink').remove();
docContent = htmlElement.find('[role=main]')[0];
if(docContent === undefined) {
console.warn("Content block not found. Sphinx search tries to obtain it " +
"via '[role=main]'. Could you check your theme or template.");
return "";
}
return docContent.textContent || docContent.innerText;
},
init: () => {
const query = new URLSearchParams(window.location.search).get("q");
document
.querySelectorAll('input[name="q"]')
.forEach((el) => (el.value = query));
if (query) Search.performSearch(query);
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex: () => Search._index !== null,
hasIndex : function() {
return this._index !== null;
},
deferQuery: (query) => (Search._queued_query = query),
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse: () => (Search._pulse_status = -1),
stopPulse : function() {
this._pulse_status = 0;
},
startPulse: () => {
if (Search._pulse_status >= 0) return;
const pulse = () => {
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
Search.dots.innerText = ".".repeat(Search._pulse_status);
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
};
var dotString = '';
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch: (query) => {
performSearch : function(query) {
// create the required interface elements
const searchText = document.createElement("h2");
searchText.textContent = _("Searching");
const searchSummary = document.createElement("p");
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
const out = document.getElementById("search-results");
Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (Search.hasIndex()) Search.query(query);
else Search.deferQuery(query);
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
query : function(query) {
var i;
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// maybe skip this "word"
// stopwords array is from language_data.js
if (
stopwords.indexOf(queryTermLower) !== -1 ||
queryTerm.match(/^\d+$/)
)
return;
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
var objectterms = [];
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
let word = stemmer.stemWord(queryTermLower);
var word = stemmer.stemWord(tmp[i].toLowerCase());
var toAppend;
// select the correct list
if (word[0] === "-") excludedTerms.add(word.substr(1));
if (word[0] == '-') {
toAppend = excluded;
word = word.substr(1);
}
else {
searchTerms.add(word);
highlightTerms.add(queryTermLower);
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
// only add if not already in the list
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// array of [docname, title, anchor, descr, score, filename]
let results = [];
_removeChildren(document.getElementById("search-progress"));
// prepare search
var terms = this._index.terms;
var titleterms = this._index.titleterms;
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
);
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
return leftScore > rightScore ? 1 : -1;
});
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
//console.info('search results:', Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms);
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li></li>');
var requestUrl = "";
var linkUrl = "";
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) {
$.ajax({url: requestUrl,
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
var summary = Search.makeSearchSummary(data, searchterms, hlterms);
if (summary) {
listItem.append(summary);
}
}
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}});
} else {
// just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch: (object, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const objects = Search._index.objects;
const objNames = Search._index.objnames;
const titles = Search._index.titles;
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var docnames = this._index.docnames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
const results = [];
var i;
var results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
for (var prefix in objects) {
for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
var match = objects[prefix][iMatch];
var name = match[4];
var fullname = (prefix ? prefix + '.' : '') + name;
var fullnameLower = fullname.toLowerCase()
if (fullnameLower.indexOf(object) > -1) {
var score = 0;
var parts = fullnameLower.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
let score = 0;
const parts = fullnameLower.split(".");
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch;
else if (parts.slice(-1)[0].indexOf(object) > -1)
score += Scorer.objPartialMatch; // matches in last name
const objName = objNames[match[1]][2];
const title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results;
},
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
*/
escapeRegExp : function(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
/**
* search for full-text terms in the index
*/
performTermsSearch: (searchTerms, excludedTerms) => {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var docnames = this._index.docnames;
var filenames = this._index.filenames;
var titles = this._index.titles;
const scoreMap = new Map();
const fileMap = new Map();
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word])
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word])
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
});
var word_regex = this.escapeRegExp(word);
for (var w in terms) {
if (w.match(word_regex) && !terms[word]) {
_o.push({files: terms[w], score: Scorer.partialTerm})
}
}
for (var w in titleterms) {
if (w.match(word_regex) && !titleterms[word]) {
_o.push({files: titleterms[w], score: Scorer.partialTitle})
}
}
}
// no match but word was a required one
if (arr.every((record) => record.files === undefined)) return;
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
arr.forEach((record) => {
if (record.files === undefined) return;
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
let recordFiles = record.files;
if (recordFiles.length === undefined) recordFiles = [recordFiles];
files.push(...recordFiles);
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
});
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {};
scoreMap[file][word] = o.score;
}
});
// create the mapping
files.forEach((file) => {
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
fileMap.get(file).push(word);
else fileMap.set(file, [word]);
});
});
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap && fileMap[file].indexOf(word) === -1)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
const results = [];
for (const [file, wordList] of fileMap) {
// check if all requirements are matched
for (file in fileMap) {
var valid = true;
// as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
// check if all requirements are matched
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
searchterms.filter(function(term){return term.length > 2}).length
if (
wordList.length !== searchTerms.size &&
wordList.length !== filteredTermCount
)
continue;
fileMap[file].length != searchterms.length &&
fileMap[file].length != filteredTermCount
) continue;
// ensure that none of the excluded terms is in the search result
if (
[...excludedTerms].some(
(term) =>
terms[term] === file ||
titleTerms[term] === file ||
(terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break;
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
]);
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
}
}
return results;
},
@@ -539,28 +492,34 @@ const Search = {
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words.
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary: (htmlText, keywords) => {
const text = Search.htmlToText(htmlText);
if (text === "") return null;
const textLower = text.toLowerCase();
const actualStartPosition = [...keywords]
.map((k) => textLower.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("p");
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
return summary;
},
makeSearchSummary : function(htmlText, keywords, hlwords) {
var text = Search.htmlToText(htmlText);
if (text == "") {
return null;
}
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<p class="context"></p>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
};
_ready(Search.init);
$(document).ready(function() {
Search.init();
});

View File

@@ -1,144 +0,0 @@
/* Highlighting utilities for Sphinx HTML documentation. */
"use strict";
const SPHINX_HIGHLIGHT_ENABLED = true
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const SphinxHighlight = {
/**
* highlight the search words provided in localstorage in the text
*/
highlightSearchWords: () => {
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
// get and clear terms from localstorage
const url = new URL(window.location);
const highlight =
localStorage.getItem("sphinx_highlight_terms")
|| url.searchParams.get("highlight")
|| "";
localStorage.removeItem("sphinx_highlight_terms")
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
// get individual terms from highlight string
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
localStorage.removeItem("sphinx_highlight_terms")
},
initEscapeListener: () => {
// only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
SphinxHighlight.hideSearchWords();
event.preventDefault();
}
});
},
};
_ready(SphinxHighlight.highlightSearchWords);
_ready(SphinxHighlight.initEscapeListener);

View File

@@ -15,9 +15,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/js/theme.js"></script>
@@ -91,7 +89,7 @@
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Index</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/espressif/esp-protocols/blob/3f0262d/docs/en/genindex" class="fa fa-github"> Edit on GitHub</a>
<a href="https://github.com/espressif/esp-protocols/blob/42565ff/docs/en/genindex" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>

View File

@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>mDNS Service - ESP32 - &mdash; ESP-Protocols latest documentation</title>
@@ -16,9 +16,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/js/theme.js"></script>
@@ -116,7 +114,7 @@
<li><a href="#" class="icon icon-home"></a> &raquo;</li>
<li>mDNS Service</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/espressif/esp-protocols/blob/3f0262d/docs/en/index.rst" class="fa fa-github"> Edit on GitHub</a>
<a href="https://github.com/espressif/esp-protocols/blob/42565ff/docs/en/index.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
@@ -125,14 +123,14 @@
<div itemprop="articleBody">
<section id="mdns-service">
<h1>mDNS Service<a class="headerlink" href="#mdns-service" title="Permalink to this heading"></a></h1>
<h1>mDNS Service<a class="headerlink" href="#mdns-service" title="Permalink to this headline"></a></h1>
<p><a class="reference external" href="../../../zh_CN/latest/esp32/index.html">[中文]</a></p>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
<p>mDNS is a multicast UDP service that is used to provide local network service and host discovery.</p>
<p>mDNS is installed by default on most operating systems or is available as separate package. On <code class="docutils literal notranslate"><span class="pre">Mac</span> <span class="pre">OS</span></code> it is installed by default and is called <code class="docutils literal notranslate"><span class="pre">Bonjour</span></code>. Apple releases an installer for <code class="docutils literal notranslate"><span class="pre">Windows</span></code> that can be found <a class="reference external" href="https://support.apple.com/downloads/bonjour%2520for%2520windows">on Apples support page</a>. On <code class="docutils literal notranslate"><span class="pre">Linux</span></code>, mDNS is provided by <a class="reference external" href="https://github.com/lathiat/avahi">avahi</a> and is usually installed by default.</p>
<section id="mdns-properties">
<h3>mDNS Properties<a class="headerlink" href="#mdns-properties" title="Permalink to this heading"></a></h3>
<h3>mDNS Properties<a class="headerlink" href="#mdns-properties" title="Permalink to this headline"></a></h3>
<blockquote>
<div><ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">hostname</span></code>: the hostname that the device will respond to. If not set, the <code class="docutils literal notranslate"><span class="pre">hostname</span></code> will be read from the interface. Example: <code class="docutils literal notranslate"><span class="pre">my-esp32</span></code> will resolve to <code class="docutils literal notranslate"><span class="pre">my-esp32.local</span></code></p></li>
@@ -158,7 +156,7 @@
</div>
</section>
<section id="mdns-services">
<h3>mDNS Services<a class="headerlink" href="#mdns-services" title="Permalink to this heading"></a></h3>
<h3>mDNS Services<a class="headerlink" href="#mdns-services" title="Permalink to this headline"></a></h3>
<p>mDNS can advertise information about network services that your device offers. Each service is defined by a few properties.</p>
<blockquote>
<div><ul class="simple">
@@ -196,7 +194,7 @@
</div>
</section>
<section id="mdns-query">
<h3>mDNS Query<a class="headerlink" href="#mdns-query" title="Permalink to this heading"></a></h3>
<h3>mDNS Query<a class="headerlink" href="#mdns-query" title="Permalink to this headline"></a></h3>
<p>mDNS provides methods for browsing for services and resolving hosts IP/IPv6 addresses.</p>
<p>Results for services are returned as a linked list of <code class="docutils literal notranslate"><span class="pre">mdns_result_t</span></code> objects.</p>
<p>Example method to resolve host IPs:</p>
@@ -298,10 +296,10 @@
</div>
</section>
<section id="performance-optimization">
<h3>Performance Optimization<a class="headerlink" href="#performance-optimization" title="Permalink to this heading"></a></h3>
<h3>Performance Optimization<a class="headerlink" href="#performance-optimization" title="Permalink to this headline"></a></h3>
</section>
<section id="execution-speed">
<h3>Execution Speed<a class="headerlink" href="#execution-speed" title="Permalink to this heading"></a></h3>
<h3>Execution Speed<a class="headerlink" href="#execution-speed" title="Permalink to this headline"></a></h3>
<blockquote>
<div><ul class="simple">
<li><p>mDNS creates a task with default low priority 1 <code class="docutils literal notranslate"><span class="pre">CONFIG_MDNS_TASK_PRIORITY</span></code> (If <code class="docutils literal notranslate"><span class="pre">CONFIG_FREERTOS_UNICORE</span></code> enabeled it pinned to CPU0 (<code class="docutils literal notranslate"><span class="pre">CONFIG_MDNS_TASK_AFFINITY</span></code>).</p></li>
@@ -310,7 +308,7 @@
</div></blockquote>
</section>
<section id="minimizing-ram-usage">
<h3>Minimizing RAM Usage<a class="headerlink" href="#minimizing-ram-usage" title="Permalink to this heading"></a></h3>
<h3>Minimizing RAM Usage<a class="headerlink" href="#minimizing-ram-usage" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>mDNS creates a tasks with stack sizes configured by <code class="docutils literal notranslate"><span class="pre">CONFIG_MDNS_TASK_STACK_SIZE</span></code>.</p></li>
</ul>
@@ -318,25 +316,25 @@
</section>
</section>
<section id="application-example">
<h2>Application Example<a class="headerlink" href="#application-example" title="Permalink to this heading"></a></h2>
<p>mDNS server/scanner example: <a class="reference external" href="https://github.com/espressif/esp-protocols/tree/3f0262d/examples/../examples"></a>.</p>
<h2>Application Example<a class="headerlink" href="#application-example" title="Permalink to this headline"></a></h2>
<p>mDNS server/scanner example: <a class="reference external" href="https://github.com/espressif/esp-protocols/tree/42565ff/examples/../examples"></a>.</p>
</section>
<section id="api-reference">
<h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this heading"></a></h2>
<h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this headline"></a></h2>
<section id="header-file">
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this heading"></a></h3>
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/blob/3f0262d/include/mdns.h">include/mdns.h</a></p></li>
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/blob/42565ff/include/mdns.h">include/mdns.h</a></p></li>
</ul>
</section>
<section id="functions">
<h3>Functions<a class="headerlink" href="#functions" title="Permalink to this heading"></a></h3>
<h3>Functions<a class="headerlink" href="#functions" title="Permalink to this headline"></a></h3>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv49mdns_initv">
<span id="_CPPv39mdns_initv"></span><span id="_CPPv29mdns_initv"></span><span id="mdns_init__void"></span><span class="target" id="mdns_8h_1ad323a4dfba3545c43ebda0f3f7c515e0"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_init</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">void</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv49mdns_initv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Initialize mDNS on given interface. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><ul class="simple">
<li><p>ESP_OK on success</p></li>
<li><p>ESP_ERR_INVALID_STATE when failed to register event handler</p></li>
@@ -359,10 +357,10 @@
<span id="_CPPv317mdns_hostname_setPKc"></span><span id="_CPPv217mdns_hostname_setPKc"></span><span id="mdns_hostname_set__cCP"></span><span class="target" id="mdns_8h_1ac64252305d70be97d202f2edd5f44ccc"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_hostname_set</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv417mdns_hostname_setPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set the hostname for mDNS server required if you want to advertise services. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>hostname</strong> Hostname to set</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -378,13 +376,13 @@
<span id="_CPPv326mdns_delegate_hostname_addPKcPK14mdns_ip_addr_t"></span><span id="_CPPv226mdns_delegate_hostname_addPKcPK14mdns_ip_addr_t"></span><span id="mdns_delegate_hostname_add__cCP.mdns_ip_addr_tCP"></span><span class="target" id="mdns_8h_1aa569e098f34ab80e34ac76fbdca9aea7"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_delegate_hostname_add</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv414mdns_ip_addr_t" title="mdns_ip_addr_t"><span class="n"><span class="pre">mdns_ip_addr_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">address_list</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv426mdns_delegate_hostname_addPKcPK14mdns_ip_addr_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Adds a hostname and address to be delegated A/AAAA queries will be replied for the hostname and services can be added to this host. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hostname</strong> Hostname to add </p></li>
<li><p><strong>address_list</strong> The IP address list of the host</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -401,10 +399,10 @@
<span id="_CPPv329mdns_delegate_hostname_removePKc"></span><span id="_CPPv229mdns_delegate_hostname_removePKc"></span><span id="mdns_delegate_hostname_remove__cCP"></span><span class="target" id="mdns_8h_1aef8ff565fff40e32ebce1257592eb5e6"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_delegate_hostname_remove</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv429mdns_delegate_hostname_removePKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Remove a delegated hostname All the services added to this host will also be removed. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>hostname</strong> Hostname to remove</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -421,10 +419,10 @@
<span id="_CPPv320mdns_hostname_existsPKc"></span><span id="_CPPv220mdns_hostname_existsPKc"></span><span id="mdns_hostname_exists__cCP"></span><span class="target" id="mdns_8h_1ad4c1b990b7435f889b64f1d5ba29bbc8"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_hostname_exists</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv420mdns_hostname_existsPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Query whether a hostname has been added. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>hostname</strong> Hostname to query</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>true The hostname has been added.</p></li>
<li><p>false The hostname has not been added. </p></li>
@@ -439,10 +437,10 @@
<span id="_CPPv322mdns_instance_name_setPKc"></span><span id="_CPPv222mdns_instance_name_setPKc"></span><span id="mdns_instance_name_set__cCP"></span><span class="target" id="mdns_8h_1a1d4b64b9a4eee80a09db4ecc3ddf9d69"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_instance_name_set</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv422mdns_instance_name_setPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set the default instance name for mDNS server. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>instance_name</strong> Instance name to set</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -462,7 +460,7 @@
<p>The value length of txt items will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_name</strong> instance name to set. If NULL, global instance name or hostname will be used. Note that MDNS_MULTIPLE_INSTANCE config option needs to be enabled for adding multiple instances with the same instance type. </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -472,7 +470,7 @@
<li><p><strong>num_items</strong> number of items in TXT data</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -493,7 +491,7 @@
<p>The value length of txt items will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_name</strong> instance name to set. If NULL, global instance name or hostname will be used Note that MDNS_MULTIPLE_INSTANCE config option needs to be enabled for adding multiple instances with the same instance type. </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -504,7 +502,7 @@
<li><p><strong>num_items</strong> number of items in TXT data</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -521,14 +519,14 @@
<span id="_CPPv319mdns_service_existsPKcPKcPKc"></span><span id="_CPPv219mdns_service_existsPKcPKcPKc"></span><span id="mdns_service_exists__cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1ae8a4d63061c513329cfe10b60aedef79"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_exists</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv419mdns_service_existsPKcPKcPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Check whether a service has been added. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
<li><p><strong>hostname</strong> service hostname. If NULL, checks for the local hostname.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>true Correspondding service has been added.</p></li>
<li><p>false Service not found. </p></li>
@@ -543,7 +541,7 @@
<span id="_CPPv333mdns_service_exists_with_instancePKcPKcPKcPKc"></span><span id="_CPPv233mdns_service_exists_with_instancePKcPKcPKcPKc"></span><span id="mdns_service_exists_with_instance__cCP.cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1a1cab004cfd4250c5019fa29a66b0ebd4"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_exists_with_instance</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv433mdns_service_exists_with_instancePKcPKcPKcPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Check whether a service has been added. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -551,7 +549,7 @@
<li><p><strong>hostname</strong> service hostname. If NULL, checks for the local hostname.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>true Correspondding service has been added.</p></li>
<li><p>false Service not found. </p></li>
@@ -566,13 +564,13 @@
<span id="_CPPv319mdns_service_removePKcPKc"></span><span id="_CPPv219mdns_service_removePKcPKc"></span><span id="mdns_service_remove__cCP.cCP"></span><span class="target" id="mdns_8h_1a7f8ebdf3f99864b614f0a745965f7261"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_remove</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv419mdns_service_removePKcPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Remove service from mDNS server. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp)</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -589,7 +587,7 @@
<span id="_CPPv328mdns_service_remove_for_hostPKcPKcPKcPKc"></span><span id="_CPPv228mdns_service_remove_for_hostPKcPKcPKcPKc"></span><span id="mdns_service_remove_for_host__cCP.cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1ae7a3ba6e1bc137e4dc8f659eaa0647dd"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_remove_for_host</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv428mdns_service_remove_for_hostPKcPKcPKcPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Remove service from mDNS server with hostname. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -597,7 +595,7 @@
<li><p><strong>hostname</strong> service hostname. If NULL, local hostname will be used.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -614,14 +612,14 @@
<span id="_CPPv330mdns_service_instance_name_setPKcPKcPKc"></span><span id="_CPPv230mdns_service_instance_name_setPKcPKcPKc"></span><span id="mdns_service_instance_name_set__cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1ab10c7a6fd81148a1f115d6e1a8045950"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_instance_name_set</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv430mdns_service_instance_name_setPKcPKcPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set instance name for service. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
<li><p><strong>instance_name</strong> instance name to set</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -638,7 +636,7 @@
<span id="_CPPv339mdns_service_instance_name_set_for_hostPKcPKcPKcPKcPKc"></span><span id="_CPPv239mdns_service_instance_name_set_for_hostPKcPKcPKcPKcPKc"></span><span id="mdns_service_instance_name_set_for_host__cCP.cCP.cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1aafba1b5e4b768b6f0b3a6b9129d0391e"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_instance_name_set_for_host</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_old</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv439mdns_service_instance_name_set_for_hostPKcPKcPKcPKcPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set instance name for service with hostname. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_old</strong> original instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -647,7 +645,7 @@
<li><p><strong>instance_name</strong> instance name to set</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -664,14 +662,14 @@
<span id="_CPPv321mdns_service_port_setPKcPKc8uint16_t"></span><span id="_CPPv221mdns_service_port_setPKcPKc8uint16_t"></span><span id="mdns_service_port_set__cCP.cCP.uint16_t"></span><span class="target" id="mdns_8h_1a76f4ca1857edb589be79074b01b5b769"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_port_set</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">port</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv421mdns_service_port_setPKcPKc8uint16_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set service port. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
<li><p><strong>port</strong> service port</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -688,7 +686,7 @@
<span id="_CPPv330mdns_service_port_set_for_hostPKcPKcPKcPKc8uint16_t"></span><span id="_CPPv230mdns_service_port_set_for_hostPKcPKcPKcPKc8uint16_t"></span><span id="mdns_service_port_set_for_host__cCP.cCP.cCP.cCP.uint16_t"></span><span class="target" id="mdns_8h_1ab12923354695dde222e987edd61e6c06"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_port_set_for_host</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">port</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv430mdns_service_port_set_for_hostPKcPKcPKcPKc8uint16_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set service port with hostname. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -697,7 +695,7 @@
<li><p><strong>port</strong> service port</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -718,7 +716,7 @@
<p>The value length of txt items will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
@@ -726,7 +724,7 @@
<li><p><strong>num_items</strong> number of items in TXT data</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -747,7 +745,7 @@
<p>The value length of txt items will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -757,7 +755,7 @@
<li><p><strong>num_items</strong> number of items in TXT data</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -778,7 +776,7 @@
<p>The value length will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
@@ -786,7 +784,7 @@
<li><p><strong>value</strong> the new value of the key</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -803,7 +801,7 @@
<span id="_CPPv349mdns_service_txt_item_set_with_explicit_value_lenPKcPKcPKcPKc7uint8_t"></span><span id="_CPPv249mdns_service_txt_item_set_with_explicit_value_lenPKcPKcPKcPKc7uint8_t"></span><span id="mdns_service_txt_item_set_with_explicit_value_len__cCP.cCP.cCP.cCP.uint8_t"></span><span class="target" id="mdns_8h_1a64bea09792df133c09f11cf51f6dcefc"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_txt_item_set_with_explicit_value_len</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">key</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">value</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">value_len</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv449mdns_service_txt_item_set_with_explicit_value_lenPKcPKcPKcPKc7uint8_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set/Add TXT item for service TXT record. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
@@ -812,7 +810,7 @@
<li><p><strong>value_len</strong> the length of the value</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -833,7 +831,7 @@
<p>The value length will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -843,7 +841,7 @@
<li><p><strong>value</strong> the new value of the key</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -860,7 +858,7 @@
<span id="_CPPv358mdns_service_txt_item_set_for_host_with_explicit_value_lenPKcPKcPKcPKcPKcPKc7uint8_t"></span><span id="_CPPv258mdns_service_txt_item_set_for_host_with_explicit_value_lenPKcPKcPKcPKcPKcPKc7uint8_t"></span><span id="mdns_service_txt_item_set_for_host_with_explicit_value_len__cCP.cCP.cCP.cCP.cCP.cCP.uint8_t"></span><span class="target" id="mdns_8h_1a2c69fcca4875c15f4e978402e2799644"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_txt_item_set_for_host_with_explicit_value_len</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">key</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">value</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">value_len</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv458mdns_service_txt_item_set_for_host_with_explicit_value_lenPKcPKcPKcPKcPKcPKc7uint8_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set/Add TXT item for service TXT record with hostname and txt value length. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -871,7 +869,7 @@
<li><p><strong>value_len</strong> the length of the value</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -888,14 +886,14 @@
<span id="_CPPv328mdns_service_txt_item_removePKcPKcPKc"></span><span id="_CPPv228mdns_service_txt_item_removePKcPKcPKc"></span><span id="mdns_service_txt_item_remove__cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1a78211b1c712153774252cdd4f4d3fbe0"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_txt_item_remove</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">key</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv428mdns_service_txt_item_removePKcPKcPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Remove TXT item for service TXT record. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
<li><p><strong>key</strong> the key that you want to remove</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -912,7 +910,7 @@
<span id="_CPPv337mdns_service_txt_item_remove_for_hostPKcPKcPKcPKcPKc"></span><span id="_CPPv237mdns_service_txt_item_remove_for_hostPKcPKcPKcPKcPKc"></span><span id="mdns_service_txt_item_remove_for_host__cCP.cCP.cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1a24d59204b8eee8f653d79c3fc8198464"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_txt_item_remove_for_host</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">key</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv437mdns_service_txt_item_remove_for_hostPKcPKcPKcPKcPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Remove TXT item for service TXT record with hostname. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -921,7 +919,7 @@
<li><p><strong>key</strong> the key that you want to remove</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -938,7 +936,7 @@
<span id="_CPPv333mdns_service_subtype_add_for_hostPKcPKcPKcPKcPKc"></span><span id="_CPPv233mdns_service_subtype_add_for_hostPKcPKcPKcPKcPKc"></span><span id="mdns_service_subtype_add_for_host__cCP.cCP.cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1a1bc06bea17cf6beabd45649bc1cef73c"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_subtype_add_for_host</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">subtype</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv433mdns_service_subtype_add_for_hostPKcPKcPKcPKcPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Add subtype for service. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_name</strong> instance name. If NULL, will find the first service with the same service type and protocol. </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -947,7 +945,7 @@
<li><p><strong>subtype</strong> The subtype to add.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -964,7 +962,7 @@
<span id="_CPPv323mdns_service_remove_allv"></span><span id="_CPPv223mdns_service_remove_allv"></span><span id="mdns_service_remove_all__void"></span><span class="target" id="mdns_8h_1a16908d4bdd7a28d063bcaabffde74cec"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_remove_all</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">void</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv423mdns_service_remove_allv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Remove and free all services from mDNS server. </p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error </p></li>
@@ -979,10 +977,10 @@
<span id="_CPPv323mdns_query_async_deleteP18mdns_search_once_t"></span><span id="_CPPv223mdns_query_async_deleteP18mdns_search_once_t"></span><span id="mdns_query_async_delete__mdns_search_once_tP"></span><span class="target" id="mdns_8h_1af6d064e86da56a713e38c51b0c86d2b6"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_async_delete</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv418mdns_search_once_t" title="mdns_search_once_t"><span class="n"><span class="pre">mdns_search_once_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">search</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv423mdns_query_async_deleteP18mdns_search_once_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Deletes the finished query. Call this only after the search has ended! </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>search</strong> pointer to search object</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE search has not finished</p></li>
@@ -998,7 +996,7 @@
<span id="_CPPv328mdns_query_async_get_resultsP18mdns_search_once_t8uint32_tPP13mdns_result_tP7uint8_t"></span><span id="_CPPv228mdns_query_async_get_resultsP18mdns_search_once_t8uint32_tPP13mdns_result_tP7uint8_t"></span><span id="mdns_query_async_get_results__mdns_search_once_tP.uint32_t.mdns_result_tPP.uint8_tP"></span><span class="target" id="mdns_8h_1a4951d52996e21620767a272cd851e678"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_async_get_results</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv418mdns_search_once_t" title="mdns_search_once_t"><span class="n"><span class="pre">mdns_search_once_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">search</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">results</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">num_results</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv428mdns_query_async_get_resultsP18mdns_search_once_t8uint32_tPP13mdns_result_tP7uint8_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get results from search pointer. Results available as a pointer to the output parameter. Pointer to search object has to be deleted via <code class="docutils literal notranslate"><span class="pre">mdns_query_async_delete</span></code> once the query has finished. The results although have to be freed manually. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>search</strong> pointer to search object </p></li>
<li><p><strong>timeout</strong> time in milliseconds to wait for answers </p></li>
@@ -1006,7 +1004,7 @@
<li><p><strong>num_results</strong> pointer to the number of the actual result items (set to NULL to ignore this return value)</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>True if search has finished before or at timeout False if search timeout is over </p>
</dd>
</dl>
@@ -1017,7 +1015,7 @@
<span id="_CPPv320mdns_query_async_newPKcPKcPKc8uint16_t8uint32_t6size_t19mdns_query_notify_t"></span><span id="_CPPv220mdns_query_async_newPKcPKcPKc8uint16_t8uint32_t6size_t19mdns_query_notify_t"></span><span id="mdns_query_async_new__cCP.cCP.cCP.uint16_t.uint32_t.s.mdns_query_notify_t"></span><span class="target" id="mdns_8h_1a90a1cb33ad28636a27cb6926abff2171"></span><a class="reference internal" href="#_CPPv418mdns_search_once_t" title="mdns_search_once_t"><span class="n"><span class="pre">mdns_search_once_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_async_new</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">name</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">type</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">max_results</span></span>, <a class="reference internal" href="#_CPPv419mdns_query_notify_t" title="mdns_query_notify_t"><span class="n"><span class="pre">mdns_query_notify_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">notifier</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv420mdns_query_async_newPKcPKcPKc8uint16_t8uint32_t6size_t19mdns_query_notify_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Query mDNS for host or service asynchronousely. Search has to be tested for progress and deleted manually! </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> service instance or host name (NULL for PTR queries) </p></li>
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) (NULL for host queries) </p></li>
@@ -1028,7 +1026,7 @@
<li><p><strong>notifier</strong> Notification function to be called when the result is ready, can be NULL</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>mdns_search_once_s pointer to new search object if query initiated successfully. NULL otherwise. </p>
</dd>
</dl>
@@ -1039,7 +1037,7 @@
<span id="_CPPv318mdns_query_genericPKcPKcPKc8uint16_t30mdns_query_transmission_type_t8uint32_t6size_tPP13mdns_result_t"></span><span id="_CPPv218mdns_query_genericPKcPKcPKc8uint16_t30mdns_query_transmission_type_t8uint32_t6size_tPP13mdns_result_t"></span><span id="mdns_query_generic__cCP.cCP.cCP.uint16_t.mdns_query_transmission_type_t.uint32_t.s.mdns_result_tPP"></span><span class="target" id="mdns_8h_1ac9a14428f6d3428445ae1888b67c68d7"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_generic</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">name</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">type</span></span>, <a class="reference internal" href="#_CPPv430mdns_query_transmission_type_t" title="mdns_query_transmission_type_t"><span class="n"><span class="pre">mdns_query_transmission_type_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">transmission_type</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">max_results</span></span>, <a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">results</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418mdns_query_genericPKcPKcPKc8uint16_t30mdns_query_transmission_type_t8uint32_t6size_tPP13mdns_result_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Generic mDNS query All following query methods are derived from this one. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> service instance or host name (NULL for PTR queries) </p></li>
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) (NULL for host queries) </p></li>
@@ -1051,7 +1049,7 @@
<li><p><strong>results</strong> pointer to the results of the query results must be freed using mdns_query_results_free below</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1069,7 +1067,7 @@
<dd><p>Query mDNS for host or service. </p>
<p>Note that querying PTR types sends Multicast query, all other types send Unicast queries</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> service instance or host name (NULL for PTR queries) </p></li>
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) (NULL for host queries) </p></li>
@@ -1080,7 +1078,7 @@
<li><p><strong>results</strong> pointer to the results of the query results must be freed using mdns_query_results_free below</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1097,7 +1095,7 @@
<span id="_CPPv323mdns_query_results_freeP13mdns_result_t"></span><span id="_CPPv223mdns_query_results_freeP13mdns_result_t"></span><span id="mdns_query_results_free__mdns_result_tP"></span><span class="target" id="mdns_8h_1ad7a11c09688e313da1d3eccd03cfd99e"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_results_free</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">results</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv423mdns_query_results_freeP13mdns_result_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Free query results. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>results</strong> linked list of results to be freed </p>
</dd>
</dl>
@@ -1108,7 +1106,7 @@
<span id="_CPPv314mdns_query_ptrPKcPKc8uint32_t6size_tPP13mdns_result_t"></span><span id="_CPPv214mdns_query_ptrPKcPKc8uint32_t6size_tPP13mdns_result_t"></span><span id="mdns_query_ptr__cCP.cCP.uint32_t.s.mdns_result_tPP"></span><span class="target" id="mdns_8h_1a6ff4f04336fc1001383370ddbdaf3bca"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_ptr</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">max_results</span></span>, <a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">results</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv414mdns_query_ptrPKcPKc8uint32_t6size_tPP13mdns_result_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Query mDNS for service. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp, etc.) </p></li>
@@ -1117,7 +1115,7 @@
<li><p><strong>results</strong> pointer to the results of the query</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1134,7 +1132,7 @@
<span id="_CPPv314mdns_query_srvPKcPKcPKc8uint32_tPP13mdns_result_t"></span><span id="_CPPv214mdns_query_srvPKcPKcPKc8uint32_tPP13mdns_result_t"></span><span id="mdns_query_srv__cCP.cCP.cCP.uint32_t.mdns_result_tPP"></span><span class="target" id="mdns_8h_1a7650de908662e5b763187120593cc3c0"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_srv</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">result</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv414mdns_query_srvPKcPKcPKc8uint32_tPP13mdns_result_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Query mDNS for SRV record. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_name</strong> service instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) </p></li>
@@ -1143,7 +1141,7 @@
<li><p><strong>result</strong> pointer to the result of the query</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1160,7 +1158,7 @@
<span id="_CPPv314mdns_query_txtPKcPKcPKc8uint32_tPP13mdns_result_t"></span><span id="_CPPv214mdns_query_txtPKcPKcPKc8uint32_tPP13mdns_result_t"></span><span id="mdns_query_txt__cCP.cCP.cCP.uint32_t.mdns_result_tPP"></span><span class="target" id="mdns_8h_1a7b3559ac8131c14a4eca73a781d22178"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_txt</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">result</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv414mdns_query_txtPKcPKcPKc8uint32_tPP13mdns_result_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Query mDNS for TXT record. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_name</strong> service instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) </p></li>
@@ -1169,7 +1167,7 @@
<li><p><strong>result</strong> pointer to the result of the query</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1186,14 +1184,14 @@
<span id="_CPPv312mdns_query_aPKc8uint32_tP14esp_ip4_addr_t"></span><span id="_CPPv212mdns_query_aPKc8uint32_tP14esp_ip4_addr_t"></span><span id="mdns_query_a__cCP.uint32_t.esp_ip4_addr_tP"></span><span class="target" id="mdns_8h_1a1c7ccc14c3a0a6cf29af3fe33345ad78"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_a</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">host_name</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <span class="n"><span class="pre">esp_ip4_addr_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">addr</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv412mdns_query_aPKc8uint32_tP14esp_ip4_addr_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Query mDNS for A record. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>host_name</strong> host name to look for </p></li>
<li><p><strong>timeout</strong> time in milliseconds to wait for answer. </p></li>
<li><p><strong>addr</strong> pointer to the resulting IP4 address</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1210,10 +1208,10 @@
<span id="_CPPv319mdns_register_netifP11esp_netif_t"></span><span id="_CPPv219mdns_register_netifP11esp_netif_t"></span><span id="mdns_register_netif__esp_netif_tP"></span><span class="target" id="mdns_8h_1ae4512122be1ad7c7f87536b944c43b78"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_register_netif</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">esp_netif_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">esp_netif</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv419mdns_register_netifP11esp_netif_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Register custom esp_netif with mDNS functionality mDNS service runs by default on preconfigured interfaces (STA, AP, ETH). This API enables running the service on any customized interface, either using standard WiFi or Ethernet driver or any kind of user defined driver. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>esp_netif</strong> Pointer to esp-netif interface </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running or this netif is already registered</p></li>
@@ -1229,10 +1227,10 @@
<span id="_CPPv321mdns_unregister_netifP11esp_netif_t"></span><span id="_CPPv221mdns_unregister_netifP11esp_netif_t"></span><span id="mdns_unregister_netif__esp_netif_tP"></span><span class="target" id="mdns_8h_1af9bda443a1b8b50ed5ebbc6f5f58e62f"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_unregister_netif</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">esp_netif_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">esp_netif</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv421mdns_unregister_netifP11esp_netif_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Unregister esp-netif already registered in mDNS service. </p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>esp_netif</strong> Pointer to esp-netif interface </p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1254,13 +1252,13 @@
</ul>
</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>esp_netif</strong> Pointer to esp-netif interface </p></li>
<li><p><strong>event_action</strong> Disable/Enable/Announce on this interface over IPv4/IPv6 protocol. Actions enumerated in mdns_event_actions_t type. </p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running or this netif is not registered</p></li>
@@ -1273,7 +1271,7 @@
</section>
<section id="structures">
<h3>Structures<a class="headerlink" href="#structures" title="Permalink to this heading"></a></h3>
<h3>Structures<a class="headerlink" href="#structures" title="Permalink to this headline"></a></h3>
<dl class="cpp struct">
<dt class="sig sig-object cpp" id="_CPPv415mdns_txt_item_t">
<span id="_CPPv315mdns_txt_item_t"></span><span id="_CPPv215mdns_txt_item_t"></span><span id="mdns_txt_item_t"></span><span class="target" id="structmdns__txt__item__t"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_txt_item_t</span></span></span><a class="headerlink" href="#_CPPv415mdns_txt_item_t" title="Permalink to this definition"></a><br /></dt>
@@ -1405,7 +1403,7 @@
</section>
<section id="macros">
<h3>Macros<a class="headerlink" href="#macros" title="Permalink to this heading"></a></h3>
<h3>Macros<a class="headerlink" href="#macros" title="Permalink to this headline"></a></h3>
<dl class="cpp macro">
<dt class="sig sig-object cpp" id="c.MDNS_TYPE_A">
<span class="target" id="mdns_8h_1aadb9a175b672893b350f1e7032009e00"></span><span class="sig-name descname"><span class="n"><span class="pre">MDNS_TYPE_A</span></span></span><a class="headerlink" href="#c.MDNS_TYPE_A" title="Permalink to this definition"></a><br /></dt>
@@ -1448,7 +1446,7 @@
</section>
<section id="type-definitions">
<h3>Type Definitions<a class="headerlink" href="#type-definitions" title="Permalink to this heading"></a></h3>
<h3>Type Definitions<a class="headerlink" href="#type-definitions" title="Permalink to this headline"></a></h3>
<dl class="cpp type">
<dt class="sig sig-object cpp" id="_CPPv418mdns_search_once_t">
<span id="_CPPv318mdns_search_once_t"></span><span id="_CPPv218mdns_search_once_t"></span><span id="mdns_search_once_t"></span><span class="target" id="mdns_8h_1a8815240672c5880e798ca6655309c589"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="n"><span class="pre">mdns_search_once_s</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_search_once_t</span></span></span><a class="headerlink" href="#_CPPv418mdns_search_once_t" title="Permalink to this definition"></a><br /></dt>
@@ -1474,7 +1472,7 @@
</section>
<section id="enumerations">
<h3>Enumerations<a class="headerlink" href="#enumerations" title="Permalink to this heading"></a></h3>
<h3>Enumerations<a class="headerlink" href="#enumerations" title="Permalink to this headline"></a></h3>
<dl class="cpp enum">
<dt class="sig sig-object cpp" id="_CPPv420mdns_event_actions_t">
<span id="_CPPv320mdns_event_actions_t"></span><span id="_CPPv220mdns_event_actions_t"></span><span class="target" id="mdns_8h_1a14279e8f2e7c65c12320222a55f09fdf"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_event_actions_t</span></span></span><a class="headerlink" href="#_CPPv420mdns_event_actions_t" title="Permalink to this definition"></a><br /></dt>

View File

@@ -16,9 +16,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/js/theme.js"></script>

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 8940cd0d894a9ed0ad03abcf1e91ba9e
config: f8195a6c56a7c32b8107d3a5a81e2f57
tags: 549b3d6d0415232fb7e35403b330ff49

View File

@@ -1,134 +0,0 @@
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

View File

@@ -222,7 +222,7 @@ table.modindextable td {
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
min-width: 450px;
max-width: 800px;
}
@@ -237,6 +237,16 @@ a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
@@ -324,15 +334,13 @@ aside.sidebar {
p.sidebar-title {
font-weight: bold;
}
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
@@ -371,8 +379,6 @@ div.body p.centered {
div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
@@ -380,8 +386,6 @@ div.admonition > :last-child {
div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
@@ -424,6 +428,10 @@ table.docutils td, table.docutils th {
border-bottom: 1px solid #aaa;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
@@ -606,26 +614,20 @@ ol.simple p,
ul.simple p {
margin-bottom: 0;
}
aside.footnote > span,
div.citation > span {
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
@@ -642,6 +644,10 @@ dl.field-list > dt {
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;

View File

@@ -2,155 +2,357 @@
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation.
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
this.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE: "unknown",
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined')
return string;
return (typeof translated === 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) === 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
var url = new URL(window.location);
url.searchParams.delete('highlight');
window.history.replaceState({}, '', url);
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
focusSearchBar : function() {
$('input[name=q]').first().focus();
},
/**
* Initialise the domain index toggle buttons
* make the url absolute
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
initOnKeyListeners: () => {
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return;
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
$(document).keydown(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box, textarea, dropdown or button
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
&& activeElementType !== 'BUTTON') {
if (event.altKey || event.ctrlKey || event.metaKey)
return;
if (!event.shiftKey) {
if (!event.shiftKey) {
switch (event.key) {
case 'ArrowLeft':
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
break;
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
break;
case 'ArrowRight':
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
break;
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
break;
case 'Escape':
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
break;
Documentation.hideSearchWords();
return false;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
case '/':
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
break;
Documentation.focusSearchBar();
return false;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
}
};
// quick alias for translations
const _ = Documentation.gettext;
_ = Documentation.gettext;
_ready(Documentation.init);
$(document).ready(function() {
Documentation.init();
});

View File

@@ -1,7 +1,7 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: 'latest',
LANGUAGE: 'zh-CN',
LANGUAGE: 'zh_CN',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',

10872
mdns/zh_CN/_static/jquery-3.5.1.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -10,7 +10,7 @@
*
*/
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
/* Non-minified version is copied as a separate JS file, is available */
@@ -197,3 +197,101 @@ var Stemmer = function() {
}
}
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}

View File

@@ -8,20 +8,18 @@
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
/**
* Simple result scoring code.
*/
if (typeof Scorer === "undefined") {
if (!Scorer) {
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [docname, title, anchor, descr, score, filename]
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: result => {
const [docname, title, anchor, descr, score, filename] = result
return score
score: function(result) {
return result[4];
},
*/
@@ -30,11 +28,9 @@ if (typeof Scorer === "undefined") {
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
@@ -43,495 +39,452 @@ if (typeof Scorer === "undefined") {
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
partialTerm: 2
};
}
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr, score, _filename] = item;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
if (!splitQuery) {
function splitQuery(query) {
return query.split(/\s+/);
}
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms)
);
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
}
/**
* Search Module
*/
const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
var Search = {
htmlToText: (htmlString) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
);
return "";
_index : null,
_queued_query : null,
_pulse_status : -1,
htmlToText : function(htmlString) {
var virtualDocument = document.implementation.createHTMLDocument('virtual');
var htmlElement = $(htmlString, virtualDocument);
htmlElement.find('.headerlink').remove();
docContent = htmlElement.find('[role=main]')[0];
if(docContent === undefined) {
console.warn("Content block not found. Sphinx search tries to obtain it " +
"via '[role=main]'. Could you check your theme or template.");
return "";
}
return docContent.textContent || docContent.innerText;
},
init: () => {
const query = new URLSearchParams(window.location.search).get("q");
document
.querySelectorAll('input[name="q"]')
.forEach((el) => (el.value = query));
if (query) Search.performSearch(query);
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex: () => Search._index !== null,
hasIndex : function() {
return this._index !== null;
},
deferQuery: (query) => (Search._queued_query = query),
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse: () => (Search._pulse_status = -1),
stopPulse : function() {
this._pulse_status = 0;
},
startPulse: () => {
if (Search._pulse_status >= 0) return;
const pulse = () => {
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
Search.dots.innerText = ".".repeat(Search._pulse_status);
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
};
var dotString = '';
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch: (query) => {
performSearch : function(query) {
// create the required interface elements
const searchText = document.createElement("h2");
searchText.textContent = _("Searching");
const searchSummary = document.createElement("p");
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
const out = document.getElementById("search-results");
Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (Search.hasIndex()) Search.query(query);
else Search.deferQuery(query);
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
query : function(query) {
var i;
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// maybe skip this "word"
// stopwords array is from language_data.js
if (
stopwords.indexOf(queryTermLower) !== -1 ||
queryTerm.match(/^\d+$/)
)
return;
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
var objectterms = [];
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
let word = stemmer.stemWord(queryTermLower);
var word = stemmer.stemWord(tmp[i].toLowerCase());
var toAppend;
// select the correct list
if (word[0] === "-") excludedTerms.add(word.substr(1));
if (word[0] == '-') {
toAppend = excluded;
word = word.substr(1);
}
else {
searchTerms.add(word);
highlightTerms.add(queryTermLower);
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
// only add if not already in the list
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// array of [docname, title, anchor, descr, score, filename]
let results = [];
_removeChildren(document.getElementById("search-progress"));
// prepare search
var terms = this._index.terms;
var titleterms = this._index.titleterms;
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
);
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
return leftScore > rightScore ? 1 : -1;
});
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
//console.info('search results:', Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms);
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li></li>');
var requestUrl = "";
var linkUrl = "";
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) {
$.ajax({url: requestUrl,
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
var summary = Search.makeSearchSummary(data, searchterms, hlterms);
if (summary) {
listItem.append(summary);
}
}
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}});
} else {
// just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch: (object, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const objects = Search._index.objects;
const objNames = Search._index.objnames;
const titles = Search._index.titles;
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var docnames = this._index.docnames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
const results = [];
var i;
var results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
for (var prefix in objects) {
for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
var match = objects[prefix][iMatch];
var name = match[4];
var fullname = (prefix ? prefix + '.' : '') + name;
var fullnameLower = fullname.toLowerCase()
if (fullnameLower.indexOf(object) > -1) {
var score = 0;
var parts = fullnameLower.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
let score = 0;
const parts = fullnameLower.split(".");
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch;
else if (parts.slice(-1)[0].indexOf(object) > -1)
score += Scorer.objPartialMatch; // matches in last name
const objName = objNames[match[1]][2];
const title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results;
},
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
*/
escapeRegExp : function(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
/**
* search for full-text terms in the index
*/
performTermsSearch: (searchTerms, excludedTerms) => {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var docnames = this._index.docnames;
var filenames = this._index.filenames;
var titles = this._index.titles;
const scoreMap = new Map();
const fileMap = new Map();
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word])
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word])
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
});
var word_regex = this.escapeRegExp(word);
for (var w in terms) {
if (w.match(word_regex) && !terms[word]) {
_o.push({files: terms[w], score: Scorer.partialTerm})
}
}
for (var w in titleterms) {
if (w.match(word_regex) && !titleterms[word]) {
_o.push({files: titleterms[w], score: Scorer.partialTitle})
}
}
}
// no match but word was a required one
if (arr.every((record) => record.files === undefined)) return;
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
arr.forEach((record) => {
if (record.files === undefined) return;
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
let recordFiles = record.files;
if (recordFiles.length === undefined) recordFiles = [recordFiles];
files.push(...recordFiles);
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
});
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {};
scoreMap[file][word] = o.score;
}
});
// create the mapping
files.forEach((file) => {
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
fileMap.get(file).push(word);
else fileMap.set(file, [word]);
});
});
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap && fileMap[file].indexOf(word) === -1)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
const results = [];
for (const [file, wordList] of fileMap) {
// check if all requirements are matched
for (file in fileMap) {
var valid = true;
// as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
// check if all requirements are matched
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
searchterms.filter(function(term){return term.length > 2}).length
if (
wordList.length !== searchTerms.size &&
wordList.length !== filteredTermCount
)
continue;
fileMap[file].length != searchterms.length &&
fileMap[file].length != filteredTermCount
) continue;
// ensure that none of the excluded terms is in the search result
if (
[...excludedTerms].some(
(term) =>
terms[term] === file ||
titleTerms[term] === file ||
(terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break;
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
]);
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
}
}
return results;
},
@@ -539,28 +492,34 @@ const Search = {
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words.
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary: (htmlText, keywords) => {
const text = Search.htmlToText(htmlText);
if (text === "") return null;
const textLower = text.toLowerCase();
const actualStartPosition = [...keywords]
.map((k) => textLower.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("p");
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
return summary;
},
makeSearchSummary : function(htmlText, keywords, hlwords) {
var text = Search.htmlToText(htmlText);
if (text == "") {
return null;
}
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<p class="context"></p>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
};
_ready(Search.init);
$(document).ready(function() {
Search.init();
});

View File

@@ -1,144 +0,0 @@
/* Highlighting utilities for Sphinx HTML documentation. */
"use strict";
const SPHINX_HIGHLIGHT_ENABLED = true
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const SphinxHighlight = {
/**
* highlight the search words provided in localstorage in the text
*/
highlightSearchWords: () => {
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
// get and clear terms from localstorage
const url = new URL(window.location);
const highlight =
localStorage.getItem("sphinx_highlight_terms")
|| url.searchParams.get("highlight")
|| "";
localStorage.removeItem("sphinx_highlight_terms")
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
// get individual terms from highlight string
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
localStorage.removeItem("sphinx_highlight_terms")
},
initEscapeListener: () => {
// only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
SphinxHighlight.hideSearchWords();
event.preventDefault();
}
});
},
};
_ready(SphinxHighlight.highlightSearchWords);
_ready(SphinxHighlight.initEscapeListener);

View File

@@ -4,50 +4,52 @@ Documentation.addTranslations({
"%(filename)s &#8212; %(docstitle)s": "%(filename)s &#8212; %(docstitle)s",
"&#169; <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "&#169; <a href=\"%(path)s\"> \u7248\u6743\u6240\u6709</a> %(copyright)s.",
"&#169; Copyright %(copyright)s.": "&#169; \u7248\u6743\u6240\u6709 %(copyright)s.",
", in ": "\uff0c\u5728 ",
"About these documents": "\u5173\u4e8e\u6b64\u6587\u6863",
"Automatically generated list of changes in version %(version)s": "\u81ea\u52a8\u751f\u6210\u7684 %(version)s \u7248\u672c\u53d8\u66f4\u5217\u8868",
"C API changes": "C API \u7684\u53d8\u66f4",
"Changes in Version %(version)s &#8212; %(docstitle)s": "\u4e8e\u7248\u672c %(version)s&#8212; %(docstitle)s \u53d8\u66f4",
", in ": "\uff0c \u5728 ",
"About these documents": "\u5173\u4e8e\u8fd9\u4e9b\u6587\u6863",
"Automatically generated list of changes in version %(version)s": "\u81ea\u52a8\u751f\u6210\u7684 %(version)s \u7248\u672c\u4e2d\u7684\u66f4\u6539\u5217\u8868",
"C API changes": "C API \u66f4\u6539",
"Changes in Version %(version)s &#8212; %(docstitle)s": "\u66f4\u6539\u53d1\u751f\u5728\u7248\u672c %(version)s&#8212; %(docstitle)s",
"Collapse sidebar": "\u6298\u53e0\u8fb9\u680f",
"Complete Table of Contents": "\u5b8c\u6574\u76ee\u5f55",
"Complete Table of Contents": "\u5b8c\u6574\u7684\u5185\u5bb9\u8868",
"Contents": "\u76ee\u5f55",
"Copyright": "\u7248\u6743\u6240\u6709",
"Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u7531 <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s\u521b\u5efa\u3002",
"Expand sidebar": "\u5c55\u5f00\u8fb9\u680f",
"Full index on one page": "\u5355\u9875\u5168\u7d22\u5f15",
"General Index": "\u603b\u7d22\u5f15",
"Full index on one page": "\u4e00\u9875\u7684\u5168\u90e8\u7d22\u5f15",
"General Index": "\u603b\u76ee\u5f55",
"Global Module Index": "\u5168\u5c40\u6a21\u5757\u7d22\u5f15",
"Go": "\u63d0\u4ea4",
"Go": "\u8f6c\u5411",
"Hide Search Matches": "\u9690\u85cf\u641c\u7d22\u7ed3\u679c",
"Index": "\u7d22\u5f15",
"Index &ndash; %(key)s": "\u7d22\u5f15 &ndash; %(key)s",
"Index pages by letter": "\u5b57\u6bcd\u7d22\u5f15",
"Index pages by letter": "\u6309\u7167\u5b57\u6bcd\u7684\u7d22\u5f15\u9875",
"Indices and tables:": "\u7d22\u5f15\u548c\u8868\u683c\uff1a",
"Last updated on %(last_updated)s.": "\u6700\u540e\u66f4\u65b0\u4e8e %(last_updated)s.",
"Library changes": "\u5e93\u7684\u53d8\u66f4",
"Library changes": "\u5e93\u66f4\u6539",
"Navigation": "\u5bfc\u822a",
"Next topic": "\u4e0b\u4e00\u4e3b\u9898",
"Other changes": "\u5176\u4ed6\u53d8\u66f4",
"Next topic": "\u4e0b\u4e00\u4e2a\u4e3b\u9898",
"Other changes": "\u5176\u4ed6\u66f4\u6539",
"Overview": "\u6982\u8ff0",
"Permalink to this definition": "\u6c38\u4e45\u94fe\u63a5\u81f3\u76ee\u6807",
"Permalink to this headline": "\u6c38\u4e45\u94fe\u63a5\u81f3\u6807\u9898",
"Please activate JavaScript to enable the search\n functionality.": "\u8bf7\u6fc0\u6d3b JavaScript \u4ee5\u5f00\u542f\u641c\u7d22\u529f\u80fd\u3002",
"Preparing search...": "\u6b63\u5728\u51c6\u5907\u641c\u7d22\u2026\u2026",
"Previous topic": "\u4e0a\u4e00\u4e3b\u9898",
"Preparing search...": "\u51c6\u5907\u641c\u7d22\u2026\u2026",
"Previous topic": "\u4e0a\u4e00\u4e2a\u4e3b\u9898",
"Quick search": "\u5feb\u901f\u641c\u7d22",
"Search": "\u641c\u7d22",
"Search Page": "\u641c\u7d22\u9875\u9762",
"Search Results": "\u641c\u7d22\u7ed3\u679c",
"Search finished, found ${resultCount} page(s) matching the search query.": "\u641c\u7d22\u5b8c\u6210\uff0c\u5339\u914d\u5230 ${resultCount} \u9875\u3002",
"Search finished, found %s page(s) matching the search query.": "\u641c\u7d22\u5b8c\u6210\uff0c\u6709 %s \u4e2a\u9875\u9762\u5339\u914d\u3002",
"Search within %(docstitle)s": "\u5728 %(docstitle)s \u4e2d\u641c\u7d22",
"Searching": "\u6b63\u5728\u641c\u7d22\u4e2d",
"Searching for multiple words only shows matches that contain\n all words.": "\u5f53\u641c\u7d22\u591a\u4e2a\u5173\u952e\u8bcd\u65f6\uff0c\u53ea\u4f1a\u663e\u793a\u540c\u65f6\u5305\u542b\u6240\u6709\u5173\u952e\u8bcd\u7684\u5185\u5bb9\u3002",
"Searching": "\u641c\u7d22\u4e2d",
"Searching for multiple words only shows matches that contain\n all words.": "\u641c\u5bfb\u5305\u542b\u591a\u4e2a\u5b57\u7684\u8bcd\u6c47\u65f6\uff0c\n \u53ea\u6709\u6240\u542b\u6240\u6709\u5185\u5bb9\u90fd\u5339\u914d\u65f6\u624d\u4f1a\u51fa\u73b0\u3002",
"Show Source": "\u663e\u793a\u6e90\u4ee3\u7801",
"Table of Contents": "\u76ee\u5f55",
"This Page": "\u672c\u9875",
"Welcome! This is": "\u6b22\u8fce\uff01",
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u60a8\u7684\u641c\u7d22\u6ca1\u6709\u5339\u914d\u5230\u6587\u6863\u3002\u8bf7\u786e\u4fdd\u5173\u952e\u8bcd\u62fc\u5199\u6b63\u786e\uff0c\u5e76\u4e14\u9009\u62e9\u4e86\u5408\u9002\u7684\u5206\u7c7b\u3002",
"all functions, classes, terms": "\u6240\u6709\u51fd\u6570\u3001\u7c7b\u3001\u672f\u8bed\u8bcd\u6c47",
"can be huge": "\u53ef\u80fd\u4f1a\u5927",
"Welcome! This is": "\u6b22\u8fce\uff01\u8fd9\u662f",
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u6ca1\u6709\u4efb\u4f55\u6587\u6863\u5339\u914d\u60a8\u7684\u641c\u7d22\u3002\u8bf7\u786e\u4fdd\u4f60\u8f93\u5165\u7684\u8bcd\u62fc\u5199\u6b63\u786e\u5e76\u9009\u62e9\u4e86\u5408\u9002\u7684\u5206\u7c7b\u3002",
"all functions, classes, terms": "\u6240\u7684\u51fd\u6570\uff0c\u7c7b\uff0c\u672f\u8bed",
"can be huge": "\u53ef\u80fd\u4f1a\u5f88\u591a",
"last updated": "\u6700\u540e\u66f4\u65b0\u4e8e",
"lists all sections and subsections": "\u5217\u51fa\u6240\u6709\u7684\u7ae0\u8282\u548c\u90e8\u5206",
"next chapter": "\u4e0b\u4e00\u7ae0",
@@ -55,7 +57,7 @@ Documentation.addTranslations({
"quick access to all modules": "\u5feb\u901f\u67e5\u770b\u6240\u6709\u7684\u6a21\u5757",
"search": "\u641c\u7d22",
"search this documentation": "\u641c\u7d22\u6587\u6863",
"the documentation for": "\u672c\u6587\u6863\u5c5e\u4e8e"
"the documentation for": "\u8fd9\u4efd\u6587\u6863\u662f"
},
"plural_expr": "0"
});

View File

@@ -15,9 +15,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/translations.js"></script>
@@ -92,7 +90,7 @@
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>索引</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/espressif/esp-protocols/blob/3f0262d/docs/zh_CN/genindex" class="fa fa-github"> 在 GitHub 上修改</a>
<a href="https://github.com/espressif/esp-protocols/blob/42565ff/docs/zh_CN/genindex" class="fa fa-github"> 在 GitHub 上修改</a>
</li>
</ul>
<hr/>
@@ -110,179 +108,179 @@
<h2 id="M">M</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="index.html#_CPPv426mdns_delegate_hostname_addPKcPK14mdns_ip_addr_t">mdns_delegate_hostname_addC++ function</a>
<li><a href="index.html#_CPPv426mdns_delegate_hostname_addPKcPK14mdns_ip_addr_t">mdns_delegate_hostname_add (C++ function)</a>
</li>
<li><a href="index.html#_CPPv429mdns_delegate_hostname_removePKc">mdns_delegate_hostname_removeC++ function</a>
<li><a href="index.html#_CPPv429mdns_delegate_hostname_removePKc">mdns_delegate_hostname_remove (C++ function)</a>
</li>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t23MDNS_EVENT_ANNOUNCE_IP4E">mdns_event_actions_t::MDNS_EVENT_ANNOUNCE_IP4C++ enumerator</a>
<li><a href="index.html#_CPPv420mdns_event_actions_t">mdns_event_actions_t (C++ enum)</a>
</li>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t23MDNS_EVENT_ANNOUNCE_IP6E">mdns_event_actions_t::MDNS_EVENT_ANNOUNCE_IP6C++ enumerator</a>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t23MDNS_EVENT_ANNOUNCE_IP4E">mdns_event_actions_t::MDNS_EVENT_ANNOUNCE_IP4 (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t22MDNS_EVENT_DISABLE_IP4E">mdns_event_actions_t::MDNS_EVENT_DISABLE_IP4C++ enumerator</a>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t23MDNS_EVENT_ANNOUNCE_IP6E">mdns_event_actions_t::MDNS_EVENT_ANNOUNCE_IP6 (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t22MDNS_EVENT_DISABLE_IP6E">mdns_event_actions_t::MDNS_EVENT_DISABLE_IP6C++ enumerator</a>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t22MDNS_EVENT_DISABLE_IP4E">mdns_event_actions_t::MDNS_EVENT_DISABLE_IP4 (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t21MDNS_EVENT_ENABLE_IP4E">mdns_event_actions_t::MDNS_EVENT_ENABLE_IP4C++ enumerator</a>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t22MDNS_EVENT_DISABLE_IP6E">mdns_event_actions_t::MDNS_EVENT_DISABLE_IP6 (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t21MDNS_EVENT_ENABLE_IP6E">mdns_event_actions_t::MDNS_EVENT_ENABLE_IP6C++ enumerator</a>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t21MDNS_EVENT_ENABLE_IP4E">mdns_event_actions_t::MDNS_EVENT_ENABLE_IP4 (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv420mdns_event_actions_t">mdns_event_actions_tC++ enum</a>
<li><a href="index.html#_CPPv4N20mdns_event_actions_t21MDNS_EVENT_ENABLE_IP6E">mdns_event_actions_t::MDNS_EVENT_ENABLE_IP6 (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv49mdns_freev">mdns_freeC++ function</a>
<li><a href="index.html#_CPPv49mdns_freev">mdns_free (C++ function)</a>
</li>
<li><a href="index.html#_CPPv420mdns_hostname_existsPKc">mdns_hostname_existsC++ function</a>
<li><a href="index.html#_CPPv420mdns_hostname_existsPKc">mdns_hostname_exists (C++ function)</a>
</li>
<li><a href="index.html#_CPPv417mdns_hostname_setPKc">mdns_hostname_setC++ function</a>
<li><a href="index.html#_CPPv417mdns_hostname_setPKc">mdns_hostname_set (C++ function)</a>
</li>
<li><a href="index.html#_CPPv49mdns_initv">mdns_initC++ function</a>
<li><a href="index.html#_CPPv49mdns_initv">mdns_init (C++ function)</a>
</li>
<li><a href="index.html#_CPPv422mdns_instance_name_setPKc">mdns_instance_name_setC++ function</a>
<li><a href="index.html#_CPPv422mdns_instance_name_setPKc">mdns_instance_name_set (C++ function)</a>
</li>
<li><a href="index.html#_CPPv4N14mdns_ip_addr_s4addrE">mdns_ip_addr_s::addrC++ member</a>
<li><a href="index.html#_CPPv414mdns_ip_addr_s">mdns_ip_addr_s (C++ struct)</a>
</li>
<li><a href="index.html#_CPPv4N14mdns_ip_addr_s4nextE">mdns_ip_addr_s::nextC++ member</a>
<li><a href="index.html#_CPPv4N14mdns_ip_addr_s4addrE">mdns_ip_addr_s::addr (C++ member)</a>
</li>
<li><a href="index.html#_CPPv414mdns_ip_addr_s">mdns_ip_addr_sC++ struct</a>
<li><a href="index.html#_CPPv4N14mdns_ip_addr_s4nextE">mdns_ip_addr_s::next (C++ member)</a>
</li>
<li><a href="index.html#_CPPv414mdns_ip_addr_t">mdns_ip_addr_tC++ type</a>
<li><a href="index.html#_CPPv414mdns_ip_addr_t">mdns_ip_addr_t (C++ type)</a>
</li>
<li><a href="index.html#_CPPv4N18mdns_ip_protocol_t20MDNS_IP_PROTOCOL_MAXE">mdns_ip_protocol_t::MDNS_IP_PROTOCOL_MAXC++ enumerator</a>
<li><a href="index.html#_CPPv418mdns_ip_protocol_t">mdns_ip_protocol_t (C++ enum)</a>
</li>
<li><a href="index.html#_CPPv4N18mdns_ip_protocol_t19MDNS_IP_PROTOCOL_V4E">mdns_ip_protocol_t::MDNS_IP_PROTOCOL_V4C++ enumerator</a>
<li><a href="index.html#_CPPv4N18mdns_ip_protocol_t20MDNS_IP_PROTOCOL_MAXE">mdns_ip_protocol_t::MDNS_IP_PROTOCOL_MAX (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv4N18mdns_ip_protocol_t19MDNS_IP_PROTOCOL_V6E">mdns_ip_protocol_t::MDNS_IP_PROTOCOL_V6C++ enumerator</a>
<li><a href="index.html#_CPPv4N18mdns_ip_protocol_t19MDNS_IP_PROTOCOL_V4E">mdns_ip_protocol_t::MDNS_IP_PROTOCOL_V4 (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv418mdns_ip_protocol_t">mdns_ip_protocol_tC++ enum</a>
<li><a href="index.html#_CPPv4N18mdns_ip_protocol_t19MDNS_IP_PROTOCOL_V6E">mdns_ip_protocol_t::MDNS_IP_PROTOCOL_V6 (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv417mdns_netif_actionP11esp_netif_t20mdns_event_actions_t">mdns_netif_actionC++ function</a>
<li><a href="index.html#_CPPv417mdns_netif_actionP11esp_netif_t20mdns_event_actions_t">mdns_netif_action (C++ function)</a>
</li>
<li><a href="index.html#_CPPv423mdns_query_async_deleteP18mdns_search_once_t">mdns_query_async_deleteC++ function</a>
<li><a href="index.html#_CPPv410mdns_queryPKcPKcPKc8uint16_t8uint32_t6size_tPP13mdns_result_t">mdns_query (C++ function)</a>
</li>
<li><a href="index.html#_CPPv428mdns_query_async_get_resultsP18mdns_search_once_t8uint32_tPP13mdns_result_tP7uint8_t">mdns_query_async_get_resultsC++ function</a>
<li><a href="index.html#_CPPv412mdns_query_aPKc8uint32_tP14esp_ip4_addr_t">mdns_query_a (C++ function)</a>
</li>
<li><a href="index.html#_CPPv420mdns_query_async_newPKcPKcPKc8uint16_t8uint32_t6size_t19mdns_query_notify_t">mdns_query_async_newC++ function</a>
<li><a href="index.html#_CPPv423mdns_query_async_deleteP18mdns_search_once_t">mdns_query_async_delete (C++ function)</a>
</li>
<li><a href="index.html#_CPPv412mdns_query_aPKc8uint32_tP14esp_ip4_addr_t">mdns_query_aC++ function</a>
<li><a href="index.html#_CPPv428mdns_query_async_get_resultsP18mdns_search_once_t8uint32_tPP13mdns_result_tP7uint8_t">mdns_query_async_get_results (C++ function)</a>
</li>
<li><a href="index.html#_CPPv418mdns_query_genericPKcPKcPKc8uint16_t30mdns_query_transmission_type_t8uint32_t6size_tPP13mdns_result_t">mdns_query_genericC++ function</a>
<li><a href="index.html#_CPPv420mdns_query_async_newPKcPKcPKc8uint16_t8uint32_t6size_t19mdns_query_notify_t">mdns_query_async_new (C++ function)</a>
</li>
<li><a href="index.html#_CPPv419mdns_query_notify_t">mdns_query_notify_tC++ type</a>
<li><a href="index.html#_CPPv418mdns_query_genericPKcPKcPKc8uint16_t30mdns_query_transmission_type_t8uint32_t6size_tPP13mdns_result_t">mdns_query_generic (C++ function)</a>
</li>
<li><a href="index.html#_CPPv414mdns_query_ptrPKcPKc8uint32_t6size_tPP13mdns_result_t">mdns_query_ptrC++ function</a>
<li><a href="index.html#_CPPv419mdns_query_notify_t">mdns_query_notify_t (C++ type)</a>
</li>
<li><a href="index.html#_CPPv423mdns_query_results_freeP13mdns_result_t">mdns_query_results_freeC++ function</a>
<li><a href="index.html#_CPPv414mdns_query_ptrPKcPKc8uint32_t6size_tPP13mdns_result_t">mdns_query_ptr (C++ function)</a>
</li>
<li><a href="index.html#_CPPv414mdns_query_srvPKcPKcPKc8uint32_tPP13mdns_result_t">mdns_query_srvC++ function</a>
<li><a href="index.html#_CPPv423mdns_query_results_freeP13mdns_result_t">mdns_query_results_free (C++ function)</a>
</li>
<li><a href="index.html#_CPPv4N30mdns_query_transmission_type_t20MDNS_QUERY_MULTICASTE">mdns_query_transmission_type_t::MDNS_QUERY_MULTICASTC++ enumerator</a>
<li><a href="index.html#_CPPv414mdns_query_srvPKcPKcPKc8uint32_tPP13mdns_result_t">mdns_query_srv (C++ function)</a>
</li>
<li><a href="index.html#_CPPv4N30mdns_query_transmission_type_t18MDNS_QUERY_UNICASTE">mdns_query_transmission_type_t::MDNS_QUERY_UNICASTC++ enumerator</a>
<li><a href="index.html#_CPPv430mdns_query_transmission_type_t">mdns_query_transmission_type_t (C++ enum)</a>
</li>
<li><a href="index.html#_CPPv430mdns_query_transmission_type_t">mdns_query_transmission_type_tC++ enum</a>
<li><a href="index.html#_CPPv4N30mdns_query_transmission_type_t20MDNS_QUERY_MULTICASTE">mdns_query_transmission_type_t::MDNS_QUERY_MULTICAST (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv414mdns_query_txtPKcPKcPKc8uint32_tPP13mdns_result_t">mdns_query_txtC++ function</a>
<li><a href="index.html#_CPPv4N30mdns_query_transmission_type_t18MDNS_QUERY_UNICASTE">mdns_query_transmission_type_t::MDNS_QUERY_UNICAST (C++ enumerator)</a>
</li>
<li><a href="index.html#_CPPv410mdns_queryPKcPKcPKc8uint16_t8uint32_t6size_tPP13mdns_result_t">mdns_queryC++ function</a>
<li><a href="index.html#_CPPv414mdns_query_txtPKcPKcPKc8uint32_tPP13mdns_result_t">mdns_query_txt (C++ function)</a>
</li>
<li><a href="index.html#_CPPv419mdns_register_netifP11esp_netif_t">mdns_register_netifC++ function</a>
<li><a href="index.html#_CPPv419mdns_register_netifP11esp_netif_t">mdns_register_netif (C++ function)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s4addrE">mdns_result_s::addrC++ member</a>
<li><a href="index.html#_CPPv413mdns_result_s">mdns_result_s (C++ struct)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s9esp_netifE">mdns_result_s::esp_netifC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s4addrE">mdns_result_s::addr (C++ member)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s8hostnameE">mdns_result_s::hostnameC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s9esp_netifE">mdns_result_s::esp_netif (C++ member)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s13instance_nameE">mdns_result_s::instance_nameC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s8hostnameE">mdns_result_s::hostname (C++ member)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s11ip_protocolE">mdns_result_s::ip_protocolC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s13instance_nameE">mdns_result_s::instance_name (C++ member)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="index.html#_CPPv4N13mdns_result_s4nextE">mdns_result_s::nextC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s11ip_protocolE">mdns_result_s::ip_protocol (C++ member)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s4portE">mdns_result_s::portC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s4nextE">mdns_result_s::next (C++ member)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s5protoE">mdns_result_s::protoC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s4portE">mdns_result_s::port (C++ member)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s12service_typeE">mdns_result_s::service_typeC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s5protoE">mdns_result_s::proto (C++ member)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s3ttlE">mdns_result_s::ttlC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s12service_typeE">mdns_result_s::service_type (C++ member)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s9txt_countE">mdns_result_s::txt_countC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s3ttlE">mdns_result_s::ttl (C++ member)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s13txt_value_lenE">mdns_result_s::txt_value_lenC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s3txtE">mdns_result_s::txt (C++ member)</a>
</li>
<li><a href="index.html#_CPPv4N13mdns_result_s3txtE">mdns_result_s::txtC++ member</a>
<li><a href="index.html#_CPPv4N13mdns_result_s9txt_countE">mdns_result_s::txt_count (C++ member)</a>
</li>
<li><a href="index.html#_CPPv413mdns_result_s">mdns_result_sC++ struct</a>
<li><a href="index.html#_CPPv4N13mdns_result_s13txt_value_lenE">mdns_result_s::txt_value_len (C++ member)</a>
</li>
<li><a href="index.html#_CPPv413mdns_result_t">mdns_result_tC++ type</a>
<li><a href="index.html#_CPPv413mdns_result_t">mdns_result_t (C++ type)</a>
</li>
<li><a href="index.html#_CPPv418mdns_search_once_t">mdns_search_once_tC++ type</a>
<li><a href="index.html#_CPPv418mdns_search_once_t">mdns_search_once_t (C++ type)</a>
</li>
<li><a href="index.html#_CPPv425mdns_service_add_for_hostPKcPKcPKcPKc8uint16_tA_15mdns_txt_item_t6size_t">mdns_service_add_for_hostC++ function</a>
<li><a href="index.html#_CPPv416mdns_service_addPKcPKcPKc8uint16_tA_15mdns_txt_item_t6size_t">mdns_service_add (C++ function)</a>
</li>
<li><a href="index.html#_CPPv416mdns_service_addPKcPKcPKc8uint16_tA_15mdns_txt_item_t6size_t">mdns_service_addC++ function</a>
<li><a href="index.html#_CPPv425mdns_service_add_for_hostPKcPKcPKcPKc8uint16_tA_15mdns_txt_item_t6size_t">mdns_service_add_for_host (C++ function)</a>
</li>
<li><a href="index.html#_CPPv433mdns_service_exists_with_instancePKcPKcPKcPKc">mdns_service_exists_with_instanceC++ function</a>
<li><a href="index.html#_CPPv419mdns_service_existsPKcPKcPKc">mdns_service_exists (C++ function)</a>
</li>
<li><a href="index.html#_CPPv419mdns_service_existsPKcPKcPKc">mdns_service_existsC++ function</a>
<li><a href="index.html#_CPPv433mdns_service_exists_with_instancePKcPKcPKcPKc">mdns_service_exists_with_instance (C++ function)</a>
</li>
<li><a href="index.html#_CPPv439mdns_service_instance_name_set_for_hostPKcPKcPKcPKcPKc">mdns_service_instance_name_set_for_hostC++ function</a>
<li><a href="index.html#_CPPv430mdns_service_instance_name_setPKcPKcPKc">mdns_service_instance_name_set (C++ function)</a>
</li>
<li><a href="index.html#_CPPv430mdns_service_instance_name_setPKcPKcPKc">mdns_service_instance_name_setC++ function</a>
<li><a href="index.html#_CPPv439mdns_service_instance_name_set_for_hostPKcPKcPKcPKcPKc">mdns_service_instance_name_set_for_host (C++ function)</a>
</li>
<li><a href="index.html#_CPPv430mdns_service_port_set_for_hostPKcPKcPKcPKc8uint16_t">mdns_service_port_set_for_hostC++ function</a>
<li><a href="index.html#_CPPv421mdns_service_port_setPKcPKc8uint16_t">mdns_service_port_set (C++ function)</a>
</li>
<li><a href="index.html#_CPPv421mdns_service_port_setPKcPKc8uint16_t">mdns_service_port_setC++ function</a>
<li><a href="index.html#_CPPv430mdns_service_port_set_for_hostPKcPKcPKcPKc8uint16_t">mdns_service_port_set_for_host (C++ function)</a>
</li>
<li><a href="index.html#_CPPv423mdns_service_remove_allv">mdns_service_remove_allC++ function</a>
<li><a href="index.html#_CPPv419mdns_service_removePKcPKc">mdns_service_remove (C++ function)</a>
</li>
<li><a href="index.html#_CPPv428mdns_service_remove_for_hostPKcPKcPKcPKc">mdns_service_remove_for_hostC++ function</a>
<li><a href="index.html#_CPPv423mdns_service_remove_allv">mdns_service_remove_all (C++ function)</a>
</li>
<li><a href="index.html#_CPPv419mdns_service_removePKcPKc">mdns_service_removeC++ function</a>
<li><a href="index.html#_CPPv428mdns_service_remove_for_hostPKcPKcPKcPKc">mdns_service_remove_for_host (C++ function)</a>
</li>
<li><a href="index.html#_CPPv433mdns_service_subtype_add_for_hostPKcPKcPKcPKcPKc">mdns_service_subtype_add_for_hostC++ function</a>
<li><a href="index.html#_CPPv433mdns_service_subtype_add_for_hostPKcPKcPKcPKcPKc">mdns_service_subtype_add_for_host (C++ function)</a>
</li>
<li><a href="index.html#_CPPv437mdns_service_txt_item_remove_for_hostPKcPKcPKcPKcPKc">mdns_service_txt_item_remove_for_hostC++ function</a>
<li><a href="index.html#_CPPv428mdns_service_txt_item_removePKcPKcPKc">mdns_service_txt_item_remove (C++ function)</a>
</li>
<li><a href="index.html#_CPPv428mdns_service_txt_item_removePKcPKcPKc">mdns_service_txt_item_removeC++ function</a>
<li><a href="index.html#_CPPv437mdns_service_txt_item_remove_for_hostPKcPKcPKcPKcPKc">mdns_service_txt_item_remove_for_host (C++ function)</a>
</li>
<li><a href="index.html#_CPPv458mdns_service_txt_item_set_for_host_with_explicit_value_lenPKcPKcPKcPKcPKcPKc7uint8_t">mdns_service_txt_item_set_for_host_with_explicit_value_lenC++ function</a>
<li><a href="index.html#_CPPv425mdns_service_txt_item_setPKcPKcPKcPKc">mdns_service_txt_item_set (C++ function)</a>
</li>
<li><a href="index.html#_CPPv434mdns_service_txt_item_set_for_hostPKcPKcPKcPKcPKcPKc">mdns_service_txt_item_set_for_hostC++ function</a>
<li><a href="index.html#_CPPv434mdns_service_txt_item_set_for_hostPKcPKcPKcPKcPKcPKc">mdns_service_txt_item_set_for_host (C++ function)</a>
</li>
<li><a href="index.html#_CPPv449mdns_service_txt_item_set_with_explicit_value_lenPKcPKcPKcPKc7uint8_t">mdns_service_txt_item_set_with_explicit_value_lenC++ function</a>
<li><a href="index.html#_CPPv458mdns_service_txt_item_set_for_host_with_explicit_value_lenPKcPKcPKcPKcPKcPKc7uint8_t">mdns_service_txt_item_set_for_host_with_explicit_value_len (C++ function)</a>
</li>
<li><a href="index.html#_CPPv425mdns_service_txt_item_setPKcPKcPKcPKc">mdns_service_txt_item_setC++ function</a>
<li><a href="index.html#_CPPv449mdns_service_txt_item_set_with_explicit_value_lenPKcPKcPKcPKc7uint8_t">mdns_service_txt_item_set_with_explicit_value_len (C++ function)</a>
</li>
<li><a href="index.html#_CPPv429mdns_service_txt_set_for_hostPKcPKcPKcPKcA_15mdns_txt_item_t7uint8_t">mdns_service_txt_set_for_hostC++ function</a>
<li><a href="index.html#_CPPv420mdns_service_txt_setPKcPKcA_15mdns_txt_item_t7uint8_t">mdns_service_txt_set (C++ function)</a>
</li>
<li><a href="index.html#_CPPv420mdns_service_txt_setPKcPKcA_15mdns_txt_item_t7uint8_t">mdns_service_txt_setC++ function</a>
<li><a href="index.html#_CPPv429mdns_service_txt_set_for_hostPKcPKcPKcPKcA_15mdns_txt_item_t7uint8_t">mdns_service_txt_set_for_host (C++ function)</a>
</li>
<li><a href="index.html#_CPPv4N15mdns_txt_item_t3keyE">mdns_txt_item_t::keyC++ member</a>
<li><a href="index.html#_CPPv415mdns_txt_item_t">mdns_txt_item_t (C++ struct)</a>
</li>
<li><a href="index.html#_CPPv4N15mdns_txt_item_t5valueE">mdns_txt_item_t::valueC++ member</a>
<li><a href="index.html#_CPPv4N15mdns_txt_item_t3keyE">mdns_txt_item_t::key (C++ member)</a>
</li>
<li><a href="index.html#_CPPv415mdns_txt_item_t">mdns_txt_item_tC++ struct</a>
<li><a href="index.html#_CPPv4N15mdns_txt_item_t5valueE">mdns_txt_item_t::value (C++ member)</a>
</li>
<li><a href="index.html#c.MDNS_TYPE_AAAA">MDNS_TYPE_AAAAC macro</a>
<li><a href="index.html#c.MDNS_TYPE_A">MDNS_TYPE_A (C macro)</a>
</li>
<li><a href="index.html#c.MDNS_TYPE_ANY">MDNS_TYPE_ANYC macro</a>
<li><a href="index.html#c.MDNS_TYPE_AAAA">MDNS_TYPE_AAAA (C macro)</a>
</li>
<li><a href="index.html#c.MDNS_TYPE_A">MDNS_TYPE_AC macro</a>
<li><a href="index.html#c.MDNS_TYPE_ANY">MDNS_TYPE_ANY (C macro)</a>
</li>
<li><a href="index.html#c.MDNS_TYPE_NSEC">MDNS_TYPE_NSECC macro</a>
<li><a href="index.html#c.MDNS_TYPE_NSEC">MDNS_TYPE_NSEC (C macro)</a>
</li>
<li><a href="index.html#c.MDNS_TYPE_OPT">MDNS_TYPE_OPTC macro</a>
<li><a href="index.html#c.MDNS_TYPE_OPT">MDNS_TYPE_OPT (C macro)</a>
</li>
<li><a href="index.html#c.MDNS_TYPE_PTR">MDNS_TYPE_PTRC macro</a>
<li><a href="index.html#c.MDNS_TYPE_PTR">MDNS_TYPE_PTR (C macro)</a>
</li>
<li><a href="index.html#c.MDNS_TYPE_SRV">MDNS_TYPE_SRVC macro</a>
<li><a href="index.html#c.MDNS_TYPE_SRV">MDNS_TYPE_SRV (C macro)</a>
</li>
<li><a href="index.html#c.MDNS_TYPE_TXT">MDNS_TYPE_TXTC macro</a>
<li><a href="index.html#c.MDNS_TYPE_TXT">MDNS_TYPE_TXT (C macro)</a>
</li>
<li><a href="index.html#_CPPv421mdns_unregister_netifP11esp_netif_t">mdns_unregister_netifC++ function</a>
<li><a href="index.html#_CPPv421mdns_unregister_netifP11esp_netif_t">mdns_unregister_netif (C++ function)</a>
</li>
</ul></td>
</tr></table>

View File

@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>mDNS 服务 - ESP32 - &mdash; ESP-IDF 编程指南 latest 文档</title>
@@ -16,9 +16,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/translations.js"></script>
@@ -114,7 +112,7 @@
<li><a href="#" class="icon icon-home"></a> &raquo;</li>
<li>mDNS 服务</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/espressif/esp-protocols/blob/3f0262d/docs/zh_CN/index.rst" class="fa fa-github"> 在 GitHub 上修改</a>
<a href="https://github.com/espressif/esp-protocols/blob/42565ff/docs/zh_CN/index.rst" class="fa fa-github"> 在 GitHub 上修改</a>
</li>
</ul>
<hr/>
@@ -123,14 +121,14 @@
<div itemprop="articleBody">
<section id="mdns">
<h1>mDNS 服务<a class="headerlink" href="#mdns" title="此标题的永久链接"></a></h1>
<h1>mDNS 服务<a class="headerlink" href="#mdns" title="永久链接至标题"></a></h1>
<p><a class="reference external" href="../../../en/latest/esp32/index.html">[English]</a></p>
<section id="id1">
<h2>概述<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h2>
<h2>概述<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>mDNS 是一种组播 UDP 服务,用来提供本地网络服务和主机发现。</p>
<p>绝大多数的操作系统默认都会安装 mDNS 服务,或者提供单独的安装包。<code class="docutils literal notranslate"><span class="pre">Mac</span> <span class="pre">OS</span></code> 默认会安装名为 <code class="docutils literal notranslate"><span class="pre">Bonjour</span></code> 的服务(该服务基于 mDNS此外 Apple 还发布了适用于 Windows 系统的安装程序,可以在 <a class="reference external" href="https://support.apple.com/downloads/bonjour%2520for%2520windows">官方支持</a> 找到。在 <code class="docutils literal notranslate"><span class="pre">Linux</span></code>mDNS 服务由 <a class="reference external" href="https://github.com/lathiat/avahi">avahi</a> 提供,通常也会被默认安装。</p>
<section id="id3">
<h3>mDNS 属性<a class="headerlink" href="#id3" title="此标题的永久链接"></a></h3>
<h3>mDNS 属性<a class="headerlink" href="#id3" title="永久链接至标题"></a></h3>
<blockquote>
<div><ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">hostname</span></code>:设备会去响应的主机名,如果没有设置,会根据设备的网络接口名定义 <code class="docutils literal notranslate"><span class="pre">hostname</span></code> 。例如,<code class="docutils literal notranslate"><span class="pre">my-esp32</span></code> 会被解析为 <code class="docutils literal notranslate"><span class="pre">my-esp32.local</span></code></p></li>
@@ -156,7 +154,7 @@
</div>
</section>
<section id="id4">
<h3>mDNS 服务<a class="headerlink" href="#id4" title="此标题的永久链接"></a></h3>
<h3>mDNS 服务<a class="headerlink" href="#id4" title="永久链接至标题"></a></h3>
<p>mDNS 可以广播设备能够提供的网络服务的相关信息,每个服务会由以下属性构成。</p>
<blockquote>
<div><ul class="simple">
@@ -194,7 +192,7 @@
</div>
</section>
<section id="id6">
<h3>mDNS 查询<a class="headerlink" href="#id6" title="此标题的永久链接"></a></h3>
<h3>mDNS 查询<a class="headerlink" href="#id6" title="永久链接至标题"></a></h3>
<p>mDNS 提供查询服务和解析主机 IP/IPv6 地址的方法。</p>
<p>服务查询的结果会作为 <code class="docutils literal notranslate"><span class="pre">mdns_result_t</span></code> 类型对象的链表返回。</p>
<p>解析主机 IP 地址的示例方法:</p>
@@ -297,25 +295,25 @@
</section>
</section>
<section id="id7">
<h2>应用示例<a class="headerlink" href="#id7" title="此标题的永久链接"></a></h2>
<p>有关 mDNS 服务器和查询器的应用示例请参考 <a class="reference external" href="https://github.com/espressif/esp-protocols/tree/3f0262d/examples/../examples"></a></p>
<h2>应用示例<a class="headerlink" href="#id7" title="永久链接至标题"></a></h2>
<p>有关 mDNS 服务器和查询器的应用示例请参考 <a class="reference external" href="https://github.com/espressif/esp-protocols/tree/42565ff/examples/../examples"></a></p>
</section>
<section id="api">
<h2>API 参考<a class="headerlink" href="#api" title="此标题的永久链接"></a></h2>
<h2>API 参考<a class="headerlink" href="#api" title="永久链接至标题"></a></h2>
<section id="header-file">
<h3>Header File<a class="headerlink" href="#header-file" title="此标题的永久链接"></a></h3>
<h3>Header File<a class="headerlink" href="#header-file" title="永久链接至标题"></a></h3>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/blob/3f0262d/include/mdns.h">include/mdns.h</a></p></li>
<li><p><a class="reference external" href="https://github.com/espressif/esp-protocols/blob/42565ff/include/mdns.h">include/mdns.h</a></p></li>
</ul>
</section>
<section id="functions">
<h3>Functions<a class="headerlink" href="#functions" title="此标题的永久链接"></a></h3>
<h3>Functions<a class="headerlink" href="#functions" title="永久链接至标题"></a></h3>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv49mdns_initv">
<span id="_CPPv39mdns_initv"></span><span id="_CPPv29mdns_initv"></span><span id="mdns_init__void"></span><span class="target" id="mdns_8h_1ad323a4dfba3545c43ebda0f3f7c515e0"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_init</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">void</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv49mdns_initv" title="永久链接至目标"></a><br /></dt>
<dd><p>Initialize mDNS on given interface. </p>
<dl class="field-list simple">
<dt class="field-odd">返回<span class="colon">:</span></dt>
<dt class="field-odd">返回</dt>
<dd class="field-odd"><p><ul class="simple">
<li><p>ESP_OK on success</p></li>
<li><p>ESP_ERR_INVALID_STATE when failed to register event handler</p></li>
@@ -338,10 +336,10 @@
<span id="_CPPv317mdns_hostname_setPKc"></span><span id="_CPPv217mdns_hostname_setPKc"></span><span id="mdns_hostname_set__cCP"></span><span class="target" id="mdns_8h_1ac64252305d70be97d202f2edd5f44ccc"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_hostname_set</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv417mdns_hostname_setPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Set the hostname for mDNS server required if you want to advertise services. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><p><strong>hostname</strong> Hostname to set</p>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -357,13 +355,13 @@
<span id="_CPPv326mdns_delegate_hostname_addPKcPK14mdns_ip_addr_t"></span><span id="_CPPv226mdns_delegate_hostname_addPKcPK14mdns_ip_addr_t"></span><span id="mdns_delegate_hostname_add__cCP.mdns_ip_addr_tCP"></span><span class="target" id="mdns_8h_1aa569e098f34ab80e34ac76fbdca9aea7"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_delegate_hostname_add</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv414mdns_ip_addr_t" title="mdns_ip_addr_t"><span class="n"><span class="pre">mdns_ip_addr_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">address_list</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv426mdns_delegate_hostname_addPKcPK14mdns_ip_addr_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Adds a hostname and address to be delegated A/AAAA queries will be replied for the hostname and services can be added to this host. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hostname</strong> Hostname to add </p></li>
<li><p><strong>address_list</strong> The IP address list of the host</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -380,10 +378,10 @@
<span id="_CPPv329mdns_delegate_hostname_removePKc"></span><span id="_CPPv229mdns_delegate_hostname_removePKc"></span><span id="mdns_delegate_hostname_remove__cCP"></span><span class="target" id="mdns_8h_1aef8ff565fff40e32ebce1257592eb5e6"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_delegate_hostname_remove</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv429mdns_delegate_hostname_removePKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Remove a delegated hostname All the services added to this host will also be removed. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><p><strong>hostname</strong> Hostname to remove</p>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -400,10 +398,10 @@
<span id="_CPPv320mdns_hostname_existsPKc"></span><span id="_CPPv220mdns_hostname_existsPKc"></span><span id="mdns_hostname_exists__cCP"></span><span class="target" id="mdns_8h_1ad4c1b990b7435f889b64f1d5ba29bbc8"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_hostname_exists</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv420mdns_hostname_existsPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Query whether a hostname has been added. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><p><strong>hostname</strong> Hostname to query</p>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>true The hostname has been added.</p></li>
<li><p>false The hostname has not been added. </p></li>
@@ -418,10 +416,10 @@
<span id="_CPPv322mdns_instance_name_setPKc"></span><span id="_CPPv222mdns_instance_name_setPKc"></span><span id="mdns_instance_name_set__cCP"></span><span class="target" id="mdns_8h_1a1d4b64b9a4eee80a09db4ecc3ddf9d69"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_instance_name_set</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv422mdns_instance_name_setPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Set the default instance name for mDNS server. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><p><strong>instance_name</strong> Instance name to set</p>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -441,7 +439,7 @@
<p>The value length of txt items will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_name</strong> instance name to set. If NULL, global instance name or hostname will be used. Note that MDNS_MULTIPLE_INSTANCE config option needs to be enabled for adding multiple instances with the same instance type. </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -451,7 +449,7 @@
<li><p><strong>num_items</strong> number of items in TXT data</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -472,7 +470,7 @@
<p>The value length of txt items will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_name</strong> instance name to set. If NULL, global instance name or hostname will be used Note that MDNS_MULTIPLE_INSTANCE config option needs to be enabled for adding multiple instances with the same instance type. </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -483,7 +481,7 @@
<li><p><strong>num_items</strong> number of items in TXT data</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -500,14 +498,14 @@
<span id="_CPPv319mdns_service_existsPKcPKcPKc"></span><span id="_CPPv219mdns_service_existsPKcPKcPKc"></span><span id="mdns_service_exists__cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1ae8a4d63061c513329cfe10b60aedef79"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_exists</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv419mdns_service_existsPKcPKcPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Check whether a service has been added. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
<li><p><strong>hostname</strong> service hostname. If NULL, checks for the local hostname.</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>true Correspondding service has been added.</p></li>
<li><p>false Service not found. </p></li>
@@ -522,7 +520,7 @@
<span id="_CPPv333mdns_service_exists_with_instancePKcPKcPKcPKc"></span><span id="_CPPv233mdns_service_exists_with_instancePKcPKcPKcPKc"></span><span id="mdns_service_exists_with_instance__cCP.cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1a1cab004cfd4250c5019fa29a66b0ebd4"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_exists_with_instance</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv433mdns_service_exists_with_instancePKcPKcPKcPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Check whether a service has been added. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -530,7 +528,7 @@
<li><p><strong>hostname</strong> service hostname. If NULL, checks for the local hostname.</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>true Correspondding service has been added.</p></li>
<li><p>false Service not found. </p></li>
@@ -545,13 +543,13 @@
<span id="_CPPv319mdns_service_removePKcPKc"></span><span id="_CPPv219mdns_service_removePKcPKc"></span><span id="mdns_service_remove__cCP.cCP"></span><span class="target" id="mdns_8h_1a7f8ebdf3f99864b614f0a745965f7261"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_remove</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv419mdns_service_removePKcPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Remove service from mDNS server. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp)</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -568,7 +566,7 @@
<span id="_CPPv328mdns_service_remove_for_hostPKcPKcPKcPKc"></span><span id="_CPPv228mdns_service_remove_for_hostPKcPKcPKcPKc"></span><span id="mdns_service_remove_for_host__cCP.cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1ae7a3ba6e1bc137e4dc8f659eaa0647dd"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_remove_for_host</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv428mdns_service_remove_for_hostPKcPKcPKcPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Remove service from mDNS server with hostname. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -576,7 +574,7 @@
<li><p><strong>hostname</strong> service hostname. If NULL, local hostname will be used.</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -593,14 +591,14 @@
<span id="_CPPv330mdns_service_instance_name_setPKcPKcPKc"></span><span id="_CPPv230mdns_service_instance_name_setPKcPKcPKc"></span><span id="mdns_service_instance_name_set__cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1ab10c7a6fd81148a1f115d6e1a8045950"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_instance_name_set</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv430mdns_service_instance_name_setPKcPKcPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Set instance name for service. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
<li><p><strong>instance_name</strong> instance name to set</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -617,7 +615,7 @@
<span id="_CPPv339mdns_service_instance_name_set_for_hostPKcPKcPKcPKcPKc"></span><span id="_CPPv239mdns_service_instance_name_set_for_hostPKcPKcPKcPKcPKc"></span><span id="mdns_service_instance_name_set_for_host__cCP.cCP.cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1aafba1b5e4b768b6f0b3a6b9129d0391e"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_instance_name_set_for_host</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_old</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv439mdns_service_instance_name_set_for_hostPKcPKcPKcPKcPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Set instance name for service with hostname. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_old</strong> original instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -626,7 +624,7 @@
<li><p><strong>instance_name</strong> instance name to set</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -643,14 +641,14 @@
<span id="_CPPv321mdns_service_port_setPKcPKc8uint16_t"></span><span id="_CPPv221mdns_service_port_setPKcPKc8uint16_t"></span><span id="mdns_service_port_set__cCP.cCP.uint16_t"></span><span class="target" id="mdns_8h_1a76f4ca1857edb589be79074b01b5b769"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_port_set</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">port</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv421mdns_service_port_setPKcPKc8uint16_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Set service port. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
<li><p><strong>port</strong> service port</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -667,7 +665,7 @@
<span id="_CPPv330mdns_service_port_set_for_hostPKcPKcPKcPKc8uint16_t"></span><span id="_CPPv230mdns_service_port_set_for_hostPKcPKcPKcPKc8uint16_t"></span><span id="mdns_service_port_set_for_host__cCP.cCP.cCP.cCP.uint16_t"></span><span class="target" id="mdns_8h_1ab12923354695dde222e987edd61e6c06"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_port_set_for_host</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">port</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv430mdns_service_port_set_for_hostPKcPKcPKcPKc8uint16_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Set service port with hostname. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -676,7 +674,7 @@
<li><p><strong>port</strong> service port</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -697,7 +695,7 @@
<p>The value length of txt items will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
@@ -705,7 +703,7 @@
<li><p><strong>num_items</strong> number of items in TXT data</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -726,7 +724,7 @@
<p>The value length of txt items will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -736,7 +734,7 @@
<li><p><strong>num_items</strong> number of items in TXT data</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -757,7 +755,7 @@
<p>The value length will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
@@ -765,7 +763,7 @@
<li><p><strong>value</strong> the new value of the key</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -782,7 +780,7 @@
<span id="_CPPv349mdns_service_txt_item_set_with_explicit_value_lenPKcPKcPKcPKc7uint8_t"></span><span id="_CPPv249mdns_service_txt_item_set_with_explicit_value_lenPKcPKcPKcPKc7uint8_t"></span><span id="mdns_service_txt_item_set_with_explicit_value_len__cCP.cCP.cCP.cCP.uint8_t"></span><span class="target" id="mdns_8h_1a64bea09792df133c09f11cf51f6dcefc"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_txt_item_set_with_explicit_value_len</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">key</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">value</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">value_len</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv449mdns_service_txt_item_set_with_explicit_value_lenPKcPKcPKcPKc7uint8_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Set/Add TXT item for service TXT record. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
@@ -791,7 +789,7 @@
<li><p><strong>value_len</strong> the length of the value</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -812,7 +810,7 @@
<p>The value length will be automatically decided by strlen</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -822,7 +820,7 @@
<li><p><strong>value</strong> the new value of the key</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -839,7 +837,7 @@
<span id="_CPPv358mdns_service_txt_item_set_for_host_with_explicit_value_lenPKcPKcPKcPKcPKcPKc7uint8_t"></span><span id="_CPPv258mdns_service_txt_item_set_for_host_with_explicit_value_lenPKcPKcPKcPKcPKcPKc7uint8_t"></span><span id="mdns_service_txt_item_set_for_host_with_explicit_value_len__cCP.cCP.cCP.cCP.cCP.cCP.uint8_t"></span><span class="target" id="mdns_8h_1a2c69fcca4875c15f4e978402e2799644"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_txt_item_set_for_host_with_explicit_value_len</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">key</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">value</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">value_len</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv458mdns_service_txt_item_set_for_host_with_explicit_value_lenPKcPKcPKcPKcPKcPKc7uint8_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Set/Add TXT item for service TXT record with hostname and txt value length. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -850,7 +848,7 @@
<li><p><strong>value_len</strong> the length of the value</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -867,14 +865,14 @@
<span id="_CPPv328mdns_service_txt_item_removePKcPKcPKc"></span><span id="_CPPv228mdns_service_txt_item_removePKcPKcPKc"></span><span id="mdns_service_txt_item_remove__cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1a78211b1c712153774252cdd4f4d3fbe0"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_txt_item_remove</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">key</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv428mdns_service_txt_item_removePKcPKcPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Remove TXT item for service TXT record. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp) </p></li>
<li><p><strong>key</strong> the key that you want to remove</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -891,7 +889,7 @@
<span id="_CPPv337mdns_service_txt_item_remove_for_hostPKcPKcPKcPKcPKc"></span><span id="_CPPv237mdns_service_txt_item_remove_for_hostPKcPKcPKcPKcPKc"></span><span id="mdns_service_txt_item_remove_for_host__cCP.cCP.cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1a24d59204b8eee8f653d79c3fc8198464"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_txt_item_remove_for_host</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">key</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv437mdns_service_txt_item_remove_for_hostPKcPKcPKcPKcPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Remove TXT item for service TXT record with hostname. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -900,7 +898,7 @@
<li><p><strong>key</strong> the key that you want to remove</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -917,7 +915,7 @@
<span id="_CPPv333mdns_service_subtype_add_for_hostPKcPKcPKcPKcPKc"></span><span id="_CPPv233mdns_service_subtype_add_for_hostPKcPKcPKcPKcPKc"></span><span id="mdns_service_subtype_add_for_host__cCP.cCP.cCP.cCP.cCP"></span><span class="target" id="mdns_8h_1a1bc06bea17cf6beabd45649bc1cef73c"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_subtype_add_for_host</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">hostname</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">subtype</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv433mdns_service_subtype_add_for_hostPKcPKcPKcPKcPKc" title="永久链接至目标"></a><br /></dt>
<dd><p>Add subtype for service. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_name</strong> instance name. If NULL, will find the first service with the same service type and protocol. </p></li>
<li><p><strong>service_type</strong> service type (_http, _ftp, etc) </p></li>
@@ -926,7 +924,7 @@
<li><p><strong>subtype</strong> The subtype to add.</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error</p></li>
@@ -943,7 +941,7 @@
<span id="_CPPv323mdns_service_remove_allv"></span><span id="_CPPv223mdns_service_remove_allv"></span><span id="mdns_service_remove_all__void"></span><span class="target" id="mdns_8h_1a16908d4bdd7a28d063bcaabffde74cec"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_service_remove_all</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">void</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv423mdns_service_remove_allv" title="永久链接至目标"></a><br /></dt>
<dd><p>Remove and free all services from mDNS server. </p>
<dl class="field-list simple">
<dt class="field-odd">返回<span class="colon">:</span></dt>
<dt class="field-odd">返回</dt>
<dd class="field-odd"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_ARG Parameter error </p></li>
@@ -958,10 +956,10 @@
<span id="_CPPv323mdns_query_async_deleteP18mdns_search_once_t"></span><span id="_CPPv223mdns_query_async_deleteP18mdns_search_once_t"></span><span id="mdns_query_async_delete__mdns_search_once_tP"></span><span class="target" id="mdns_8h_1af6d064e86da56a713e38c51b0c86d2b6"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_async_delete</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv418mdns_search_once_t" title="mdns_search_once_t"><span class="n"><span class="pre">mdns_search_once_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">search</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv423mdns_query_async_deleteP18mdns_search_once_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Deletes the finished query. Call this only after the search has ended! </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><p><strong>search</strong> pointer to search object</p>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE search has not finished</p></li>
@@ -977,7 +975,7 @@
<span id="_CPPv328mdns_query_async_get_resultsP18mdns_search_once_t8uint32_tPP13mdns_result_tP7uint8_t"></span><span id="_CPPv228mdns_query_async_get_resultsP18mdns_search_once_t8uint32_tPP13mdns_result_tP7uint8_t"></span><span id="mdns_query_async_get_results__mdns_search_once_tP.uint32_t.mdns_result_tPP.uint8_tP"></span><span class="target" id="mdns_8h_1a4951d52996e21620767a272cd851e678"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_async_get_results</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv418mdns_search_once_t" title="mdns_search_once_t"><span class="n"><span class="pre">mdns_search_once_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">search</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">results</span></span>, <span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">num_results</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv428mdns_query_async_get_resultsP18mdns_search_once_t8uint32_tPP13mdns_result_tP7uint8_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Get results from search pointer. Results available as a pointer to the output parameter. Pointer to search object has to be deleted via <code class="docutils literal notranslate"><span class="pre">mdns_query_async_delete</span></code> once the query has finished. The results although have to be freed manually. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>search</strong> pointer to search object </p></li>
<li><p><strong>timeout</strong> time in milliseconds to wait for answers </p></li>
@@ -985,7 +983,7 @@
<li><p><strong>num_results</strong> pointer to the number of the actual result items (set to NULL to ignore this return value)</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p>True if search has finished before or at timeout False if search timeout is over </p>
</dd>
</dl>
@@ -996,7 +994,7 @@
<span id="_CPPv320mdns_query_async_newPKcPKcPKc8uint16_t8uint32_t6size_t19mdns_query_notify_t"></span><span id="_CPPv220mdns_query_async_newPKcPKcPKc8uint16_t8uint32_t6size_t19mdns_query_notify_t"></span><span id="mdns_query_async_new__cCP.cCP.cCP.uint16_t.uint32_t.s.mdns_query_notify_t"></span><span class="target" id="mdns_8h_1a90a1cb33ad28636a27cb6926abff2171"></span><a class="reference internal" href="#_CPPv418mdns_search_once_t" title="mdns_search_once_t"><span class="n"><span class="pre">mdns_search_once_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_async_new</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">name</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">type</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">max_results</span></span>, <a class="reference internal" href="#_CPPv419mdns_query_notify_t" title="mdns_query_notify_t"><span class="n"><span class="pre">mdns_query_notify_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">notifier</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv420mdns_query_async_newPKcPKcPKc8uint16_t8uint32_t6size_t19mdns_query_notify_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Query mDNS for host or service asynchronousely. Search has to be tested for progress and deleted manually! </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> service instance or host name (NULL for PTR queries) </p></li>
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) (NULL for host queries) </p></li>
@@ -1007,7 +1005,7 @@
<li><p><strong>notifier</strong> Notification function to be called when the result is ready, can be NULL</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p>mdns_search_once_s pointer to new search object if query initiated successfully. NULL otherwise. </p>
</dd>
</dl>
@@ -1018,7 +1016,7 @@
<span id="_CPPv318mdns_query_genericPKcPKcPKc8uint16_t30mdns_query_transmission_type_t8uint32_t6size_tPP13mdns_result_t"></span><span id="_CPPv218mdns_query_genericPKcPKcPKc8uint16_t30mdns_query_transmission_type_t8uint32_t6size_tPP13mdns_result_t"></span><span id="mdns_query_generic__cCP.cCP.cCP.uint16_t.mdns_query_transmission_type_t.uint32_t.s.mdns_result_tPP"></span><span class="target" id="mdns_8h_1ac9a14428f6d3428445ae1888b67c68d7"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_generic</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">name</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">type</span></span>, <a class="reference internal" href="#_CPPv430mdns_query_transmission_type_t" title="mdns_query_transmission_type_t"><span class="n"><span class="pre">mdns_query_transmission_type_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">transmission_type</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">max_results</span></span>, <a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">results</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv418mdns_query_genericPKcPKcPKc8uint16_t30mdns_query_transmission_type_t8uint32_t6size_tPP13mdns_result_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Generic mDNS query All following query methods are derived from this one. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> service instance or host name (NULL for PTR queries) </p></li>
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) (NULL for host queries) </p></li>
@@ -1030,7 +1028,7 @@
<li><p><strong>results</strong> pointer to the results of the query results must be freed using mdns_query_results_free below</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1048,7 +1046,7 @@
<dd><p>Query mDNS for host or service. </p>
<p>Note that querying PTR types sends Multicast query, all other types send Unicast queries</p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> service instance or host name (NULL for PTR queries) </p></li>
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) (NULL for host queries) </p></li>
@@ -1059,7 +1057,7 @@
<li><p><strong>results</strong> pointer to the results of the query results must be freed using mdns_query_results_free below</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1076,7 +1074,7 @@
<span id="_CPPv323mdns_query_results_freeP13mdns_result_t"></span><span id="_CPPv223mdns_query_results_freeP13mdns_result_t"></span><span id="mdns_query_results_free__mdns_result_tP"></span><span class="target" id="mdns_8h_1ad7a11c09688e313da1d3eccd03cfd99e"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_results_free</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">results</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv423mdns_query_results_freeP13mdns_result_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Free query results. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><p><strong>results</strong> linked list of results to be freed </p>
</dd>
</dl>
@@ -1087,7 +1085,7 @@
<span id="_CPPv314mdns_query_ptrPKcPKc8uint32_t6size_tPP13mdns_result_t"></span><span id="_CPPv214mdns_query_ptrPKcPKc8uint32_t6size_tPP13mdns_result_t"></span><span id="mdns_query_ptr__cCP.cCP.uint32_t.s.mdns_result_tPP"></span><span class="target" id="mdns_8h_1a6ff4f04336fc1001383370ddbdaf3bca"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_ptr</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">max_results</span></span>, <a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">results</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv414mdns_query_ptrPKcPKc8uint32_t6size_tPP13mdns_result_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Query mDNS for service. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) </p></li>
<li><p><strong>proto</strong> service protocol (_tcp, _udp, etc.) </p></li>
@@ -1096,7 +1094,7 @@
<li><p><strong>results</strong> pointer to the results of the query</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1113,7 +1111,7 @@
<span id="_CPPv314mdns_query_srvPKcPKcPKc8uint32_tPP13mdns_result_t"></span><span id="_CPPv214mdns_query_srvPKcPKcPKc8uint32_tPP13mdns_result_t"></span><span id="mdns_query_srv__cCP.cCP.cCP.uint32_t.mdns_result_tPP"></span><span class="target" id="mdns_8h_1a7650de908662e5b763187120593cc3c0"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_srv</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">result</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv414mdns_query_srvPKcPKcPKc8uint32_tPP13mdns_result_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Query mDNS for SRV record. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_name</strong> service instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) </p></li>
@@ -1122,7 +1120,7 @@
<li><p><strong>result</strong> pointer to the result of the query</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1139,7 +1137,7 @@
<span id="_CPPv314mdns_query_txtPKcPKcPKc8uint32_tPP13mdns_result_t"></span><span id="_CPPv214mdns_query_txtPKcPKcPKc8uint32_tPP13mdns_result_t"></span><span id="mdns_query_txt__cCP.cCP.cCP.uint32_t.mdns_result_tPP"></span><span class="target" id="mdns_8h_1a7b3559ac8131c14a4eca73a781d22178"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_txt</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">instance_name</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">service_type</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">proto</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <a class="reference internal" href="#_CPPv413mdns_result_t" title="mdns_result_t"><span class="n"><span class="pre">mdns_result_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">result</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv414mdns_query_txtPKcPKcPKc8uint32_tPP13mdns_result_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Query mDNS for TXT record. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance_name</strong> service instance name </p></li>
<li><p><strong>service_type</strong> service type (_http, _arduino, _ftp etc.) </p></li>
@@ -1148,7 +1146,7 @@
<li><p><strong>result</strong> pointer to the result of the query</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1165,14 +1163,14 @@
<span id="_CPPv312mdns_query_aPKc8uint32_tP14esp_ip4_addr_t"></span><span id="_CPPv212mdns_query_aPKc8uint32_tP14esp_ip4_addr_t"></span><span id="mdns_query_a__cCP.uint32_t.esp_ip4_addr_tP"></span><span class="target" id="mdns_8h_1a1c7ccc14c3a0a6cf29af3fe33345ad78"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_query_a</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">host_name</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <span class="n"><span class="pre">esp_ip4_addr_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">addr</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv412mdns_query_aPKc8uint32_tP14esp_ip4_addr_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Query mDNS for A record. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>host_name</strong> host name to look for </p></li>
<li><p><strong>timeout</strong> time in milliseconds to wait for answer. </p></li>
<li><p><strong>addr</strong> pointer to the resulting IP4 address</p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1189,10 +1187,10 @@
<span id="_CPPv319mdns_register_netifP11esp_netif_t"></span><span id="_CPPv219mdns_register_netifP11esp_netif_t"></span><span id="mdns_register_netif__esp_netif_tP"></span><span class="target" id="mdns_8h_1ae4512122be1ad7c7f87536b944c43b78"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_register_netif</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">esp_netif_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">esp_netif</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv419mdns_register_netifP11esp_netif_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Register custom esp_netif with mDNS functionality mDNS service runs by default on preconfigured interfaces (STA, AP, ETH). This API enables running the service on any customized interface, either using standard WiFi or Ethernet driver or any kind of user defined driver. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><p><strong>esp_netif</strong> Pointer to esp-netif interface </p>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running or this netif is already registered</p></li>
@@ -1208,10 +1206,10 @@
<span id="_CPPv321mdns_unregister_netifP11esp_netif_t"></span><span id="_CPPv221mdns_unregister_netifP11esp_netif_t"></span><span id="mdns_unregister_netif__esp_netif_tP"></span><span class="target" id="mdns_8h_1af9bda443a1b8b50ed5ebbc6f5f58e62f"></span><span class="n"><span class="pre">esp_err_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_unregister_netif</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">esp_netif_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">esp_netif</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv421mdns_unregister_netifP11esp_netif_t" title="永久链接至目标"></a><br /></dt>
<dd><p>Unregister esp-netif already registered in mDNS service. </p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><p><strong>esp_netif</strong> Pointer to esp-netif interface </p>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running</p></li>
@@ -1233,13 +1231,13 @@
</ul>
</p>
<dl class="field-list simple">
<dt class="field-odd">参数<span class="colon">:</span></dt>
<dt class="field-odd">参数</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>esp_netif</strong> Pointer to esp-netif interface </p></li>
<li><p><strong>event_action</strong> Disable/Enable/Announce on this interface over IPv4/IPv6 protocol. Actions enumerated in mdns_event_actions_t type. </p></li>
</ul>
</dd>
<dt class="field-even">返回<span class="colon">:</span></dt>
<dt class="field-even">返回</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>ESP_OK success</p></li>
<li><p>ESP_ERR_INVALID_STATE mDNS is not running or this netif is not registered</p></li>
@@ -1252,7 +1250,7 @@
</section>
<section id="structures">
<h3>Structures<a class="headerlink" href="#structures" title="此标题的永久链接"></a></h3>
<h3>Structures<a class="headerlink" href="#structures" title="永久链接至标题"></a></h3>
<dl class="cpp struct">
<dt class="sig sig-object cpp" id="_CPPv415mdns_txt_item_t">
<span id="_CPPv315mdns_txt_item_t"></span><span id="_CPPv215mdns_txt_item_t"></span><span id="mdns_txt_item_t"></span><span class="target" id="structmdns__txt__item__t"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_txt_item_t</span></span></span><a class="headerlink" href="#_CPPv415mdns_txt_item_t" title="永久链接至目标"></a><br /></dt>
@@ -1384,7 +1382,7 @@
</section>
<section id="macros">
<h3>Macros<a class="headerlink" href="#macros" title="此标题的永久链接"></a></h3>
<h3>Macros<a class="headerlink" href="#macros" title="永久链接至标题"></a></h3>
<dl class="cpp macro">
<dt class="sig sig-object cpp" id="c.MDNS_TYPE_A">
<span class="target" id="mdns_8h_1aadb9a175b672893b350f1e7032009e00"></span><span class="sig-name descname"><span class="n"><span class="pre">MDNS_TYPE_A</span></span></span><a class="headerlink" href="#c.MDNS_TYPE_A" title="永久链接至目标"></a><br /></dt>
@@ -1427,7 +1425,7 @@
</section>
<section id="type-definitions">
<h3>Type Definitions<a class="headerlink" href="#type-definitions" title="此标题的永久链接"></a></h3>
<h3>Type Definitions<a class="headerlink" href="#type-definitions" title="永久链接至标题"></a></h3>
<dl class="cpp type">
<dt class="sig sig-object cpp" id="_CPPv418mdns_search_once_t">
<span id="_CPPv318mdns_search_once_t"></span><span id="_CPPv218mdns_search_once_t"></span><span id="mdns_search_once_t"></span><span class="target" id="mdns_8h_1a8815240672c5880e798ca6655309c589"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="n"><span class="pre">mdns_search_once_s</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_search_once_t</span></span></span><a class="headerlink" href="#_CPPv418mdns_search_once_t" title="永久链接至目标"></a><br /></dt>
@@ -1453,7 +1451,7 @@
</section>
<section id="enumerations">
<h3>Enumerations<a class="headerlink" href="#enumerations" title="此标题的永久链接"></a></h3>
<h3>Enumerations<a class="headerlink" href="#enumerations" title="永久链接至标题"></a></h3>
<dl class="cpp enum">
<dt class="sig sig-object cpp" id="_CPPv420mdns_event_actions_t">
<span id="_CPPv320mdns_event_actions_t"></span><span id="_CPPv220mdns_event_actions_t"></span><span class="target" id="mdns_8h_1a14279e8f2e7c65c12320222a55f09fdf"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">mdns_event_actions_t</span></span></span><a class="headerlink" href="#_CPPv420mdns_event_actions_t" title="永久链接至目标"></a><br /></dt>

View File

@@ -16,9 +16,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/translations.js"></script>

File diff suppressed because one or more lines are too long