From: <Saved by Mozilla 5.0 (Windows)>
Subject: bcm2835: C library for Broadcom BCM 2835 as used in Raspberry Pi
Date: Wed, 23 Apr 2014 16:08:44 -0300
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_BEF7B712.91FF2623"
X-MAF-Information: Produced By MAF V3.0.0

This is a multi-part message in MIME format.

------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: text/html;
	charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.airspayce.com/mikem/bcm2835/index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.=
w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns=3D"http://www.w3.=
org/1999/xhtml"><head>
<meta http-equiv=3D"content-type" content=3D"text/html; charset=3DUTF-8">
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF-8">
<meta http-equiv=3D"X-UA-Compatible" content=3D"IE=3D9">
<title>bcm2835: C library for Broadcom BCM 2835 as used in Raspberry Pi</ti=
tle>
<link href=3D"urn:snapshot-F9CAA4FA:http://www.airspayce.com/mikem/bcm2835/=
tabs.css" rel=3D"stylesheet" type=3D"text/css">
<script type=3D"text/javascript" src=3D"urn:snapshot-89E068E8:http://www.ai=
rspayce.com/mikem/bcm2835/jquery.js"></script>
<script type=3D"text/javascript" src=3D"urn:snapshot-C911B38B:http://www.ai=
rspayce.com/mikem/bcm2835/dynsections.js"></script>
<link href=3D"urn:snapshot-84F699D5:http://www.airspayce.com/mikem/bcm2835/=
search/search.css" rel=3D"stylesheet" type=3D"text/css">
<script type=3D"text/javascript" src=3D"urn:snapshot-77F8C41D:http://www.ai=
rspayce.com/mikem/bcm2835/search/search.js"></script>
<script type=3D"text/javascript"><!--

/* Script removed by snapshot save */

--></script>
<link href=3D"urn:snapshot-DC686D22:http://www.airspayce.com/mikem/bcm2835/=
doxygen.css" rel=3D"stylesheet" type=3D"text/css">
<style id=3D"nkdyehonvglc" type=3D"text/css"><!--

/* Effective stylesheet produced by snapshot save */

--></style></head>
<body>
<div id=3D"top"><!-- do not remove this div, it is closed by doxygen! -->
<div id=3D"titlearea">
<table cellpadding=3D"0" cellspacing=3D"0">
 <tbody>
 <tr style=3D"height: 56px;">
  <td style=3D"padding-left: 0.5em;">
   <div id=3D"projectname">bcm2835
   =C2=A0<span id=3D"projectnumber">1.36</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.2 -->
<script type=3D"text/javascript"><!--

/* Script removed by snapshot save */

--></script>
  <div id=3D"navrow1" class=3D"tabs">
    <ul class=3D"tablist">
      <li class=3D"current"><a href=3D"#"><span>Main=C2=A0Page</span></a></=
li>
      <li><a href=3D"http://www.airspayce.com/mikem/bcm2835/modules.html"><=
span>Modules</span></a></li>
      <li><a href=3D"http://www.airspayce.com/mikem/bcm2835/files.html"><sp=
an>Files</span></a></li>
      <li><a href=3D"http://www.airspayce.com/mikem/bcm2835/examples.html">=
<span>Examples</span></a></li>
      <li>
        <div id=3D"MSearchBox" class=3D"MSearchBoxInactive">
        <span class=3D"left">
          <img id=3D"MSearchSelect" src=3D"http://www.airspayce.com/mikem/b=
cm2835/search/mag_sel.png" onmouseover=3D"" onmouseout=3D"" alt=3D"">
          <input id=3D"MSearchField" value=3D"Search" accesskey=3D"S" onfoc=
us=3D"" onblur=3D"" onkeyup=3D"" type=3D"text">
          </span><span class=3D"right">
            <a id=3D"MSearchClose" href=3D"javascript:void(0);"><img id=3D"=
MSearchCloseImg" src=3D"http://www.airspayce.com/mikem/bcm2835/search/close=
.png" alt=3D"" border=3D"0"></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id=3D"MSearchSelectWindow" onmouseover=3D"" onmouseout=3D"" onkeydown=
=3D"">
<a class=3D"SelectItem" href=3D"urn:snapshot-DAD4D2ED:javascript:void%280%2=
9" onclick=3D""><span class=3D"SelectionMark">=E2=80=A2</span>All</a><a cla=
ss=3D"SelectItem" href=3D"urn:snapshot-DAD4D2ED:javascript:void%280%29" onc=
lick=3D""><span class=3D"SelectionMark">=C2=A0</span>Functions</a><a class=
=3D"SelectItem" href=3D"urn:snapshot-DAD4D2ED:javascript:void%280%29" oncli=
ck=3D""><span class=3D"SelectionMark">=C2=A0</span>Variables</a><a class=3D=
"SelectItem" href=3D"urn:snapshot-DAD4D2ED:javascript:void%280%29" onclick=
=3D""><span class=3D"SelectionMark">=C2=A0</span>Enumerations</a><a class=
=3D"SelectItem" href=3D"urn:snapshot-DAD4D2ED:javascript:void%280%29" oncli=
ck=3D""><span class=3D"SelectionMark">=C2=A0</span>Enumerator</a><a class=
=3D"SelectItem" href=3D"urn:snapshot-DAD4D2ED:javascript:void%280%29" oncli=
ck=3D""><span class=3D"SelectionMark">=C2=A0</span>Groups</a><a class=3D"Se=
lectItem" href=3D"urn:snapshot-DAD4D2ED:javascript:void%280%29" onclick=3D"=
"><span class=3D"SelectionMark">=C2=A0</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id=3D"MSearchResultsWindow">
<iframe src=3D"urn:snapshot-DAD4D2ED:javascript:void%280%29" name=3D"MSearc=
hResults" id=3D"MSearchResults" frameborder=3D"0">
</iframe>
</div>

<div class=3D"header">
  <div class=3D"headertitle">
<div class=3D"title">C library for Broadcom BCM 2835 as used in Raspberry=
 Pi </div>  </div>
</div><!--header-->
<div class=3D"contents">
<div class=3D"textblock"><p>This is a C library for Raspberry Pi (RPi). It=
 provides access to GPIO and other IO functions on the Broadcom BCM 2835 ch=
