V1 Release master
authorJarle Boe <j.boe@ti.com>
Thu, 19 Nov 2015 09:56:21 +0000 (10:56 +0100)
committerJarle Boe <j.boe@ti.com>
Thu, 19 Nov 2015 09:56:21 +0000 (10:56 +0100)
64 files changed:
SensorTag_iOS/Doc.zip [new file with mode: 0644]
SensorTag_iOS/Doc/Cloud_Link_Sharing.PNG [new file with mode: 0644]
SensorTag_iOS/Doc/Cloud_Sourcing.PNG [new file with mode: 0644]
SensorTag_iOS/Doc/Device_Selector.PNG [new file with mode: 0644]
SensorTag_iOS/Doc/Main_Screen_Full.PNG [new file with mode: 0644]
SensorTag_iOS/Doc/Main_Screen_empty.PNG [new file with mode: 0644]
SensorTag_iOS/README.txt [new file with mode: 0644]
SensorTag_iOS/SensorTag iOS source code manifest.html [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example.xcodeproj/project.pbxproj [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/AppDelegate.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/AppDelegate.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Base.lproj/LaunchScreen.xib [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Base.lproj/Main.storyboard [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/DeviceSelectTableViewController.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/DeviceSelectTableViewController.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/Contents.json [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_120x120-1.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_120x120.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_152x152.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_180x180.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_29x29.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_40x40.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_58x58-1.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_58x58.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_76x76.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_80x80-1.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_80x80.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_87x87.png [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/Info.plist [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/MQTTIBMQuickStart.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/MQTTIBMQuickStart.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/ViewController.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/ViewController.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/bleGenericService.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/bleGenericService.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/bluetoothHandler.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/bluetoothHandler.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/deviceInformationService.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/deviceInformationService.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/displayTile.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/displayTile.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/main.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/masterMQTTResourceList.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/masterUUIDList.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/oneValueCell.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/oneValueCell.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorFunctions.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorFunctions.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagAirPressureService.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagAirPressureService.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagAmbientTemperatureService.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagAmbientTemperatureService.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagHumidityService.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagHumidityService.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagKeyService.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagKeyService.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagLightService.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagLightService.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagMovementService.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/sensorTagMovementService.m [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/siOleAlertView.h [new file with mode: 0644]
SensorTag_iOS/SensorTag2-Example/siOleAlertView.m [new file with mode: 0644]
SensorTag_iOS/doxyfile [new file with mode: 0644]

diff --git a/SensorTag_iOS/Doc.zip b/SensorTag_iOS/Doc.zip
new file mode 100644 (file)
index 0000000..6de4b32
Binary files /dev/null and b/SensorTag_iOS/Doc.zip differ
diff --git a/SensorTag_iOS/Doc/Cloud_Link_Sharing.PNG b/SensorTag_iOS/Doc/Cloud_Link_Sharing.PNG
new file mode 100644 (file)
index 0000000..05f280d
Binary files /dev/null and b/SensorTag_iOS/Doc/Cloud_Link_Sharing.PNG differ
diff --git a/SensorTag_iOS/Doc/Cloud_Sourcing.PNG b/SensorTag_iOS/Doc/Cloud_Sourcing.PNG
new file mode 100644 (file)
index 0000000..8275169
Binary files /dev/null and b/SensorTag_iOS/Doc/Cloud_Sourcing.PNG differ
diff --git a/SensorTag_iOS/Doc/Device_Selector.PNG b/SensorTag_iOS/Doc/Device_Selector.PNG
new file mode 100644 (file)
index 0000000..8f111ca
Binary files /dev/null and b/SensorTag_iOS/Doc/Device_Selector.PNG differ
diff --git a/SensorTag_iOS/Doc/Main_Screen_Full.PNG b/SensorTag_iOS/Doc/Main_Screen_Full.PNG
new file mode 100644 (file)
index 0000000..3e4b4d7
Binary files /dev/null and b/SensorTag_iOS/Doc/Main_Screen_Full.PNG differ
diff --git a/SensorTag_iOS/Doc/Main_Screen_empty.PNG b/SensorTag_iOS/Doc/Main_Screen_empty.PNG
new file mode 100644 (file)
index 0000000..e782d89
Binary files /dev/null and b/SensorTag_iOS/Doc/Main_Screen_empty.PNG differ
diff --git a/SensorTag_iOS/README.txt b/SensorTag_iOS/README.txt
new file mode 100644 (file)
index 0000000..9d9b49a
--- /dev/null
@@ -0,0 +1,19 @@
+10/26/2015
+
+This application needs the MQTTKit framework located at :
+
+https://github.com/jmesnil/MQTTKit.git
+
+
+Install steps :
+
+
+1. Make directory SensorTag2-Example
+2. Enter directory and unzip SensorTag2-Example.zip here
+3. Make Directory MQTT and enter it.
+4. Run : git clone https://github.com/jmesnil/MQTTKit.git
+5. Open SensorTag-Example.xcodeproj in Xcode.
+6. Compile.
+
+
+
diff --git a/SensorTag_iOS/SensorTag iOS source code manifest.html b/SensorTag_iOS/SensorTag iOS source code manifest.html
new file mode 100644 (file)
index 0000000..9777d5a
--- /dev/null
@@ -0,0 +1,328 @@
+<!--\r\r
+Texas Instruments Manifest Format 2.0\r\r
+-->\r\r
+\r\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\r\r
+<html>\r\r
+\r\r
+<head>\r\r
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />\r\r
+<!-- @Start Style -->\r\r
+<!-- Default style in case someone doesnt have Internet Access -->\r\r
+<style type="text/css" id="internalStyle">\r\r
+       body, div, p {\r\r
+               font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;\r\r
+               font-size: 13px;\r\r
+               line-height: 1.3;\r\r
+       }\r\r
+       body {\r\r
+               margin: 20px;   \r\r
+       }\r\r
+       h1 {\r\r
+               font-size: 150%;\r\r
+       }\r\r
+       h2 {\r\r
+               font-size: 120%;\r\r
+       }\r\r
+       h3 {\r\r
+               font-size: 100%;\r\r
+       }\r\r
+       img {\r\r
+               border: 0px;\r\r
+               vertical-align: middle;\r\r
+       }\r\r
+       table, th, td, tr {\r\r
+               border: 1px solid black;        \r\r
+               font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;\r\r
+               font-size: 13px;\r\r
+               line-height: 1.3;\r\r
+               empty-cells: show;  \r\r
+               padding: 5px;\r\r
+       }\r\r
+       table {\r\r
+               border-collapse: collapse; \r\r
+               width: 100%;\r\r
+       }\r\r
+       tr {\r\r
+               page-break-inside: avoid;\r\r
+       }\r\r
+       #TIlogoLeft {\r\r
+               background-color: black; \r\r
+               padding: 0;\r\r
+               width: 20%;\r\r
+       }\r\r
+       #TIlogoRight {\r\r
+               background-color: red; \r\r
+               padding: 0;\r\r
+       }\r\r
+       #ProductName {\r\r
+               text-align: center;\r\r
+       }\r\r
+       #ReleaseDate {\r\r
+               text-align: center;\r\r
+       }\r\r
+       .LogoSection {\r\r
+               margin: 0;\r\r
+               padding: 0;\r\r
+       }\r\r
+       .HeaderSection {\r\r
+               margin: 25px 0 25px 0;\r\r
+               padding: 0;\r\r
+       }\r\r
+       .LegendSection {\r\r
+               margin: 25px 0 25px 0;\r\r
+       }\r\r
+       .ExportSection {\r\r
+               margin: 25px 0 25px 0;\r\r
+       }\r\r
+       .DisclaimerSection {\r\r
+               margin: 25px 0 25px 0;  \r\r
+       }\r\r
+       .CreditSection {\r\r
+               margin: 25px 0 25px 0;  \r\r
+       }\r\r
+       .LicenseSection {\r\r
+               margin: 25px 0 25px 0;  \r\r
+       }\r\r
+       .ManifestTable {\r\r
+               margin: 25px 0 25px 0;  \r\r
+       }\r\r
+</style> \r\r
+<!-- Override style from TI if they have Internet Access -->\r\r
+<link type="text/css" rel="stylesheet" href="timanifeststyle.css">\r\r
+<!-- @End Style -->\r\r
+<title>Texas Instruments Manifest</title>\r\r
+</head>\r\r
+\r\r
+<body><!-- Logo display, will need to fix up the URLs, this is just for testing.. Image alternate display not wporking well yet -->\r\r
+<div class="LogoSection">\r\r
+<table>\r\r
+  <tbody>\r\r
+    <tr>\r\r
+      <td id="TIlogoLeft">\r\r
+        <a href="http://www.ti.com/">\r\r
+          <!-- img src="tilogo.gif" alt="Texas Instruments Incorporated" -->\r\r
+                 <img alt="" src="data:image/gif;base64,R0lGODlh3gA2AKIAAAAAAP///7u7u29vbz8/PwYGBujo6BgYGCH5BAAAAAAALAAAAADeADYAAAP/CLrc/jDKSau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodHorDALYLIHKJVqz2q44eAUHtoDB4DBu48rgLQErcNtnX7NhMDcICIB3gix5ZmtqAAZZew8EAo+QkQIDNVZqiIM1cHGKZ4YPAmaiAWw0c1gFmZqjB3SbZ6kNe6WhsAeOlDV0qjSFAXUAp7lwuREFtVsFgMvLB7fNAM+BCs+lDLd8BNYOuxfV22PL0RiWlwO1u3kDqejAEsjR6GB86FsHoYwA6gxWnVgGEegUuIelWJk6jswAGlXQ36J1xBSoQwfulIEDr/6l+VeK/+AehrAGOHRnAWRBbbWegckXAV6wk4AeRQtDQBEaBYsYlMl2hUCsBt0iKgilT9EfAlfO7SmzdKkrkQUT/fqZSECqLCSlntH375IAA1tqGUilLIBSNVnU+NmJNBRVChlF1QwAdlRWBy5P3QymwCLBYhs73cTHYBq3X33nDQ2wcWuBgef0FRD4GK3jU3VCZZUJAIw1OGg0P+4bFiubOWoOsEP1+KvZn3wurDbZ6lfcuw3yYkFjRSeYzRe7ARAbW0K3PmGIMi0OFDG1Mmha+RnufAHn3xL9ha6uTZ/rXagZ1GKAtTsHeWb+FEQvHILuX4+mLzj2j2r4TrFesTwMbE5Cuv8JzbTSGuRV1xgfUJFC3WbA0JWFalcItpgf8YU2yT/qATaedent5cBb8zk0DzIitgfKbonRFV9Wp2xl3UXq5Ccibp05598BnRigiAIJmrZAexkJQIuBwzX4CB3SQbeYQkPVAUco63DI2HzsAdYAiAvEZdYlaVQ5wXs3+bQAjovEUoBRR9LVAFLaPXCcY/KMqVRasQB5kiJgLcYgTkJiuCWKC2ZpIY/z/LRhYefkBAGW1HTyRy2UjObLHxSAOZ948EUVGCSC3SLZbB7iZKOLc2GRRgMH/VhdHnJwFCgD8iEGx0VKvpqbO+hoaCppEg3UiTES1CTkhNaQ+Qs4LQGql07/lET4mIQ6SvTSVGZ9Bmhz/bkYzK+PFKtpje6wumRm1wrLZzSdQASoZvyswdmSuk7p616HfkjBTxZBQucFgqXCFKdn1NpiUlQJhs8kteBWG0AbATbXS2tBlaeoVkmJRova4KkGPmhMFdiSYmq8cbTRYhrlkiHaNufJ9mIgVqEXnAOJM5JE4sgjudQ8bF82x+cKBP4Iiedecyjgx2/WtMNjjhcL9h+S4xq9RYJgsbeeUbmdrPTSQbPccsyijEXOfI8xyuinVJH1wdkS/MQ2Bc5Iq08DyHYwGglvPyCilbz0fa8GLV7r9+Btb7CJ14Qnzg8HpdKoOOF5Py752JNXvrblNphzEHnmnF/a+ecTbA465qKPXnnppkuOeuqKr8465K+z7nrsfc9Ouyq23z5I7rrfwXvvbhSQAAA7" />\r\r
+        </a>\r\r
+      </td>\r\r
+      <td id="TILogoRight">\r\r
+        <!-- img src="titagline.gif" alt="Technology for Innovators(tm)"-->\r\r
+               <img alt="" src="data:image/gif;base64,R0lGODlhOgEaALMAAP8AAP////92dv+3t/+Njf/W1v/t7f8hIf/19f+jo//Hx/8/P/9cXP/j4//6+v/+/iH5BAAAAAAALAAAAAA6ARoAAAT/EMhJq7046827/2AojmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqft0NDMCBQodis1jcADBKE7nYcCpjPgU5AQBKkVYOHAeRudqtXsh60/vRHdSoBBCGBNAkLe4o4f2psgG8pjR6GM5OLmDB/DA0GBoQADAgICRIBBQUOYgwGCg2kEgudBgUHAIGcBg0MsZ0NCnMGYgsBtqEGAbCynrW3AQONgcIFBgiErK6wAAfUtLbCscWiowoAyLDczLZu0AIJCAYOoJn0G38ObAwPEvLEts/O1vUhsA8AAjGonEmA9W6hGAVpEjiQoKBAhT8HJSRkVyEQQAAJ//a5YeMPQIFyACqCnJjSIgFCB4oB+HOSokWOAB6wIWCxnk8MfYh5QsYg5sVHfQLVMSqhztJIxWIaC6QzJy8KfZgqrNT0zR+nUNl8fSMvZ6IDwJCJRfoI7IR4Cub9nDsha6RwR02xUZpGq1utUWUq9FKgYV6/abgOHjt45tquEgY0SDDHoJg+fxhXolKNrmfH/EoR5EdAKmjQfB1qvPmGIQIJ3g4gC2egVF7LqxtP8Ng2cViTKFUCIGbNFKEEmB/VbDlYdqLRn+du8oTg6jjbmfe+CbTM2+BcuySgbQVtQoOCt7s3U8wbsqGs3ZppZLnylwFe8Uql825ogANPckUnYDoOCogxQGXADajggjcw4AA8DSSyTQASMmjhhTQscBWGHHbo4YcghijiiCSWaOKJKKao4oostugiFBEAADs=" />\r\r
+      </td>\r\r
+    </tr>\r\r
+  </tbody>\r\r
+</table>\r\r
+</div><div class="HeaderSection">\r\r
+<h1 id="ProductName">\r\r
+<!-- @Start Product -->\r\r
+SensorTag iOS source code Manifest\r\r
+<!-- @End Product -->\r\r
+</h1>\r\r
+\r\r
+<h2 id="ReleaseDate">\r\r
+<!-- @Start Date -->\r\r
+08-27-2015\r\r
+<!-- @End Date -->\r\r
+</h2>\r\r
+\r\r
+\r\r
+<h2 id="SRASID">\r\r
+<!-- @Start Date -->\r\r
+Manifest ID - SRAS00002072\r\r
+<!-- @End Date -->\r\r
+</h2>\r\r
+</div><div class="LegendSection">\r\r
+<h2>Legend</h2>\r\r
+<p>(explanation of the fields in the Manifest Table below)</p>\r\r
+<table>\r\r
+<tbody>\r\r
+<tr>\r\r
+<td>\r\r
+<b>Software Name </b>\r\r
+</td>\r\r
+<td>\r\r
+The name of the application or file\r\r
+</td>\r\r
+</tr>\r\r
+<tr>\r\r
+<td>\r\r
+<b>Version</b>\r\r
+</td>\r\r
+<td>\r\r
+Version of the application or file\r\r
+</td>\r\r
+</tr>\r\r
+<tr>\r\r
+<td>\r\r
+<b>License Type</b>\r\r
+</td>\r\r
+<td>\r\r
+Type of license(s) under which TI will be providing\r\r
+software to the licensee (e.g. BSD-3-Clause, GPL-2.0, TI TSPA License, TI\r\r
+Commercial License). The license could be under Commercial terms or Open Source. See Open Source Reference License Disclaimer in\r\r
+the Disclaimers Section. Whenever possible, TI will use an <a href="http://spdx.org/licenses/"> SPDX Short Identifier </a> for an Open Source\r\r
+License. TI Commercial license terms are not usually included in the manifest and are conveyed through a variety \r\r
+of means such as a clickwrap license upon install, \r\r
+a signed license agreement and so forth.\r\r
+</td>\r\r
+</tr>\r\r
+<tr>\r\r
+<td>\r\r
+<b>Location</b>\r\r
+</td>\r\r
+<td>\r\r
+The directory name and path on the media or a specific file where the Software is located. Typically fully qualified path names \r\r
+are not used and instead the relevant top level directory of the application is given. \r\r
+A notation often used in the manifests is [as installed]/directory/*. Note that the asterisk implies that all\r\r
+files under that directory are licensed as the License Type field denotes. Any exceptions to this will \r\r
+generally be denoted as [as installed]/directory/* except as noted below which means as shown in subsequent rows of \r\r
+the manifest.\r\r
+</td>\r\r
+</tr>\r\r
+<tr>\r\r
+<td>\r\r
+<b>Delivered As</b>\r\r
+</td>\r\r
+<td>\r\r
+This field will either be &#8220;Source&#8221;, &#8220;Binary&#8221; or &#8220;Source\r\r
+and Binary&#8221; and is the primary form the content of the Software is delivered\r\r
+in. If the Software is delivered in an archive format, this field\r\r
+applies to the contents of the archive. If the word Limited is used\r\r
+with Source, as in &#8220;Limited Source&#8221; or &#8220;Limited Source and Binary&#8221; then\r\r
+only portions of the Source for the application are provided.\r\r
+</td>\r\r
+</tr>\r\r
+<tr>\r\r
+<td>\r\r
+<b>Modified by TI</b>\r\r
+</td>\r\r
+<td>\r\r
+This field will either be &#8220;Yes&#8221; or &#8220;No&#8221;. A &#8220;Yes&#8221; means\r\r
+TI has made changes to the Software. A &#8220;No&#8221; means TI has not made any\r\r
+changes. Note: This field is not applicable for Software &#8220;Obtained\r\r
+from&#8221; TI.\r\r
+</td>\r\r
+</tr>\r\r
+<tr>\r\r
+<td>\r\r
+<b>Obtained from</b>\r\r
+</td>\r\r
+<td>\r\r
+This field specifies from where or from whom TI obtained\r\r
+the Software. It may be a URL to an Open Source site, a 3<sup>rd</sup>\r\r
+party licensor, or TI. See Links Disclaimer in the Disclaimers\r\r
+Section.\r\r
+</td>\r\r
+</tr>\r\r
+</tbody>\r\r
+</table>\r\r
+</div><div class="DisclaimerSection">\r\r
+<h2>Disclaimers</h2>\r\r
+<h3>Export Control Classification Number (ECCN)</h3>\r\r
+<p>Any use of ECCNs listed in the Manifest is at the user&#8217;s risk\r\r
+and without recourse to TI. Your\r\r
+company, as the exporter of record, is responsible for determining the\r\r
+correct classification of any item at\r\r
+the time of export. Any export classification by TI of Software is for\r\r
+TI&#8217;s internal use only and shall not be construed as a representation\r\r
+or warranty\r\r
+regarding the proper export classification for such Software or whether\r\r
+an export\r\r
+license or other documentation is required for exporting such Software</p>\r\r
+<h3>Links in the Manifest</h3>\r\r
+<p>Any\r\r
+links appearing on this Manifest\r\r
+(for example in the &#8220;Obtained from&#8221; field) were verified at the time\r\r
+the Manifest was created. TI makes no guarantee that any listed links\r\r
+will\r\r
+remain active in the future.</p>\r\r
+<h3>Open Source License References</h3>\r\r
+<p>Your company is responsible for confirming the\r\r
+applicable license terms for any open source Software\r\r
+listed in this Manifest that was not &#8220;Obtained from&#8221; TI. Any open\r\r
+source license\r\r
+specified in this Manifest for Software that was\r\r
+not &#8220;Obtained from&#8221; TI is for TI&#8217;s internal use only and shall not be\r\r
+construed as a representation or warranty regarding the proper open\r\r
+source license terms\r\r
+for such Software.</p>\r\r
+</div><div class="ExportSection">\r\r
+<h2>Export Information</h2>\r\r
+<p>ECCN for Software included in this release:</p>\r\r
+EAR99 (No Other ECCN Applies)\r\r
+</div><div class="ManifestTable">\r\r
+<!-- h2>Manifest Table</h2 -->\r\r
\r
+ <table> \r
+ <tbody> \r
\r
+ <h2> \r
+  SensorTag iOS source code Manifest Table \r
+ </h2> \r
\r
+  \r
+ <p> \r
\r
+ See the Legend above for a description of these columns. \r
\r
+ </p> \r
+  \r
+ <table id="targetpackages" name="targetpackages"> \r
+ <thead>  \r
+       <tr> \r
+               <td><b>Software Name</b></td> \r
+               <td><b>Version</b></td> \r
+               <td><b>License Type</b></td> \r
+               <td><b>Delivered As</b></td> \r
+               <td><b>Modified by TI</b></td> \r
+               <td></td> \r
+               <td></td> \r
+       </tr> \r
+ </thead>  \r
\r
\r
+ <tbody> \r
+       <tr> \r
+               <td id="name" name="name" rowspan="2"> \r
+ SensorTag iOS sample source code \r
+ </td> \r
+               <td id="version" name="version" rowspan="2"> \r
+ 1.1 \r
+ </td> \r
+               <td id="license" name="license" rowspan="2"> \r
+ TI Text File \r
+ </td> \r
+               <td id="delivered" name="delivered" rowspan="2"> \r
+ Source \r
+ </td> \r
+               <td id="modified" name="modified" rowspan="2"> \r
+ N/A \r
+ </td> \r
+               <td><b>Location</b></td> \r
+               <td id="location" name="location"> \r
+ NA \r
+ </td> \r
+       </tr> \r
+       <tr> \r
+               <td><b>Obtained from</b></td> \r
+               <td id="obtained" name="obtained"> \r
+ TI \r
+ </td> \r
+       </tr> \r
\r
+ </tbody> \r
+ </table> \r
+  \r
+ </p> \r
+ </p> \r
+ <p> \r
+\r\r
+</div><div class="CreditSection">\r\r
+<h2>Credits</h2>\r\r
+<BR> <BR><BR><BR><BR>\r\r
+</div><div class="LicenseSection">\r\r
+<h2>Licenses</h2>\r\r
+<BR><h3><b> SensorTag iOS source code Licenses </b></h3><BR> <BR><BR><BR>TEXAS INSTRUMENTS TEXT FILE LICENSE<BR><BR><BR>Copyright (c)  2015 Texas Instruments Incorporated<BR><BR>All rights reserved not granted herein.<BR><BR>Limited License.  <BR><BR>Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive license under copyrights and patents it now or hereafter owns or controls to make, have made, use, import, offer to sell and sell ("Utilize") this software subject to the terms herein.  With respect to the foregoing patent license, such license is granted  solely to the extent that any such patent is necessary to Utilize the software alone.  The patent license shall not apply to any combinations which include this software, other than combinations with devices manufactured by or for TI (\93TI Devices\94).  No hardware patent is licensed hereunder.<BR><BR>Redistributions must preserve existing copyright notices and reproduce this license (including the above copyright notice and the disclaimer and (if applicable) source code license limitations below) in the documentation and/or other materials provided with the distribution<BR><BR>Redistribution and use in binary form, without modification, are permitted provided that the following conditions are met:<BR><BR>*  No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any software provided in binary form.<BR><BR>*      any redistribution and use are licensed by TI for use only with TI Devices.<BR><BR>*    Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.<BR><BR>If software source code is provided to you, modification and redistribution of the source code are permitted provided that the following conditions are met:<BR><BR>*    any redistribution and use of the source code, including any resulting derivative works, are licensed by TI for use only with TI Devices.<BR><BR>*      any redistribution and use of any object code compiled from the source code and any resulting derivative works, are licensed by TI for use only with TI Devices.<BR><BR>Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or promote products derived from this software without specific prior written permission.<BR><BR>DISCLAIMER.<BR><BR>THIS SOFTWARE IS PROVIDED BY TI AND TI\92S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TI AND TIâ\80\99S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<BR><BR>><BR>\r\r
+</div>\r\r
+\r\r
+</body></html>
\ No newline at end of file
diff --git a/SensorTag_iOS/SensorTag2-Example.xcodeproj/project.pbxproj b/SensorTag_iOS/SensorTag2-Example.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..2ffacf9
--- /dev/null
@@ -0,0 +1,520 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 46;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               7F5E74BB1B8CB5E000E378EA /* MQTTIBMQuickStart.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F5E74BA1B8CB5E000E378EA /* MQTTIBMQuickStart.m */; };
+               7F5E74C71B8CB72A00E378EA /* libMQTTKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F5E74C21B8CB71C00E378EA /* libMQTTKit.a */; };
+               7F77A0BD1B8C70C7004AD5E4 /* deviceInformationService.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F77A0BC1B8C70C7004AD5E4 /* deviceInformationService.m */; };
+               7F77A0C11B8C85A8004AD5E4 /* siOleAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F77A0C01B8C85A8004AD5E4 /* siOleAlertView.m */; };
+               7F77A0C81B8C9E84004AD5E4 /* sensorTagKeyService.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F77A0C71B8C9E84004AD5E4 /* sensorTagKeyService.m */; };
+               7F7EBC4B1B8B39D5004DF353 /* sensorTagAirPressureService.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EBC4A1B8B39D5004DF353 /* sensorTagAirPressureService.m */; };
+               7F7EBC4E1B8B3F85004DF353 /* sensorTagHumidityService.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EBC4D1B8B3F85004DF353 /* sensorTagHumidityService.m */; };
+               7F7EBC511B8B493D004DF353 /* sensorTagMovementService.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EBC501B8B493D004DF353 /* sensorTagMovementService.m */; };
+               7F7EF3F41B835DE4008C8749 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EF3F31B835DE4008C8749 /* main.m */; };
+               7F7EF3F71B835DE4008C8749 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EF3F61B835DE4008C8749 /* AppDelegate.m */; };
+               7F7EF3FA1B835DE4008C8749 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EF3F91B835DE4008C8749 /* ViewController.m */; };
+               7F7EF3FD1B835DE4008C8749 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7F7EF3FB1B835DE4008C8749 /* Main.storyboard */; };
+               7F7EF3FF1B835DE4008C8749 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7F7EF3FE1B835DE4008C8749 /* Images.xcassets */; };
+               7F7EF4021B835DE4008C8749 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7F7EF4001B835DE4008C8749 /* LaunchScreen.xib */; };
+               7F7EF4191B83609B008C8749 /* bluetoothHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EF4181B83609B008C8749 /* bluetoothHandler.m */; };
+               7F7EF41C1B8361FA008C8749 /* bleGenericService.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EF41B1B8361FA008C8749 /* bleGenericService.m */; };
+               7F7EF4201B836D90008C8749 /* sensorTagAmbientTemperatureService.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EF41F1B836D90008C8749 /* sensorTagAmbientTemperatureService.m */; };
+               7F7EF4261B837DAA008C8749 /* sensorFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EF4251B837DAA008C8749 /* sensorFunctions.m */; };
+               7F7EF42A1B84797A008C8749 /* DeviceSelectTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EF4281B84797A008C8749 /* DeviceSelectTableViewController.m */; };
+               7F7EF42D1B84A2CD008C8749 /* displayTile.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EF42C1B84A2CD008C8749 /* displayTile.m */; };
+               7F7EF4311B84B72F008C8749 /* oneValueCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7EF4301B84B72F008C8749 /* oneValueCell.m */; };
+               7FFBBF3E1B8B68080080F16C /* sensorTagLightService.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FFBBF3D1B8B68080080F16C /* sensorTagLightService.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+               7F5E74C11B8CB71C00E378EA /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 7F5E74BC1B8CB71C00E378EA /* MQTTKit.xcodeproj */;
+                       proxyType = 2;
+                       remoteGlobalIDString = 93EEBC981816CAB00055100D;
+                       remoteInfo = MQTTKit;
+               };
+               7F5E74C31B8CB71C00E378EA /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 7F5E74BC1B8CB71C00E378EA /* MQTTKit.xcodeproj */;
+                       proxyType = 2;
+                       remoteGlobalIDString = 93EEBCA81816CAB00055100D;
+                       remoteInfo = MQTTKitTests;
+               };
+               7F5E74C51B8CB72400E378EA /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 7F5E74BC1B8CB71C00E378EA /* MQTTKit.xcodeproj */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 93EEBC971816CAB00055100D;
+                       remoteInfo = MQTTKit;
+               };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+               7F5E74B91B8CB5E000E378EA /* MQTTIBMQuickStart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MQTTIBMQuickStart.h; sourceTree = "<group>"; };
+               7F5E74BA1B8CB5E000E378EA /* MQTTIBMQuickStart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MQTTIBMQuickStart.m; sourceTree = "<group>"; };
+               7F5E74BC1B8CB71C00E378EA /* MQTTKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = MQTTKit.xcodeproj; path = MQTT/MQTTKit/MQTTKit.xcodeproj; sourceTree = "<group>"; };
+               7F77A0BB1B8C70C7004AD5E4 /* deviceInformationService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = deviceInformationService.h; sourceTree = "<group>"; };
+               7F77A0BC1B8C70C7004AD5E4 /* deviceInformationService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = deviceInformationService.m; sourceTree = "<group>"; };
+               7F77A0BF1B8C85A8004AD5E4 /* siOleAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = siOleAlertView.h; sourceTree = "<group>"; };
+               7F77A0C01B8C85A8004AD5E4 /* siOleAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = siOleAlertView.m; sourceTree = "<group>"; };
+               7F77A0C61B8C9E84004AD5E4 /* sensorTagKeyService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sensorTagKeyService.h; sourceTree = "<group>"; };
+               7F77A0C71B8C9E84004AD5E4 /* sensorTagKeyService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = sensorTagKeyService.m; sourceTree = "<group>"; };
+               7F7EBC491B8B39D5004DF353 /* sensorTagAirPressureService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sensorTagAirPressureService.h; sourceTree = "<group>"; };
+               7F7EBC4A1B8B39D5004DF353 /* sensorTagAirPressureService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = sensorTagAirPressureService.m; sourceTree = "<group>"; };
+               7F7EBC4C1B8B3F85004DF353 /* sensorTagHumidityService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sensorTagHumidityService.h; sourceTree = "<group>"; };
+               7F7EBC4D1B8B3F85004DF353 /* sensorTagHumidityService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = sensorTagHumidityService.m; sourceTree = "<group>"; };
+               7F7EBC4F1B8B493D004DF353 /* sensorTagMovementService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sensorTagMovementService.h; sourceTree = "<group>"; };
+               7F7EBC501B8B493D004DF353 /* sensorTagMovementService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = sensorTagMovementService.m; sourceTree = "<group>"; };
+               7F7EF3EE1B835DE4008C8749 /* SensorTag2-Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SensorTag2-Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+               7F7EF3F21B835DE4008C8749 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+               7F7EF3F31B835DE4008C8749 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+               7F7EF3F51B835DE4008C8749 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+               7F7EF3F61B835DE4008C8749 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+               7F7EF3F81B835DE4008C8749 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
+               7F7EF3F91B835DE4008C8749 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
+               7F7EF3FC1B835DE4008C8749 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+               7F7EF3FE1B835DE4008C8749 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
+               7F7EF4011B835DE4008C8749 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
+               7F7EF4171B83609B008C8749 /* bluetoothHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bluetoothHandler.h; sourceTree = "<group>"; };
+               7F7EF4181B83609B008C8749 /* bluetoothHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = bluetoothHandler.m; sourceTree = "<group>"; };
+               7F7EF41A1B8361FA008C8749 /* bleGenericService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bleGenericService.h; sourceTree = "<group>"; };
+               7F7EF41B1B8361FA008C8749 /* bleGenericService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = bleGenericService.m; sourceTree = "<group>"; };
+               7F7EF41E1B836D90008C8749 /* sensorTagAmbientTemperatureService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sensorTagAmbientTemperatureService.h; sourceTree = "<group>"; };
+               7F7EF41F1B836D90008C8749 /* sensorTagAmbientTemperatureService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = sensorTagAmbientTemperatureService.m; sourceTree = "<group>"; };
+               7F7EF4211B836DD1008C8749 /* masterUUIDList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = masterUUIDList.h; sourceTree = "<group>"; };
+               7F7EF4241B837DAA008C8749 /* sensorFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sensorFunctions.h; sourceTree = "<group>"; };
+               7F7EF4251B837DAA008C8749 /* sensorFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = sensorFunctions.m; sourceTree = "<group>"; };
+               7F7EF4271B837FDE008C8749 /* masterMQTTResourceList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = masterMQTTResourceList.h; sourceTree = "<group>"; };
+               7F7EF4281B84797A008C8749 /* DeviceSelectTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeviceSelectTableViewController.m; sourceTree = "<group>"; };
+               7F7EF4291B84797A008C8749 /* DeviceSelectTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceSelectTableViewController.h; sourceTree = "<group>"; };
+               7F7EF42B1B84A2CD008C8749 /* displayTile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = displayTile.h; sourceTree = "<group>"; };
+               7F7EF42C1B84A2CD008C8749 /* displayTile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = displayTile.m; sourceTree = "<group>"; };
+               7F7EF42F1B84B72F008C8749 /* oneValueCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = oneValueCell.h; sourceTree = "<group>"; };
+               7F7EF4301B84B72F008C8749 /* oneValueCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = oneValueCell.m; sourceTree = "<group>"; };
+               7FFBBF3C1B8B68080080F16C /* sensorTagLightService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sensorTagLightService.h; sourceTree = "<group>"; };
+               7FFBBF3D1B8B68080080F16C /* sensorTagLightService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = sensorTagLightService.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               7F7EF3EB1B835DE4008C8749 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               7F5E74C71B8CB72A00E378EA /* libMQTTKit.a in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               7F5E74BD1B8CB71C00E378EA /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7F5E74C21B8CB71C00E378EA /* libMQTTKit.a */,
+                               7F5E74C41B8CB71C00E378EA /* MQTTKitTests.xctest */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               7F7A1F241B8D923B00432CEC /* MQTT */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7F7EF4271B837FDE008C8749 /* masterMQTTResourceList.h */,
+                               7F5E74B91B8CB5E000E378EA /* MQTTIBMQuickStart.h */,
+                               7F5E74BA1B8CB5E000E378EA /* MQTTIBMQuickStart.m */,
+                       );
+                       name = MQTT;
+                       sourceTree = "<group>";
+               };
+               7F7A1F251B8D926700432CEC /* CoreBluetooth Handling */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7F7EF4281B84797A008C8749 /* DeviceSelectTableViewController.m */,
+                               7F7EF4291B84797A008C8749 /* DeviceSelectTableViewController.h */,
+                               7F7EF4211B836DD1008C8749 /* masterUUIDList.h */,
+                               7F7EF4171B83609B008C8749 /* bluetoothHandler.h */,
+                               7F7EF4181B83609B008C8749 /* bluetoothHandler.m */,
+                       );
+                       name = "CoreBluetooth Handling";
+                       sourceTree = "<group>";
+               };
+               7F7EF3E51B835DE4008C8749 = {
+                       isa = PBXGroup;
+                       children = (
+                               7F5E74BC1B8CB71C00E378EA /* MQTTKit.xcodeproj */,
+                               7F7EF3F01B835DE4008C8749 /* SensorTag2-Example */,
+                               7F7EF3EF1B835DE4008C8749 /* Products */,
+                       );
+                       sourceTree = "<group>";
+               };
+               7F7EF3EF1B835DE4008C8749 /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7F7EF3EE1B835DE4008C8749 /* SensorTag2-Example.app */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               7F7EF3F01B835DE4008C8749 /* SensorTag2-Example */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7F7EF3F51B835DE4008C8749 /* AppDelegate.h */,
+                               7F7EF3F61B835DE4008C8749 /* AppDelegate.m */,
+                               7F7EF3F81B835DE4008C8749 /* ViewController.h */,
+                               7F7EF3F91B835DE4008C8749 /* ViewController.m */,
+                               7F77A0BF1B8C85A8004AD5E4 /* siOleAlertView.h */,
+                               7F77A0C01B8C85A8004AD5E4 /* siOleAlertView.m */,
+                               7F7A1F241B8D923B00432CEC /* MQTT */,
+                               7F7EF42E1B84A2D3008C8749 /* Display Tiles */,
+                               7F7EF41D1B836D59008C8749 /* Bluetooth Services */,
+                               7F7A1F251B8D926700432CEC /* CoreBluetooth Handling */,
+                               7F7EF3FB1B835DE4008C8749 /* Main.storyboard */,
+                               7F7EF3FE1B835DE4008C8749 /* Images.xcassets */,
+                               7F7EF4001B835DE4008C8749 /* LaunchScreen.xib */,
+                               7F7EF3F11B835DE4008C8749 /* Supporting Files */,
+                       );
+                       path = "SensorTag2-Example";
+                       sourceTree = "<group>";
+               };
+               7F7EF3F11B835DE4008C8749 /* Supporting Files */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7F7EF3F21B835DE4008C8749 /* Info.plist */,
+                               7F7EF3F31B835DE4008C8749 /* main.m */,
+                       );
+                       name = "Supporting Files";
+                       sourceTree = "<group>";
+               };
+               7F7EF41D1B836D59008C8749 /* Bluetooth Services */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7F77A0C61B8C9E84004AD5E4 /* sensorTagKeyService.h */,
+                               7F77A0C71B8C9E84004AD5E4 /* sensorTagKeyService.m */,
+                               7F77A0BB1B8C70C7004AD5E4 /* deviceInformationService.h */,
+                               7F77A0BC1B8C70C7004AD5E4 /* deviceInformationService.m */,
+                               7FFBBF3C1B8B68080080F16C /* sensorTagLightService.h */,
+                               7FFBBF3D1B8B68080080F16C /* sensorTagLightService.m */,
+                               7F7EF41A1B8361FA008C8749 /* bleGenericService.h */,
+                               7F7EF41B1B8361FA008C8749 /* bleGenericService.m */,
+                               7F7EF4241B837DAA008C8749 /* sensorFunctions.h */,
+                               7F7EF4251B837DAA008C8749 /* sensorFunctions.m */,
+                               7F7EF41E1B836D90008C8749 /* sensorTagAmbientTemperatureService.h */,
+                               7F7EF41F1B836D90008C8749 /* sensorTagAmbientTemperatureService.m */,
+                               7F7EBC491B8B39D5004DF353 /* sensorTagAirPressureService.h */,
+                               7F7EBC4A1B8B39D5004DF353 /* sensorTagAirPressureService.m */,
+                               7F7EBC4C1B8B3F85004DF353 /* sensorTagHumidityService.h */,
+                               7F7EBC4D1B8B3F85004DF353 /* sensorTagHumidityService.m */,
+                               7F7EBC4F1B8B493D004DF353 /* sensorTagMovementService.h */,
+                               7F7EBC501B8B493D004DF353 /* sensorTagMovementService.m */,
+                       );
+                       name = "Bluetooth Services";
+                       sourceTree = "<group>";
+               };
+               7F7EF42E1B84A2D3008C8749 /* Display Tiles */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7F7EF42B1B84A2CD008C8749 /* displayTile.h */,
+                               7F7EF42C1B84A2CD008C8749 /* displayTile.m */,
+                               7F7EF42F1B84B72F008C8749 /* oneValueCell.h */,
+                               7F7EF4301B84B72F008C8749 /* oneValueCell.m */,
+                       );
+                       name = "Display Tiles";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               7F7EF3ED1B835DE4008C8749 /* SensorTag2-Example */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 7F7EF4111B835DE4008C8749 /* Build configuration list for PBXNativeTarget "SensorTag2-Example" */;
+                       buildPhases = (
+                               7F7EF3EA1B835DE4008C8749 /* Sources */,
+                               7F7EF3EB1B835DE4008C8749 /* Frameworks */,
+                               7F7EF3EC1B835DE4008C8749 /* Resources */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               7F5E74C61B8CB72400E378EA /* PBXTargetDependency */,
+                       );
+                       name = "SensorTag2-Example";
+                       productName = "SensorTag2-Example";
+                       productReference = 7F7EF3EE1B835DE4008C8749 /* SensorTag2-Example.app */;
+                       productType = "com.apple.product-type.application";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               7F7EF3E61B835DE4008C8749 /* Project object */ = {
+                       isa = PBXProject;
+                       attributes = {
+                               LastUpgradeCheck = 0700;
+                               ORGANIZATIONNAME = "Texas Instruments";
+                               TargetAttributes = {
+                                       7F7EF3ED1B835DE4008C8749 = {
+                                               CreatedOnToolsVersion = 6.4;
+                                               DevelopmentTeam = V63Z98ZJ88;
+                                               SystemCapabilities = {
+                                                       com.apple.BackgroundModes = {
+                                                               enabled = 1;
+                                                       };
+                                               };
+                                       };
+                               };
+                       };
+                       buildConfigurationList = 7F7EF3E91B835DE4008C8749 /* Build configuration list for PBXProject "SensorTag2-Example" */;
+                       compatibilityVersion = "Xcode 3.2";
+                       developmentRegion = English;
+                       hasScannedForEncodings = 0;
+                       knownRegions = (
+                               en,
+                               Base,
+                       );
+                       mainGroup = 7F7EF3E51B835DE4008C8749;
+                       productRefGroup = 7F7EF3EF1B835DE4008C8749 /* Products */;
+                       projectDirPath = "";
+                       projectReferences = (
+                               {
+                                       ProductGroup = 7F5E74BD1B8CB71C00E378EA /* Products */;
+                                       ProjectRef = 7F5E74BC1B8CB71C00E378EA /* MQTTKit.xcodeproj */;
+                               },
+                       );
+                       projectRoot = "";
+                       targets = (
+                               7F7EF3ED1B835DE4008C8749 /* SensorTag2-Example */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+               7F5E74C21B8CB71C00E378EA /* libMQTTKit.a */ = {
+                       isa = PBXReferenceProxy;
+                       fileType = archive.ar;
+                       path = libMQTTKit.a;
+                       remoteRef = 7F5E74C11B8CB71C00E378EA /* PBXContainerItemProxy */;
+                       sourceTree = BUILT_PRODUCTS_DIR;
+               };
+               7F5E74C41B8CB71C00E378EA /* MQTTKitTests.xctest */ = {
+                       isa = PBXReferenceProxy;
+                       fileType = wrapper.cfbundle;
+                       path = MQTTKitTests.xctest;
+                       remoteRef = 7F5E74C31B8CB71C00E378EA /* PBXContainerItemProxy */;
+                       sourceTree = BUILT_PRODUCTS_DIR;
+               };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+               7F7EF3EC1B835DE4008C8749 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               7F7EF3FD1B835DE4008C8749 /* Main.storyboard in Resources */,
+                               7F7EF4021B835DE4008C8749 /* LaunchScreen.xib in Resources */,
+                               7F7EF3FF1B835DE4008C8749 /* Images.xcassets in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+               7F7EF3EA1B835DE4008C8749 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               7F7EF4311B84B72F008C8749 /* oneValueCell.m in Sources */,
+                               7F7EF3FA1B835DE4008C8749 /* ViewController.m in Sources */,
+                               7F7EF42A1B84797A008C8749 /* DeviceSelectTableViewController.m in Sources */,
+                               7F7EF42D1B84A2CD008C8749 /* displayTile.m in Sources */,
+                               7FFBBF3E1B8B68080080F16C /* sensorTagLightService.m in Sources */,
+                               7F7EBC511B8B493D004DF353 /* sensorTagMovementService.m in Sources */,
+                               7F7EBC4B1B8B39D5004DF353 /* sensorTagAirPressureService.m in Sources */,
+                               7F5E74BB1B8CB5E000E378EA /* MQTTIBMQuickStart.m in Sources */,
+                               7F77A0BD1B8C70C7004AD5E4 /* deviceInformationService.m in Sources */,
+                               7F7EBC4E1B8B3F85004DF353 /* sensorTagHumidityService.m in Sources */,
+                               7F7EF4261B837DAA008C8749 /* sensorFunctions.m in Sources */,
+                               7F77A0C11B8C85A8004AD5E4 /* siOleAlertView.m in Sources */,
+                               7F7EF4191B83609B008C8749 /* bluetoothHandler.m in Sources */,
+                               7F7EF4201B836D90008C8749 /* sensorTagAmbientTemperatureService.m in Sources */,
+                               7F7EF3F71B835DE4008C8749 /* AppDelegate.m in Sources */,
+                               7F7EF41C1B8361FA008C8749 /* bleGenericService.m in Sources */,
+                               7F7EF3F41B835DE4008C8749 /* main.m in Sources */,
+                               7F77A0C81B8C9E84004AD5E4 /* sensorTagKeyService.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+               7F5E74C61B8CB72400E378EA /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       name = MQTTKit;
+                       targetProxy = 7F5E74C51B8CB72400E378EA /* PBXContainerItemProxy */;
+               };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+               7F7EF3FB1B835DE4008C8749 /* Main.storyboard */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               7F7EF3FC1B835DE4008C8749 /* Base */,
+                       );
+                       name = Main.storyboard;
+                       sourceTree = "<group>";
+               };
+               7F7EF4001B835DE4008C8749 /* LaunchScreen.xib */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               7F7EF4011B835DE4008C8749 /* Base */,
+                       );
+                       name = LaunchScreen.xib;
+                       sourceTree = "<group>";
+               };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+               7F7EF40F1B835DE4008C8749 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+                               CLANG_CXX_LIBRARY = "libc++";
+                               CLANG_ENABLE_MODULES = YES;
+                               CLANG_ENABLE_OBJC_ARC = YES;
+                               CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+                               CLANG_WARN_EMPTY_BODY = YES;
+                               CLANG_WARN_ENUM_CONVERSION = YES;
+                               CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+                               CLANG_WARN_UNREACHABLE_CODE = YES;
+                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+                               COPY_PHASE_STRIP = NO;
+                               DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               ENABLE_STRICT_OBJC_MSGSEND = YES;
+                               ENABLE_TESTABILITY = YES;
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_NO_COMMON_BLOCKS = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               GCC_PREPROCESSOR_DEFINITIONS = (
+                                       "DEBUG=1",
+                                       "$(inherited)",
+                               );
+                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+                               GCC_WARN_UNDECLARED_SELECTOR = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+                               GCC_WARN_UNUSED_FUNCTION = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               HEADER_SEARCH_PATHS = "MQTT/**";
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+                               MTL_ENABLE_DEBUG_INFO = YES;
+                               ONLY_ACTIVE_ARCH = YES;
+                               SDKROOT = iphoneos;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                       };
+                       name = Debug;
+               };
+               7F7EF4101B835DE4008C8749 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+                               CLANG_CXX_LIBRARY = "libc++";
+                               CLANG_ENABLE_MODULES = YES;
+                               CLANG_ENABLE_OBJC_ARC = YES;
+                               CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+                               CLANG_WARN_EMPTY_BODY = YES;
+                               CLANG_WARN_ENUM_CONVERSION = YES;
+                               CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+                               CLANG_WARN_UNREACHABLE_CODE = YES;
+                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+                               COPY_PHASE_STRIP = NO;
+                               DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               ENABLE_NS_ASSERTIONS = NO;
+                               ENABLE_STRICT_OBJC_MSGSEND = YES;
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_NO_COMMON_BLOCKS = YES;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+                               GCC_WARN_UNDECLARED_SELECTOR = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+                               GCC_WARN_UNUSED_FUNCTION = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               HEADER_SEARCH_PATHS = "MQTT/**";
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+                               MTL_ENABLE_DEBUG_INFO = NO;
+                               SDKROOT = iphoneos;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               VALIDATE_PRODUCT = YES;
+                       };
+                       name = Release;
+               };
+               7F7EF4121B835DE4008C8749 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               CODE_SIGN_IDENTITY = "iPhone Developer";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+                               INFOPLIST_FILE = "SensorTag2-Example/Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 8.4;
+                               LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+                               PRODUCT_BUNDLE_IDENTIFIER = "com.ti.$(PRODUCT_NAME:rfc1034identifier)";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               PROVISIONING_PROFILE = "";
+                       };
+                       name = Debug;
+               };
+               7F7EF4131B835DE4008C8749 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               CODE_SIGN_IDENTITY = "iPhone Developer";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+                               INFOPLIST_FILE = "SensorTag2-Example/Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 8.4;
+                               LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+                               PRODUCT_BUNDLE_IDENTIFIER = "com.ti.$(PRODUCT_NAME:rfc1034identifier)";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               PROVISIONING_PROFILE = "";
+                       };
+                       name = Release;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               7F7EF3E91B835DE4008C8749 /* Build configuration list for PBXProject "SensorTag2-Example" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               7F7EF40F1B835DE4008C8749 /* Debug */,
+                               7F7EF4101B835DE4008C8749 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               7F7EF4111B835DE4008C8749 /* Build configuration list for PBXNativeTarget "SensorTag2-Example" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               7F7EF4121B835DE4008C8749 /* Debug */,
+                               7F7EF4131B835DE4008C8749 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 7F7EF3E61B835DE4008C8749 /* Project object */;
+}
diff --git a/SensorTag_iOS/SensorTag2-Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SensorTag_iOS/SensorTag2-Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644 (file)
index 0000000..696e23b
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:SensorTag2-Example.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/SensorTag_iOS/SensorTag2-Example/AppDelegate.h b/SensorTag_iOS/SensorTag2-Example/AppDelegate.h
new file mode 100644 (file)
index 0000000..1852d73
--- /dev/null
@@ -0,0 +1,67 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Application delegate for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           AppDelegate.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <UIKit/UIKit.h>
+
+///@brief The AppDelegate class is the application delegate for the SensorTag2-Example iOS App
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+
+@end
+
diff --git a/SensorTag_iOS/SensorTag2-Example/AppDelegate.m b/SensorTag_iOS/SensorTag2-Example/AppDelegate.m
new file mode 100644 (file)
index 0000000..a82b8ed
--- /dev/null
@@ -0,0 +1,93 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Application delegate for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           AppDelegate.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "AppDelegate.h"
+
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    // Override point for customization after application launch.
+    return YES;
+}
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+}
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/Base.lproj/LaunchScreen.xib b/SensorTag_iOS/SensorTag2-Example/Base.lproj/LaunchScreen.xib
new file mode 100644 (file)
index 0000000..035743e
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="8121.20" systemVersion="14F6a" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8101.16"/>
+        <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="  Copyright (c) 2015 Texas Instruments. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
+                    <rect key="frame" x="20" y="403" width="441" height="21"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SensorTag2-Example" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
+                    <rect key="frame" x="20" y="140" width="441" height="43"/>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
+                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <color key="backgroundColor" red="0.34267900620000002" green="0.34719366779999999" blue="0.3388671875" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
+                <constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
+                <constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="56" id="Kzo-t9-V3l"/>
+                <constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
+                <constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
+                <constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
+            </constraints>
+            <nil key="simulatedStatusBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="548" y="455"/>
+        </view>
+    </objects>
+</document>
diff --git a/SensorTag_iOS/SensorTag2-Example/Base.lproj/Main.storyboard b/SensorTag_iOS/SensorTag2-Example/Base.lproj/Main.storyboard
new file mode 100644 (file)
index 0000000..334558f
--- /dev/null
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8121.20" systemVersion="14F6a" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8101.16"/>
+        <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="tne-QT-ifu">
+            <objects>
+                <viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
+                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ry3-Su-lNQ">
+                                <rect key="frame" x="252" y="550" width="97" height="30"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="30" id="Yi2-nG-I2m"/>
+                                    <constraint firstAttribute="width" constant="97" id="p8s-Un-5ik"/>
+                                </constraints>
+                                <state key="normal" title="Select Device">
+                                    <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                </state>
+                                <connections>
+                                    <action selector="selectDeviceButtonTouched:" destination="BYZ-38-t0r" eventType="touchUpInside" id="Mac-af-Ao9"/>
+                                </connections>
+                            </button>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SensorTag 2 Example Application" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rCz-h5-T6m">
+                                <rect key="frame" x="112" y="20" width="377" height="36"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="377" id="0XU-By-KFd">
+                                        <variation key="widthClass=compact" constant="374"/>
+                                    </constraint>
+                                    <constraint firstAttribute="height" constant="36" id="Blu-Ah-vkA"/>
+                                    <constraint firstAttribute="width" constant="306" id="EFc-mK-PaL"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="boldSystem" pointSize="23"/>
+                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                                <variation key="default">
+                                    <mask key="constraints">
+                                        <exclude reference="EFc-mK-PaL"/>
+                                    </mask>
+                                </variation>
+                            </label>
+                            <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="51w-C5-3pd">
+                                <rect key="frame" x="483" y="550" width="97" height="30"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="30" id="DN2-sK-a4V"/>
+                                    <constraint firstAttribute="width" constant="97" id="Jgb-Yd-1RJ"/>
+                                    <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="97" id="aw2-4b-Nb3"/>
+                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="30" id="xHU-E0-JQP"/>
+                                </constraints>
+                                <state key="normal" title="Cloud Link">
+                                    <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                </state>
+                                <connections>
+                                    <action selector="cloudLinkButtonTouched:" destination="BYZ-38-t0r" eventType="touchUpInside" id="P7e-Sh-cn5"/>
+                                </connections>
+                            </button>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="Ry3-Su-lNQ" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="5y3-3p-a4U"/>
+                            <constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="51w-C5-3pd" secondAttribute="bottom" constant="20" id="KUD-Kf-7Yv"/>
+                            <constraint firstItem="rCz-h5-T6m" firstAttribute="centerY" secondItem="8bC-Xf-vdC" secondAttribute="centerY" id="Kvn-Vr-M9j"/>
+                            <constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="Ry3-Su-lNQ" secondAttribute="bottom" constant="20" id="Q88-Z8-5Gw"/>
+                            <constraint firstItem="rCz-h5-T6m" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" id="Y3Q-sb-VUL"/>
+                            <constraint firstItem="51w-C5-3pd" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" id="ZNY-aL-bJ3"/>
+                            <constraint firstItem="rCz-h5-T6m" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="qiH-Xc-khA"/>
+                        </constraints>
+                        <variation key="default">
+                            <mask key="constraints">
+                                <exclude reference="Kvn-Vr-M9j"/>
+                            </mask>
+                        </variation>
+                    </view>
+                    <connections>
+                        <outlet property="cloudLinkButton" destination="51w-C5-3pd" id="HMU-xI-dnC"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="384" y="461"/>
+        </scene>
+    </scenes>
+</document>
diff --git a/SensorTag_iOS/SensorTag2-Example/DeviceSelectTableViewController.h b/SensorTag_iOS/SensorTag2-Example/DeviceSelectTableViewController.h
new file mode 100644 (file)
index 0000000..b23f56f
--- /dev/null
@@ -0,0 +1,78 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Simple Bluetooth Device Selector SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           DeviceSelectTableViewController.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <UIKit/UIKit.h>
+#import <CoreBluetooth/CoreBluetooth.h>
+
+///@brief The deviceSelectTableViewControllerDelegate class is a simple Bluetooth Smart device scanner that presents a list of devices
+/// detected by iOS and lets the user select one of these.
+
+@protocol deviceSelectTableViewControllerDelegate <NSObject>
+
+-(void) newDeviceWasSelected:(NSUUID *)identifier;
+
+@end
+
+@interface DeviceSelectTableViewController : UITableViewController <CBCentralManagerDelegate>
+@property id<deviceSelectTableViewControllerDelegate> devSelectDelegate;
+@property CBCentralManager *m;
+@property CBPeripheral *p;
+@property NSMutableArray *discoveredDevices;
+@property NSUUID *currentlySelectedDeviceIdentifier;
+
+-(void) backButtonPressed;
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/DeviceSelectTableViewController.m b/SensorTag_iOS/SensorTag2-Example/DeviceSelectTableViewController.m
new file mode 100644 (file)
index 0000000..341e73e
--- /dev/null
@@ -0,0 +1,168 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Simple Bluetooth Device Selector SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           DeviceSelectTableViewController.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "DeviceSelectTableViewController.h"
+
+@interface DeviceSelectTableViewController ()
+
+@end
+
+@implementation DeviceSelectTableViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    
+    // Uncomment the following line to preserve selection between presentations.
+    // self.clearsSelectionOnViewWillAppear = NO;
+    
+    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
+    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
+    NSUserDefaults *d = [NSUserDefaults standardUserDefaults];
+    NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"F0005555-0451-4000-B000-000000000000"];
+    NSDictionary *standard = [NSDictionary dictionaryWithObjectsAndKeys:uuid.UUIDString,@"selectedDevice", nil];
+    [d registerDefaults:standard];
+    [d synchronize];
+    self.currentlySelectedDeviceIdentifier = [[NSUUID alloc] initWithUUIDString:[d objectForKey:@"selectedDevice"]];
+    NSLog(@"Loaded selectedDevice : %@",self.currentlySelectedDeviceIdentifier.UUIDString);
+
+    self.title = @"Please select BLE device";
+}
+
+
+-(void) viewWillAppear:(BOOL)animated {
+    self.m = [[CBCentralManager alloc]initWithDelegate:self queue:nil];
+    [self.navigationController setNavigationBarHidden:NO];
+    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed)];
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+#pragma mark - Table view data source
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    // Return the number of sections.
+    return 1;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    // Return the number of rows in the section.
+    return self.discoveredDevices.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:[NSString stringWithFormat:@"%ld.%ld",(long)indexPath.row,(long)indexPath.section]];
+    CBPeripheral *p = [self.discoveredDevices objectAtIndex:indexPath.row];
+    
+    cell.textLabel.text = p.name;
+    cell.detailTextLabel.text = p.identifier.UUIDString;
+    if ([p.identifier isEqual:self.currentlySelectedDeviceIdentifier]) {
+        cell.accessoryType = UITableViewCellAccessoryCheckmark;
+    }
+    
+    // Configure the cell...
+    
+    return cell;
+}
+
+-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+    CBPeripheral *p = [self.discoveredDevices objectAtIndex:indexPath.row];
+    self.currentlySelectedDeviceIdentifier = p.identifier;
+    
+    NSUserDefaults *d = [NSUserDefaults standardUserDefaults];
+    [d setObject:self.currentlySelectedDeviceIdentifier.UUIDString forKey:@"selectedDevice"];
+    [d synchronize];
+    [self.devSelectDelegate newDeviceWasSelected:self.currentlySelectedDeviceIdentifier];
+    
+    [self.tableView reloadData];
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+-(NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
+    return [NSString stringWithFormat: @"Discovered devices : %lu",(unsigned long)self.discoveredDevices.count];
+}
+
+
+-(void) centralManagerDidUpdateState:(CBCentralManager *)central {
+    if (central.state == CBCentralManagerStatePoweredOn) {
+        [central scanForPeripheralsWithServices:nil options:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber  numberWithBool:YES], CBCentralManagerScanOptionAllowDuplicatesKey, nil]];
+    }
+}
+
+
+-(void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
+    
+    if (!self.discoveredDevices) {
+        self.discoveredDevices = [[NSMutableArray alloc]init];
+    }
+    
+    for (CBPeripheral *p in self.discoveredDevices) {
+        if ([p.identifier isEqual:peripheral.identifier]) return;
+    }
+    [self.discoveredDevices addObject:peripheral];
+    [self.tableView reloadData];
+    
+}
+
+-(void) backButtonPressed {
+    [self.navigationController dismissViewControllerAnimated:YES completion:nil];
+}
+
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/Contents.json b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644 (file)
index 0000000..d9f9077
--- /dev/null
@@ -0,0 +1,80 @@
+{
+  "images" : [
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "icon_58x58.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "icon_87x87.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "icon_80x80.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "icon_120x120.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "icon_120x120-1.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "icon_180x180.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "ipad",
+      "filename" : "icon_29x29.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "ipad",
+      "filename" : "icon_58x58-1.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "ipad",
+      "filename" : "icon_40x40.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "ipad",
+      "filename" : "icon_80x80-1.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "76x76",
+      "idiom" : "ipad",
+      "filename" : "icon_76x76.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "76x76",
+      "idiom" : "ipad",
+      "filename" : "icon_152x152.png",
+      "scale" : "2x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_120x120-1.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_120x120-1.png
new file mode 100644 (file)
index 0000000..e359d0d
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_120x120-1.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_120x120.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_120x120.png
new file mode 100644 (file)
index 0000000..e359d0d
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_120x120.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_152x152.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_152x152.png
new file mode 100644 (file)
index 0000000..e6be667
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_152x152.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_180x180.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_180x180.png
new file mode 100644 (file)
index 0000000..a3c9343
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_180x180.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_29x29.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_29x29.png
new file mode 100644 (file)
index 0000000..bf50182
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_29x29.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_40x40.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_40x40.png
new file mode 100644 (file)
index 0000000..1df6c6d
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_40x40.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_58x58-1.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_58x58-1.png
new file mode 100644 (file)
index 0000000..4b4b9cc
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_58x58-1.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_58x58.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_58x58.png
new file mode 100644 (file)
index 0000000..4b4b9cc
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_58x58.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_76x76.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_76x76.png
new file mode 100644 (file)
index 0000000..e4a57bc
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_76x76.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_80x80-1.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_80x80-1.png
new file mode 100644 (file)
index 0000000..db63dac
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_80x80-1.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_80x80.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_80x80.png
new file mode 100644 (file)
index 0000000..db63dac
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_80x80.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_87x87.png b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_87x87.png
new file mode 100644 (file)
index 0000000..c35e35c
Binary files /dev/null and b/SensorTag_iOS/SensorTag2-Example/Images.xcassets/AppIcon.appiconset/icon_87x87.png differ
diff --git a/SensorTag_iOS/SensorTag2-Example/Info.plist b/SensorTag_iOS/SensorTag2-Example/Info.plist
new file mode 100644 (file)
index 0000000..5be5571
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>en</string>
+       <key>CFBundleExecutable</key>
+       <string>$(EXECUTABLE_NAME)</string>
+       <key>CFBundleIdentifier</key>
+       <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>$(PRODUCT_NAME)</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleShortVersionString</key>
+       <string>1.0</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1</string>
+       <key>LSRequiresIPhoneOS</key>
+       <true/>
+       <key>UIBackgroundModes</key>
+       <array>
+               <string>bluetooth-central</string>
+       </array>
+       <key>UILaunchStoryboardName</key>
+       <string>LaunchScreen</string>
+       <key>UIMainStoryboardFile</key>
+       <string>Main</string>
+       <key>UIRequiredDeviceCapabilities</key>
+       <array>
+               <string>armv7</string>
+       </array>
+       <key>UISupportedInterfaceOrientations</key>
+       <array>
+               <string>UIInterfaceOrientationPortrait</string>
+               <string>UIInterfaceOrientationLandscapeLeft</string>
+               <string>UIInterfaceOrientationLandscapeRight</string>
+       </array>
+       <key>UISupportedInterfaceOrientations~ipad</key>
+       <array>
+               <string>UIInterfaceOrientationPortrait</string>
+               <string>UIInterfaceOrientationPortraitUpsideDown</string>
+               <string>UIInterfaceOrientationLandscapeLeft</string>
+               <string>UIInterfaceOrientationLandscapeRight</string>
+       </array>
+</dict>
+</plist>
diff --git a/SensorTag_iOS/SensorTag2-Example/MQTTIBMQuickStart.h b/SensorTag_iOS/SensorTag2-Example/MQTTIBMQuickStart.h
new file mode 100644 (file)
index 0000000..655cbf2
--- /dev/null
@@ -0,0 +1,85 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Communication layer from app to MQTTKit library SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           MQTTIBMQuickStart.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+
+
+#import <Foundation/Foundation.h>
+#import <MQTTKit.h>
+
+
+#define START_STRING @"{\n \"d\":{\n"
+#define VARIABLE_STRING(a,b) [NSString stringWithFormat:@"\"%@\":\"%@\"",a,b]
+#define STOP_STRING @"\n}\n}"
+
+
+///@brief The MQTTIBMQuickStart class handles all of the MQTT communication with the IBM IoT Quickstart server
+///It is timer driven and will post once a second in its normal configuration.
+
+@interface MQTTIBMQuickStart : NSObject
+
+@property MQTTClient *client;
+@property BOOL isConnected;
+
+
+-(void) connect:(NSString *) clientId name:(NSString *)name;
++ (id)sharedInstance;
+-(void)publishSensorStrings:(NSString *)string ;
+-(void)publishSensor: (NSString *)name value:(NSNumber *)value;
++ (NSString *)cloudIdentifierFromUUID:(NSUUID *)ident;
++(NSString *) encodeJSONString:(NSString *)name value:(NSString*)value;
+-(void) disconnect;
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/MQTTIBMQuickStart.m b/SensorTag_iOS/SensorTag2-Example/MQTTIBMQuickStart.m
new file mode 100644 (file)
index 0000000..ff35dbd
--- /dev/null
@@ -0,0 +1,168 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Communication layer from app to MQTTKit library SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           MQTTIBMQuickStart.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+
+
+#import "MQTTIBMQuickStart.h"
+
+@implementation MQTTIBMQuickStart
+
+///Get MQTT Singleton
+///@return Singleton Instance
++ (id)sharedInstance
+{
+    static dispatch_once_t p = 0;
+    __strong static id _sharedObject = nil;
+    dispatch_once(&p, ^{
+        _sharedObject = [[self alloc] init];
+    });
+    
+    return _sharedObject;
+}
+///Initializer
+///@return New instance
+-(instancetype) init {
+    self = [super init];
+    if (self) {
+    }
+    return self;
+}
+///Connect to MQTT broker
+///@param clientId - String containing some type of client id, in this case we use the UUID from iOS
+///@param name - Name that will be sent as the myName tag
+-(void) connect:(NSString *) clientId name:(NSString *)name {
+    NSString *mqttClientID = [NSString stringWithFormat:@"d:quickstart:\"SensorTag2-Example-app\":%@",clientId];
+    self.client = [[MQTTClient alloc]initWithClientId:mqttClientID];
+    [self.client connectToHost:@"quickstart.messaging.internetofthings.ibmcloud.com" completionHandler:^(MQTTConnectionReturnCode er) {
+        NSLog(@"MQTTClient connectToHost : %lu",(unsigned long)er);
+        if (er ==  ConnectionAccepted) {
+            self.isConnected = YES;
+            NSLog(@"MQTT: Publishing");
+            NSString *publish = [NSString stringWithFormat:@"%@%@%@",START_STRING,VARIABLE_STRING(@"myName", name),STOP_STRING];
+            //NSLog(@"Publishing : %@",publish);
+            [self.client publishString:publish
+                               toTopic:@"iot-2/evt/status/fmt/json"
+                               withQos: AtMostOnce
+                                retain:NO
+                     completionHandler:^(int mid) {
+                
+            }];
+        }
+    }];
+}
+///Disconnect from MQTT broker
+-(void) disconnect {
+    NSLog(@"MQTTIBMQuickStart: Disconnect");
+    [self.client disconnectWithCompletionHandler:nil];
+    self.isConnected = NO;
+}
+///Encode a single JSON string containing a "name" "value" pair
+///@param name - Name of the resource in the cloud
+///@param value - Value of the resource
+///@return Encoded JSON string
++(NSString *) encodeJSONString:(NSString *)name value:(NSString *)value {
+    return VARIABLE_STRING(name, value);
+}
+///Publishes all of the sensors in one go
+///@param string - JSON encoded strings of single "name" "value" pairs
+-(void)publishSensorStrings:(NSString *)string {
+    NSString *publish = [NSString stringWithFormat:@"%@%@%@",START_STRING,string,STOP_STRING];
+    if (self.client.connected) {
+    //NSLog(@"Publishing : %@",publish);
+    [self.client publishString:publish
+                       toTopic:@"iot-2/evt/status/fmt/json"
+                       withQos: AtMostOnce
+                        retain:NO
+             completionHandler:^(int mid) {
+                 
+             }];
+    }
+    else {
+        NSLog(@"Not connected anymore, please reconnect !");
+        self.isConnected = NO;
+    }
+}
+///Publishes single sensor to cloud
+///@param name - Resource name used in the cloud
+///@param value - Value of the resource to post
+-(void)publishSensor: (NSString *)name value:(NSNumber *)value {
+    NSString *publish = [NSString stringWithFormat:@"%@%@%@",START_STRING,VARIABLE_STRING(name, [value stringValue]),STOP_STRING];
+    if (self.client.connected) {
+    //NSLog(@"Publishing : %@",publish);
+        [self.client publishString:publish
+                           toTopic:@"iot-2/evt/status/fmt/json"
+                           withQos: AtMostOnce
+                            retain:NO
+                 completionHandler:^(int mid) {
+                 
+                 }];
+    }
+    else {
+        NSLog(@"Not connected anymore, please reconnect !");
+        self.isConnected = NO;
+    }
+}
+///Encodes an NSUUID to NSString for use as device id
+///@param ident - NSUUID to encode
+///@return String with encoding result
++ (NSString *)cloudIdentifierFromUUID:(NSUUID *)ident {
+    unsigned char uuidBytes[16];
+    [ident getUUIDBytes:uuidBytes];
+    return [NSString stringWithFormat:@"%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx",uuidBytes[0],uuidBytes[1],uuidBytes[2],uuidBytes[3],uuidBytes[4],uuidBytes[5]];
+}
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/ViewController.h b/SensorTag_iOS/SensorTag2-Example/ViewController.h
new file mode 100644 (file)
index 0000000..3218345
--- /dev/null
@@ -0,0 +1,99 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Main ViewController for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           ViewController.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <UIKit/UIKit.h>
+#import "DeviceSelectTableViewController.h"
+#import "bleGenericService.h"
+#import "siOleAlertView.h"
+#import "MQTTIBMQuickStart.h"
+
+///@brief The ViewController class is the main class for the GUI, it also handles bluetooth services scan check and also
+///delivery of data to the services it has under it.
+@interface ViewController : UIViewController < bluetoothHandlerDelegate,deviceSelectTableViewControllerDelegate>
+
+@property DeviceSelectTableViewController *deviceSelector;
+
+@property NSMutableArray *services;
+@property NSMutableArray *displayTiles;
+@property bluetoothHandler *handler;
+@property CAGradientLayer *gradient;
+@property siOleAlertView *aV;
+
+@property MQTTIBMQuickStart *cloudHandle;
+@property NSString *MQTTStringLive;
+@property NSString *MQTTStringTX;
+@property NSTimer *MQTTTimer;
+@property UIActivityViewController *aVC;
+@property (weak, nonatomic) IBOutlet UIButton *cloudLinkButton;
+
+- (IBAction)selectDeviceButtonTouched:(id)sender;
+- (IBAction)cloudLinkButtonTouched:(id)sender;
+@end
+
+
+///@mainpage SensorTag2-Example
+///A simplified application example for an iOS application that handles sensor input from a
+/// \b Texas \b Instruments \b Inc. \n SensorTag2.0 Bluetooth Smart device.
+/// It lets the developer have a simple project to start out from when developing applications for the
+/// SensorTag 2.0\n\n
+/// \b Screenshots :\n
+///   \htmlonly <a href="../Main_Screen_empty.PNG"><img src="../Main_Screen_empty.PNG" width=300px></img></a> <a href="../Device_Selector.PNG"><img src="../Device_Selector.PNG" width=300px></img></img></a> <a href="../Main_Screen_Full.PNG"><img src="../Main_Screen_Full.PNG" width=300px></img></a> <a href="../Cloud_Link_Sharing.PNG"><img src="../Cloud_Link_Sharing.PNG" width=300px></img></a> <a href="../Cloud_Sourcing.PNG"><img src="../Cloud_Sourcing.PNG" width=300px></img></a><br> \endhtmlonly
+///@author Ole Andreas Torvmark (o.a.torvmark@ti.com, torvmark@stalliance.no)
+
+
+
+
+
diff --git a/SensorTag_iOS/SensorTag2-Example/ViewController.m b/SensorTag_iOS/SensorTag2-Example/ViewController.m
new file mode 100644 (file)
index 0000000..f85d04e
--- /dev/null
@@ -0,0 +1,287 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Main ViewController for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           ViewController.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "ViewController.h"
+#import "siOleAlertView.h"
+
+#import "sensorTagAmbientTemperatureService.h"
+#import "sensorTagAirPressureService.h"
+#import "sensorTagHumidityService.h"
+#import "sensorTagMovementService.h"
+#import "sensorTagLightService.h"
+#import "sensorTagKeyService.h"
+#import "deviceInformationService.h"
+
+#import "MQTTIBMQuickStart.h"
+
+
+@interface ViewController ()
+
+@end
+
+@implementation ViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view, typically from a nib.
+    
+    self.handler = [bluetoothHandler sharedInstance];
+    self.cloudHandle = [MQTTIBMQuickStart sharedInstance];
+    self.handler.delegate = self;
+    self.gradient = [CAGradientLayer layer];
+    self.gradient.frame = self.view.bounds;
+    self.gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:0.8f green:0.8f blue:0.8f alpha:1.0f] CGColor], (id)[[UIColor colorWithRed:0.5f green:0.5f blue:0.5f alpha:1.0f] CGColor], nil];
+    [self.view.layer insertSublayer:self.gradient atIndex:0];
+    self.displayTiles = [[NSMutableArray alloc]init];
+    
+}
+
+-(UIStatusBarStyle) preferredStatusBarStyle {
+    return UIStatusBarStyleDefault;
+}
+
+
+-(void) viewWillLayoutSubviews {
+    self.gradient.frame = self.view.bounds;
+    for (displayTile *t in self.displayTiles) {
+        [t setFrame:self.view.frame];
+        t.title.text = t.title.text;
+    }
+
+}
+
+-(void) viewDidAppear:(BOOL)animated {
+    
+}
+
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+
+-(void) deviceReady:(BOOL)ready peripheral:(CBPeripheral *)peripheral {
+    if (ready) {
+        if (self.aV.superview) {
+            [self.aV dismissMessage];
+        }
+        for (int ii = 0; ii < self.displayTiles.count; ii++) {
+            displayTile *t = [self.displayTiles objectAtIndex:ii];
+            [t removeFromSuperview];
+        }
+        self.services = [[NSMutableArray alloc] init];
+        for (CBService *s in peripheral.services) {
+            
+            if ([sensorTagAmbientTemperatureService isCorrectService:s]) {
+                sensorTagAmbientTemperatureService *serv = [[sensorTagAmbientTemperatureService alloc] initWithService:s];
+                [self.services addObject:serv];
+                [serv configureService];
+                displayTile *t = [serv getViewForPresentation];
+                [t setFrame:self.view.frame];
+                t.title.text = t.title.text;
+                [self.displayTiles addObject:t];
+                [self.view addSubview:t];
+            }
+            if ([sensorTagAirPressureService isCorrectService:s]) {
+                sensorTagAirPressureService *serv = [[sensorTagAirPressureService alloc] initWithService:s];
+                [self.services addObject:serv];
+                [serv configureService];
+                displayTile *t = [serv getViewForPresentation];
+                [t setFrame:self.view.frame];
+                t.title.text = t.title.text;
+                [self.displayTiles addObject:t];
+                [self.view addSubview:t];
+            }
+            if ([sensorTagHumidityService isCorrectService:s]) {
+                sensorTagHumidityService *serv = [[sensorTagHumidityService alloc] initWithService:s];
+                [self.services addObject:serv];
+                [serv configureService];
+                displayTile *t = [serv getViewForPresentation];
+                [t setFrame:self.view.frame];
+                t.title.text = t.title.text;
+                [self.displayTiles addObject:t];
+                [self.view addSubview:t];
+            }
+            if ([sensorTagMovementService isCorrectService:s]) {
+                sensorTagMovementService *serv = [[sensorTagMovementService alloc] initWithService:s];
+                [self.services addObject:serv];
+                [serv configureService];
+                displayTile *t = [serv getViewForPresentation];
+                [t setFrame:self.view.frame];
+                t.title.text = t.title.text;
+                [self.displayTiles addObject:t];
+                [self.view addSubview:t];
+            }
+            if ([sensorTagLightService isCorrectService:s]) {
+                sensorTagLightService *serv = [[sensorTagLightService alloc] initWithService:s];
+                [self.services addObject:serv];
+                [serv configureService];
+                displayTile *t = [serv getViewForPresentation];
+                [t setFrame:self.view.frame];
+                t.title.text = t.title.text;
+                [self.displayTiles addObject:t];
+                [self.view addSubview:t];
+            }
+            if ([deviceInformationService isCorrectService:s]) {
+                deviceInformationService *serv = [[deviceInformationService alloc] initWithService:s];
+                [self.services addObject:serv];
+                [serv configureService];
+                displayTile *t = [serv getViewForPresentation];
+                [t setFrame:self.view.frame];
+                t.title.text = t.title.text;
+                [self.displayTiles addObject:t];
+                [self.view addSubview:t];
+            }
+            if ([sensorTagKeyService isCorrectService:s]) {
+                sensorTagKeyService *serv = [[sensorTagKeyService alloc] initWithService:s];
+                [self.services addObject:serv];
+                [serv configureService];
+                displayTile *t = [serv getViewForPresentation];
+                [t setFrame:self.view.frame];
+                t.title.text = t.title.text;
+                [self.displayTiles addObject:t];
+                [self.view addSubview:t];
+            }
+        }
+    }
+    else {
+        if (self.aV) [self.aV dismissMessage];
+        self.aV = [[siOleAlertView alloc] initInView:self.view];
+        [self.aV blinkMessage:@"Disconnected !"];
+    }
+}
+
+-(void) didReadCharacteristic:(CBCharacteristic *)characteristic {
+    for (int ii = 0; ii < self.services.count; ii++) {
+        bleGenericService *s = [self.services objectAtIndex:ii];
+        [s dataUpdate:characteristic];
+    }
+}
+-(void) didGetNotificaitonOnCharacteristic:(CBCharacteristic *)characteristic {
+    self.MQTTStringLive = [[NSString alloc] init];
+    for (int ii = 0; ii < self.services.count; ii++) {
+        bleGenericService *s = [self.services objectAtIndex:ii];
+        [s dataUpdate:characteristic];
+        NSArray *arr = [s getCloudData];
+        if (arr != nil) {
+            for (NSDictionary *dict in arr) {
+                self.MQTTStringLive = [self.MQTTStringLive stringByAppendingString:[NSString stringWithFormat:@"%@,\n",[MQTTIBMQuickStart encodeJSONString:[dict objectForKey:@"name"] value:[dict objectForKey:@"value"]]]];
+            }
+        }
+    }
+    self.MQTTStringTX = self.MQTTStringLive;
+}
+-(void) didWriteCharacteristic:(CBCharacteristic *)characteristic error:(NSError *) error {
+    for (int ii = 0; ii < self.services.count; ii++) {
+        bleGenericService *s = [self.services objectAtIndex:ii];
+        [s wroteValue:characteristic error:error];
+    }
+}
+
+
+- (IBAction)selectDeviceButtonTouched:(id)sender {
+    [self.aV dismissMessage];
+    [self.handler disconnectCurrentDevice];
+    if (!self.deviceSelector) {
+        self.deviceSelector = [[DeviceSelectTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
+        self.deviceSelector.devSelectDelegate = self;
+    }
+    [self showViewController:self.deviceSelector sender:nil];
+}
+
+- (IBAction)cloudLinkButtonTouched:(id)sender {
+    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://quickstart.internetofthings.ibmcloud.com/#/device/%@",[MQTTIBMQuickStart cloudIdentifierFromUUID:self.handler.p.identifier]]];
+    self.aVC = [[UIActivityViewController alloc]initWithActivityItems:@[url] applicationActivities:nil];
+    self.aVC.popoverPresentationController.sourceView = self.cloudLinkButton;
+    [self presentViewController:self.aVC animated:YES completion:nil];
+
+}
+
+
+
+-(void) newDeviceWasSelected:(NSUUID *)identifier {
+    self.handler.connectToIdentifier = identifier;
+    self.handler.shouldReconnect = YES;
+    if (self.MQTTTimer.isValid) {
+        [self.MQTTTimer invalidate];
+    }
+    [self.cloudHandle connect:[MQTTIBMQuickStart cloudIdentifierFromUUID:identifier] name:@"SensorTag2-Example App"];
+    self.MQTTTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(MQTTTimerTick:) userInfo:nil repeats:YES];
+    for (int ii = 0; ii < self.displayTiles.count; ii++) {
+        displayTile *t = [self.displayTiles objectAtIndex:ii];
+        [t removeFromSuperview];
+    }
+    self.displayTiles = [[NSMutableArray alloc] init];
+    self.services = [[NSMutableArray alloc] init];
+    NSLog(@"Cloud identifier for this device : %@",[MQTTIBMQuickStart cloudIdentifierFromUUID:identifier]);
+}
+
+
+#pragma mark -- MQTT routines below
+
+-(void) MQTTTimerTick: (NSTimer *)timer {
+    if (self.MQTTStringTX.length > 2) {
+        self.MQTTStringTX = [self.MQTTStringTX substringToIndex:self.MQTTStringTX.length - 2];
+    }
+    NSLog(@"Posting : %@",self.MQTTStringTX);
+    [self.cloudHandle publishSensorStrings:self.MQTTStringTX];
+    if (self.cloudLinkButton.hidden) self.cloudLinkButton.hidden = NO;
+}
+
+
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/bleGenericService.h b/SensorTag_iOS/SensorTag2-Example/bleGenericService.h
new file mode 100644 (file)
index 0000000..4aa86f9
--- /dev/null
@@ -0,0 +1,134 @@
+/**
+ *  @author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  @brief          Top level Service class for SensorTag2-Example iOS application
+ *  @copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  @file           bleGenericService.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import <CoreBluetooth/CoreBluetooth.h>
+#import "bluetoothHandler.h"
+#import "oneValueCell.h"
+
+typedef struct Point3D_ {
+    CGFloat x,y,z;
+} Point3D;
+
+
+///@brief The bleGenericService class is the top level class for a bluetooth service in SensorTag2-example application.
+/// It contains the basic functionality for enabling and disabling SensorTag services.\n\n
+/// All the SensorTag 2 service abide to the following logic when it comes to characteristics:
+/// - \b Config \b characteristic
+///   - Turns the related sensor on/off and configures modes
+/// - \b Period \b characteristic
+///   - Sets the period in which the sensor value is refreshed and notified to host
+/// - \b Data \b characteristic
+///   - All data from sensor is transferred through the data characteristic
+///
+/// Configuration of a sensor is normally done in this way :
+/// -# Write 0x01 (ON) to config characteristic
+/// -# Write period 0x64 (100 * 10ms = 1000ms) register with desired period (1s for most sensors)
+/// -# Enable notifications on data characteristic
+///
+/// Deconfiguration of a sensor is normally done in this way :
+/// -# Enable notifications on data characteristic
+/// -# Write 0x01 (ON) to config characteristic
+///
+/// \b MQTT \b support
+/// All the services have a getCloudData function, this function retrieves an array with
+/// dictionaries containing "name" and "value" pairs for the current data of the service.
+/// The names used here are sourced from the masterMQTTResourceList.h file.
+/// This value is then sourced to the IBM IoT quickstart cloud function once a second.
+/// 
+
+
+@interface bleGenericService : NSObject
+
+///The service
+@property CBService *service;
+///The configuration characteristic for this service
+@property CBCharacteristic *config;
+///The data characteristic for this service
+@property CBCharacteristic *data;
+///The period characteristic for this service
+@property CBCharacteristic *period;
+///The shared instance bluetooth handler
+@property bluetoothHandler *btHandle;
+///The display tile containing the GUI for this service
+@property displayTile *tile;
+
+///Check if the service is correct for this class
++(BOOL) isCorrectService:(CBService *)service;
+
+
+///Initialize with a fully scanned CBService
+-(instancetype) initWithService:(CBService *)service;
+
+///Return display tile for this service to GUI
+-(displayTile *) getViewForPresentation;
+
+///Returns array with dictionaries containing current cloud data
+-(NSArray *) getCloudData;
+
+///Called by main program when a data update is received from BLE
+-(BOOL) dataUpdate:(CBCharacteristic *)c;
+
+///Called when service is discovered to configure the characteristic
+-(BOOL) configureService;
+
+///Called when service is to deconfigure the characteristic
+-(BOOL) deconfigureService;
+///Called when a value was written to the device
+-(void) wroteValue:(CBCharacteristic *)c error:(NSError *)error;
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/bleGenericService.m b/SensorTag_iOS/SensorTag2-Example/bleGenericService.m
new file mode 100644 (file)
index 0000000..4fd58ec
--- /dev/null
@@ -0,0 +1,135 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Top level Service class for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           bleGenericService.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "bleGenericService.h"
+#import "sensorFunctions.h"
+
+@implementation bleGenericService
+
+
+
+///Check if the service is correct for this class
++(BOOL) isCorrectService:(CBService *)service {
+    return NO;
+}
+
+
+///Initialize with a fully scanned CBService
+-(instancetype) initWithService:(CBService *)service {
+    self = [super init];
+    if (self) {
+        self.service = service;
+        self.tile = [[oneValueCell alloc] initWithOrigin:CGPointMake(0, 0) andSize:CGSizeMake(2, 2)];
+        self.tile.title.text = @"bleGenericService";
+    }
+    return self;
+}
+
+-(displayTile *) getViewForPresentation {
+    
+    return self.tile;
+}
+-(NSArray *) getCloudData {
+    return nil;
+}
+-(BOOL) dataUpdate:(CBCharacteristic *)c {
+    NSLog(@"Data update : %@",c.value);
+    return YES;
+}
+
+-(BOOL) configureService {
+    BOOL ok = YES;
+    if (self.config) {
+        [self.btHandle writeValue:[sensorFunctions dataForEnable:YES forService:self.service.UUID.UUIDString] toCharacteristic:self.config];
+    }
+    else ok = NO;
+    if (self.period) {
+        [self.btHandle writeValue:[sensorFunctions dataForPeriod:1000] toCharacteristic:self.period];
+    }
+    else ok = NO;
+    if (self.data) {
+        [self.btHandle setNotifyStateForCharacteristic:self.data enable:YES];
+    }
+    else ok = NO;
+    return ok;
+}
+
+-(BOOL) deconfigureService {
+    BOOL ok = YES;
+    if (self.config) {
+        [self.btHandle writeValue:[sensorFunctions dataForEnable:NO forService:self.service.UUID.UUIDString] toCharacteristic:self.config];
+    }
+    else ok = NO;
+    if (self.data) {
+        [self.btHandle setNotifyStateForCharacteristic:self.data enable:NO];
+    }
+    else ok = NO;
+    return ok;
+}
+
+-(void) wroteValue:(CBCharacteristic *)c error:(NSError *)error {
+    if (error) {
+        NSLog(@"Write failed to %@ with error:%@",c.UUID.UUIDString,error);
+    }
+    else {
+        NSLog(@"Wrote %@",c.UUID);
+    }
+}
+-(NSString *) calcValue:(NSData *) value {
+    return @"Value";
+}
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/bluetoothHandler.h b/SensorTag_iOS/SensorTag2-Example/bluetoothHandler.h
new file mode 100644 (file)
index 0000000..f000db7
--- /dev/null
@@ -0,0 +1,106 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Simple Bluetooth Handler SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           bluetoothHandler.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import <CoreBluetooth/CoreBluetooth.h>
+
+///@brief The bluetoothHandlerDelegate is a protocol for communicating bluetooth events to the main viewcontroller
+
+@protocol bluetoothHandlerDelegate <NSObject>
+///Device has become ready, or not ready (connected and scanned / disconnected)
+-(void) deviceReady:(BOOL)ready peripheral:(CBPeripheral *)peripheral;
+///Characteristic was read
+-(void) didReadCharacteristic:(CBCharacteristic *)characteristic;
+///Received notification on characteristic
+-(void) didGetNotificaitonOnCharacteristic:(CBCharacteristic *)characteristic;
+///Wrote characteristic
+-(void) didWriteCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error;
+
+@end
+
+///@brief Main CoreBluetooth interface of application
+
+@interface bluetoothHandler : NSObject <CBCentralManagerDelegate,CBPeripheralDelegate>
+
+///CoreBluetooth Main handle
+@property CBCentralManager *m;
+///CoreBluetooth Peripheral in use
+@property CBPeripheral *p;
+///List containing all devices detected
+@property NSMutableArray *deviceList;
+///Should device reconnect if connection drops
+@property BOOL shouldReconnect;
+///UUID of the device to keep connection to
+@property (nonatomic) NSUUID *connectToIdentifier;
+///This bluetoothHandlers delegate
+@property id<bluetoothHandlerDelegate> delegate;
+
+///Initialize singleton
++(id)sharedInstance;
+///Normal initializer
+-(instancetype) init;
+///Disconnect from the current device immediately
+-(void) disconnectCurrentDevice;
+///Write value to characteristic on currently connected device
+-(void) writeValue:(NSData *)value toCharacteristic:(CBCharacteristic *)characteristic;
+///Read value from characteristic on currently connected device
+-(void) readValueFromCharacteristic:(CBCharacteristic *)characteristic;
+///Turn on/off notification state of a characteristic
+-(void) setNotifyStateForCharacteristic:(CBCharacteristic *)characteristic enable:(BOOL)enable;
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/bluetoothHandler.m b/SensorTag_iOS/SensorTag2-Example/bluetoothHandler.m
new file mode 100644 (file)
index 0000000..978ea9b
--- /dev/null
@@ -0,0 +1,274 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Simple Bluetooth Handler SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           bluetoothHandler.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#import "bluetoothHandler.h"
+
+
+@implementation bluetoothHandler {
+    NSUUID *_connectToIdentifier;
+}
+
+/// Make singleton
+/// @return Current singleton instance
++ (id)sharedInstance {
+    static bluetoothHandler *sharedBT = nil;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        sharedBT = [[self alloc] init];
+    });
+    return sharedBT;
+}
+
+/// Normal initializer
+/// @returns a new instance of the bluetoothHandler class
+-(instancetype) init {
+    self = [super init];
+    if (self) {
+        self.m = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
+        self.p = nil;
+        self.shouldReconnect = NO;
+        self.connectToIdentifier = nil;
+    }
+    return self;
+}
+
+-(NSUUID *)connectToIdentifier {
+    return _connectToIdentifier;
+}
+
+/// Set ConnectToIdentifier, disconnects from current device and connects to the new if UUID different.
+/// @param UUID to connect to
+-(void) setConnectToIdentifier:(NSUUID *) uuid {
+    if (uuid == nil) {
+        if (self.p) {
+            if ((self.p.state == CBPeripheralStateConnected) || (self.p.state == CBPeripheralStateConnecting)) {
+                self.shouldReconnect = NO;
+                [self.m cancelPeripheralConnection:self.p];
+            }
+            _connectToIdentifier = uuid;
+        }
+        return;
+    }
+    if ([uuid isEqual:self.connectToIdentifier]) {
+        return;
+    }
+    else {
+        _connectToIdentifier = uuid;
+        //Check list if we have it in our device list already
+        for (int ii = 0; ii < self.deviceList.count; ii++) {
+            CBPeripheral *perip = [self.deviceList objectAtIndex:ii];
+            if ([perip.identifier isEqual:uuid]) {
+                [self.m connectPeripheral:perip options:nil];
+            }
+        }
+    }
+}
+
+-(void) disconnectCurrentDevice {
+    if (self.p) {
+        if ((self.p.state == CBPeripheralStateConnected) || (self.p.state == CBPeripheralStateConnecting)) {
+            self.shouldReconnect = NO;
+            [self.m cancelPeripheralConnection:self.p];
+            [self.delegate deviceReady:NO peripheral:self.p];
+        }
+    }
+}
+
+
+///@param value - Value to write
+///@param characteristic - Characteristic to write to.
+-(void) writeValue:(NSData *)value toCharacteristic:(CBCharacteristic *)characteristic {
+    if (characteristic) {
+        if (self.p) {
+            [self.p writeValue:value forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
+            NSLog(@"bluetoothHandler: Writing %@, with data %@",characteristic.UUID.UUIDString,value);
+        }
+        else {
+            NSLog(@"bluetoothHandler: Cannot write when peripheral == nil");
+        }
+    }
+    else {
+        NSLog(@"bluetoothHandler: Cannot write to characterstic == nil");
+    }
+}
+///@param characteristic - Characteristic to read from.
+-(void) readValueFromCharacteristic:(CBCharacteristic *)characteristic {
+    if (characteristic) {
+        if (self.p) {
+            [self.p readValueForCharacteristic:characteristic];
+            NSLog(@"bluetoothHandler: Reading %@",characteristic.UUID.UUIDString);
+        }
+        else {
+            NSLog(@"bluetoothHandler: Cannot read when peripheral == nil");
+        }
+    }
+    else {
+        NSLog(@"bluetoothHandler: Cannot read from characteristic == nil");
+    }
+}
+///@param characteristic - Characteristic to control.
+///@param enable - true - enable notify, false - disable notify.
+-(void) setNotifyStateForCharacteristic:(CBCharacteristic *)characteristic enable:(BOOL)enable {
+    if (characteristic) {
+        if (self.p) {
+            [self.p setNotifyValue:enable forCharacteristic:characteristic];
+            NSLog(@"bluetoothHandler: Setting notify value on %@ to %ld",characteristic.UUID.UUIDString,(long)enable);
+        }
+        else {
+            NSLog(@"bluetoothHandler: Cannot set notify when peripheral == nil");
+        }
+    }
+    else {
+        NSLog(@"bluetoothHandler: Cannot set notify from characteristic == nil");
+    }
+}
+
+
+
+
+#pragma mark --CBCentralManagerDelegate methods below
+/// This delegate method is called every time an update to the state of the
+/// bluetooth controller changes.
+-(void) centralManagerDidUpdateState:(CBCentralManager *)central {
+    if (central.state == CBCentralManagerStatePoweredOn) {
+        //Powered on means ready for use
+        //Start scanning for all devices
+        [self.m scanForPeripheralsWithServices:nil options:nil];
+    }
+}
+
+/// This delegate method is called when the iOS device detects a new
+/// peripheral it has not seen before (only once since we have not sent
+/// any flags to the scanForPeripheralsWithServices options parameter)
+-(void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
+    NSLog(@"bluetoothHandler: Found peripheral with UUID : %@ and Name : %@ (%ld dBm)",peripheral.identifier,peripheral.name,(long)[RSSI integerValue]);
+    if (!self.deviceList) {
+        self.deviceList = [[NSMutableArray alloc] init];
+    }
+    if (![self.deviceList containsObject:peripheral]) {
+        [self.deviceList addObject:peripheral];
+    }
+    if ([peripheral.identifier isEqual:self.connectToIdentifier]) {
+        [self.m connectPeripheral:peripheral options:nil];
+    }
+
+}
+
+///This delegate method is called when iOS has established connection with a
+/// peripheral after the connectToPeripheral call, here we start scanning of
+/// services automatically
+-(void) centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {
+    NSLog(@"bluetoothHandler: Connected to peripheral with UUID : %@",peripheral.identifier);
+    //Store peripheral
+    self.p = peripheral;
+    //Set delegate to us
+    self.p.delegate = self;
+    //Discover all services on device
+    [self.p discoverServices:nil];
+}
+
+///This delegate method is callen when iOS disconnects from a peripheral
+///after the cancelPeripheralConnection is called, or supervision timeout
+///has been reached. Important to know here is that this method is called
+///before the device actually is disconnected, and it may take up to 10
+///seconds before device is actually disconnected
+-(void) centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
+    NSLog(@"bluetoothHandler: Disconnected from peripheral with UUID : %@",peripheral.identifier);
+    [self.delegate deviceReady:NO peripheral:self.p];
+    self.p = nil;
+    self.p.delegate = nil;
+    if (self.shouldReconnect) [self.m connectPeripheral:peripheral options:nil];
+}
+
+#pragma mark --CBPeripheralDelegate methods below
+
+///This delegate method is called when iOS has discovered services on a peripheral. Services are an array on the peripheral class
+-(void) peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error {
+    //Scan all characteristics in all services on device
+    for (CBService *s in self.p.services) {
+        [self.p discoverCharacteristics:nil forService:s];
+        NSLog(@"bluetoothHandler: Discovered service with UUID : %@",s.UUID.UUIDString);
+    }
+}
+///This delegate method is called when iOS has discovered characteristics on a service. Characteristics are an array on the peripheral service class
+-(void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {
+    for (CBCharacteristic *c in service.characteristics) {
+        NSLog(@"bluetoothHandler: Discovered characteristics with UUID %@ under service with UUID : %@",c.UUID.UUIDString,service.UUID.UUIDString);
+    }
+    //Check if we are finished scanning all services
+    if ([service isEqual: [self.p.services objectAtIndex:self.p.services.count -1]]) {
+        NSLog(@"bluetoothHandler: Device is ready for use");
+        [self.delegate deviceReady:YES peripheral:self.p];
+    }
+}
+///This delegate method handles all notifications that come from the
+///peripheral
+-(void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {
+    if (!error) {
+        [self.delegate didGetNotificaitonOnCharacteristic:characteristic];
+    }
+    else {
+        NSLog(@"bluetoothHandler: error in didUpdateValueForCharacteristic : %@",error.description);
+    }
+}
+
+-(void) peripheral:(nonnull CBPeripheral *)peripheral didWriteValueForCharacteristic:(nonnull CBCharacteristic *)characteristic error:(nullable NSError *)error {
+    [self.delegate didWriteCharacteristic:characteristic error:error];
+}
+
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/deviceInformationService.h b/SensorTag_iOS/SensorTag2-Example/deviceInformationService.h
new file mode 100644 (file)
index 0000000..8f9b595
--- /dev/null
@@ -0,0 +1,75 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          BT SIG Device Information Service handler for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           deviceInformationService.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "bleGenericService.h"
+#import "bluetoothHandler.h"
+
+///@brief The deviceInformationService class handles the Bluetooth SIG Device information service
+/// It presents the device informaiton on the GUI
+
+@interface deviceInformationService : bleGenericService
+
+@property NSString *deviceManifacturer;
+@property NSString *deviceModelNumber;
+@property NSString *deviceSerialNumber;
+@property NSString *deviceHardwareRevision;
+@property NSString *deviceFirmwareRevision;
+@property NSString *deviceSoftwareRevision;
+@property NSString *deviceSystemID;
+@property NSString *deviceIEEE11073Reg;
+@property NSString *devicePNPId;
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/deviceInformationService.m b/SensorTag_iOS/SensorTag2-Example/deviceInformationService.m
new file mode 100644 (file)
index 0000000..3bae1a6
--- /dev/null
@@ -0,0 +1,166 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          BT SIG Device Information Service handler for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           deviceInformationService.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#import "deviceInformationService.h"
+#import "sensorFunctions.h"
+#import "masterUUIDList.h"
+#import "masterMQTTResourceList.h"
+#import "math.h"
+
+@implementation deviceInformationService
+
++(BOOL) isCorrectService:(CBService *)service {
+    if ([service.UUID.UUIDString isEqualToString:BT_SIG_DEVICE_INFO_SERVICE]) {
+        return YES;
+    }
+    return NO;
+}
+
+
+-(instancetype) initWithService:(CBService *)service {
+    self = [super initWithService:service];
+    if (self) {
+        self.btHandle = [bluetoothHandler sharedInstance];
+        self.service = service;
+        
+        self.tile.origin = CGPointMake(0, 9);
+        self.tile.size = CGSizeMake(8, 4);
+        self.tile.title.text = @"Device Information Service";
+        ((oneValueCell *) self.tile).value.numberOfLines = 10;
+        ((oneValueCell *) self.tile).value.textAlignment = NSTextAlignmentLeft;
+    }
+    return self;
+}
+
+-(BOOL) configureService {
+    for (CBCharacteristic *c in self.service.characteristics) {
+        //Real all characteristics in the Device Information Service
+        [self.btHandle readValueFromCharacteristic:c];
+    }
+    return YES;
+}
+-(BOOL) deconfigureService {
+    return YES;
+}
+
+-(BOOL) dataUpdate:(CBCharacteristic *)c {
+    uint8_t val[c.value.length];
+    [c.value getBytes:val length:c.value.length];
+    if ([c.UUID.UUIDString isEqualToString:BT_SIG_DEVICE_INFO_SYSTEM_ID]) {
+        self.deviceSystemID = [NSString stringWithFormat:@"%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",val[0],val[1],val[2],val[3],val[4],val[5],val[6],val[7]];
+        [self calcValue:nil];
+    }
+    else if ([c.UUID.UUIDString isEqualToString:BT_SIG_DEVICE_INFO_MODEL_NR]) {
+        self.deviceModelNumber = [[NSString alloc]initWithBytes:val length:c.value.length encoding:NSUTF8StringEncoding];
+        [self calcValue:nil];
+    }
+    else if ([c.UUID.UUIDString isEqualToString:BT_SIG_DEVICE_INFO_SERIAL_NR]) {
+        self.deviceSerialNumber = [[NSString alloc] initWithBytes:val length:c.value.length encoding:NSUTF8StringEncoding];
+        [self calcValue:nil];
+    }
+    else if ([c.UUID.UUIDString isEqualToString:BT_SIG_DEVICE_INFO_FIRMWARE_REV]) {
+        self.deviceFirmwareRevision = [[NSString alloc] initWithBytes:val length:c.value.length encoding:NSUTF8StringEncoding];
+        [self calcValue:nil];
+    }
+    else if ([c.UUID.UUIDString isEqualToString:BT_SIG_DEVICE_INFO_HARDWARE_REV]) {
+        self.deviceHardwareRevision = [[NSString alloc] initWithBytes:val length:c.value.length encoding:NSUTF8StringEncoding];
+        [self calcValue:nil];
+    }
+    else if ([c.UUID.UUIDString isEqualToString:BT_SIG_DEVICE_INFO_SOFTWARE_REV]) {
+        self.deviceSoftwareRevision = [[NSString alloc] initWithBytes:val length:c.value.length encoding:NSUTF8StringEncoding];
+        [self calcValue:nil];
+    }
+    else if ([c.UUID.UUIDString isEqualToString:BT_SIG_DEVICE_INFO_IEEE_11073]) {
+        self.deviceIEEE11073Reg = @"N.A.";
+        [self calcValue:nil];
+    }
+    else if ([c.UUID.UUIDString isEqualToString:BT_SIG_DEVICE_INFO_PNP_ID]) {
+        self.devicePNPId = [NSString stringWithFormat:@"VIDSrc:%02hhx VID:%04x\n               PID:%04x Prod Ver: %04x",val[0],(val[1] | ((uint16_t)val[2] << 8)),
+                            (val[3] | ((uint16_t)val[4] << 8)),
+                            (val[5] | ((uint16_t)val[6] << 8))];
+        [self calcValue:nil];
+    }
+    return YES;
+}
+
+-(NSArray *) getCloudData {
+    //NSArray *ar = [[NSArray alloc]initWithObjects:
+          //[NSDictionary dictionaryWithObjectsAndKeys:
+           //Value 1
+           //[NSString stringWithFormat:@"%0.1f",self.lightLevel],@"value",
+           //Name 1
+           //MQTT_RESOURCE_NAME_LIGHT_LEVEL,@"name", nil], nil];
+    return nil;//ar;
+}
+
+-(NSString *) calcValue:(NSData *) value {
+    NSString *val = [NSString stringWithFormat:
+                     @"System ID    : %@\n"
+                      "Model NR     : %@\n"
+                      "Serial NR    : %@\n"
+                      "Firmware rev : %@\n"
+                      "Hardware rev : %@\n"
+                      "Software rev : %@\n"
+                      "PnP ID       : %@\n"
+                      ,self.deviceSystemID,self.deviceModelNumber,self.deviceSerialNumber,self.deviceFirmwareRevision,self.deviceHardwareRevision,self.deviceSoftwareRevision,self.devicePNPId];
+    ((oneValueCell *)self.tile).value.text = val;
+    
+    return val;
+}
+
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/displayTile.h b/SensorTag_iOS/SensorTag2-Example/displayTile.h
new file mode 100644 (file)
index 0000000..b97f503
--- /dev/null
@@ -0,0 +1,80 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Basic graphics element SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           displayTile.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <UIKit/UIKit.h>
+
+#define TILE_SIZE 50
+
+@interface autoSizeLabel : UILabel
+
++(CGFloat) getSizeOfFontFromFrame:(CGRect) frame andString:(NSString *) string;
+
+@end
+
+
+@interface displayTile : UIView
+
+@property CGPoint origin;
+@property CGSize size;
+@property CGFloat tileSize;
+@property CGFloat tileXOffset;
+@property autoSizeLabel *title;
+
+
+-(instancetype) initWithOrigin:(CGPoint) origin andSize:(CGSize)size;
+
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/displayTile.m b/SensorTag_iOS/SensorTag2-Example/displayTile.m
new file mode 100644 (file)
index 0000000..2d585e2
--- /dev/null
@@ -0,0 +1,150 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Basic graphics element SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           displayTile.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "displayTile.h"
+
+@implementation autoSizeLabel
+
+-(void) setText:(NSString *)text {
+    self.font = [UIFont fontWithName:@"Menlo" size:[autoSizeLabel getSizeOfFontFromFrame:self.frame andString:text]];
+    [super setText:text];
+}
+
++(CGFloat) getSizeOfFontFromFrame:(CGRect) frame andString:(NSString *) string {
+    CGFloat maxFontSize = 40;
+    UILabel *fakeLabel = [[UILabel alloc] init];
+    fakeLabel.text = string;
+    //Width
+    while ([fakeLabel.text sizeWithAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Menlo" size:maxFontSize]}].width > frame.size.width)
+    {
+        maxFontSize -= 5;
+    }
+    //Height
+    while ([fakeLabel.text sizeWithAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Menlo" size:maxFontSize]}].height > frame.size.height)
+    {
+        maxFontSize -= 5;
+    }
+    return maxFontSize;
+}
+
+@end
+
+
+@implementation displayTile
+
+-(instancetype) initWithOrigin:(CGPoint) origin andSize:(CGSize)size {
+    self = [super init];
+    if (self) {
+        self.origin = origin;
+        self.size = size;
+        self.layer.cornerRadius = 10.0f;
+        self.layer.masksToBounds = YES;
+        self.title = [[autoSizeLabel alloc] init];
+        self.title.text = @"Title";
+        self.title.backgroundColor = [UIColor clearColor];
+        self.title.textColor = [UIColor whiteColor];
+        [self addSubview:self.title];
+        [self setFrame:CGRectMake(0, 0, 0, 0)];
+    }
+    return self;
+}
+
+-(void) setFrame:(CGRect)frame {
+    self.tileSize = (frame.size.width) / 8;
+    if ((self.tileSize * 13) > frame.size.height) self.tileSize = (frame.size.height - 40) / 13;
+    self.tileXOffset = (frame.size.width - (self.tileSize * 8)) / 2;
+    NSLog(@"TileSize :%0.1f",self.tileSize);
+    [super setFrame:CGRectMake((self.origin.x * self.tileSize + 3.0f) + self.tileXOffset, self.origin.y * self.tileSize + 3.0f, self.size.width * self.tileSize - 6.0f, self.size.height * self.tileSize - 6.0f)];
+    self.title.frame = CGRectMake(8, 2, (self.size.width * self.tileSize) - 6.0 - 8, 30 - 4);
+}
+
+-(void) drawRect:(CGRect)rect {
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    
+    CGFloat titleHeight = 30.0f / (self.size.height * self.tileSize);
+    
+    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+    CGFloat locations[] = { 0.0,titleHeight,titleHeight, 1.0 };
+    
+    NSArray *colors = @[(__bridge id) [UIColor blackColor].CGColor, (__bridge id) [UIColor blackColor].CGColor, (__bridge id) [UIColor grayColor].CGColor , (__bridge id) [UIColor grayColor].CGColor];
+    
+    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations);
+    CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
+    CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
+    
+    CGContextSaveGState(context);
+    CGContextAddRect(context, rect);
+    CGContextClip(context);
+    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
+    CGContextRestoreGState(context);
+    
+    CGGradientRelease(gradient);
+    CGColorSpaceRelease(colorSpace);
+    
+}
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/main.m b/SensorTag_iOS/SensorTag2-Example/main.m
new file mode 100644 (file)
index 0000000..3931bec
--- /dev/null
@@ -0,0 +1,64 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Main application source SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           main.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+    }
+}
diff --git a/SensorTag_iOS/SensorTag2-Example/masterMQTTResourceList.h b/SensorTag_iOS/SensorTag2-Example/masterMQTTResourceList.h
new file mode 100644 (file)
index 0000000..4139cc9
--- /dev/null
@@ -0,0 +1,93 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Defines for MQTT cloud names for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           siOleAlertView.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SensorTag2_Example_masterMQTTResourceList_h
+#define SensorTag2_Example_masterMQTTResourceList_h
+
+#define MQTT_RESOURCE_NAME_ACCELERATION_X       @"accelX"
+#define MQTT_RESOURCE_NAME_ACCELERATION_Y       @"accelY"
+#define MQTT_RESOURCE_NAME_ACCELERATION_Z       @"accelZ"
+
+#define MQTT_RESOURCE_NAME_MAGNETOMETER_X       @"magX"
+#define MQTT_RESOURCE_NAME_MAGNETOMETER_Y       @"magY"
+#define MQTT_RESOURCE_NAME_MAGNETOMETER_Z       @"magZ"
+
+#define MQTT_RESOURCE_NAME_GYRO_X               @"gyroX"
+#define MQTT_RESOURCE_NAME_GYRO_Y               @"gyroY"
+#define MQTT_RESOURCE_NAME_GYRO_Z               @"gyroZ"
+
+#define MQTT_RESOURCE_NAME_HUMIDITY             @"humidity"
+
+#define MQTT_RESOURCE_NAME_AIR_PRESSURE         @"pressure"
+
+#define MQTT_RESOURCE_NAME_OBJECT_TEMPERATURE   @"objectTemp"
+#define MQTT_RESOURCE_NAME_AMBIENT_TEMPERATURE  @"ambientTemp"
+
+#define MQTT_RESOURCE_NAME_LIGHT_LEVEL          @"light"
+
+#define MQTT_RESOURCE_NAME_BUTTON_1             @"key_1"
+#define MQTT_RESOURCE_NAME_BUTTON_2             @"key_2"
+#define MQTT_RESOURCE_NAME_REED_RELAY           @"reed_relay"
+#define MQTT_RESOURCE_NAME_BUZZER               @"buzzer"
+#define MQTT_RESOURCE_NAME_GREEN_LED            @"green_led"
+#define MQTT_RESOURCE_NAME_RED_LED              @"red_led"
+
+#define MQTT_RESOURCE_NAME_RSSI_LEVEL           @"rssi"
+#define MQTT_RESOURCE_NAME_INTERNAL_TEMPERATURE @"cputemp"
+
+
+
+#endif
diff --git a/SensorTag_iOS/SensorTag2-Example/masterUUIDList.h b/SensorTag_iOS/SensorTag2-Example/masterUUIDList.h
new file mode 100644 (file)
index 0000000..94f340a
--- /dev/null
@@ -0,0 +1,214 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Bluetooth UUID list SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2013 - 2015 Texas Instruments Incorporated
+ *  \file           DeviceSelectTableViewController.m
+ */
+
+/*
+ * Copyright (c) 2013 - 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+///@brief The masterUUIDList.h contains all a comprehensive list of Bluetooth Smart UUIDs for use in applications.
+
+#ifndef SensorTag2_Example_masterUUIDList_h
+#define SensorTag2_Example_masterUUIDList_h
+
+#define BT_SIG_TX_POWER_SERVICE                                                        @"1804"
+#define BT_SIG_TX_POWER_LEVEL                                                          @"2A07"
+
+#define BT_SIG_DEVICE_INFO_SERVICE                                                     @"180A"
+#define BT_SIG_DEVICE_INFO_SYSTEM_ID                                           @"2A23"
+#define BT_SIG_DEVICE_INFO_MODEL_NR                                                    @"2A24"
+#define BT_SIG_DEVICE_INFO_SERIAL_NR                                           @"2A25"
+#define BT_SIG_DEVICE_INFO_FIRMWARE_REV                                                @"2A26"
+#define BT_SIG_DEVICE_INFO_HARDWARE_REV                                                @"2A27"
+#define BT_SIG_DEVICE_INFO_SOFTWARE_REV                                                @"2A28"
+#define BT_SIG_DEVICE_INFO_MANIFACTURER_NAME                           @"2A29"
+#define BT_SIG_DEVICE_INFO_IEEE_11073                                          @"2A2A"
+#define BT_SIG_DEVICE_INFO_PNP_ID                                                      @"2A50"
+
+#define BT_SIG_IMMEDIATE_ALERT_SERVICE                                         @"1802"
+#define BT_SIG_IMMEDIATE_ALERT_ALERT_LEVEL                                     @"2A06"
+
+#define BT_SIG_BATTERY_SERVICE                                                         @"180F"
+#define BT_SIG_BATTERY_BATTERY_LEVEL                                           @"2A19"
+
+#define BT_SIG_GLUCOSE_SERVICE                                                         @"1808"
+#define BT_SIG_GLUCOSE_MEASUREMENT                                                     @"2A18"
+#define BT_SIG_GLUCOSE_MEASUREMENT_CONTEXT                                     @"2A34"
+#define BT_SIG_GLUCOSE_FEATURE                                                         @"2A51"
+#define BT_SIG_GLUCOSE_RECORD_ACCESS_CONTROL_POINT                     @"2A52"
+
+#define BT_SIG_HEALTH_THERMOMETER_SERVICE                                      @"1809"
+#define BT_SIG_HEALTH_THERMOMETER_MEASUREMENT                          @"2A1C"
+#define BT_SIG_HEALTH_THERMOMETER_TYPE                                         @"2A1D"
+#define BT_SIG_HEALTH_THERMOMETER_INTERMEDIATE_TEMPERATURE     @"2A1E"
+#define BT_SIG_HEALTH_THERMOMETER_MEASUREMENT_INTERVAL         @"2A21"
+
+#define BT_SIG_HEART_RATE_SERVICE                                                      @"180D"
+#define BT_SIG_HEART_RATE_MEASUREMENT                                          @"2A37"
+#define BT_SIG_HEART_RATE_BODY_SENSOR_LOCATION                         @"2A38"
+#define BT_SIG_HEART_RATE_CONTROL_POINT                                                @"2A39"
+
+#define BT_SIG_BLOOD_PRESSURE_SERVICE                                          @"1810"
+#define BT_SIG_BLOOD_PRESSURE_MEASUREMENT                                      @"2A35"
+#define BT_SIG_BLOOD_PRESSURE_INTERMEDIAE_CUFF_PRESSURE                @"2A36"
+#define BT_SIG_BLOOD_PRESSURE_FEATURE                                          @"2A49"
+
+#define BT_SIG_RSC_SERVICE                                                                     @"1814"
+#define BT_SIG_RSC_MEASUREMENT                                                         @"2A53"
+#define BT_SIG_RSC_FEATURE                                                                     @"2A54"
+#define BT_SIG_RSC_SENSOR_LOCATION                                                     @"2A5D"
+#define BT_SIG_RSC_CONTROL_POINT                                                       @"2A55"
+
+#define BT_SIG_CSC_SERVICE                                                                     @"1816"
+#define BT_SIG_CSC_MEASUREMENT                                                         @"2A5B"
+#define BT_SIG_CSC_FEATURE                                                                     @"2A5C"
+#define BT_SIG_CSC_SENSOR_LOCATION                                                     @"2A5D"
+#define BT_SIG_CSC_CONTROL_POINT                                                       @"2A55"
+
+
+#define TI_SIMPLE_KEYS_SERVICE                                                         @"FFE0"
+#define TI_SIMPLE_KEYS_KEY_PRESS_STATE                                         @"FFE1"
+
+#define TI_SENSORTAG_TEMPERATURE_SERVICE                                       @"F000AA00-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_IR_TEMPERATURE_DATA                                       @"F000AA01-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_IR_TEMPERATURE_CONFIG                                     @"F000AA02-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_IR_TEMPERATURE_PERIOD                                     @"F000AA03-0451-4000-B000-000000000000"
+
+#define TI_SENSORTAG_ACCELEROMETER_SERVICE                                     @"F000AA10-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_ACCELEROMETER_DATA                                                @"F000AA11-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_ACCELEROMETER_CONFIG                                      @"F000AA12-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_ACCELEROMETER_PERIOD                                      @"F000AA13-0451-4000-B000-000000000000"
+
+#define TI_SENSORTAG_HUMIDTIY_SERVICE                                          @"F000AA20-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_HUMIDTIY_DATA                                                     @"F000AA21-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_HUMIDTIY_CONFIG                                           @"F000AA22-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_HUMIDTIY_PERIOD                                           @"F000AA23-0451-4000-B000-000000000000"
+
+#define TI_SENSORTAG_MAGNETOMETER_SERVICE                                      @"F000AA30-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_MAGNETOMETER_DATA                                         @"F000AA31-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_MAGNETOMETER_CONFIG                                       @"F000AA32-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_MAGNETOMETER_PERIOD                                       @"F000AA33-0451-4000-B000-000000000000"
+
+#define TI_SENSORTAG_BAROMETER_SERVICE                                         @"F000AA40-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_BAROMETER_DATA                                                    @"F000AA41-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_BAROMETER_CONFIG                                          @"F000AA42-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_BAROMETER_CALIBRATION                                     @"F000AA43-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_BAROMETER_PERIOD                                          @"F000AA44-0451-4000-B000-000000000000"
+
+
+#define TI_SENSORTAG_GYROSCOPE_SERVICE                                         @"F000AA50-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_GYROSCOPE_DATA                                                    @"F000AA51-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_GYROSCOPE_CONFIG                                          @"F000AA52-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_GYROSCOPE_PERIOD                                          @"F000AA53-0451-4000-B000-000000000000"
+
+#define TI_SENSORTAG_IO_SERVICE                             @"F000AA64-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_IO_DATA                                @"F000AA65-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_IO_CONFIG                              @"F000AA66-0451-4000-B000-000000000000"
+
+
+#define TI_SENSORTAG_TWO_LIGHT_SENSOR_SERVICE                          @"F000AA70-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_LIGHT_SENSOR_DATA                                     @"F000AA71-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_LIGHT_SENSOR_CONFIG                           @"F000AA72-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_LIGHT_SENSOR_PERIOD                           @"F000AA73-0451-4000-B000-000000000000"
+
+#define TI_SENSORTAG_TWO_MOVEMENT_SERVICE                                      @"F000AA80-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_MOVEMENT_DATA                                         @"F000AA81-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_MOVEMENT_CONFIG                                       @"F000AA82-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_MOVEMENT_PERIOD                                       @"F000AA83-0451-4000-B000-000000000000"
+
+#define TI_SENSORTAG_TWO_REGISTER_SERVICE                                      @"F000AC00-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_REGISTER_DATA                      @"F000AC01-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_REGISTER_ADDRESS                                      @"F000AC02-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_REGISTER_DEVICE_ID                                    @"F000AC03-0451-4000-B000-000000000000"
+
+#define TI_SENSORTAG_TWO_DISPLAY_SERVICE                                       @"F000AD00-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_DISPLAY_DATA                                          @"F000AD01-0451-4000-B000-000000000000"
+#define TI_SENSORTAG_TWO_DISPLAY_CONTROL                                       @"F000AD02-0451-4000-B000-000000000000"
+
+#define TI_ACCELEROMETER_SERVICE                                                       @"FFA0"
+#define TI_ACCELEROMETER_ENABLE                                                                @"FFA1"
+#define TI_ACCELEROMETER_RANGE                                                         @"FFA2"
+#define TI_ACCELEROMETER_X_DATA                                                                @"FFA3"
+#define TI_ACCELEROMETER_Y_DATA                                                                @"FFA4"
+#define TI_ACCELEROMETER_Z_DATA                                                                @"FFA5"
+
+#define TI_RACING_CAR_SERVICE                                                          @"ACC0"
+#define TI_RACING_CAR_THROTTLE                                                         @"ACC1"
+#define TI_RACING_CAR_STEERING                                                         @"ACC2"
+#define TI_RACING_CAR_LIGHTS_HORN                                                      @"ACC3"
+
+#define TI_LAMP_CONTROL_SERVICE                                                                @"FFB0"
+#define TI_LAMP_CONTROL_RED_DATA                                                       @"FFB1"
+#define TI_LAMP_CONTROL_GREEN_DATA                                                     @"FFB2"
+#define TI_LAMP_CONTROL_BLUE_DATA                                                      @"FFB3"
+#define TI_LAMP_CONTROL_WHITE_DATA                                                     @"FFB4"
+#define TI_LAMP_CONTROL_COMPOUND_DATA                                          @"FFB5"
+
+#define TI_OAD_SERVICE                                                                         @"F000FFC0-0451-4000-B000-000000000000"
+#define TI_OAD_IMAGE_NOTIFY                                                                    @"F000FFC1-0451-4000-B000-000000000000"
+#define TI_OAD_IMAGE_BLOCK_REQUEST                                                     @"F000FFC2-0451-4000-B000-000000000000"
+
+#define TI_CONNECTION_CONTROL_SERVICE                                          @"F000CCC0-0451-4000-B000-000000000000"
+#define TI_CONNECTION_CONTROL_CURRENT_USED_PARAMETERS          @"F000CCC1-0451-4000-B000-000000000000"
+#define TI_CONNECTION_CONTROL_REQUEST_NEW_PARAMETERS           @"F000CCC2-0451-4000-B000-000000000000"
+#define TI_CONNECTION_CONTROL_DISCONNECT_REQUEST                       @"F000CCC3-0451-4000-B000-000000000000"
+#define TI_CONNECTION_CONTROL_NAP_INTERVAL_SETTING                     @"F000CCC4-0451-4000-B000-000000000000"
+
+#define TI_IBEACON_CONFIGURATION_SERVICE                                       @"F000BCC0-0451-4000-B000-000000000000"
+#define TI_IBEACON_UUID_SETTING                                                                @"F000BCC1-0451-4000-B000-000000000000"
+#define TI_IBEACON_MAJOR_ID_SETTING                                                    @"F000BCC2-0451-4000-B000-000000000000"
+#define TI_IBEACON_MINOR_ID_SETTING                                                    @"F000BCC3-0451-4000-B000-000000000000"
+#define TI_IBEACON_CALIB_TX_POWER_SETTING                                      @"F000BCC4-0451-4000-B000-000000000000"
+#define TI_IBEACON_BROADCAST_INTERVAL                                          @"F000BCC5-0451-4000-B000-000000000000"
+#define TI_IBEACON_ENABLE                                                                      @"F000BCC6-0451-4000-B000-000000000000"
+
+
+#endif
diff --git a/SensorTag_iOS/SensorTag2-Example/oneValueCell.h b/SensorTag_iOS/SensorTag2-Example/oneValueCell.h
new file mode 100644 (file)
index 0000000..7cbed30
--- /dev/null
@@ -0,0 +1,64 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Basic graphics element SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           oneValueCell.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "displayTile.h"
+
+@interface oneValueCell : displayTile
+
+@property autoSizeLabel *value;
+
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/oneValueCell.m b/SensorTag_iOS/SensorTag2-Example/oneValueCell.m
new file mode 100644 (file)
index 0000000..2b4a564
--- /dev/null
@@ -0,0 +1,92 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Basic graphics element SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           oneValueCell.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "oneValueCell.h"
+
+@implementation oneValueCell
+
+-(instancetype) initWithOrigin:(CGPoint)origin andSize:(CGSize)size {
+    self = [super initWithOrigin:origin andSize:size];
+    if (self) {
+        self.value = [[autoSizeLabel alloc] init];
+        self.value.font = [UIFont systemFontOfSize:25.0f];
+        self.value.textColor = [UIColor whiteColor];
+        self.value.text = @"---";
+        self.value.textAlignment = NSTextAlignmentCenter;
+        [self addSubview:self.value];
+        [self setFrame:self.frame];
+    }
+    return self;
+}
+
+-(void) setFrame:(CGRect)frame {
+    [super setFrame:frame];
+    CGFloat titleHeight = 30.0f;
+    self.value.frame = CGRectMake(7, titleHeight + 5, self.frame.size.width - 14, self.frame.size.height - titleHeight - 10);
+}
+
+
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorFunctions.h b/SensorTag_iOS/SensorTag2-Example/sensorFunctions.h
new file mode 100644 (file)
index 0000000..c846859
--- /dev/null
@@ -0,0 +1,73 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Sensor helper functions for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorFunctions.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <Foundation/Foundation.h>
+
+#define PERIOD_MIN 100
+#define PERIOD_MAX 2550
+
+///@brief The sensorFunctions class is a utility class that helps out with configuration data and period data calculations
+
+@interface sensorFunctions : NSObject
+
+
+///Generate data for period register on the services
++(NSData *) dataForPeriod:(NSInteger) period;
+///Generate data for enable / disable service
++(NSData *) dataForEnable:(BOOL) enable;
+///Generate data for enable / disable service for special services
++(NSData *) dataForEnable:(BOOL) enable forService:(NSString *)serviceUUID;
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorFunctions.m b/SensorTag_iOS/SensorTag2-Example/sensorFunctions.m
new file mode 100644 (file)
index 0000000..ac0b45e
--- /dev/null
@@ -0,0 +1,82 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Sensor helper functions for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorFunctions.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "sensorFunctions.h"
+#import "masterUUIDList.h"
+
+@implementation sensorFunctions
+
++(NSData *) dataForPeriod:(NSInteger) period {
+    if (period > PERIOD_MAX) period = PERIOD_MAX;
+    if (period < PERIOD_MIN) period = PERIOD_MIN;
+    uint8_t pData = (uint8_t)(period / 10);
+    return [NSData dataWithBytes:&pData length:1];
+}
+
++(NSData *) dataForEnable:(BOOL) enable forService:(NSString *)serviceUUID {
+    if ([serviceUUID isEqualToString:TI_SENSORTAG_TWO_MOVEMENT_SERVICE]) {
+    uint8_t data[2] = { 0xFF,0x00 };
+    return [NSData dataWithBytes:&data length:2];
+    }
+    else return [sensorFunctions dataForEnable:enable];
+}
+
++(NSData *) dataForEnable:(BOOL) enable {
+    uint8_t data = enable ? 1 : 0;
+    return [NSData dataWithBytes:&data length:1];
+}
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagAirPressureService.h b/SensorTag_iOS/SensorTag2-Example/sensorTagAirPressureService.h
new file mode 100644 (file)
index 0000000..4bb30e3
--- /dev/null
@@ -0,0 +1,67 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          SensorTag Air Pressure Service for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagAirPressureService.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "bleGenericService.h"
+#import "bluetoothHandler.h"
+
+///@brief The sensorTagAirPressureService class receives data from the BMP280 sensor on the SensorTag 2.0 and represents it on the GUI.
+
+@interface sensorTagAirPressureService : bleGenericService
+
+@property CGFloat airPressure;
+@property CGFloat ambientTemperature;
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagAirPressureService.m b/SensorTag_iOS/SensorTag2-Example/sensorTagAirPressureService.m
new file mode 100644 (file)
index 0000000..0144566
--- /dev/null
@@ -0,0 +1,131 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          SensorTag Air Pressure Service for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagAirPressureService.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "sensorTagAirPressureService.h"
+#import "sensorFunctions.h"
+#import "masterUUIDList.h"
+#import "masterMQTTResourceList.h"
+
+@implementation sensorTagAirPressureService
+
++(BOOL) isCorrectService:(CBService *)service {
+    if ([service.UUID.UUIDString isEqualToString:TI_SENSORTAG_BAROMETER_SERVICE]) {
+        return YES;
+    }
+    return NO;
+}
+
+
+-(instancetype) initWithService:(CBService *)service {
+    self = [super initWithService:service];
+    if (self) {
+        self.btHandle = [bluetoothHandler sharedInstance];
+        self.service = service;
+        
+        for (CBCharacteristic *c in service.characteristics) {
+            if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_BAROMETER_CONFIG]) {
+                self.config = c;
+            }
+            else if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_BAROMETER_DATA]) {
+                self.data = c;
+            }
+            else if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_BAROMETER_PERIOD]) {
+                self.period = c;
+            }
+        }
+        if (!(self.config && self.data && self.period)) {
+            NSLog(@"Some characteristics are missing from this service, might not work correctly !");
+        }
+        
+        self.tile.origin = CGPointMake(4, 1);
+        self.tile.size = CGSizeMake(4, 2);
+        self.tile.title.text = @"Air pressure (BMP280)";
+    }
+    return self;
+}
+
+
+
+-(BOOL) dataUpdate:(CBCharacteristic *)c {
+    if ([self.data isEqual:c]) {
+        NSLog(@"sensorTagAirPressureService: Recieved value : %@",c.value);
+        oneValueCell *tile = (oneValueCell *)self.tile;
+        tile.value.text = [NSString stringWithFormat:@"%@",[self calcValue:c.value]];
+        return YES;
+    }
+    return NO;
+}
+
+-(NSArray *) getCloudData {
+    NSArray *ar = [[NSArray alloc]initWithObjects:
+          [NSDictionary dictionaryWithObjectsAndKeys:
+           //Value 1
+           [NSString stringWithFormat:@"%0.1f",self.airPressure],@"value",
+           //Name 1
+           MQTT_RESOURCE_NAME_AIR_PRESSURE,@"name", nil], nil];
+    return ar;
+}
+
+-(NSString *) calcValue:(NSData *) value {
+    if (value.length < 4) return @"";
+    char scratchVal[value.length];
+    [value getBytes:&scratchVal length:value.length];
+    uint32_t pres = (scratchVal[3] & 0xff) | ((scratchVal[4] << 8) & 0xff00) | ((scratchVal[5] << 16) & 0xff0000);
+    self.airPressure =  (float)pres / 100.0f;
+    return [NSString stringWithFormat:@"Pressure: %0.1f mBar",(float)self.airPressure];
+}
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagAmbientTemperatureService.h b/SensorTag_iOS/SensorTag2-Example/sensorTagAmbientTemperatureService.h
new file mode 100644 (file)
index 0000000..7f34d9d
--- /dev/null
@@ -0,0 +1,67 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          SensorTag Ambient/Object Temperature Service for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagAmbientTemperatureService.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "bleGenericService.h"
+#import "bluetoothHandler.h"
+
+///@brief The sensorTagAmbientTemperatureService class receives data from the TMP007 sensor on the SensorTag 2.0 and represents it on the GUI.
+
+@interface sensorTagAmbientTemperatureService : bleGenericService
+
+@property CGFloat objectTemperature;
+@property CGFloat ambientTemperature;
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagAmbientTemperatureService.m b/SensorTag_iOS/SensorTag2-Example/sensorTagAmbientTemperatureService.m
new file mode 100644 (file)
index 0000000..bc48304
--- /dev/null
@@ -0,0 +1,144 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          SensorTag Ambient/Object Temperature Service for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagAmbientTemperatureService.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "sensorTagAmbientTemperatureService.h"
+#import "sensorFunctions.h"
+#import "masterUUIDList.h"
+#import "masterMQTTResourceList.h"
+
+@implementation sensorTagAmbientTemperatureService
+
++(BOOL) isCorrectService:(CBService *)service {
+    if ([service.UUID.UUIDString isEqualToString:TI_SENSORTAG_TEMPERATURE_SERVICE]) {
+        return YES;
+    }
+    return NO;
+}
+
+
+-(instancetype) initWithService:(CBService *)service {
+    self = [super initWithService:service];
+    if (self) {
+        self.btHandle = [bluetoothHandler sharedInstance];
+        self.service = service;
+        
+        for (CBCharacteristic *c in service.characteristics) {
+            if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_IR_TEMPERATURE_CONFIG]) {
+                self.config = c;
+            }
+            else if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_IR_TEMPERATURE_DATA]) {
+                self.data = c;
+            }
+            else if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_IR_TEMPERATURE_PERIOD]) {
+                self.period = c;
+            }
+        }
+        if (!(self.config && self.data && self.period)) {
+            NSLog(@"Some characteristics are missing from this service, might not work correctly !");
+        }
+        
+        self.tile.origin = CGPointMake(0, 1);
+        self.tile.size = CGSizeMake(4, 2);
+        self.tile.title.text = @"Temperatures (TMP007)";
+    }
+    return self;
+}
+
+-(BOOL) dataUpdate:(CBCharacteristic *)c {
+    if ([self.data isEqual:c]) {
+        NSLog(@"sensorTagAmbientTemperatureService: Recieved value : %@",c.value);
+        oneValueCell *tile = (oneValueCell *)self.tile;
+        tile.value.text = [NSString stringWithFormat:@"%@",[self calcValue:c.value]];
+        return YES;
+    }
+    return NO;
+}
+
+-(NSArray *) getCloudData {
+    NSArray *ar = [[NSArray alloc]initWithObjects:
+          [NSDictionary dictionaryWithObjectsAndKeys:
+           //Value 1
+           [NSString stringWithFormat:@"%0.1f",self.ambientTemperature],@"value",
+           //Name 1
+           MQTT_RESOURCE_NAME_AMBIENT_TEMPERATURE,@"name", nil],
+           //Value 2
+          [NSDictionary dictionaryWithObjectsAndKeys:
+           [NSString stringWithFormat:@"%0.1f",self.objectTemperature],@"value",
+           //Name 2
+           MQTT_RESOURCE_NAME_OBJECT_TEMPERATURE,@"name", nil], nil];
+    return ar;
+}
+
+-(NSString *) calcValue:(NSData *) value {
+    char scratchVal[value.length];
+    int16_t ambTemp;
+    int16_t objTemp;
+    float tObj;
+    //Ambient temperature first
+    [value getBytes:&scratchVal length:value.length];
+    ambTemp = ((scratchVal[2] & 0xff)| ((scratchVal[3] << 8) & 0xff00));
+    //Then object temperature
+    objTemp = ((scratchVal[0] & 0xff)| ((scratchVal[1] << 8) & 0xff00));
+    objTemp >>= 2;
+    tObj = ((float)objTemp) * 0.03125;
+    
+    self.objectTemperature = tObj;
+    self.ambientTemperature = ambTemp / 128.0f;
+    
+    return [NSString stringWithFormat:@"Amb: %0.1f°C, Obj: %0.1f°C",self.ambientTemperature,self.objectTemperature];
+}
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagHumidityService.h b/SensorTag_iOS/SensorTag2-Example/sensorTagHumidityService.h
new file mode 100644 (file)
index 0000000..afab52a
--- /dev/null
@@ -0,0 +1,67 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          SensorTag Humidity Service for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagHumidityService.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "bleGenericService.h"
+#import "bluetoothHandler.h"
+
+///@brief The sensorTagHumidityService class receives data from the HDC1000 sensor on the SensorTag 2.0 and represents it on the GUI.
+
+@interface sensorTagHumidityService : bleGenericService
+
+@property CGFloat humidity;
+@property CGFloat ambientTemperature;
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagHumidityService.m b/SensorTag_iOS/SensorTag2-Example/sensorTagHumidityService.m
new file mode 100644 (file)
index 0000000..c977972
--- /dev/null
@@ -0,0 +1,133 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          SensorTag Humidity Service for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagHumidityService.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#import "sensorTagHumidityService.h"
+#import "sensorFunctions.h"
+#import "masterUUIDList.h"
+#import "masterMQTTResourceList.h"
+
+@implementation sensorTagHumidityService
+
++(BOOL) isCorrectService:(CBService *)service {
+    if ([service.UUID.UUIDString isEqualToString:TI_SENSORTAG_HUMIDTIY_SERVICE]) {
+        return YES;
+    }
+    return NO;
+}
+
+
+-(instancetype) initWithService:(CBService *)service {
+    self = [super initWithService:service];
+    if (self) {
+        self.btHandle = [bluetoothHandler sharedInstance];
+        self.service = service;
+        
+        for (CBCharacteristic *c in service.characteristics) {
+            if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_HUMIDTIY_CONFIG]) {
+                self.config = c;
+            }
+            else if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_HUMIDTIY_DATA]) {
+                self.data = c;
+            }
+            else if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_HUMIDTIY_PERIOD]) {
+                self.period = c;
+            }
+        }
+        if (!(self.config && self.data && self.period)) {
+            NSLog(@"Some characteristics are missing from this service, might not work correctly !");
+        }
+        
+        self.tile.origin = CGPointMake(0, 3);
+        self.tile.size = CGSizeMake(4, 2);
+        self.tile.title.text = @"Humidity (HDC1000)";
+    }
+    return self;
+}
+
+-(BOOL) configureService {
+    [super configureService];
+    return YES;
+}
+
+-(BOOL) dataUpdate:(CBCharacteristic *)c {
+    if ([self.data isEqual:c]) {
+        NSLog(@"sensorTagHumidityService: Recieved value : %@",c.value);
+        oneValueCell *tile = (oneValueCell *)self.tile;
+        tile.value.text = [NSString stringWithFormat:@"%@",[self calcValue:c.value]];
+        return YES;
+    }
+    return NO;
+}
+
+-(NSArray *) getCloudData {
+    NSArray *ar = [[NSArray alloc]initWithObjects:
+          [NSDictionary dictionaryWithObjectsAndKeys:
+           //Value 1
+           [NSString stringWithFormat:@"%0.1f",self.humidity],@"value",
+           //Name 1
+           MQTT_RESOURCE_NAME_HUMIDITY,@"name", nil], nil];
+    return ar;
+}
+
+-(NSString *) calcValue:(NSData *) value {
+    char scratchVal[value.length];
+    [value getBytes:&scratchVal length:value.length];
+    UInt16 hum;
+    hum = (scratchVal[2] & 0xff) | ((scratchVal[3] << 8) & 0xff00);
+    self.humidity = (float)((float)hum/(float)65535) * 100.0f;
+    return [NSString stringWithFormat:@"Humidity: %0.1f%%rH",(float)self.humidity];
+}
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagKeyService.h b/SensorTag_iOS/SensorTag2-Example/sensorTagKeyService.h
new file mode 100644 (file)
index 0000000..b4d23d8
--- /dev/null
@@ -0,0 +1,69 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Sensor Tag Key BLE Service for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagKeyService.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "bleGenericService.h"
+#import "bluetoothHandler.h"
+
+
+///@brief The sensorTagKeyService class handles the SensorTag Simple Keys service, it shows the current key data on the gui
+
+@interface sensorTagKeyService : bleGenericService
+
+@property BOOL key1;
+@property BOOL key2;
+@property BOOL reedRelay;
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagKeyService.m b/SensorTag_iOS/SensorTag2-Example/sensorTagKeyService.m
new file mode 100644 (file)
index 0000000..fb4d24a
--- /dev/null
@@ -0,0 +1,153 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Sensor Tag Key BLE Service for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagKeyService.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#import "sensorTagKeyService.h"
+#import "sensorFunctions.h"
+#import "masterUUIDList.h"
+#import "masterMQTTResourceList.h"
+
+@implementation sensorTagKeyService
+
++(BOOL) isCorrectService:(CBService *)service {
+    if ([service.UUID.UUIDString isEqualToString:TI_SIMPLE_KEYS_SERVICE]) {
+        return YES;
+    }
+    return NO;
+}
+
+
+-(instancetype) initWithService:(CBService *)service {
+    self = [super initWithService:service];
+    if (self) {
+        self.btHandle = [bluetoothHandler sharedInstance];
+        self.service = service;
+        
+        for (CBCharacteristic *c in service.characteristics) {
+            if ([c.UUID.UUIDString isEqualToString:TI_SIMPLE_KEYS_KEY_PRESS_STATE]) {
+                self.data = c;
+            }
+        }
+        if (!(self.data)) {
+            NSLog(@"Some characteristics are missing from this service, might not work correctly !");
+        }
+        
+        self.tile.origin = CGPointMake(0, 7);
+        self.tile.size = CGSizeMake(8, 2);
+        self.tile.title.text = @"Key press state";
+    }
+    return self;
+}
+
+-(BOOL) configureService {
+    if (self.data) {
+        [self.btHandle setNotifyStateForCharacteristic:self.data enable:YES];
+    }
+    return YES;
+}
+
+-(BOOL) deconfigureService {
+    if (self.data) {
+        [self.btHandle setNotifyStateForCharacteristic:self.data enable:NO];
+    }
+    return YES;
+}
+
+
+-(BOOL) dataUpdate:(CBCharacteristic *)c {
+    if ([self.data isEqual:c]) {
+        NSLog(@"sensorTagKeyService: Recieved value : %@",c.value);
+        oneValueCell *tile = (oneValueCell *)self.tile;
+        tile.value.text = [NSString stringWithFormat:@"%@",[self calcValue:c.value]];
+        return YES;
+    }
+    return NO;
+}
+
+-(NSArray *) getCloudData {
+    NSArray *ar = [[NSArray alloc]initWithObjects:
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%d",(self.key1) ? 1 : 0],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_BUTTON_1,@"name", nil],
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%d",(self.key2) ? 1 : 0],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_BUTTON_2,@"name", nil],
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%d",(self.reedRelay) ? 1 : 0],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_REED_RELAY,@"name", nil],nil];
+    return ar;
+}
+
+-(NSString *) calcValue:(NSData *) value {
+    uint8_t dat[value.length];
+    [value getBytes:dat length:value.length];
+    if (dat[0] & 0x1) self.key1 = YES;
+    else self.key1 = NO;
+    if (dat[0] & 0x2) self.key2 = YES;
+    else self.key2 = NO;
+    if (dat[0] & 0x4) self.reedRelay = YES;
+    else self.reedRelay = NO;
+    return [NSString stringWithFormat:@"Key 1: %@, Key 2: %@, Reed Relay: %@",
+            (self.key1) ? @"ON " : @"OFF",
+            (self.key2) ? @"ON " : @"OFF",
+            (self.reedRelay) ? @"ON " : @"OFF"];
+}
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagLightService.h b/SensorTag_iOS/SensorTag2-Example/sensorTagLightService.h
new file mode 100644 (file)
index 0000000..c6554e8
--- /dev/null
@@ -0,0 +1,67 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          SensorTag Light Service handler for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagLightService.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "bleGenericService.h"
+#import "bluetoothHandler.h"
+
+///@brief The sensorTagLightService class handles the data from the optical light sensor on the SensorTag 2.0 and
+///presents it on the GUI
+
+@interface sensorTagLightService : bleGenericService
+
+@property CGFloat lightLevel;
++(double) sfloatExp2ToDouble:(uint16_t) sfloat;
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagLightService.m b/SensorTag_iOS/SensorTag2-Example/sensorTagLightService.m
new file mode 100644 (file)
index 0000000..d6aad9a
--- /dev/null
@@ -0,0 +1,162 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          SensorTag Light Service handler for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagLightService.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#import "sensorTagLightService.h"
+#import "sensorFunctions.h"
+#import "masterUUIDList.h"
+#import "masterMQTTResourceList.h"
+#import "math.h"
+
+@implementation sensorTagLightService
+
++(BOOL) isCorrectService:(CBService *)service {
+    if ([service.UUID.UUIDString isEqualToString:TI_SENSORTAG_TWO_LIGHT_SENSOR_SERVICE]) {
+        return YES;
+    }
+    return NO;
+}
+
+
+-(instancetype) initWithService:(CBService *)service {
+    self = [super initWithService:service];
+    if (self) {
+        self.btHandle = [bluetoothHandler sharedInstance];
+        self.service = service;
+        
+        for (CBCharacteristic *c in service.characteristics) {
+            if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_TWO_LIGHT_SENSOR_CONFIG]) {
+                self.config = c;
+            }
+            else if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_TWO_LIGHT_SENSOR_DATA]) {
+                self.data = c;
+            }
+            else if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_TWO_LIGHT_SENSOR_PERIOD]) {
+                self.period = c;
+            }
+        }
+        if (!(self.config && self.data && self.period)) {
+            NSLog(@"Some characteristics are missing from this service, might not work correctly !");
+        }
+        
+        self.tile.origin = CGPointMake(4, 3);
+        self.tile.size = CGSizeMake(4, 2);
+        self.tile.title.text = @"Light Level (OPT3001)";
+    }
+    return self;
+}
+
+
+
+-(BOOL) dataUpdate:(CBCharacteristic *)c {
+    if ([self.data isEqual:c]) {
+        NSLog(@"sensorTagLightService: Recieved value : %@",c.value);
+        oneValueCell *tile = (oneValueCell *)self.tile;
+        tile.value.text = [NSString stringWithFormat:@"%@",[self calcValue:c.value]];
+        return YES;
+    }
+    return NO;
+}
+
+-(NSArray *) getCloudData {
+    NSArray *ar = [[NSArray alloc]initWithObjects:
+          [NSDictionary dictionaryWithObjectsAndKeys:
+           //Value 1
+           [NSString stringWithFormat:@"%0.1f",self.lightLevel],@"value",
+           //Name 1
+           MQTT_RESOURCE_NAME_LIGHT_LEVEL,@"name", nil], nil];
+    return ar;
+}
+
+-(NSString *) calcValue:(NSData *) value {
+    unsigned char tmp[value.length];
+    [value getBytes:tmp length:value.length];
+    uint16_t dat;
+    dat = ((uint16_t)tmp[1] & 0xFF) << 8;
+    dat |= (uint16_t)(tmp[0] & 0xFF);
+    
+    self.lightLevel = (float)[sensorTagLightService sfloatExp2ToDouble:dat];
+    
+    
+    
+    return [NSString stringWithFormat:@"Amb: %0.1f Lux",(float)self.lightLevel];
+}
+
++(double) sfloatExp2ToDouble:(uint16_t) sfloat {
+    uint16_t mantissa;
+    uint8_t exponent;
+    
+    mantissa = sfloat & 0x0FFF;
+    exponent = sfloat >> 12;
+#ifdef SIGNED
+    if (exponent >= 0x0008) {
+        exponent = -((0x000F + 1) - exponent);
+    }
+#endif
+#ifdef SIGNED
+    if (mantissa >= 0x0800) {
+        mantissa = -((0x0FFF + 1) - mantissa);
+    }
+#endif
+    double output;
+    double magnitude = pow(2.0f, exponent);
+    output = (mantissa * magnitude);
+    
+    return output / 100.0f;
+}
+
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagMovementService.h b/SensorTag_iOS/SensorTag2-Example/sensorTagMovementService.h
new file mode 100644 (file)
index 0000000..5aeec7c
--- /dev/null
@@ -0,0 +1,68 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          SensorTag Movement Service for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagMovementService.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "bleGenericService.h"
+#import "bluetoothHandler.h"
+
+///@brief The sensorTagMovementService class receives data from the MPU-9250 sensor on the SensorTag 2.0 and represents it on the GUI.
+
+@interface sensorTagMovementService : bleGenericService
+
+@property Point3D acc;
+@property Point3D mag;
+@property Point3D gyro;
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/sensorTagMovementService.m b/SensorTag_iOS/SensorTag2-Example/sensorTagMovementService.m
new file mode 100644 (file)
index 0000000..e367c42
--- /dev/null
@@ -0,0 +1,204 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          SensorTag Movement Service for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           sensorTagMovementService.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#import "sensorTagMovementService.h"
+#import "sensorFunctions.h"
+#import "masterUUIDList.h"
+#import "masterMQTTResourceList.h"
+
+@implementation sensorTagMovementService
+
++(BOOL) isCorrectService:(CBService *)service {
+    if ([service.UUID.UUIDString isEqualToString:TI_SENSORTAG_TWO_MOVEMENT_SERVICE]) {
+        return YES;
+    }
+    return NO;
+}
+
+
+-(instancetype) initWithService:(CBService *)service {
+    self = [super initWithService:service];
+    if (self) {
+        self.btHandle = [bluetoothHandler sharedInstance];
+        self.service = service;
+        
+        for (CBCharacteristic *c in service.characteristics) {
+            if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_TWO_MOVEMENT_CONFIG]) {
+                self.config = c;
+            }
+            else if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_TWO_MOVEMENT_DATA]) {
+                self.data = c;
+            }
+            else if ([c.UUID.UUIDString isEqualToString:TI_SENSORTAG_TWO_MOVEMENT_PERIOD]) {
+                self.period = c;
+            }
+        }
+        if (!(self.config && self.data && self.period)) {
+            NSLog(@"Some characteristics are missing from this service, might not work correctly !");
+        }
+        
+        self.tile.origin = CGPointMake(0, 5);
+        self.tile.size = CGSizeMake(8, 2);
+        self.tile.title.text = @"Movement (MPU-9250)";
+        ((oneValueCell *)(self.tile)).value.numberOfLines = 3;
+        ((oneValueCell *)(self.tile)).value.textAlignment = NSTextAlignmentLeft;
+    }
+    return self;
+}
+
+
+
+-(BOOL) configureService {
+    [super configureService];
+    if (self.period) {
+        [self.btHandle writeValue:[sensorFunctions dataForPeriod:100] toCharacteristic:self.period];
+    }
+    return YES;
+}
+
+-(BOOL) dataUpdate:(CBCharacteristic *)c {
+    if ([self.data isEqual:c]) {
+        NSLog(@"sensorTagMovementService: Recieved value : %@",c.value);
+        oneValueCell *tile = (oneValueCell *)self.tile;
+        tile.value.text = [NSString stringWithFormat:@"%@",[self calcValue:c.value]];
+        return YES;
+    }
+    return NO;
+}
+
+-(NSArray *) getCloudData {
+    NSArray *ar = [[NSArray alloc]initWithObjects:
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%0.1f",self.acc.x],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_ACCELERATION_X,@"name", nil],
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%0.1f",self.acc.y],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_ACCELERATION_Y,@"name", nil],
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%0.1f",self.acc.z],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_ACCELERATION_Z,@"name", nil],
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%0.1f",self.mag.x],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_MAGNETOMETER_X,@"name", nil],
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%0.1f",self.mag.y],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_MAGNETOMETER_Y,@"name", nil],
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%0.1f",self.mag.z],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_MAGNETOMETER_Z,@"name", nil],
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%0.1f",self.gyro.x],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_GYRO_X,@"name", nil],
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%0.1f",self.gyro.y],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_GYRO_Y,@"name", nil],
+                   [NSDictionary dictionaryWithObjectsAndKeys:
+                    //Value 1
+                    [NSString stringWithFormat:@"%0.1f",self.gyro.z],@"value",
+                    //Name 1
+                    MQTT_RESOURCE_NAME_GYRO_Z,@"name", nil],nil];
+    return ar;
+}
+
+-(NSString *) calcValue:(NSData *) value {
+    
+    char vals[value.length];
+    [value getBytes:vals length:value.length];
+    
+    Point3D gyroPoint;
+
+    gyroPoint.x = ((float)((int16_t)((vals[0] & 0xff) | (((int16_t)vals[1] << 8) & 0xff00)))/ (float) 32768) * 255 * 1;
+    gyroPoint.y = ((float)((int16_t)((vals[2] & 0xff) | (((int16_t)vals[3] << 8) & 0xff00)))/ (float) 32768) * 255 * 1;
+    gyroPoint.z = ((float)((int16_t)((vals[4] & 0xff) | (((int16_t)vals[5] << 8) & 0xff00)))/ (float) 32768) * 255 * 1;
+    
+    self.gyro = gyroPoint;
+    
+    Point3D accPoint;
+    
+    accPoint.x = (((float)((int16_t)((vals[6] & 0xff) | (((int16_t)vals[7] << 8) & 0xff00)))/ (float) 32768) * 8) * 1;
+    accPoint.y = (((float)((int16_t)((vals[8] & 0xff) | (((int16_t)vals[9] << 8) & 0xff00))) / (float) 32768) * 8) * 1;
+    accPoint.z = (((float)((int16_t)((vals[10] & 0xff) | (((int16_t)vals[11] << 8) & 0xff00)))/ (float) 32768) * 8) * 1;
+    
+    self.acc = accPoint;
+    
+    Point3D magPoint;
+    magPoint.x = (((float)((int16_t)((vals[12] & 0xff) | (((int16_t)vals[13] << 8) & 0xff00))) / (float) 32768) * 4912);
+    magPoint.y = (((float)((int16_t)((vals[14] & 0xff) | (((int16_t)vals[15] << 8) & 0xff00))) / (float) 32768) * 4912);
+    magPoint.z = (((float)((int16_t)((vals[16] & 0xff) | (((int16_t)vals[17] << 8) & 0xff00))) / (float) 32768) * 4912);
+    
+    
+    self.mag = magPoint;
+    
+    
+    return [NSString stringWithFormat:@"ACC : X: %+6.1f, Y: %+6.1f, Z: %+6.1f\nMAG : X: %+6.1f, Y: %+6.1f, Z: %+6.1f\nGYR : X: %+6.1f, Y: %+6.1f, Z: %+6.1f",self.acc.x,self.acc.y,self.acc.z,self.mag.x,self.mag.y,self.mag.z,self.gyro.x,self.gyro.y,self.gyro.z];
+}
+
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/siOleAlertView.h b/SensorTag_iOS/SensorTag2-Example/siOleAlertView.h
new file mode 100644 (file)
index 0000000..a218208
--- /dev/null
@@ -0,0 +1,71 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Custom View for diplay alerts for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           siOleAlertView.h
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <UIKit/UIKit.h>
+#import "displayTile.h"
+
+///@brief The siOleAlertView class shows a custom full screen alert.
+
+
+@interface siOleAlertView : UIView
+
+@property autoSizeLabel *message;
+@property UIVisualEffectView *efView;
+
+-(instancetype) initInView:(UIView *)view;
+-(void) blinkMessage:(NSString *) message;
+-(void) dismissMessage;
+@end
diff --git a/SensorTag_iOS/SensorTag2-Example/siOleAlertView.m b/SensorTag_iOS/SensorTag2-Example/siOleAlertView.m
new file mode 100644 (file)
index 0000000..de07ddd
--- /dev/null
@@ -0,0 +1,121 @@
+/*!
+ *  \author         Ole A. Torvmark <o.a.torvmark@ti.com , torvmark@stalliance.no>
+ *  \brief          Custom View for diplay alerts for SensorTag2-Example iOS application
+ *  \copyright      Copyright (c) 2015 Texas Instruments Incorporated
+ *  \file           siOleAlertView.m
+ */
+
+/*
+ * Copyright (c) 2015 Texas Instruments Incorporated
+ *
+ * All rights reserved not granted herein.
+ * Limited License.
+ *
+ * Texas Instruments Incorporated grants a world-wide, royalty-free,
+ * non-exclusive license under copyrights and patents it now or hereafter
+ * owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
+ * this software subject to the terms herein.  With respect to the foregoing patent
+ *license, such license is granted  solely to the extent that any such patent is necessary
+ * to Utilize the software alone.  The patent license shall not apply to any combinations which
+ * include this software, other than combinations with devices manufactured by or for TI (“TI Devices”).
+ * No hardware patent is licensed hereunder.
+ *
+ * Redistributions must preserve existing copyright notices and reproduce this license (including the
+ * above copyright notice and the disclaimer and (if applicable) source code license limitations below)
+ * in the documentation and/or other materials provided with the distribution
+ *
+ * Redistribution and use in binary form, without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any
+ *     software provided in binary form.
+ *   * any redistribution and use are licensed by TI for use only with TI Devices.
+ *   * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
+ *
+ * If software source code is provided to you, modification and redistribution of the source code are permitted
+ * provided that the following conditions are met:
+ *
+ *   * any redistribution and use of the source code, including any resulting derivative works, are licensed by
+ *     TI for use only with TI Devices.
+ *   * any redistribution and use of any object code compiled from the source code and any resulting derivative
+ *     works, are licensed by TI for use only with TI Devices.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * DISCLAIMER.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "siOleAlertView.h"
+
+@implementation siOleAlertView
+
+-(instancetype) initInView:(UIView *)view {
+    self = [super init];
+    if (self) {
+        self.alpha = 0.0f;
+        self.layer.cornerRadius = 15.0f;
+        self.clipsToBounds = YES;
+        self.message = [[autoSizeLabel alloc]init];
+        self.message.textColor = [UIColor whiteColor];
+        self.message.textAlignment = NSTextAlignmentCenter;
+        UIVisualEffect *blurEffect;
+        blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
+        UIVisualEffect *vibranceEffect;
+        vibranceEffect = [UIVibrancyEffect effectForBlurEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]];
+        self.efView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
+        UIVisualEffectView *vib = [[UIVisualEffectView alloc] initWithEffect:vibranceEffect];
+        [self.efView addSubview:vib];
+        self.efView.frame = view.frame;
+        [self addSubview:self.efView];
+        [self addSubview:self.message];
+        [view addSubview:self];
+        [self setFrame:view.frame];
+    }
+    return self;
+}
+
+
+
+-(void) setFrame:(CGRect)frame {
+#define STD_SIZE_X 300
+#define STD_SIZE_Y 200
+    [super setFrame:CGRectMake((frame.size.width - STD_SIZE_X) / 2, (frame.size.height - STD_SIZE_Y) / 2, STD_SIZE_X, STD_SIZE_Y)];
+    self.efView.frame = self.bounds;
+    self.message.frame = CGRectMake(20, 20, self.bounds.size.width - 40, self.bounds.size.height - 40);
+    self.message.text = self.message.text;
+}
+
+
+-(void) blinkMessage:(NSString *) message {
+    self.message.text = message;
+    
+    [UIView animateWithDuration:0.4f delay:0.0f options: UIViewAnimationOptionCurveEaseInOut animations:^{
+    self.alpha = 1.0f;
+    }completion:nil];
+    
+    [UIView animateWithDuration:0.6f delay:0.4f options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationCurveEaseInOut animations:^{
+        self.message.alpha = 0.0f;
+    }completion:^(BOOL finished){
+        
+    }];
+    
+}
+
+-(void) dismissMessage {
+    [UIView animateWithDuration:0.1f animations:^{
+        self.alpha = 0.0f;
+    } completion:^(BOOL finished) {
+        [self removeFromSuperview];
+    }];
+}
+
+@end
diff --git a/SensorTag_iOS/doxyfile b/SensorTag_iOS/doxyfile
new file mode 100644 (file)
index 0000000..08288d0
--- /dev/null
@@ -0,0 +1,2455 @@
+# Doxyfile 1.8.10
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = SensorTag2-Example
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         = 
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = 
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           = /Volumes/Files/devel/iOS_Projects/TI/SensorTag2-Example/Icon/icon_180x180.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = /Volumes/Files/devel/iOS_Projects/TI/SensorTag2-Example/Doc
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES                = 
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      = 
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = YES
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            = 
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  = /Volumes/Files/devel/iOS_Projects/TI/SensorTag2-Example/SensorTag2-Example
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd,
+# *.vhdl, *.ucf, *.qsf, *.as and *.js.
+
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.idl \
+                         *.ddl \
+                         *.odl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.cs \
+                         *.d \
+                         *.php \
+                         *.php4 \
+                         *.php5 \
+                         *.phtml \
+                         *.inc \
+                         *.m \
+                         *.markdown \
+                         *.md \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.f90 \
+                         *.f \
+                         *.for \
+                         *.tcl \
+                         *.vhd \
+                         *.vhdl \
+                         *.ucf \
+                         *.qsf \
+                         *.as \
+                         *.js
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             = ../
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS = 
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# compiled with the --with-libclang option.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS          = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate&nbs