Fully featured I2C and SPI driver for CEVA (Hilcrest)'s BNO080 and FSM300 Inertial Measurement Units.
Dependents: BNO080-Examples BNO080-Examples
BNO080 Driver
by Jamie Smith / USC Rocket Propulsion Lab
After lots of development, we are proud to present our driver for the Hilcrest BNO080 IMU! This driver is inspired by SparkFun and Nathan Seidle's Arduino driver for this chip, but has been substantially rewritten and adapted.
It supports the main features of the chip, such as reading rotation and acceleration data, as well as some of its more esoteric functionality, such as counting steps and detecting whether the device is being hand-held.
Features
- Support for 15 different data reports from the IMU, from acceleration to rotation to tap detection
- Support for reading of sensor data, and automatic checking of update rate against allowed values in metadata
BNO_DEBUG
switch enabling verbose, detailed output about communications with the chip for ease of debugging- Ability to tare sensor rotation and set mounting orientation
- Can operate in several execution modes: polling I2C, polling SPI, and threaded SPI (which handles timing-critical functions in a dedicated thread, and automatically activates when the IMU has data available)
- Also has experimental support for using asynchronous SPI transactions, allowing other threads to execute while communication with the BNO is occurring. Note that this functionality requires a patch to Mbed OS source code due to Mbed bug #13941
- Calibration function
- Reasonable code size for what you get: the library uses about 4K of flash and one instance of the object uses about 1700 bytes of RAM.
Documentation
Full Doxygen documentation is available online here
Example Code
Here's a simple example:
BNO080 Rotation Vector and Acceleration
#include <mbed.h> #include <BNO080.h> int main() { Serial pc(USBTX, USBRX); // Create IMU, passing in output stream, pins, I2C address, and I2C frequency // These pin assignments are specific to my dev setup -- you'll need to change them BNO080I2C imu(&pc, p28, p27, p16, p30, 0x4a, 100000); pc.baud(115200); pc.printf("============================================================\n"); // Tell the IMU to report rotation every 100ms and acceleration every 200ms imu.enableReport(BNO080::ROTATION, 100); imu.enableReport(BNO080::TOTAL_ACCELERATION, 200); while (true) { wait(.001f); // poll the IMU for new data -- this returns true if any packets were received if(imu.updateData()) { // now check for the specific type of data that was received (can be multiple at once) if (imu.hasNewData(BNO080::ROTATION)) { // convert quaternion to Euler degrees and print pc.printf("IMU Rotation Euler: "); TVector3 eulerRadians = imu.rotationVector.euler(); TVector3 eulerDegrees = eulerRadians * (180.0 / M_PI); eulerDegrees.print(pc, true); pc.printf("\n"); } if (imu.hasNewData(BNO080::TOTAL_ACCELERATION)) { // print the acceleration vector using its builtin print() method pc.printf("IMU Total Acceleration: "); imu.totalAcceleration.print(pc, true); pc.printf("\n"); } } } }
If you want more, a comprehensive, ready-to-run set of examples is available on my BNO080-Examples repository.
Credits
This driver makes use of a lightweight, public-domain library for vectors and quaternions available here.
Changelog
Version 2.1 (Nov 24 2020)
- Added BNO080Async, which provides a threaded implementation of the SPI driver. This should help get the best performance and remove annoying timing requirements on the code calling the driver
- Added experimental
USE_ASYNC_SPI
option - Fixed bug in v2.0 causing calibrations to fail
Version 2.0 (Nov 18 2020)
- Added SPI support
- Refactored buffer system so that SPI could be implemented as a subclass. Unfortunately this does substantially increase the memory usage of the driver, but I believe that the benefits are worth it.
Version 1.3 (Jul 21 2020)
- Fix deprecation warnings and compile errors in Mbed 6
- Fix compile errors in Arm Compiler (why doesn't it have M_PI????)
Version 1.2 (Jan 30 2020)
- Removed accidental IRQ change
- Fixed hard iron offset reading incorrectly due to missing cast
Version 1.1 (Jun 14 2019)
- Added support for changing permanent orientation
- Add FRS writing functions
- Removed some errant printfs
Version 1.0 (Dec 29 2018)
- Initial Mbed OS release
BNO080Async.graphml@9:430f5302f9e1, 2020-11-24 (annotated)
- Committer:
- Jamie Smith
- Date:
- Tue Nov 24 15:06:05 2020 -0800
- Revision:
- 9:430f5302f9e1
Implement BNO080Async
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jamie Smith |
9:430f5302f9e1 | 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
Jamie Smith |
9:430f5302f9e1 | 2 | <graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd"> |
Jamie Smith |
9:430f5302f9e1 | 3 | <!--Created by yEd 3.19.1.1--> |
Jamie Smith |
9:430f5302f9e1 | 4 | <key attr.name="Description" attr.type="string" for="graph" id="d0"/> |
Jamie Smith |
9:430f5302f9e1 | 5 | <key for="port" id="d1" yfiles.type="portgraphics"/> |
Jamie Smith |
9:430f5302f9e1 | 6 | <key for="port" id="d2" yfiles.type="portgeometry"/> |
Jamie Smith |
9:430f5302f9e1 | 7 | <key for="port" id="d3" yfiles.type="portuserdata"/> |
Jamie Smith |
9:430f5302f9e1 | 8 | <key attr.name="url" attr.type="string" for="node" id="d4"/> |
Jamie Smith |
9:430f5302f9e1 | 9 | <key attr.name="description" attr.type="string" for="node" id="d5"/> |
Jamie Smith |
9:430f5302f9e1 | 10 | <key for="node" id="d6" yfiles.type="nodegraphics"/> |
Jamie Smith |
9:430f5302f9e1 | 11 | <key for="graphml" id="d7" yfiles.type="resources"/> |
Jamie Smith |
9:430f5302f9e1 | 12 | <key attr.name="url" attr.type="string" for="edge" id="d8"/> |
Jamie Smith |
9:430f5302f9e1 | 13 | <key attr.name="description" attr.type="string" for="edge" id="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 14 | <key for="edge" id="d10" yfiles.type="edgegraphics"/> |
Jamie Smith |
9:430f5302f9e1 | 15 | <graph edgedefault="directed" id="G"> |
Jamie Smith |
9:430f5302f9e1 | 16 | <data key="d0"/> |
Jamie Smith |
9:430f5302f9e1 | 17 | <node id="n0"> |
Jamie Smith |
9:430f5302f9e1 | 18 | <data key="d5"/> |
Jamie Smith |
9:430f5302f9e1 | 19 | <data key="d6"> |
Jamie Smith |
9:430f5302f9e1 | 20 | <y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 21 | <y:Geometry height="64.39999999999998" width="102.4799999999999" x="716.0" y="253.0"/> |
Jamie Smith |
9:430f5302f9e1 | 22 | <y:Fill color="#FFCC00" transparent="false"/> |
Jamie Smith |
9:430f5302f9e1 | 23 | <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 24 | <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="59.37109375" x="21.55445312500001" xml:space="preserve" y="15.498828124999989">Lock data |
Jamie Smith |
9:430f5302f9e1 | 25 | mutex<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> |
Jamie Smith |
9:430f5302f9e1 | 26 | <y:Shape type="roundrectangle"/> |
Jamie Smith |
9:430f5302f9e1 | 27 | </y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 28 | </data> |
Jamie Smith |
9:430f5302f9e1 | 29 | </node> |
Jamie Smith |
9:430f5302f9e1 | 30 | <node id="n1"> |
Jamie Smith |
9:430f5302f9e1 | 31 | <data key="d5"/> |
Jamie Smith |
9:430f5302f9e1 | 32 | <data key="d6"> |
Jamie Smith |
9:430f5302f9e1 | 33 | <y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 34 | <y:Geometry height="64.39999999999998" width="109.48800000000006" x="1135.976" y="253.0"/> |
Jamie Smith |
9:430f5302f9e1 | 35 | <y:Fill color="#FFCC00" transparent="false"/> |
Jamie Smith |
9:430f5302f9e1 | 36 | <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 37 | <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="83.376953125" x="13.055523437500142" xml:space="preserve" y="15.498828124999989">Start SPI Send |
Jamie Smith |
9:430f5302f9e1 | 38 | Transaction<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> |
Jamie Smith |
9:430f5302f9e1 | 39 | <y:Shape type="roundrectangle"/> |
Jamie Smith |
9:430f5302f9e1 | 40 | </y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 41 | </data> |
Jamie Smith |
9:430f5302f9e1 | 42 | </node> |
Jamie Smith |
9:430f5302f9e1 | 43 | <node id="n2"> |
Jamie Smith |
9:430f5302f9e1 | 44 | <data key="d5"/> |
Jamie Smith |
9:430f5302f9e1 | 45 | <data key="d6"> |
Jamie Smith |
9:430f5302f9e1 | 46 | <y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 47 | <y:Geometry height="92.72000000000003" width="94.0" x="933.4279999999998" y="238.83999999999997"/> |
Jamie Smith |
9:430f5302f9e1 | 48 | <y:Fill color="#FFCC00" transparent="false"/> |
Jamie Smith |
9:430f5302f9e1 | 49 | <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 50 | <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.36328125" x="13.318359375" xml:space="preserve" y="29.658828125000014">Has packet |
Jamie Smith |
9:430f5302f9e1 | 51 | to send?<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> |
Jamie Smith |
9:430f5302f9e1 | 52 | <y:Shape type="diamond"/> |
Jamie Smith |
9:430f5302f9e1 | 53 | </y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 54 | </data> |
Jamie Smith |
9:430f5302f9e1 | 55 | </node> |
Jamie Smith |
9:430f5302f9e1 | 56 | <node id="n3"> |
Jamie Smith |
9:430f5302f9e1 | 57 | <data key="d5"/> |
Jamie Smith |
9:430f5302f9e1 | 58 | <data key="d6"> |
Jamie Smith |
9:430f5302f9e1 | 59 | <y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 60 | <y:Geometry height="119.856" width="121.5106125970664" x="1329.1693874029331" y="225.272"/> |
Jamie Smith |
9:430f5302f9e1 | 61 | <y:Fill color="#FFCC00" transparent="false"/> |
Jamie Smith |
9:430f5302f9e1 | 62 | <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 63 | <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="90.712890625" x="15.398860986033242" xml:space="preserve" y="43.226828125">Received an RX |
Jamie Smith |
9:430f5302f9e1 | 64 | packet header?<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> |
Jamie Smith |
9:430f5302f9e1 | 65 | <y:Shape type="diamond"/> |
Jamie Smith |
9:430f5302f9e1 | 66 | </y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 67 | </data> |
Jamie Smith |
9:430f5302f9e1 | 68 | </node> |
Jamie Smith |
9:430f5302f9e1 | 69 | <node id="n4"> |
Jamie Smith |
9:430f5302f9e1 | 70 | <data key="d5"/> |
Jamie Smith |
9:430f5302f9e1 | 71 | <data key="d6"> |
Jamie Smith |
9:430f5302f9e1 | 72 | <y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 73 | <y:Geometry height="64.39999999999998" width="121.51061259706637" x="1072.4493874029338" y="384.088"/> |
Jamie Smith |
9:430f5302f9e1 | 74 | <y:Fill color="#FFCC00" transparent="false"/> |
Jamie Smith |
9:430f5302f9e1 | 75 | <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 76 | <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="109.38671875" x="6.061946923533242" xml:space="preserve" y="15.498828124999989">Start SPI Read |
Jamie Smith |
9:430f5302f9e1 | 77 | Header Transaction<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> |
Jamie Smith |
9:430f5302f9e1 | 78 | <y:Shape type="roundrectangle"/> |
Jamie Smith |
9:430f5302f9e1 | 79 | </y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 80 | </data> |
Jamie Smith |
9:430f5302f9e1 | 81 | </node> |
Jamie Smith |
9:430f5302f9e1 | 82 | <node id="n5"> |
Jamie Smith |
9:430f5302f9e1 | 83 | <data key="d5"/> |
Jamie Smith |
9:430f5302f9e1 | 84 | <data key="d6"> |
Jamie Smith |
9:430f5302f9e1 | 85 | <y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 86 | <y:Geometry height="64.39999999999998" width="109.48800000000006" x="1279.7120000000002" y="384.088"/> |
Jamie Smith |
9:430f5302f9e1 | 87 | <y:Fill color="#FFCC00" transparent="false"/> |
Jamie Smith |
9:430f5302f9e1 | 88 | <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 89 | <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="48.103515625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="106.720703125" x="1.3836484374999145" xml:space="preserve" y="8.148242187499989">Read remainder of |
Jamie Smith |
9:430f5302f9e1 | 90 | packet contained |
Jamie Smith |
9:430f5302f9e1 | 91 | in header<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> |
Jamie Smith |
9:430f5302f9e1 | 92 | <y:Shape type="roundrectangle"/> |
Jamie Smith |
9:430f5302f9e1 | 93 | </y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 94 | </data> |
Jamie Smith |
9:430f5302f9e1 | 95 | </node> |
Jamie Smith |
9:430f5302f9e1 | 96 | <node id="n6"> |
Jamie Smith |
9:430f5302f9e1 | 97 | <data key="d5"/> |
Jamie Smith |
9:430f5302f9e1 | 98 | <data key="d6"> |
Jamie Smith |
9:430f5302f9e1 | 99 | <y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 100 | <y:Geometry height="64.39999999999998" width="102.4799999999999" x="716.0000000000001" y="384.088"/> |
Jamie Smith |
9:430f5302f9e1 | 101 | <y:Fill color="#FFCC00" transparent="false"/> |
Jamie Smith |
9:430f5302f9e1 | 102 | <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 103 | <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="23.34765625" x="39.56617187500001" xml:space="preserve" y="22.84941406249999">Idle<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> |
Jamie Smith |
9:430f5302f9e1 | 104 | <y:Shape type="roundrectangle"/> |
Jamie Smith |
9:430f5302f9e1 | 105 | </y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 106 | </data> |
Jamie Smith |
9:430f5302f9e1 | 107 | </node> |
Jamie Smith |
9:430f5302f9e1 | 108 | <node id="n7"> |
Jamie Smith |
9:430f5302f9e1 | 109 | <data key="d5"/> |
Jamie Smith |
9:430f5302f9e1 | 110 | <data key="d6"> |
Jamie Smith |
9:430f5302f9e1 | 111 | <y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 112 | <y:Geometry height="64.39999999999998" width="121.51061259706637" x="1072.4493874029338" y="485.976"/> |
Jamie Smith |
9:430f5302f9e1 | 113 | <y:Fill color="#FFCC00" transparent="false"/> |
Jamie Smith |
9:430f5302f9e1 | 114 | <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 115 | <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="86.037109375" x="17.73675161103324" xml:space="preserve" y="22.849414062499932">Process packet<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> |
Jamie Smith |
9:430f5302f9e1 | 116 | <y:Shape type="roundrectangle"/> |
Jamie Smith |
9:430f5302f9e1 | 117 | </y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 118 | </data> |
Jamie Smith |
9:430f5302f9e1 | 119 | </node> |
Jamie Smith |
9:430f5302f9e1 | 120 | <node id="n8"> |
Jamie Smith |
9:430f5302f9e1 | 121 | <data key="d5"/> |
Jamie Smith |
9:430f5302f9e1 | 122 | <data key="d6"> |
Jamie Smith |
9:430f5302f9e1 | 123 | <y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 124 | <y:Geometry height="64.39999999999998" width="109.48800000000006" x="712.496" y="485.97599999999994"/> |
Jamie Smith |
9:430f5302f9e1 | 125 | <y:Fill color="#FFCC00" transparent="false"/> |
Jamie Smith |
9:430f5302f9e1 | 126 | <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 127 | <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.369140625" x="21.059429687500028" xml:space="preserve" y="15.498828124999989">Unlock data |
Jamie Smith |
9:430f5302f9e1 | 128 | mutex<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> |
Jamie Smith |
9:430f5302f9e1 | 129 | <y:Shape type="roundrectangle"/> |
Jamie Smith |
9:430f5302f9e1 | 130 | </y:ShapeNode> |
Jamie Smith |
9:430f5302f9e1 | 131 | </data> |
Jamie Smith |
9:430f5302f9e1 | 132 | </node> |
Jamie Smith |
9:430f5302f9e1 | 133 | <edge id="e0" source="n0" target="n2"> |
Jamie Smith |
9:430f5302f9e1 | 134 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 135 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 136 | <y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 137 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> |
Jamie Smith |
9:430f5302f9e1 | 138 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 139 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 140 | <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="1.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.705078125" x="16.817358320994458" xml:space="preserve" y="-19.67059814453097">_int == 0<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="0.9694140624996893" distanceToCenter="false" position="left" ratio="0.2178809335704373" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> |
Jamie Smith |
9:430f5302f9e1 | 141 | <y:BendStyle smoothed="false"/> |
Jamie Smith |
9:430f5302f9e1 | 142 | </y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 143 | </data> |
Jamie Smith |
9:430f5302f9e1 | 144 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 145 | <edge id="e1" source="n2" target="n1"> |
Jamie Smith |
9:430f5302f9e1 | 146 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 147 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 148 | <y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 149 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> |
Jamie Smith |
9:430f5302f9e1 | 150 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 151 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 152 | <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.677734375" x="4.997458007812384" xml:space="preserve" y="-23.894598144531244">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.543999999999967" distanceToCenter="true" position="left" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> |
Jamie Smith |
9:430f5302f9e1 | 153 | <y:BendStyle smoothed="false"/> |
Jamie Smith |
9:430f5302f9e1 | 154 | </y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 155 | </data> |
Jamie Smith |
9:430f5302f9e1 | 156 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 157 | <edge id="e2" source="n1" target="n3"> |
Jamie Smith |
9:430f5302f9e1 | 158 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 159 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 160 | <y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 161 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> |
Jamie Smith |
9:430f5302f9e1 | 162 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 163 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 164 | <y:BendStyle smoothed="false"/> |
Jamie Smith |
9:430f5302f9e1 | 165 | </y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 166 | </data> |
Jamie Smith |
9:430f5302f9e1 | 167 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 168 | <edge id="e3" source="n3" target="n0"> |
Jamie Smith |
9:430f5302f9e1 | 169 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 170 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 171 | <y:ArcEdge> |
Jamie Smith |
9:430f5302f9e1 | 172 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"> |
Jamie Smith |
9:430f5302f9e1 | 173 | <y:Point x="1078.582275390625" y="196.39117431640625"/> |
Jamie Smith |
9:430f5302f9e1 | 174 | </y:Path> |
Jamie Smith |
9:430f5302f9e1 | 175 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 176 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 177 | <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="19.33984375" x="-18.803273729879265" xml:space="preserve" y="-33.501677974926224">No<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="18.500571197434994" distanceToCenter="false" position="right" ratio="-27.95215815939211" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> |
Jamie Smith |
9:430f5302f9e1 | 178 | <y:Arc height="-88.80883026123047" ratio="-0.5704898834228516" type="fixedRatio"/> |
Jamie Smith |
9:430f5302f9e1 | 179 | </y:ArcEdge> |
Jamie Smith |
9:430f5302f9e1 | 180 | </data> |
Jamie Smith |
9:430f5302f9e1 | 181 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 182 | <edge id="e4" source="n2" target="n4"> |
Jamie Smith |
9:430f5302f9e1 | 183 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 184 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 185 | <y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 186 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"> |
Jamie Smith |
9:430f5302f9e1 | 187 | <y:Point x="980.4279999999998" y="416.288"/> |
Jamie Smith |
9:430f5302f9e1 | 188 | </y:Path> |
Jamie Smith |
9:430f5302f9e1 | 189 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 190 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 191 | <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="19.33984375" x="1.2900996093746926" xml:space="preserve" y="2.4150375976562373">No<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.959999999999923" distanceToCenter="true" position="left" ratio="-2.571292968750015" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> |
Jamie Smith |
9:430f5302f9e1 | 192 | <y:BendStyle smoothed="false"/> |
Jamie Smith |
9:430f5302f9e1 | 193 | </y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 194 | </data> |
Jamie Smith |
9:430f5302f9e1 | 195 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 196 | <edge id="e5" source="n3" target="n5"> |
Jamie Smith |
9:430f5302f9e1 | 197 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 198 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 199 | <y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 200 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> |
Jamie Smith |
9:430f5302f9e1 | 201 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 202 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 203 | <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.677734375" x="-33.63749023543505" xml:space="preserve" y="-3.0204011714885155">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="17.148047352204344" distanceToCenter="true" position="right" ratio="-26.188525325283035" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> |
Jamie Smith |
9:430f5302f9e1 | 204 | <y:BendStyle smoothed="false"/> |
Jamie Smith |
9:430f5302f9e1 | 205 | </y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 206 | </data> |
Jamie Smith |
9:430f5302f9e1 | 207 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 208 | <edge id="e6" source="n4" target="n5"> |
Jamie Smith |
9:430f5302f9e1 | 209 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 210 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 211 | <y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 212 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> |
Jamie Smith |
9:430f5302f9e1 | 213 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 214 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 215 | <y:BendStyle smoothed="false"/> |
Jamie Smith |
9:430f5302f9e1 | 216 | </y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 217 | </data> |
Jamie Smith |
9:430f5302f9e1 | 218 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 219 | <edge id="e7" source="n6" target="n0"> |
Jamie Smith |
9:430f5302f9e1 | 220 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 221 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 222 | <y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 223 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> |
Jamie Smith |
9:430f5302f9e1 | 224 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 225 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 226 | <y:BendStyle smoothed="false"/> |
Jamie Smith |
9:430f5302f9e1 | 227 | </y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 228 | </data> |
Jamie Smith |
9:430f5302f9e1 | 229 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 230 | <edge id="e8" source="n5" target="n7"> |
Jamie Smith |
9:430f5302f9e1 | 231 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 232 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 233 | <y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 234 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"> |
Jamie Smith |
9:430f5302f9e1 | 235 | <y:Point x="1334.4560000000001" y="518.1759999999999"/> |
Jamie Smith |
9:430f5302f9e1 | 236 | </y:Path> |
Jamie Smith |
9:430f5302f9e1 | 237 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 238 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 239 | <y:BendStyle smoothed="false"/> |
Jamie Smith |
9:430f5302f9e1 | 240 | </y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 241 | </data> |
Jamie Smith |
9:430f5302f9e1 | 242 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 243 | <edge id="e9" source="n7" target="n8"> |
Jamie Smith |
9:430f5302f9e1 | 244 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 245 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 246 | <y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 247 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> |
Jamie Smith |
9:430f5302f9e1 | 248 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 249 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 250 | <y:BendStyle smoothed="false"/> |
Jamie Smith |
9:430f5302f9e1 | 251 | </y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 252 | </data> |
Jamie Smith |
9:430f5302f9e1 | 253 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 254 | <edge id="e10" source="n8" target="n6"> |
Jamie Smith |
9:430f5302f9e1 | 255 | <data key="d9"/> |
Jamie Smith |
9:430f5302f9e1 | 256 | <data key="d10"> |
Jamie Smith |
9:430f5302f9e1 | 257 | <y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 258 | <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> |
Jamie Smith |
9:430f5302f9e1 | 259 | <y:LineStyle color="#000000" type="line" width="1.0"/> |
Jamie Smith |
9:430f5302f9e1 | 260 | <y:Arrows source="none" target="standard"/> |
Jamie Smith |
9:430f5302f9e1 | 261 | <y:BendStyle smoothed="false"/> |
Jamie Smith |
9:430f5302f9e1 | 262 | </y:PolyLineEdge> |
Jamie Smith |
9:430f5302f9e1 | 263 | </data> |
Jamie Smith |
9:430f5302f9e1 | 264 | </edge> |
Jamie Smith |
9:430f5302f9e1 | 265 | </graph> |
Jamie Smith |
9:430f5302f9e1 | 266 | <data key="d7"> |
Jamie Smith |
9:430f5302f9e1 | 267 | <y:Resources/> |
Jamie Smith |
9:430f5302f9e1 | 268 | </data> |
Jamie Smith |
9:430f5302f9e1 | 269 | </graphml> |