ip, allowing access to the GPIO pins on the 26 pin IDE plug on the RPi boar=
d so you can control and interface with various external devices.</p>
<p>It provides functions for reading digital inputs and setting digital out=
puts, using SPI and I2C, and for accessing the system timers. Pin event det=
ection is supported by polling (interrupts are not supported).</p>
<p>It is C++ compatible, and installs as a header file and non-shared libra=
ry on any Linux-based distro (but clearly is no use except on Raspberry Pi=
 or another board with BCM 2835).</p>
<p>The version of the package that this documentation refers to can be down=
loaded from <a href=3D"http://www.airspayce.com/mikem/bcm2835/bcm2835-1.36.=
tar.gz">http://www.airspayce.com/mikem/bcm2835/bcm2835-1.36.tar.gz</a> You=
 can find the latest version at <a href=3D"http://www.airspayce.com/mikem/b=
cm2835">http://www.airspayce.com/mikem/bcm2835</a></p>
<p>Several example programs are provided.</p>
<p>Based on data in <a href=3D"http://elinux.org/RPi_Low-level_peripherals"=
>http://elinux.org/RPi_Low-level_peripherals</a> and <a href=3D"http://www.=
raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf">htt=
p://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.=
pdf</a> and <a href=3D"http://www.scribd.com/doc/101830961/GPIO-Pads-Contro=
l2">http://www.scribd.com/doc/101830961/GPIO-Pads-Control2</a></p>
<p>You can also find online help and discussion at <a href=3D"http://groups=
.google.com/group/bcm2835">http://groups.google.com/group/bcm2835</a> Pleas=
e use that group for all questions and discussions on this topic. Do not co=
ntact the author directly, unless it is to discuss commercial licensing.</p>
<p>Tested on debian6-19-04-2012, 2012-07-15-wheezy-raspbian, 2013-07-26-whe=
ezy-raspbian and Occidentalisv01 CAUTION: it has been observed that when de=
tect enables such as <a class=3D"el" href=3D"http://www.airspayce.com/mikem=
/bcm2835/group__gpio.html#ga8e990d48db929445ac3e899ca0f5ed07">bcm2835_gpio_=
len()</a> are used and the pin is pulled LOW it can cause temporary hangs=
 on 2012-07-15-wheezy-raspbian, 2013-07-26-wheezy-raspbian and Occidentalis=
v01. Reason for this is not yet determined, but we suspect that an interrup=
t handler is hitting a hard loop on those OSs. If you must use <a class=3D"=
el" href=3D"http://www.airspayce.com/mikem/bcm2835/group__gpio.html#ga8e990=
d48db929445ac3e899ca0f5ed07">bcm2835_gpio_len()</a> and friends, make sure=
 you disable the pins with <a class=3D"el" href=3D"http://www.airspayce.com=
/mikem/bcm2835/group__gpio.html#gac3b51f656f5495dad715ff3c01417aea">bcm2835=
_gpio_clr_len()</a> and friends after use.</p>
<dl class=3D"section user"><dt>Installation</dt><dd></dd></dl>
<p>This library consists of a single non-shared library and header file, wh=
ich will be installed in the usual places by make install</p>
<div class=3D"fragment"><div class=3D"line"><span class=3D"preprocessor">#=
 download the latest version of the library, say bcm2835-1.xx.tar.gz, then:=
</span></div>
<div class=3D"line"><span class=3D"preprocessor"></span>tar zxvf bcm2835-1.=
xx.tar.gz</div>
<div class=3D"line">cd bcm2835-1.xx</div>
<div class=3D"line">./configure</div>
<div class=3D"line">make</div>
<div class=3D"line">sudo make check</div>
<div class=3D"line">sudo make install</div>
</div><!-- fragment --><dl class=3D"section user"><dt>Physical Addresses</d=
t><dd></dd></dl>
<p>The functions <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm=
2835/group__lowlevel.html#ga5f242135f5088f8c319492426a1ed5e3">bcm2835_peri_=
read()</a>, <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/=
group__lowlevel.html#ga639da6963ab76e3109b9909f3a9e6171">bcm2835_peri_write=
()</a> and <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/g=
roup__lowlevel.html#ga01949a6285305f38ce0a47154e55c1b6">bcm2835_peri_set_bi=
ts()</a> are low level peripheral register access functions. They are desig=
ned to use physical addresses as described in section 1.2.3 ARM physical ad=
dresses of the BCM2835 ARM Peripherals manual. Physical addresses range fro=
m 0x20000000 to 0x20FFFFFF for peripherals. The bus addresses for periphera=
ls are set up to map onto the peripheral bus address range starting at 0x7E=
000000. Thus a peripheral advertised in the manual at bus address 0x7Ennnnn=
n is available at physical address 0x20nnnnnn.</p>
<p>The base address of the various peripheral registers are available with=
 the following externals: bcm2835_gpio bcm2835_pwm bcm2835_clk bcm2835_pads=
 bcm2835_spio0 bcm2835_st bcm2835_bsc0 bcm2835_bsc1</p>
<dl class=3D"section user"><dt>Pin Numbering</dt><dd></dd></dl>
<p>The GPIO pin numbering as used by RPi is different to and inconsistent=
 with the underlying BCM 2835 chip pin numbering. <a href=3D"http://elinux.=
org/RPi_BCM2835_GPIOs">http://elinux.org/RPi_BCM2835_GPIOs</a></p>
<p>RPi has a 26 pin IDE header that provides access to some of the GPIO pin=
s on the BCM 2835, as well as power and ground pins. Not all GPIO pins on=
 the BCM 2835 are available on the IDE header.</p>
<p>RPi Version 2 also has a P5 connector with 4 GPIO pins, 5V, 3.3V and Gnd=
.</p>
<p>The functions in this library are designed to be passed the BCM 2835 GPI=
O pin number and <em>not</em> the RPi pin number. There are symbolic defini=
tions for each of the available pins that you should use for convenience.=
 See <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/group__=
constants.html#ga63c029bd6500167152db4e57736d0939">RPiGPIOPin</a>.</p>
<dl class=3D"section user"><dt>SPI Pins</dt><dd></dd></dl>
<p>The bcm2835_spi_* functions allow you to control the BCM 2835 SPI0 inter=
face, allowing you to send and received data by SPI (Serial Peripheral Inte=
rface). For more information about SPI, see <a href=3D"http://en.wikipedia.=
org/wiki/Serial_Peripheral_Interface_Bus">http://en.wikipedia.org/wiki/Seri=
al_Peripheral_Interface_Bus</a></p>
<p>When <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/grou=
p__spi.html#gac888dc9b78b695f6c13eeeaa813c0d82">bcm2835_spi_begin()</a> is=
 called it changes the bahaviour of the SPI interface pins from their defau=
