RadioLibSmol/class_physical_layer.html
2020-08-22 08:35:55 +00:00

985 lines
56 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>RadioLib: PhysicalLayer Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">RadioLib
</div>
<div id="projectbrief">Universal wireless communication library for Arduino</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('class_physical_layer.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="class_physical_layer-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">PhysicalLayer Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
</div><!--header-->
<div class="contents">
<p>Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN. Also extracts some common module-independent methods. Using this interface class allows to use the protocols on various modules without much code duplicity. Because this class is used mainly as interface, all of its virtual members must be implemented in the module class.
<a href="class_physical_layer.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="_physical_layer_8h_source.html">PhysicalLayer.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for PhysicalLayer:</div>
<div class="dyncontent">
<div class="center">
<img src="class_physical_layer.png" usemap="#PhysicalLayer_map" alt=""/>
<map id="PhysicalLayer_map" name="PhysicalLayer_map">
<area href="class_c_c1101.html" title="Control class for CC1101 module. " alt="CC1101" shape="rect" coords="0,56,93,80"/>
<area href="classn_r_f24.html" title="Control class for nRF24 module. " alt="nRF24" shape="rect" coords="103,56,196,80"/>
<area href="class_r_f69.html" title="Control class for RF69 module. Also serves as base class for SX1231. " alt="RF69" shape="rect" coords="206,56,299,80"/>
<area href="class_si443x.html" title="Base class for Si443x series. All derived classes for Si443x (e.g. Si4431 or Si4432) inherit from thi..." alt="Si443x" shape="rect" coords="309,56,402,80"/>
<area href="class_s_x126x.html" title="Base class for SX126x series. All derived classes for SX126x (e.g. SX1262 or SX1268) inherit from thi..." alt="SX126x" shape="rect" coords="566,56,659,80"/>
<area href="class_s_x127x.html" title="Base class for SX127x series. All derived classes for SX127x (e.g. SX1278 or SX1272) inherit from thi..." alt="SX127x" shape="rect" coords="772,56,865,80"/>
<area href="class_s_x128x.html" title="Base class for SX128x series. All derived classes for SX128x (e.g. SX1280 or SX1281) inherit from thi..." alt="SX128x" shape="rect" coords="1030,56,1123,80"/>
<area href="class_s_x1231.html" title="Control class for SX1231 module. Overrides some methods from RF69 due to different register values..." alt="SX1231" shape="rect" coords="206,112,299,136"/>
<area href="class_si4432.html" title="Derived class for Si4432 modules. " alt="Si4432" shape="rect" coords="309,112,402,136"/>
<area href="class_s_x1262.html" title="Derived class for SX1262 modules. " alt="SX1262" shape="rect" coords="515,112,608,136"/>
<area href="class_s_x1268.html" title="Derived class for SX1268 modules. " alt="SX1268" shape="rect" coords="618,112,711,136"/>
<area href="class_s_x1272.html" title="Derived class for SX1272 modules. Also used as base class for SX1273. Both modules use the same basic..." alt="SX1272" shape="rect" coords="721,112,814,136"/>
<area href="class_s_x1278.html" title="Derived class for SX1278 modules. Also used as base class for SX1276, SX1277, SX1279, RFM95 and RFM96. All of these modules use the same basic hardware and only differ in parameter ranges (and names). " alt="SX1278" shape="rect" coords="824,112,917,136"/>
<area href="class_s_x1281.html" title="Derived class for SX1281 modules. " alt="SX1281" shape="rect" coords="1030,112,1123,136"/>
<area href="class_si4430.html" title="Derived class for Si4430 modules. " alt="Si4430" shape="rect" coords="412,168,505,192"/>
<area href="class_si4431.html" title="Derived class for Si4431 modules. " alt="Si4431" shape="rect" coords="412,224,505,248"/>
<area href="class_s_x1261.html" title="Derived class for SX1261 modules. " alt="SX1261" shape="rect" coords="515,168,608,192"/>
<area href="class_s_x1273.html" title="Derived class for SX1273 modules. Overrides some methods from SX1272 due to different parameter range..." alt="SX1273" shape="rect" coords="721,168,814,192"/>
<area href="class_r_f_m95.html" title="Derived class for RFM95 modules. Overrides some methods from SX1278 due to different parameter ranges..." alt="RFM95" shape="rect" coords="927,168,1020,192"/>
<area href="class_r_f_m96.html" title="Derived class for RFM96 modules. Overrides some methods from SX1278 due to different parameter ranges..." alt="RFM96" shape="rect" coords="927,224,1020,248"/>
<area href="class_s_x1276.html" title="Derived class for SX1276 modules. Overrides some methods from SX1278 due to different parameter range..." alt="SX1276" shape="rect" coords="927,280,1020,304"/>
<area href="class_s_x1277.html" title="Derived class for SX1277 modules. Overrides some methods from SX1278 due to different parameter range..." alt="SX1277" shape="rect" coords="927,336,1020,360"/>
<area href="class_s_x1279.html" title="Derived class for SX1279 modules. Overrides some methods from SX1278 due to different parameter range..." alt="SX1279" shape="rect" coords="927,392,1020,416"/>
<area href="class_s_x1280.html" title="Derived class for SX1280 modules. " alt="SX1280" shape="rect" coords="1030,168,1123,192"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a5e02457f1d519cf81b1590a182321c62"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a5e02457f1d519cf81b1590a182321c62">PhysicalLayer</a> (float freqStep, size_t maxPacketLength)</td></tr>
<tr class="memdesc:a5e02457f1d519cf81b1590a182321c62"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. <a href="#a5e02457f1d519cf81b1590a182321c62">More...</a><br /></td></tr>
<tr class="separator:a5e02457f1d519cf81b1590a182321c62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab139a34e03a6fd5a781cd54da21d308f"><td class="memItemLeft" align="right" valign="top">int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#ab139a34e03a6fd5a781cd54da21d308f">transmit</a> (__FlashStringHelper *fstr, uint8_t addr=0)</td></tr>
<tr class="memdesc:ab139a34e03a6fd5a781cd54da21d308f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Arduino Flash String transmit method. <a href="#ab139a34e03a6fd5a781cd54da21d308f">More...</a><br /></td></tr>
<tr class="separator:ab139a34e03a6fd5a781cd54da21d308f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb62c5a521aafc1e0525c58e9364482b"><td class="memItemLeft" align="right" valign="top">int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#aeb62c5a521aafc1e0525c58e9364482b">transmit</a> (String &amp;str, uint8_t addr=0)</td></tr>
<tr class="memdesc:aeb62c5a521aafc1e0525c58e9364482b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Arduino String transmit method. <a href="#aeb62c5a521aafc1e0525c58e9364482b">More...</a><br /></td></tr>
<tr class="separator:aeb62c5a521aafc1e0525c58e9364482b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a492b2d057dd803c3884fa1adc8e22534"><td class="memItemLeft" align="right" valign="top">int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a492b2d057dd803c3884fa1adc8e22534">transmit</a> (const char *str, uint8_t addr=0)</td></tr>
<tr class="memdesc:a492b2d057dd803c3884fa1adc8e22534"><td class="mdescLeft">&#160;</td><td class="mdescRight">C-string transmit method. <a href="#a492b2d057dd803c3884fa1adc8e22534">More...</a><br /></td></tr>
<tr class="separator:a492b2d057dd803c3884fa1adc8e22534"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af81565ee82ef9a7de9c5663c745f4ef7"><td class="memItemLeft" align="right" valign="top">virtual int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#af81565ee82ef9a7de9c5663c745f4ef7">transmit</a> (uint8_t *data, size_t len, uint8_t addr=0)=0</td></tr>
<tr class="memdesc:af81565ee82ef9a7de9c5663c745f4ef7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Binary transmit method. Must be implemented in module class. <a href="#af81565ee82ef9a7de9c5663c745f4ef7">More...</a><br /></td></tr>
<tr class="separator:af81565ee82ef9a7de9c5663c745f4ef7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb1b090348d9091bfa3a0b5ba3d85b36"><td class="memItemLeft" align="right" valign="top">int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#afb1b090348d9091bfa3a0b5ba3d85b36">receive</a> (String &amp;str, size_t len=0)</td></tr>
<tr class="memdesc:afb1b090348d9091bfa3a0b5ba3d85b36"><td class="mdescLeft">&#160;</td><td class="mdescRight">Arduino String receive method. <a href="#afb1b090348d9091bfa3a0b5ba3d85b36">More...</a><br /></td></tr>
<tr class="separator:afb1b090348d9091bfa3a0b5ba3d85b36"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0e77da761a2cbb5c9535df0bdea993f9"><td class="memItemLeft" align="right" valign="top">virtual int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a0e77da761a2cbb5c9535df0bdea993f9">standby</a> ()=0</td></tr>
<tr class="memdesc:a0e77da761a2cbb5c9535df0bdea993f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets module to standby. <a href="#a0e77da761a2cbb5c9535df0bdea993f9">More...</a><br /></td></tr>
<tr class="separator:a0e77da761a2cbb5c9535df0bdea993f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ad4c6a8ac267f8ac590260414ffcda3"><td class="memItemLeft" align="right" valign="top">virtual int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a2ad4c6a8ac267f8ac590260414ffcda3">receive</a> (uint8_t *data, size_t len)=0</td></tr>
<tr class="memdesc:a2ad4c6a8ac267f8ac590260414ffcda3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Binary receive method. Must be implemented in module class. <a href="#a2ad4c6a8ac267f8ac590260414ffcda3">More...</a><br /></td></tr>
<tr class="separator:a2ad4c6a8ac267f8ac590260414ffcda3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af068e6e862c99e39d0261a7971dd56db"><td class="memItemLeft" align="right" valign="top">int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#af068e6e862c99e39d0261a7971dd56db">startTransmit</a> (String &amp;str, uint8_t addr=0)</td></tr>
<tr class="memdesc:af068e6e862c99e39d0261a7971dd56db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt-driven Arduino String transmit method. Unlike the standard transmit method, this one is non-blocking. Interrupt pin will be activated when transmission finishes. <a href="#af068e6e862c99e39d0261a7971dd56db">More...</a><br /></td></tr>
<tr class="separator:af068e6e862c99e39d0261a7971dd56db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a923654706eff5118ef6e84214e837f27"><td class="memItemLeft" align="right" valign="top">int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a923654706eff5118ef6e84214e837f27">startTransmit</a> (const char *str, uint8_t addr=0)</td></tr>
<tr class="memdesc:a923654706eff5118ef6e84214e837f27"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt-driven Arduino String transmit method. Unlike the standard transmit method, this one is non-blocking. Interrupt pin will be activated when transmission finishes. <a href="#a923654706eff5118ef6e84214e837f27">More...</a><br /></td></tr>
<tr class="separator:a923654706eff5118ef6e84214e837f27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41a1de0ebffe7b65de6fd8cceb9a5123"><td class="memItemLeft" align="right" valign="top">virtual int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a41a1de0ebffe7b65de6fd8cceb9a5123">startTransmit</a> (uint8_t *data, size_t len, uint8_t addr=0)=0</td></tr>
<tr class="memdesc:a41a1de0ebffe7b65de6fd8cceb9a5123"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt-driven binary transmit method. <a href="#a41a1de0ebffe7b65de6fd8cceb9a5123">More...</a><br /></td></tr>
<tr class="separator:a41a1de0ebffe7b65de6fd8cceb9a5123"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8eed0e888a7c8742e89d2b850977de2"><td class="memItemLeft" align="right" valign="top">int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#ae8eed0e888a7c8742e89d2b850977de2">readData</a> (String &amp;str, size_t len=0)</td></tr>
<tr class="memdesc:ae8eed0e888a7c8742e89d2b850977de2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads data that was received after calling startReceive method. <a href="#ae8eed0e888a7c8742e89d2b850977de2">More...</a><br /></td></tr>
<tr class="separator:ae8eed0e888a7c8742e89d2b850977de2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8b6c756eb4b92855433ca389d73c632"><td class="memItemLeft" align="right" valign="top">virtual int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#ae8b6c756eb4b92855433ca389d73c632">readData</a> (uint8_t *data, size_t len)=0</td></tr>
<tr class="memdesc:ae8b6c756eb4b92855433ca389d73c632"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads data that was received after calling startReceive method. <a href="#ae8b6c756eb4b92855433ca389d73c632">More...</a><br /></td></tr>
<tr class="separator:ae8b6c756eb4b92855433ca389d73c632"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b04eb6155b06d8ef400131c647d54e7"><td class="memItemLeft" align="right" valign="top">virtual int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a4b04eb6155b06d8ef400131c647d54e7">transmitDirect</a> (uint32_t frf=0)=0</td></tr>
<tr class="memdesc:a4b04eb6155b06d8ef400131c647d54e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enables direct transmission mode on pins DIO1 (clock) and DIO2 (data). Must be implemented in module class. While in direct mode, the module will not be able to transmit or receive packets. Can only be activated in FSK mode. <a href="#a4b04eb6155b06d8ef400131c647d54e7">More...</a><br /></td></tr>
<tr class="separator:a4b04eb6155b06d8ef400131c647d54e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46b22145b33e97cf6065ed826799b6b4"><td class="memItemLeft" align="right" valign="top">virtual int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a46b22145b33e97cf6065ed826799b6b4">receiveDirect</a> ()=0</td></tr>
<tr class="memdesc:a46b22145b33e97cf6065ed826799b6b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enables direct reception mode on pins DIO1 (clock) and DIO2 (data). Must be implemented in module class. While in direct mode, the module will not be able to transmit or receive packets. Can only be activated in FSK mode. <a href="#a46b22145b33e97cf6065ed826799b6b4">More...</a><br /></td></tr>
<tr class="separator:a46b22145b33e97cf6065ed826799b6b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9060e8ab7a2da192b3bf53b3501553b"><td class="memItemLeft" align="right" valign="top">virtual int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#ab9060e8ab7a2da192b3bf53b3501553b">setFrequencyDeviation</a> (float freqDev)=0</td></tr>
<tr class="memdesc:ab9060e8ab7a2da192b3bf53b3501553b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets FSK frequency deviation from carrier frequency. Allowed values depend on bit rate setting and must be lower than 200 kHz. Only available in FSK mode. Must be implemented in module class. <a href="#ab9060e8ab7a2da192b3bf53b3501553b">More...</a><br /></td></tr>
<tr class="separator:ab9060e8ab7a2da192b3bf53b3501553b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab643a814dce48f71a13bf6ea23f44cbd"><td class="memItemLeft" align="right" valign="top">virtual int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#ab643a814dce48f71a13bf6ea23f44cbd">setDataShaping</a> (uint8_t sh)=0</td></tr>
<tr class="memdesc:ab643a814dce48f71a13bf6ea23f44cbd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets GFSK data shaping. Only available in FSK mode. Must be implemented in module class. <a href="#ab643a814dce48f71a13bf6ea23f44cbd">More...</a><br /></td></tr>
<tr class="separator:ab643a814dce48f71a13bf6ea23f44cbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d3419227d201d6912b77784636d437d"><td class="memItemLeft" align="right" valign="top">virtual int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a7d3419227d201d6912b77784636d437d">setEncoding</a> (uint8_t encoding)=0</td></tr>
<tr class="memdesc:a7d3419227d201d6912b77784636d437d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets FSK data encoding. Only available in FSK mode. Must be implemented in module class. <a href="#a7d3419227d201d6912b77784636d437d">More...</a><br /></td></tr>
<tr class="separator:a7d3419227d201d6912b77784636d437d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a977e5236693960bb1c79090a201e9e1c"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a977e5236693960bb1c79090a201e9e1c">getFreqStep</a> () const</td></tr>
<tr class="memdesc:a977e5236693960bb1c79090a201e9e1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the module frequency step size that was set in constructor. <a href="#a977e5236693960bb1c79090a201e9e1c">More...</a><br /></td></tr>
<tr class="separator:a977e5236693960bb1c79090a201e9e1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0bd6046e068ef63e3f2b6bead48e02a7"><td class="memItemLeft" align="right" valign="top">virtual size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_physical_layer.html#a0bd6046e068ef63e3f2b6bead48e02a7">getPacketLength</a> (bool update=true)=0</td></tr>
<tr class="memdesc:a0bd6046e068ef63e3f2b6bead48e02a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Query modem for the packet length of received payload. <a href="#a0bd6046e068ef63e3f2b6bead48e02a7">More...</a><br /></td></tr>
<tr class="separator:a0bd6046e068ef63e3f2b6bead48e02a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN. Also extracts some common module-independent methods. Using this interface class allows to use the protocols on various modules without much code duplicity. Because this class is used mainly as interface, all of its virtual members must be implemented in the module class. </p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a5e02457f1d519cf81b1590a182321c62"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e02457f1d519cf81b1590a182321c62">&#9670;&nbsp;</a></span>PhysicalLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">PhysicalLayer::PhysicalLayer </td>
<td>(</td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>freqStep</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>maxPacketLength</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Default constructor. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">freqStep</td><td>Frequency step of the synthesizer in Hz.</td></tr>
<tr><td class="paramname">maxPacketLength</td><td>Maximum length of packet that can be received by the module- </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a977e5236693960bb1c79090a201e9e1c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a977e5236693960bb1c79090a201e9e1c">&#9670;&nbsp;</a></span>getFreqStep()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">float PhysicalLayer::getFreqStep </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Gets the module frequency step size that was set in constructor. </p>
<dl class="section return"><dt>Returns</dt><dd>Synthesizer frequency step size in Hz. </dd></dl>
</div>
</div>
<a id="a0bd6046e068ef63e3f2b6bead48e02a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0bd6046e068ef63e3f2b6bead48e02a7">&#9670;&nbsp;</a></span>getPacketLength()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual size_t PhysicalLayer::getPacketLength </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>update</em> = <code>true</code></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Query modem for the packet length of received payload. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">update</td><td>Update received packet length. Will return cached value when set to false.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Length of last received packet in bytes. </dd></dl>
<p>Implemented in <a class="el" href="class_s_x127x.html#a462fa74275e67c296328a01f361892d5">SX127x</a>, <a class="el" href="class_c_c1101.html#a122281f6a915b77ee9dafc9926e731a0">CC1101</a>, <a class="el" href="class_s_x126x.html#ac4ef8c8751a3c09d64e431684840c987">SX126x</a>, <a class="el" href="class_si443x.html#a2d944669dc69ccd47f9e6c360f2ffd10">Si443x</a>, <a class="el" href="class_r_f69.html#a86a080086c0228d23e2cb77d2b1915c1">RF69</a>, <a class="el" href="class_s_x128x.html#a390fd0749b316eed67da7b54f4f24735">SX128x</a>, and <a class="el" href="classn_r_f24.html#a23ea1749c21863ebc5bd3a2b08d64f3b">nRF24</a>.</p>
</div>
</div>
<a id="ae8eed0e888a7c8742e89d2b850977de2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae8eed0e888a7c8742e89d2b850977de2">&#9670;&nbsp;</a></span>readData() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int16_t PhysicalLayer::readData </td>
<td>(</td>
<td class="paramtype">String &amp;&#160;</td>
<td class="paramname"><em>str</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads data that was received after calling startReceive method. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">str</td><td>Address of Arduino String to save the received data.</td></tr>
<tr><td class="paramname">len</td><td>Expected number of characters in the message.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
</div>
</div>
<a id="ae8b6c756eb4b92855433ca389d73c632"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae8b6c756eb4b92855433ca389d73c632">&#9670;&nbsp;</a></span>readData() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int16_t PhysicalLayer::readData </td>
<td>(</td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads data that was received after calling startReceive method. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>Pointer to array to save the received binary data.</td></tr>
<tr><td class="paramname">len</td><td>Number of bytes that will be received. Must be known in advance for binary transmissions.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
<p>Implemented in <a class="el" href="class_s_x127x.html#abfc840e8d6fe5e222f0143be17876745">SX127x</a>, <a class="el" href="class_si443x.html#ad00ff8b58c68118ad74fee82028aa71e">Si443x</a>, <a class="el" href="class_c_c1101.html#a8c79975a7bbe8a37f8214ecd1f69ba22">CC1101</a>, <a class="el" href="class_r_f69.html#a3983b66c83818b4082805bcafc712f00">RF69</a>, <a class="el" href="class_s_x128x.html#a94bca43258b09217fb476a2d8db784bb">SX128x</a>, <a class="el" href="class_s_x126x.html#a3350cbfab628956c1a456383ac7bb2b2">SX126x</a>, and <a class="el" href="classn_r_f24.html#a410fb78acb4ed358818c132687b8857a">nRF24</a>.</p>
</div>
</div>
<a id="afb1b090348d9091bfa3a0b5ba3d85b36"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afb1b090348d9091bfa3a0b5ba3d85b36">&#9670;&nbsp;</a></span>receive() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int16_t PhysicalLayer::receive </td>
<td>(</td>
<td class="paramtype">String &amp;&#160;</td>
<td class="paramname"><em>str</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Arduino String receive method. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">str</td><td>Address of Arduino String to save the received data.</td></tr>
<tr><td class="paramname">len</td><td>Expected number of characters in the message. Leave as 0 if expecting a unknown size packet</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
</div>
</div>
<a id="a2ad4c6a8ac267f8ac590260414ffcda3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ad4c6a8ac267f8ac590260414ffcda3">&#9670;&nbsp;</a></span>receive() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int16_t PhysicalLayer::receive </td>
<td>(</td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Binary receive method. Must be implemented in module class. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>Pointer to array to save the received binary data.</td></tr>
<tr><td class="paramname">len</td><td>Number of bytes that will be received. Must be known in advance for binary transmissions.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
<p>Implemented in <a class="el" href="class_si443x.html#aabca3ba8eda212938febab1df2e764b4">Si443x</a>, <a class="el" href="class_s_x127x.html#adfe0d3f033a23ec2f3c2a407285d357c">SX127x</a>, <a class="el" href="class_c_c1101.html#aedc1067d0334bb69ed5316146014097d">CC1101</a>, <a class="el" href="class_r_f69.html#ae36e8e6042245621a182b29526fe2245">RF69</a>, <a class="el" href="class_s_x128x.html#a32b7b674d63c36f15b7f58a2cb837a99">SX128x</a>, <a class="el" href="class_s_x126x.html#ae3db6b29c482d94eef8a43cd8b5751c0">SX126x</a>, and <a class="el" href="classn_r_f24.html#a239e94511d9ee67ad3d64a49a5c4d7ac">nRF24</a>.</p>
</div>
</div>
<a id="a46b22145b33e97cf6065ed826799b6b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46b22145b33e97cf6065ed826799b6b4">&#9670;&nbsp;</a></span>receiveDirect()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int16_t PhysicalLayer::receiveDirect </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Enables direct reception mode on pins DIO1 (clock) and DIO2 (data). Must be implemented in module class. While in direct mode, the module will not be able to transmit or receive packets. Can only be activated in FSK mode. </p>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
<p>Implemented in <a class="el" href="class_s_x127x.html#aa7ac558d537c6364c4bc82c8f33e398f">SX127x</a>, <a class="el" href="class_si443x.html#a178b471527813a608c04db7d3c9648d6">Si443x</a>, <a class="el" href="class_c_c1101.html#ab053c185330519d58f364790108d29ac">CC1101</a>, <a class="el" href="class_r_f69.html#abd556b0f455f9510213b17588a4baf1b">RF69</a>, <a class="el" href="class_s_x128x.html#aff7d86352c98771595375e17d19a2a97">SX128x</a>, <a class="el" href="class_s_x126x.html#a8a18aee2bf05793aa29b5cf6b47bb435">SX126x</a>, and <a class="el" href="classn_r_f24.html#a415d86947742e981bfcf7f2371f8605c">nRF24</a>.</p>
</div>
</div>
<a id="ab643a814dce48f71a13bf6ea23f44cbd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab643a814dce48f71a13bf6ea23f44cbd">&#9670;&nbsp;</a></span>setDataShaping()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int16_t PhysicalLayer::setDataShaping </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>sh</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets GFSK data shaping. Only available in FSK mode. Must be implemented in module class. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">sh</td><td>Shaping to be set. See <a class="el" href="group__config__shaping.html">Data shaping filter values aliases.</a> for possible values.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
<p>Implemented in <a class="el" href="class_c_c1101.html#adf96e77f25b7e256891601bef04f35a6">CC1101</a>, <a class="el" href="class_r_f69.html#a42b99e437454e92c6932c3b7acc1fc4a">RF69</a>, <a class="el" href="class_si443x.html#ade08c79074c7e4414d34eefa25cee168">Si443x</a>, <a class="el" href="class_s_x126x.html#a1d8f4deb555844b24c2426dd86e69676">SX126x</a>, <a class="el" href="class_s_x128x.html#a99491c705e88dddc820f884b778f1660">SX128x</a>, <a class="el" href="classn_r_f24.html#a0db248d2bcdb4ca2b401e8e638442916">nRF24</a>, <a class="el" href="class_s_x1278.html#afb740a4925b64d83d5edca10d93f0563">SX1278</a>, and <a class="el" href="class_s_x1272.html#a91aca64124321c07a67f26b3c6934aea">SX1272</a>.</p>
</div>
</div>
<a id="a7d3419227d201d6912b77784636d437d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d3419227d201d6912b77784636d437d">&#9670;&nbsp;</a></span>setEncoding()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int16_t PhysicalLayer::setEncoding </td>
<td>(</td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>encoding</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets FSK data encoding. Only available in FSK mode. Must be implemented in module class. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">enc</td><td>Encoding to be used. See <a class="el" href="group__config__encoding.html">Encoding type aliases.</a> for possible values.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
<p>Implemented in <a class="el" href="class_s_x127x.html#abad2d455012bd28d304589c8164390eb">SX127x</a>, <a class="el" href="class_c_c1101.html#ab4b98eb6af33d006306bb7514ed216ea">CC1101</a>, <a class="el" href="class_s_x126x.html#a2b3eb51117558c58384b03de4b7bfe60">SX126x</a>, <a class="el" href="class_r_f69.html#aae828ce8dda16da4e54d2f18b1fb8af2">RF69</a>, <a class="el" href="class_si443x.html#a1382fc3b68f447e381613e6670747128">Si443x</a>, <a class="el" href="class_s_x128x.html#a8720a388d2cd10fac3112b89f4a80947">SX128x</a>, and <a class="el" href="classn_r_f24.html#a0429a9d6524005065e6fac21aaebdcbf">nRF24</a>.</p>
</div>
</div>
<a id="ab9060e8ab7a2da192b3bf53b3501553b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab9060e8ab7a2da192b3bf53b3501553b">&#9670;&nbsp;</a></span>setFrequencyDeviation()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int16_t PhysicalLayer::setFrequencyDeviation </td>
<td>(</td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>freqDev</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets FSK frequency deviation from carrier frequency. Allowed values depend on bit rate setting and must be lower than 200 kHz. Only available in FSK mode. Must be implemented in module class. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">freqDev</td><td>Frequency deviation to be set (in kHz).</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
<p>Implemented in <a class="el" href="class_s_x127x.html#a448ea8a6a6011a9cdddd4e09bd6c9679">SX127x</a>, <a class="el" href="class_si443x.html#a7c4e6caa95e5622f6f515ba0339a1c66">Si443x</a>, <a class="el" href="class_c_c1101.html#a0d69713b9f20c9de354c13c3167b18b3">CC1101</a>, <a class="el" href="class_r_f69.html#adb9fbfedf95f34ac537815870b98a9be">RF69</a>, <a class="el" href="class_s_x128x.html#a26d0d02e5e53a3172df9208fa343a3f1">SX128x</a>, <a class="el" href="class_s_x126x.html#a7cd95a5f2e39ae8fb1a3040e77fa21a3">SX126x</a>, and <a class="el" href="classn_r_f24.html#a5170284f0a5535de7d00216d450b87a4">nRF24</a>.</p>
</div>
</div>
<a id="a0e77da761a2cbb5c9535df0bdea993f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0e77da761a2cbb5c9535df0bdea993f9">&#9670;&nbsp;</a></span>standby()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int16_t PhysicalLayer::standby </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets module to standby. </p>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
<p>Implemented in <a class="el" href="class_s_x127x.html#a760b8c5103128f122fbe489c6529ce41">SX127x</a>, <a class="el" href="class_si443x.html#ac45d2776df3ff338db154ead143fb7b8">Si443x</a>, <a class="el" href="class_c_c1101.html#a7612bf81e48086004c62548de2682266">CC1101</a>, <a class="el" href="class_r_f69.html#a20242499eb926ff7b7da6e3f74a9ece1">RF69</a>, <a class="el" href="class_s_x128x.html#a2be8cc6c3b61b59cb6a6ca4f6a030b45">SX128x</a>, <a class="el" href="class_s_x126x.html#a7a1579e2557c36a4a34b09039c0d0c71">SX126x</a>, and <a class="el" href="classn_r_f24.html#a5957f06a891d3d9c07e87b59c239ce56">nRF24</a>.</p>
</div>
</div>
<a id="af068e6e862c99e39d0261a7971dd56db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af068e6e862c99e39d0261a7971dd56db">&#9670;&nbsp;</a></span>startTransmit() <span class="overload">[1/3]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int16_t PhysicalLayer::startTransmit </td>
<td>(</td>
<td class="paramtype">String &amp;&#160;</td>
<td class="paramname"><em>str</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>addr</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Interrupt-driven Arduino String transmit method. Unlike the standard transmit method, this one is non-blocking. Interrupt pin will be activated when transmission finishes. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">str</td><td>Address of Arduino String that will be transmitted.</td></tr>
<tr><td class="paramname">addr</td><td>Node address to transmit the packet to. Only used in FSK mode.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
</div>
</div>
<a id="a923654706eff5118ef6e84214e837f27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a923654706eff5118ef6e84214e837f27">&#9670;&nbsp;</a></span>startTransmit() <span class="overload">[2/3]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int16_t PhysicalLayer::startTransmit </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>str</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>addr</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Interrupt-driven Arduino String transmit method. Unlike the standard transmit method, this one is non-blocking. Interrupt pin will be activated when transmission finishes. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">str</td><td>C-string that will be transmitted.</td></tr>
<tr><td class="paramname">addr</td><td>Node address to transmit the packet to. Only used in FSK mode.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
</div>
</div>
<a id="a41a1de0ebffe7b65de6fd8cceb9a5123"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41a1de0ebffe7b65de6fd8cceb9a5123">&#9670;&nbsp;</a></span>startTransmit() <span class="overload">[3/3]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int16_t PhysicalLayer::startTransmit </td>
<td>(</td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>addr</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Interrupt-driven binary transmit method. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>Binary data that will be transmitted.</td></tr>
<tr><td class="paramname">len</td><td>Length of binary data to transmit (in bytes).</td></tr>
<tr><td class="paramname">addr</td><td>Node address to transmit the packet to. Only used in FSK mode.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
<p>Implemented in <a class="el" href="class_s_x127x.html#adc2f1379573b7a7b5ee8125ea3752083">SX127x</a>, <a class="el" href="class_si443x.html#a402b4f5f11ba79e9cd4fb6ac0bfd9314">Si443x</a>, <a class="el" href="class_c_c1101.html#a0df2938e2509a8f2746b20ae0558d4ea">CC1101</a>, <a class="el" href="class_r_f69.html#a855dc194947b095b821ec1524ba6814c">RF69</a>, <a class="el" href="class_s_x128x.html#aef221e7d463c5228ce00ed6934512848">SX128x</a>, <a class="el" href="class_s_x126x.html#ab843614658a79db7aa24e48d5b6e84f1">SX126x</a>, and <a class="el" href="classn_r_f24.html#a42fdc828b49f2b8e15457189bd57d917">nRF24</a>.</p>
</div>
</div>
<a id="ab139a34e03a6fd5a781cd54da21d308f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab139a34e03a6fd5a781cd54da21d308f">&#9670;&nbsp;</a></span>transmit() <span class="overload">[1/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int16_t PhysicalLayer::transmit </td>
<td>(</td>
<td class="paramtype">__FlashStringHelper *&#160;</td>
<td class="paramname"><em>fstr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>addr</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Arduino Flash String transmit method. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">str</td><td>Pointer to Arduino Flash String that will be transmitted.</td></tr>
<tr><td class="paramname">addr</td><td>Node address to transmit the packet to. Only used in FSK mode.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
</div>
</div>
<a id="aeb62c5a521aafc1e0525c58e9364482b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeb62c5a521aafc1e0525c58e9364482b">&#9670;&nbsp;</a></span>transmit() <span class="overload">[2/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int16_t PhysicalLayer::transmit </td>
<td>(</td>
<td class="paramtype">String &amp;&#160;</td>
<td class="paramname"><em>str</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>addr</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Arduino String transmit method. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">str</td><td>Address of Arduino string that will be transmitted.</td></tr>
<tr><td class="paramname">addr</td><td>Node address to transmit the packet to. Only used in FSK mode.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
</div>
</div>
<a id="a492b2d057dd803c3884fa1adc8e22534"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a492b2d057dd803c3884fa1adc8e22534">&#9670;&nbsp;</a></span>transmit() <span class="overload">[3/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int16_t PhysicalLayer::transmit </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>str</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>addr</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>C-string transmit method. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">str</td><td>C-string that will be transmitted.</td></tr>
<tr><td class="paramname">addr</td><td>Node address to transmit the packet to. Only used in FSK mode.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
</div>
</div>
<a id="af81565ee82ef9a7de9c5663c745f4ef7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af81565ee82ef9a7de9c5663c745f4ef7">&#9670;&nbsp;</a></span>transmit() <span class="overload">[4/4]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int16_t PhysicalLayer::transmit </td>
<td>(</td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>addr</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Binary transmit method. Must be implemented in module class. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>Binary data that will be transmitted.</td></tr>
<tr><td class="paramname">len</td><td>Length of binary data to transmit (in bytes).</td></tr>
<tr><td class="paramname">addr</td><td>Node address to transmit the packet to. Only used in FSK mode.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
<p>Implemented in <a class="el" href="class_si443x.html#a782748025e19ec6e597293afb6570bff">Si443x</a>, <a class="el" href="class_s_x127x.html#a9c4ea3285922bf01cebd2c8a706d9a29">SX127x</a>, <a class="el" href="class_c_c1101.html#a7cb99a9200b21829b50e3fc3878573f4">CC1101</a>, <a class="el" href="class_r_f69.html#a09ba80f60ee7974011a4b4f6c18c6847">RF69</a>, <a class="el" href="class_s_x128x.html#af253e1e45361de74aefd01a7c73c28f5">SX128x</a>, <a class="el" href="class_s_x126x.html#aab18364237ddac0c56aeaf63f08cf009">SX126x</a>, and <a class="el" href="classn_r_f24.html#a583d505bd3a638ecc5576dd2dd95f044">nRF24</a>.</p>
</div>
</div>
<a id="a4b04eb6155b06d8ef400131c647d54e7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4b04eb6155b06d8ef400131c647d54e7">&#9670;&nbsp;</a></span>transmitDirect()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int16_t PhysicalLayer::transmitDirect </td>
<td>(</td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>frf</em> = <code>0</code></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Enables direct transmission mode on pins DIO1 (clock) and DIO2 (data). Must be implemented in module class. While in direct mode, the module will not be able to transmit or receive packets. Can only be activated in FSK mode. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">frf</td><td>24-bit raw frequency value to start transmitting at. Required for quick frequency shifts in RTTY.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__status__codes.html">Status Codes</a> </dd></dl>
<p>Implemented in <a class="el" href="class_s_x127x.html#aefeeb9f7192e11a75b5dfb1ab8488e84">SX127x</a>, <a class="el" href="class_si443x.html#a5a86a2032c4b876c1c8e4a7cf4730c99">Si443x</a>, <a class="el" href="class_c_c1101.html#a240eef8fa7d838d76f3c11086dc50e46">CC1101</a>, <a class="el" href="class_r_f69.html#a222682569338abb49d6952430b6eebdd">RF69</a>, <a class="el" href="class_s_x128x.html#a53892566b0259d348158efe3c3c3601a">SX128x</a>, <a class="el" href="class_s_x126x.html#a921aa8afb8d33b2660731c1f8d67664b">SX126x</a>, and <a class="el" href="classn_r_f24.html#a090bb64f65309efabfa1ffd86daa2303">nRF24</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>src/protocols/PhysicalLayer/<a class="el" href="_physical_layer_8h_source.html">PhysicalLayer.h</a></li>
<li>src/protocols/PhysicalLayer/PhysicalLayer.cpp</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="class_physical_layer.html">PhysicalLayer</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>