lt GPIO behaviour in order to support SPI. While SPI is in use, you will no=
t be able to control the state of the SPI pins through the usual bcm2835_sp=
i_gpio_write(). When <a class=3D"el" href=3D"http://www.airspayce.com/mikem=
/bcm2835/group__spi.html#gad25421b3a4a6ca280dfdd39c94c3279a">bcm2835_spi_en=
d()</a> is called, the SPI pins will all revert to inputs, and can then be=
 configured and controled with the usual bcm2835_gpio_* calls.</p>
<p>The Raspberry Pi GPIO pins used for SPI are:</p>
<ul>
<li>P1-19 (MOSI)</li>
<li>P1-21 (MISO)</li>
<li>P1-23 (CLK)</li>
<li>P1-24 (CE0)</li>
<li>P1-26 (CE1)</li>
</ul>
<dl class=3D"section user"><dt>I2C Pins</dt><dd></dd></dl>
<p>The bcm2835_i2c_* functions allow you to control the BCM 2835 BSC interf=
ace, allowing you to send and received data by I2C ("eye-squared cee"; gene=
rically referred to as "two-wire interface") . For more information about=
 I?C, see <a href=3D"http://en.wikipedia.org/wiki/I%C2%B2C">http://en.wikip=
edia.org/wiki/I%C2%B2C</a></p>
<p>The Raspberry Pi V2 GPIO pins used for I2C are:</p>
<ul>
<li>P1-03 (SDA)</li>
<li>P1-05 (SLC)</li>
</ul>
<dl class=3D"section user"><dt>PWM</dt><dd></dd></dl>
<p>The BCM2835 supports hardware PWM on a limited subset of GPIO pins. This=
 bcm2835 library provides functions for configuring and controlling PWM out=
put on these pins.</p>
<p>The BCM2835 contains 2 independent PWM channels (0 and 1), each of which=
 be connnected to a limited subset of GPIO pins. The following GPIO pins ma=
y be connected to the following PWM channels (from section 9.5): </p>
<div class=3D"fragment"><div class=3D"line">GPIO PIN    RPi pin  PWM Channe=
l    ALT FUN</div>
<div class=3D"line">   12                    0            0</div>
<div class=3D"line">   13                    1            0</div>
<div class=3D"line">   18         1-12       0            5</div>
<div class=3D"line">   19                    1            5</div>
<div class=3D"line">   40                    0            0</div>
<div class=3D"line">   41                    1            0</div>
<div class=3D"line">   45                    1            0</div>
<div class=3D"line">   52                    0            1</div>
<div class=3D"line">   53                    1            1</div>
</div><!-- fragment --><p> In order for a GPIO pin to emit output from its=
 PWM channel, it must be set to the Alt Function given above. Note carefull=
y that current versions of the Raspberry Pi only expose one of these pins=
 (GPIO 18 =3D RPi Pin 1-12) on the IO headers, and therefore this is the on=
ly IO pin on the RPi that can be used for PWM. Further it must be set to AL=
T FUN 5 to get PWM output.</p>
<p>Both PWM channels are driven by the same PWM clock, whose clock dvider=
 can be varied using <a class=3D"el" href=3D"http://www.airspayce.com/mikem=
/bcm2835/group__pwm.html#ga4487f4e26e57ea3697a57cf52b8de35b">bcm2835_pwm_se=
t_clock()</a>. Each channel can be separately enabled with <a class=3D"el"=
 href=3D"http://www.airspayce.com/mikem/bcm2835/group__pwm.html#ga7e2eddac4=
72b6d81e0ba7dbf165672cb">bcm2835_pwm_set_mode()</a>. The average output of=
 the PWM channel is determined by the ratio of DATA/RANGE for that channel.=
 Use <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/group__=
pwm.html#ga9f5ca04d4f859d96f1205a03c79de7ce">bcm2835_pwm_set_range()</a> to=
 set the range and <a class=3D"el" href=3D"http://www.airspayce.com/mikem/b=
cm2835/group__pwm.html#ga4f445a60ace471a01d0cc4015bcea1dd">bcm2835_pwm_set_=
data()</a> to set the data in that ratio</p>
<p>Each PWM channel can run in either Balanced or Mark-Space mode. In Balan=
ced mode, the hardware sends a combination of clock pulses that results in=
 an overall DATA pulses per RANGE pulses. In Mark-Space mode, the hardware=
 sets the output HIGH for DATA clock pulses wide, followed by LOW for RANGE=
-DATA clock pulses.</p>
<p>The PWM clock can be set to control the PWM pulse widths. The PWM clock=
 is derived from a 19.2MHz clock. You can set any divider, but some common=
 ones are provided by the BCM2835_PWM_CLOCK_DIVIDER_* values of bcm2835PWMC=
lockDivider.</p>
<p>For example, say you wanted to drive a DC motor with PWM at about 1kHz,=
 and control the speed in 1/1024 increments from 0/1024 (stopped) through=
 to 1024/1024 (full on). In that case you might set the clock divider to be=
 16, and the RANGE to 1024. The pulse repetition frequency will be 1.2MHz/1=
024 =3D 1171.875Hz.</p>
<dl class=3D"section user"><dt>Real Time performance constraints</dt><dd></=
dd></dl>
<p>The bcm2835 is a library for user programs (i.e. they run in 'userland')=
. Such programs are not part of the kernel and are usually subject to pagin=
g and swapping by the kernel while it does other things besides running you=
r program. This means that you should not expect to get real-time performan=
ce or real-time timing constraints from such programs. In particular, there=
 is no guarantee that the <a class=3D"el" href=3D"http://www.airspayce.com/=
mikem/bcm2835/group__gpio.html#ga3ffbe079732a995cfacd691f677d9789">bcm2835_=
delay()</a> and <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2=
835/group__gpio.html#gade50bd6947463a242783accf91e5b5e4">bcm2835_delayMicro=
seconds()</a> will return after exactly the time requested. In fact, depend=
ing on other activity on the host, IO etc, you might get significantly long=
er delay times than the one you asked for. So please dont expect to get exa=
ctly the time delay you request.</p>
<p>Arjan reports that you can prevent swapping on Linux with the following=
 code fragment:</p>
<div class=3D"fragment"><div class=3D"line"><span class=3D"keyword">struct=
 </span>sched_param sp;</div>
<div class=3D"line">memset(&amp;sp, 0, <span class=3D"keyword">sizeof</span=
>(sp));</div>
<div class=3D"line">sp.sched_priority =3D sched_get_priority_max(SCHED_FIFO=
);</div>
<div class=3D"line">sched_setscheduler(0, SCHED_FIFO, &amp;sp);</div>
<div class=3D"line">mlockall(MCL_CURRENT | MCL_FUTURE);</div>
</div><!-- fragment --><dl class=3D"section user"><dt>Bindings to other lan=
guages</dt><dd></dd></dl>
<p>mikem has made Perl bindings available at CPAN: <a href=3D"http://search=
.cpan.org/%7Emikem/Device-BCM2835-1.9/lib/Device/BCM2835.pm">http://search.=
cpan.org/~mikem/Device-BCM2835-1.9/lib/Device/BCM2835.pm</a> Matthew Baker=
 has kindly made Python bindings available at: <a href=3D"https://github.co=
m/mubeta06/py-libbcm2835">https://github.com/mubeta06/py-libbcm2835</a> Gar=
y Marks has created a Serial Peripheral Interface (SPI) command-line utilit=
y for Raspberry Pi, based on the bcm2835 library. The utility, spincl, is=
 licensed under Open Source GNU GPLv3 by iP Solutions (<a href=3D"http://ip=
solutionscorp.com/">http://ipsolutionscorp.com</a>), as a free download wit=
h source included: <a href=3D"http://ipsolutionscorp.com/raspberry-pi-spi-u=
tility/">http://ipsolutionscorp.com/raspberry-pi-spi-utility/</a></p>
<dl class=3D"section user"><dt>Open Source Licensing GPL V2</dt><dd></dd></=
dl>
<p>This is the appropriate option if you want to share the source code of=
 your application with everyone you distribute it to, and you also want to=
 give them the right to share who uses it. If you wish to use this software=
 under Open Source Licensing, you must contribute all your source code to=
 the open source community in accordance with the GPL Version 2 when your=
 application is distributed. See <a href=3D"http://www.gnu.org/copyleft/gpl=
.html">http://www.gnu.org/copyleft/gpl.html</a> and COPYING</p>
<dl class=3D"section user"><dt>Acknowledgements</dt><dd></dd></dl>
<p>Some of this code has been inspired by Dom and Gert. The I2C code has be=
en inspired by Alan Barr.</p>
<dl class=3D"section user"><dt>Revision History</dt><dd></dd></dl>
<dl class=3D"section version"><dt>Version</dt><dd>1.0 Initial release </dd>
<dd>
1.1 Minor bug fixes </dd>
<dd>
1.2 Added support for SPI </dd>
<dd>
1.3 Added <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/gr=
oup__spi.html#ga06884e9cd71dfe380f846b09f47b7248">bcm2835_spi_transfern()</=
a> </dd>
<dd>
1.4 Fixed a problem that prevented SPI CE1 being used. Reported by David Ro=
binson. </dd>
<dd>
1.5 Added <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/gr=
oup__init.html#ga3a42892f61764132d106a4ae32271002">bcm2835_close()</a> to=
 deinit the library. Suggested by C?sar Ortiz </dd>
<dd>
1.6 Document testing on 2012-07-15-wheezy-raspbian and Occidentalisv01 Func=
tions <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/group_=
_gpio.html#ga5b70fa96491b9b1d9b3fb21bfefe2fd7">bcm2835_gpio_ren()</a>, <a=
 class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/group__gpio.ht=
ml#gac9ea2f8c63f0330f12e1b24444d92e50">bcm2835_gpio_fen()</a>, <a class=3D"=
el" href=3D"http://www.airspayce.com/mikem/bcm2835/group__gpio.html#ga2cb94=
aef80b49335057e338d71e46608">bcm2835_gpio_hen()</a> <a class=3D"el" href=3D=
"http://www.airspayce.com/mikem/bcm2835/group__gpio.html#ga8e990d48db929445=
ac3e899ca0f5ed07">bcm2835_gpio_len()</a>, <a class=3D"el" href=3D"http://ww=
w.airspayce.com/mikem/bcm2835/group__gpio.html#gaa77a0e0d39a6b4423419a16055=
ce71cc">bcm2835_gpio_aren()</a> and <a class=3D"el" href=3D"http://www.airs=
payce.com/mikem/bcm2835/group__gpio.html#ga7e1f1686b60043c00327255e523d98f6=
">bcm2835_gpio_afen()</a> now changes only the pin specified. Other pins th=
at were already previously enabled stay enabled. Added <a class=3D"el" href=
=3D"http://www.airspayce.com/mikem/bcm2835/group__gpio.html#gaa5826edb1b17d=
d9095fa3bcae5ded485">bcm2835_gpio_clr_ren()</a>, <a class=3D"el" href=3D"ht=
tp://www.airspayce.com/mikem/bcm2835/group__gpio.html#ga196b61d8bf334be6ace=
c590de6dc8f88">bcm2835_gpio_clr_fen()</a>, <a class=3D"el" href=3D"http://w=
ww.airspayce.com/mikem/bcm2835/group__gpio.html#ga3c3b5297f5c2aeb5d2046a5b6=
de15d96">bcm2835_gpio_clr_hen()</a> <a class=3D"el" href=3D"http://www.airs=
payce.com/mikem/bcm2835/group__gpio.html#gac3b51f656f5495dad715ff3c01417aea=
">bcm2835_gpio_clr_len()</a>, <a class=3D"el" href=3D"http://www.airspayce.=
com/mikem/bcm2835/group__gpio.html#ga6f3e122871853b34d97b65284cf7cc47">bcm2=
835_gpio_clr_aren()</a>, <a class=3D"el" href=3D"http://www.airspayce.com/m=
ikem/bcm2835/group__gpio.html#ga8ec8bf224e25ed395d4eecf3ad308ca3">bcm2835_g=
pio_clr_afen()</a> to clear the enable for individual pins, suggested by An=
dreas Sundstrom. </dd>
<dd>
1.7 Added bcm2835_spi_transfernb to support different buffers for read and=
 write. </dd>
<dd>
1.8 Improvements to read barrier, as suggested by maddin. </dd>
<dd>
1.9 Improvements contributed by mikew: I noticed that it was mallocing memo=
ry for the mmaps on /dev/mem. It's not necessary to do that, you can just=
 mmap the file directly, so I've removed the mallocs (and frees). I've also=
 modified delayMicroseconds() to use nanosleep() for long waits, and a busy=
 wait on a high resolution timer for the rest. This is because I've found=
 that calling nanosleep() takes at least 100-200 us. You need to link using=
 '-lrt' using this version. I've added some unsigned casts to the debug pri=
nts to silence compiler warnings I was getting, fixed some typos, and chang=
ed the value of BCM2835_PAD_HYSTERESIS_ENABLED to 0x08 as per Gert van Loo'=
s doc at <a href=3D"http://www.scribd.com/doc/101830961/GPIO-Pads-Control2"=
>http://www.scribd.com/doc/101830961/GPIO-Pads-Control2</a> Also added a de=
fine for the passwrd value that Gert says is needed to change pad control=
 settings. </dd>
<dd>
1.10 Changed the names of the delay functions to <a class=3D"el" href=3D"ht=
tp://www.airspayce.com/mikem/bcm2835/group__gpio.html#ga3ffbe079732a995cfac=
d691f677d9789">bcm2835_delay()</a> and <a class=3D"el" href=3D"http://www.a=
irspayce.com/mikem/bcm2835/group__gpio.html#gade50bd6947463a242783accf91e5b=
5e4">bcm2835_delayMicroseconds()</a> to prevent collisions with wiringPi.=
 Macros to map delay()-&gt; <a class=3D"el" href=3D"http://www.airspayce.co=
m/mikem/bcm2835/group__gpio.html#ga3ffbe079732a995cfacd691f677d9789">bcm283=
5_delay()</a> and Macros to map delayMicroseconds()-&gt; <a class=3D"el" hr=
ef=3D"http://www.airspayce.com/mikem/bcm2835/group__gpio.html#gade50bd69474=
63a242783accf91e5b5e4">bcm2835_delayMicroseconds()</a>, which can be disabl=
ed by defining BCM2835_NO_DELAY_COMPATIBILITY </dd>
<dd>
1.11 Fixed incorrect link to download file </dd>
<dd>
1.12 New GPIO pin definitions for RPi version 2 (which has a different GPIO=
 mapping) </dd>
<dd>
1.13 New GPIO pin definitions for RPi version 2 plug P5 Hardware base point=
ers are now available (after initialisation) externally as bcm2835_gpio bcm=
2835_pwm bcm2835_clk bcm2835_pads bcm2835_spi0. </dd>
<dd>
1.14 Now compiles even if CLOCK_MONOTONIC_RAW is not available, uses CLOCK_=
MONOTONIC instead. Fixed errors in documentation of SPI divider frequencies=
 based on 250MHz clock. Reported by Ben Simpson. </dd>
<dd>
1.15 Added <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/g=
roup__init.html#ga3a42892f61764132d106a4ae32271002">bcm2835_close()</a> to=
 end of examples as suggested by Mark Wolfe. </dd>
<dd>
1.16 Added bcm2835_gpio_set_multi, bcm2835_gpio_clr_multi and bcm2835_gpio_=
write_multi to allow a mask of pins to be set all at once. Requested by Seb=
astian Loncar. </dd>
<dd>
1.17 Added bcm2835_gpio_write_mask. Requested by Sebastian Loncar. </dd>
<dd>
1.18 Added bcm2835_i2c_* functions. Changes to bcm2835_delayMicroseconds:=
 now uses the RPi system timer counter, instead of clock_gettime, for impro=
ved accuracy. No need to link with -lrt now. Contributed by Arjan van Vught=
. </dd>
<dd>
1.19 Removed inlines added by previous patch since they don't seem to work=
 everywhere. Reported by olly. </dd>
<dd>
1.20 Patch from Mark Dootson to close /dev/mem after access to the peripher=
als has been granted. </dd>
<dd>
1.21 delayMicroseconds is now not susceptible to 32 bit timer overruns. Pat=
ch courtesy Jeremy Mortis. </dd>
<dd>
1.22 Fixed incorrect definition of BCM2835_GPFEN0 which broke the ability=
 to set falling edge events. Reported by Mark Dootson. </dd>
<dd>
1.23 Added bcm2835_i2c_set_baudrate and bcm2835_i2c_read_register_rs. Impro=
vements to bcm2835_i2c_read and bcm2835_i2c_write functions to fix ocasiona=
l reads not completing. Patched by Mark Dootson. </dd>
<dd>
1.24 Mark Dootson p[atched a problem with his previously submitted code und=
er high load from other processes. </dd>
<dd>
1.25 Updated author and distribution location details to airspayce.com </dd>
<dd>
1.26 Added missing unmapmem for pads in bcm2835_close to prevent a memory=
 leak. Reported by Hartmut Henkel. </dd>
<dd>
1.27 <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/group__=
gpio.html#gac69a029acceb17691826650d8f188cd8">bcm2835_gpio_set_pad()</a> no=
 longer needs BCM2835_PAD_PASSWRD: it is now automatically included. Added=
 suport for PWM mode with bcm2835_pwm_* functions. </dd>
<dd>
1.28 Fixed a problem where <a class=3D"el" href=3D"http://www.airspayce.com=
/mikem/bcm2835/group__spi.html#ga1b668c248fb9c09239bb59b7a2fad902">bcm2835_=
spi_writenb()</a> would have problems with transfers of more than 64 bytes=
 dues to read buffer filling. Patched by Peter W=C3=BCrtz. </dd>
<dd>
1.29 Further fix to SPI from Peter W=C3=BCrtz. </dd>
<dd>
1.30 10 microsecond delays from bcm2835_spi_transfer and bcm2835_spi_transf=
ern for significant performance improvements, Patch by Alan Watson. </dd>
<dd>
1.31 Fix a GCC warning about dummy variable, patched by Alan Watson. Thanks=
. </dd>
<dd>
1.32 Added option I2C_V1 definition to compile for version 1 RPi. By defaul=
t I2C code is generated for the V2 RPi which has SDA1 and SCL1 connected.=
 Contributed by Malcolm Wiles based on work by Arvi Govindaraj. </dd>
<dd>
1.33 Added command line utilities i2c and gpio to examples. Contributed by=
 Shahrooz Shahparnia. </dd>
<dd>
1.34 Added <a class=3D"el" href=3D"http://www.airspayce.com/mikem/bcm2835/g=
roup__i2c.html#gabb58ad603bf1ebb4eac2d439820809be">bcm2835_i2c_write_read_r=
s()</a> which writes an arbitrary number of bytes, sends a repeat start, an=
d reads from the device. Contributed by Eduardo Steinhorst. </dd>
<dd>
1.35 Fix build errors when compiled under Qt. Also performance improvements=
 with SPI transfers. Contributed by Udo Klaas. </dd>
<dd>
1.36 Make automake's test runner detect that we're skipping tests when not=
 root, the second one makes us skip the test when using fakeroot (as used=
 when building Debian packages). Contributed by Guido G=C3=BCnther.</dd></d=
l>
<dl class=3D"section author"><dt>Author</dt><dd>Mike McCauley (<a href=3D"#=
" onclick=3D"">mikem<span style=3D"display: none;">.nosp@m.</span>@air<span=
 style=3D"display: none;">.nosp@m.</span>spayc<span style=3D"display: none;=
">.nosp@m.</span>e.co<span style=3D"display: none;">.nosp@m.</span>m</a>)=
 DO NOT CONTACT THE AUTHOR DIRECTLY: USE THE LISTS </dd></dl>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class=3D"footer"><address class=3D"footer"><small>
Generated by =C2=A0<a href=3D"http://www.doxygen.org/index.html">
<img class=3D"footer" src=3D"http://www.airspayce.com/mikem/bcm2835/doxygen=
.png" alt=3D"doxygen">
</a> 1.8.2
</small></address>


</body></html>
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/search/mag_sel.png

iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA
IGNIUk0AAG2YAABzjgAA4DgAAILVAAB6BwAAyrQAADNEAAAcdoQ2Kr0AAAG5SURBVHja5JS7iiJB
FIa/2hY6ELoDL3gDURFM1EDUNzAxMOkH8BUUfB4xNzMRc+lWRIQ26UBQVBTEwKhtUGqSHdmdmXUN
JljYP6ri/PXVOZxTJaSUfKd+8M3694G+98X5fJaTyYTlcslmsyGZTJLP56lUKgQCAfEqUEgpOZ1O
cjAYYFnWJ0O1WqXRaBAMBsXLGU6nUyzLIpVKUSqVyGQyrFYrZrMZk8mESCRCvV5/vWTbtgEol8tU
KhU0TROhUEgqisJ6vca2ber1OqPRSPb7/cdhwzCo1WriU1O22y0AxWIRTdMEgKZpolAo8GscEIZh
PGCA+LLLiUQCAMdxAN4nXf7cP+IfoOKPY5PL5QAYj8eYponrutI0TcbjMQDpdBqAWq32gD7t8nq9
lsPhkPl8/qUpHA7T6XTQdV0AjEajjxf8DvQ8T+52OxaLBY7jsN/vicfjpNNpbNvmdDoRjUZpt9sP
6NMMATzPk67r4nket9sNn8+HoihcLhd6vR7H45FYLEar1XoKfbwUVVWFqqqfDH6/XzabTbrdLtfr
lev1iq7rf8/wmVzXlYfDgfv9Tjabfa3k/+f7ehsAWai6aMpPxacAAAAASUVORK5CYII=
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/search/close.png

iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAA2ElEQVQYGXVRvRJGQAzcGBUKFBQa
Q+s1vH+nQ2cGMyjQ3nd7IyrfFpef28smOcGDfd/NsizYtg3neSKKIsRxjDzPkaapkOaOaZrMOI64
rkvfvjYMQ5RliaIoxDuO4y+RL6jCQlbRePM8uwQv2rZFVVV0nWUsIrjvG+u6wmePTBB936Oua+fT
MlaQ51NGMQyDc5WoMZOcx+PUCragRFrGxhh3zUG9JEmU+xJZUVvSFu36INxv13Wfa9MqQRCgaRpX
WShHmS8wz3v7Qc8aLOvrBymdZRlsq25dPwcKeZAOEUXCAAAAAElFTkSuQmCC
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/doxygen.png

[encoded data, 5016 characters]
axCtrsUAAAAASUVORK5CYII=
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: text/html;
	charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: urn:snapshot-DAD4D2ED:javascript:void%280%29

<html><head>
<meta http-equiv=3D"content-type" content=3D"text/html; charset=3DUTF-8"></=
head><body></body></html>
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: urn:snapshot-F9CAA4FA:http://www.airspayce.com/mikem/bcm2835/tabs.css

/* Effective stylesheet produced by snapshot save */
.tabs, .tabs2, .tabs3 { background-image: url("http://www.airspayce.com/mik=
em/bcm2835/tab_b.png"); width: 100%; z-index: 101; font-size: 13px; font-fa=
mily: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; }
.tablist { margin: 0px; padding: 0px; display: table; }
.tablist li { float: left; display: table-cell; background-image: url("http=
://www.airspayce.com/mikem/bcm2835/tab_b.png"); line-height: 36px; list-sty=
le: none outside none; }
.tablist a { display: block; padding: 0px 20px; font-weight: bold; backgrou=
nd-image: url("http://www.airspayce.com/mikem/bcm2835/tab_s.png"); backgrou=
nd-repeat: no-repeat; background-position: right center; color: rgb(40, 58,=
 93); text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); text-decoration:=
 none; outline: medium none; }
.tablist a:hover { background-image: url("http://www.airspayce.com/mikem/bc=
m2835/tab_h.png"); background-repeat: repeat-x; color: rgb(255, 255, 255);=
 text-shadow: 0px 1px 1px rgb(0, 0, 0); text-decoration: none; }
.tablist li.current a { background-image: url("http://www.airspayce.com/mik=
em/bcm2835/tab_a.png"); background-repeat: repeat-x; color: rgb(255, 255,=
 255); text-shadow: 0px 1px 1px rgb(0, 0, 0); }

------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/tab_b.png

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAIAAADHFsdbAAAAcUlEQVR4Ae3dTQ6CQBBE4e4u0cR4
NTYuXMCKFcrfIA7MhJOy4waewZqY6DW+eqlbyLa/7XLO7HQE/LJi8ivcK8JNEf0YMTwDmiGgdQv7
de9nYrsZddJ6ExFcy85UleRXzv8Lv6mBUpPswJiiqEbkt8cH63Mae4v6GDsAAAAASUVORK5CYII=

------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/tab_s.png

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAIAAADHFsdbAAAAf0lEQVR4Ae3dgQmCQABA0aM/URIU
haQimqIlpkmRl4pmljZbG7RIw+RRgzzeGuL1/pBdnmRyIM1/knM/GohPPdHx8XcnzEaHjiDt8PYt
fnLDjVuc6Iqt7BqsbYMZ1qyDGt2v0L2K1UYpWbolC6dgbhfMLDkRQqCZkqkh0Yxc/QU8xSP87u6V
HwAAAABJRU5ErkJggg==
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/tab_h.png

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAIAAADHFsdbAAAAeElEQVR4Ae3dTRLBQBCG4Z5+EaXc
xs6SRXaIvxoiIZWykWQq13IER3EbPYp7vN9T3aeQ5+ut08lIxwkUdU9e9fhbwF8Dh6LjWAZ2ecv+
0rE9t1ZDZmbm5hR7sPaNigjztFLnnCVf9ef/jqL2t7CNDgcRx3J1Z7YoP2doFlxpPnxzAAAAAElF
TkSuQmCC
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/tab_a.png

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAIAAADHFsdbAAAAVUlEQVR4Ae2dSwqAMBBDJ2+kKIqI
W8W94CXceP8j2amt5wgJ+Z3B9vOmH1emZSMNM3QJSRkgHDMrkLz4ReN+XA9EHr0fOa/b4OiSd023
v/b/fX9Z9V/qQQI0WZ7jfQAAAABJRU5ErkJggg==
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: urn:snapshot-84F699D5:http://www.airspayce.com/mikem/bcm2835/search/search.css

/* Effective stylesheet produced by snapshot save */
#MSearchBox { white-space: nowrap; position: absolute; float: none; display=
: inline; margin-top: 8px; right: 0px; width: 170px; z-index: 102; backgrou=
nd-color: white; }
#MSearchBox .left { display: block; position: absolute; left: 10px; width:=
 20px; height: 19px; background: url("http://www.airspayce.com/mikem/bcm283=
5/search/search_l.png") no-repeat scroll right center transparent; }
#MSearchSelect { display: block; position: absolute; width: 20px; height:=
 19px; }
.left #MSearchSelect { left: 4px; }
#MSearchField { display: block; position: absolute; height: 19px; backgroun=
d: url("http://www.airspayce.com/mikem/bcm2835/search/search_m.png") repeat=
-x scroll 0% 0% transparent; border: medium none; width: 116px; margin-left=
: 20px; padding-left: 4px; color: rgb(144, 144, 144); outline: medium none;=
 font: 9pt Arial,Verdana,sans-serif; }
#MSearchBox .right { display: block; position: absolute; right: 10px; top:=
 0px; width: 20px; height: 19px; background: url("http://www.airspayce.com/=
mikem/bcm2835/search/search_r.png") no-repeat scroll left center transparen=
t; }
#MSearchClose { display: none; position: absolute; top: 4px; background: no=
ne repeat scroll 0% 0% transparent; border: medium none; margin: 0px 4px 0p=
x 0px; padding: 0px; outline: medium none; }
.right #MSearchClose { right: 2px; }
#MSearchSelectWindow { display: none; position: absolute; left: 0px; top:=
 0px; border: 1px solid rgb(144, 165, 206); background-color: rgb(249, 250,=
 252); z-index: 1; padding-top: 4px; padding-bottom: 4px; }
.SelectItem { font: 8pt Arial,Verdana,sans-serif; padding-left: 2px; paddin=
g-right: 12px; border: 0px none; }
span.SelectionMark { margin-right: 4px; font-family: monospace; outline-sty=
le: none; text-decoration: none; }
a.SelectItem { display: block; outline-style: none; color: rgb(0, 0, 0); te=
xt-decoration: none; padding-left: 6px; padding-right: 12px; }
a.SelectItem:focus, a.SelectItem:active { color: rgb(0, 0, 0); outline-styl=
e: none; text-decoration: none; }
a.SelectItem:hover { color: rgb(255, 255, 255); background-color: rgb(61,=
 87, 140); outline-style: none; text-decoration: none; cursor: pointer; dis=
play: block; }
iframe#MSearchResults { width: 60ex; height: 15em; }
#MSearchResultsWindow { display: none; position: absolute; left: 0px; top:=
 0px; border: 1px solid rgb(0, 0, 0); background-color: rgb(238, 241, 247);=
 }

------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/search/search_l.png

iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA
IGNIUk0AAG2YAABzjgAA4DgAAILVAAB6BwAAyrQAADNEAAAcdoQ2Kr0AAAHiSURBVHjarFQ9q9pQ
GH7OyTkxTfxAMEYU7FBEFy+duhXa0aEu3TsUSqF/pnS9Q/+E/QWC2qWDHdyKiKBEg8YorR9J3i6N
eG+vNGif7bxwHp6P9xxGRDhFr9djtm3nbdtuuq77brPZ3Gy32wTnHIwx/AssIux2u8zzvMxoNHrt
uu6HbDZ7k8vlRDqdhqZpUBQlPmGn02Hz+fzJeDy+1XX9eaVSEaZpIpVKQdM0CCHAGItFKABgtVql
J5PJp2Kx+LJarSKfz8MwDEgpwTlHXLsAINrtNp9Op69M03xRr9dhWRZ0XYeUEpdALBYLk4je1mo1
3bIsGIYBIQQuBfc8r1kul59FyjjnuAY8CIJGoVB4dK2yI6GU8mkmk+FRZvf30vf9By+em3NVVbOR
VcYYwjC8G/IZ1efmXEo5BnBci7jrcdYyEXX2+/3R6tWlENG39XodhGEIIrqeUFGUr47j/Nztdvgf
4IlE4sdyufzuOA583z9av992bMJGo/ErCILb4XDoLBYLBEEAIrq4HP5nBb54nvd5MBiMZ7MZRSWd
U0lEOBwOOC3zzm8DYCmE+Oh5ntvv99+XSqXH0VNUVRVSyr8UCyEejIedHlqtlgBQJ6I3qqo2DcMo
JpNJoWmawjmPlcHvAQA15dVe0O0M/QAAAABJRU5ErkJggg==
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/search/search_m.png

iVBORw0KGgoAAAANSUhEUgAAAAIAAAATCAIAAAA1XktNAAAABGdBTUEAANbY1E9YMgAAABl0RVh0
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAwSURBVHjaYiwvL2dgYGA8fvw4iPr48SOI
+v//P5BiYgADWlAsEBtYbt26BaQAAgwApQcPPH7hRacAAAAASUVORK5CYII=
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/search/search_r.png

iVBORw0KGgoAAAANSUhEUgAAABIAAAATCAYAAACdkl3yAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA
IGNIUk0AAG2YAABzjgAA4DgAAILVAAB6BwAAyrQAADNEAAAcdoQ2Kr0AAAHqSURBVHjapNS/qhpB
FAbwb/afsgprpVaLpJLUaXwDsVlJEVLfvEPMK6RMl2cIpBEsUlxCJGCKNClCUEEhoJfVVbO77rLO
7sxJkSjCDeaqp53Dj3OY+YZ1Oh3CiRJCJPl8flosFj+WSqVetVr9Ui6X/UajIY772GAwOAllWYYk
SRAEgfA8b7PZbH5YlnVbq9XeNJvNXwfI9/2TkJTygIVhiOVySePxWMZx/MG27eeO44QAwKSUJyEi
gpQSUkqkaYooirBYLDAcDoXruu9rtdpNq9WKNMbYKQeMMSiKAiKCruswDAO5XA6GYahSyqfz+fxn
v99/peCBxRgDYwyapqFQKKBSqaBer2sAXqzX60cPho5BVVVhmiYqlQps27aCIHh2NrTH9pNVq1Um
hHisHF/zuaXrOizLgq7ruwOkadrZUymKAtM0mWEYy4tWO8b+TnZ3FURE4JwLIvqqXINIKRGG4YaI
vl810W63g+d5PVVVfdAFJaUkzjlNJpNFt9t9QkRQLllJCIH1ep1Mp9N3QohvAKDtD7MsO+TpX/kj
+pNtzjlWq5UYDoefgiB43W6303vpJ6J7CBEhTVNwzhHHsXRd15/NZj3O+UvHce4O73A0GuF//1GS
JNhut2EURZ85528ZY7eO40THfb8HAF93RowwLNidAAAAAElFTkSuQmCC
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: urn:snapshot-DC686D22:http://www.airspayce.com/mikem/bcm2835/doxygen.css

/* Effective stylesheet produced by snapshot save */
body, table, div, p, dl { font: 400 14px/19px Roboto,sans-serif; }
.title { font-size: 150%; font-weight: bold; margin: 10px 2px; }
dt { font-weight: bold; }
a { color: rgb(61, 87, 140); font-weight: normal; text-decoration: none; }
.contents a:visited { color: rgb(70, 101, 162); }
a:hover { text-decoration: underline; }
a.el { font-weight: bold; }
div.fragment { padding: 4px; margin: 4px; background-color: rgb(251, 252,=
 253); border: 1px solid rgb(196, 207, 229); }
div.line { font-family: monospace,fixed; font-size: 13px; min-height: 13px;=
 line-height: 1; white-space: pre-wrap; word-wrap: break-word; text-indent:=
 -53px; padding-left: 53px; padding-bottom: 0px; margin: 0px; transition-pr=
operty: background-color, box-shadow; transition-duration: 0.5s; }
body { background-color: white; color: black; margin: 0px; }
div.contents { margin-top: 10px; margin-left: 12px; margin-right: 8px; }
address.footer { text-align: right; padding-right: 12px; }
img.footer { border: 0px none; vertical-align: middle; }
span.keyword { color: rgb(0, 128, 0); }
span.preprocessor { color: rgb(128, 96, 32); }
hr { height: 0px; border-right: medium none; border-width: 1px medium mediu=
m; border-style: solid none none; border-color: rgb(74, 106, 170) -moz-use-=
text-color -moz-use-text-color; -moz-border-top-colors: none; -moz-border-r=
ight-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors=
: none; border-image: none; }
hr.footer { height: 1px; }
address { font-style: normal; color: rgb(42, 61, 97); }
div.header { background-image: url("http://www.airspayce.com/mikem/bcm2835/=
nav_h.png"); background-repeat: repeat-x; background-color: rgb(249, 250,=
 252); margin: 0px; border-bottom: 1px solid rgb(196, 207, 229); }
div.headertitle { padding: 5px 5px 5px 10px; }
dl { padding: 0px 0px 0px 10px; }
dl.section { margin-left: 0px; padding-left: 0px; }
dl.section dd { margin-bottom: 6px; }
#projectname { font: 300% Tahoma,Arial,sans-serif; margin: 0px; padding: 2p=
x 0px; }
#projectnumber { font: 50% Tahoma,Arial,sans-serif; margin: 0px; padding:=
 0px; }
#titlearea { padding: 0px; margin: 0px; width: 100%; border-bottom: 1px sol=
id rgb(83, 115, 180); }
@media print {
  #top { display: none; }
  body { overflow: visible; }
}

------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.airspayce.com/mikem/bcm2835/nav_h.png

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAMCAIAAAAs6UAAAAAAKUlEQVR4Ae3dQQoAQAhCUa0DB7Oa
25vQoo7hf+ApICnr/SDpYcXo3L8Bxm8Eh1Js0N8AAAAASUVORK5CYII=
------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: text/javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: urn:snapshot-89E068E8:http://www.airspayce.com/mikem/bcm2835/jquery.js

/* Script removed by snapshot save */

------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: text/javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: urn:snapshot-C911B38B:http://www.airspayce.com/mikem/bcm2835/dynsections.js

/* Script removed by snapshot save */

------=_NextPart_000_0000_BEF7B712.91FF2623
Content-Type: text/javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: urn:snapshot-77F8C41D:http://www.airspayce.com/mikem/bcm2835/search/search.js

/* Script removed by snapshot save */

------=_NextPart_000_0000_BEF7B712.91FF2623--
