Code Monkey home page Code Monkey logo

theheraldproject / herald-for-cpp Goto Github PK

View Code? Open in Web Editor NEW
12.0 5.0 10.0 3.33 MB

Herald for C++ - Reliable mobile Bluetooth communications - Native library & test apps

Home Page: https://heraldprox.io

License: Other

CMake 2.46% C++ 92.20% C 5.14% Ruby 0.02% Shell 0.16% Batchfile 0.03%
bluetooth bluetooth-low-energy bluetooth-le bluetooth-beacons bluetooth-connection bluetooth-devices bluetooth-mesh contact-tracing digital-contact-tracing herald herald-library zephyr cpp cpp17 nordicsemi nordic-bluetooth

herald-for-cpp's Introduction

Herald for C++ (Native platforms) - Library

This repository contains a Herald Bluetooth Protocol and Payload set of implementations for native platforms. This includes Windows 10 desktop and Nordic Semiconductor or other Zephyr RTOS capable boards. The board used for development is the Seeed nRF52840MK-USB-Dongle.

This particular code base is the core Herald library. It is used by all examples, including Wearables (just like the Herald for iOS and Herald for Android library use case), Bluetooth MESH Gateway, and Windows Desktop Herald communication examples.

This implementation was introduced in Herald v1.2.

License and Copyright

Copyright 2020-2021 Herald Project Contributors

License: Apache-2.0

See LICENSE.txt and NOTICE.txt for details.

Demonstration apps / libraries

The following apps are available:-

  • herald-tests - Herald core C++ API tests
  • herald-venue-beacon - Herald Zephyr RTOS based app for Venue beacons as a replacement/supplement for QR code scanning when visiting business, bars, and restaurants. See the separate README
  • herald-wearable - Herald Zephyr RTOS based app for wearable devices. The equivalent of the herald-for-ios and herald-for-android demo apps for phones
  • heraldns and heraldns-cli and heraldns-tests - Not strictly using the Herald API, but used to test epidemiological/scientific theories that may be merged in to herald's core API in future. Command line utility to simulate social mixing analyses and virus spread.

The following are libraries available for your own projects:-

  • herald - Core herald API (include as an external library or call herald.cmake directly to statically compile in to your app)

The following are 'coming soon':-

  • herald-mesh-proxy - Rather than a beacon that acts on its own, this mesh proxy provides the same functions of a beacon but also value add functionality from having a Bluetooth 5.0 mesh data network
  • herald-programmer - Utility to reprogram Herald based beacons / mesh proxies in the field in a more user friendly way than development tools (E.g. carehomes, field personnel updates, etc.)

Supported / tested platforms

The Herald team use the C++ API for specific use cases and so only provide support for a specific subset of use cases. If you'd like to contribute platform support feel free to provide code, tests, documentation and raise a PR.

  • Windows 64-bit with CLang 10.0+ for VS community edition 2017
    • We don't currently support the vsc++ compiler
  • Zephyr RTOS / arm with arm-none-eabi-gcc 8.3+ for nRF52840, nRF52832

Other platforms which may work but which we do not provide direct advice for:-

Implementation differences

Some thin wrappers were not required in the C++ version compared to the Java and Swift versions as the base primitives were already accesible in C++17. These include:-

  • uint64 (std::uint64)
  • uint32 (std::uint32)
  • uint16 (std::uint16)
  • uint8 (std::uint8)
  • float16 (std::float)
  • strings (std::string)
  • tuple<A,B> (std::tuple<A,B>)
  • triple<A,B,C> (std::tuple<A,B,C>)
  • callback (unused - syncrhonous only, threading abstracted outside of Herald. See Content class for details.)
  • BLETimer -> Not implemented. Android specific (Android has a bug in its Timer implementation that makes they awake unreliably)
  • Context -> Specific to an application's Context on Android, implemented here in case some platforms have similar requirements. E.g. the ZephyrContext derived class as Zephyr OS has this requirement around Bluetooth state handling.

We've also added some classes to make porting easier. We may fall back in their implementation C++ files on some platforms where known utility libraries are always present. Current list includes:-

  • herald::datatype::uuid - high level UUID interface with just the functionality required by Herald and no more.
  • herald::datatype::base64string - encodes and decodes a Data instance as a Base64 string

Implementation details

Any trivial wrapper classes have been implemented as structs.

Any Interfaces from Java and Swift have been implemented as pure virtual base classes. The code base is being heavily refactored to use references only and avoid using any pointers, including smart pointers. This allows us to be able to predict and restrict memory use at compile time, and provide for maximum memory safety.

This code base implements Bluetooth Low Energy (BLe) implementations on Zephyr/nRF Connect as standard.

What isn't implemented

Any higher level implementation details, such as Mesh gateway payloads and interconnect logic is within a downstream library project. That is to keep this set of classes simple and consistent with the iOS and Android equivalent Herald libraries.

What is implemented

We do provide a demo Windows application in this repository, and a demo zephyr serial application. These act as 'Herald consumer / demo devices' and implement the same basic features as the Android and iOS demo apps. They are provided to allow us to carry out regression testing on each version.

These demo apps are not intended as production ready applications. They can be used as a reference implementation for any Herald based apps and devices you wish to create.

Specific platform limitations

The Herald API cannot use all available modern C++ features due to some hardware, OS' and libc++ libraries not supporting those functions. Where possible we always use modern C++17 techniques and STL functions. On specific platforms we also check for local utility libraries rather than respecify our own (E.g. base64, random number generation, uuid).

Zephyr OS limitations

We cannot use dynamic_pointer_cast to cast a std::shared_ptr to a std::shared_ptr because this uses RTTI which is not supported by Zephyr. We use static_pointer_cast instead, but only when we know the class implementation can only have one definition (i.e. the one for the current platform). We are moving to remove all use of smart pointers generally in favour of references.

We also use noexcept rather than throw exceptions for the same reason.

See the Zephyr C++ limitations [External] page for details. Note that this page is out of date somewhat. The 'new' keyword, for example, is supported in Zephyr although it is very buggy.

Note: In the v2.0 release we have removed all internal use of std::unique_ptr and std::shared_ptr in favour of templates and static sizes for things like SensorDelegates throughout the code base. This is to avoid Zephyr memory management bugs and improve (lower) memory use (SRAM) on Nordic Semiconductor devices.

Building with Code Coverage

  1. Open Visual Studio Code
  2. Perform a CMake build using CLang on Windows in Debug mode
  3. Execute this in the build folder on the command line: cmake .. -DCMAKE_BUILD_TYPE=Debug -DCODE_COVERAGE=ON to add code coverage support
  4. Open the CMake tools tab in Visual Studio Code
  5. Expand 'herald-tests'
  6. Run the 'ccov-report' utility

herald-for-cpp's People

Contributors

adamfowleruk avatar w-liam-mcnair avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

herald-for-cpp's Issues

Add write payload support

Please start with a use case description for a USER of this enhancement

[Who] As a user

[What] I need to allow other devices to write to mine

[Value] In order to ensure two way detection between devices

Describe the potential solution you'd like

Write payload support in concrete_ble_transmitter for Zephyr, replacing current placeholder VENDOR write code

Describe alternatives you've considered

Considered not bothering as we know Zephyr is well behaved, but in a connection-starved environment allowing this may be sensible.

Additional context

Existing mechanism in the Android and iOS API for older devices that don't support advertising.

Relative priority
Medium. V1.3 to ensure API equivalence in Herald Protocol V1.

BLEDatabase filled with invalid connections over time

Some devices report a public address of 00:00:00:00:00:00 (public) after closing or even during use.

Logic currently doesn't close the above incase they are being used in service discovery. This leads to the DB filling up with known invalid devices, and are only replaced when the DB is filled with valid devices. Doesn't cause a problem for valid devices, but consumes battery and resources trying to connect to known invalid devices. So this is a performance enhancement.

Change this logic so that it instead checks if serviceDiscovery is happening, freeing up these records. (serviceDiscovery flag didn't exist before).

ranges-tests causes hard fault on Zephyr

Using herald-tests-zephyr in branch results in this:-

00> [00:00:00.609,130] <dbg> app.main: Waiting for 5 seconds for tests to start
00> [00:00:05.609,161] <dbg> app.main: Initialising catch
00> [00:00:07.609,252] <dbg> app.main: Catch thread started
00> [00:00:09.609,283] <dbg> app.main: main thread still running
00> [00:00:11.609,252] <dbg> app.herald_entry: Catch thread entry
00> [00:00:11.659,362] <err> os: ***** BUS FAULT *****
00> [00:00:11.659,362] <err> os:   Stacking error
00> [00:00:11.659,362] <err> os:   Precise data bus error
00> [00:00:11.659,393] <err> os:   BFAR Address: 0xffffffe0
00> [00:00:11.659,393] <err> os: ***** HARD FAULT *****
00> [00:00:11.659,393] <err> os:   Fault escalation (see below)
00> [00:00:11.659,393] <err> os: ***** BUS FAULT *****
00> [00:00:11.659,393] <err> os:   Precise data bus error
00> [00:00:11.659,393] <err> os:   BFAR Address: 0xffffffc8
00> [00:00:11.659,423] <err> os: r0/a1:  0x00000000  r1/a2:  0x40000000  r2/a3:  0x2001f980
00> [00:00:11.659,423] <err> os: r3/a4:  0xffffffc8 r12/ip:  0x0000000a r14/lr:  0x0001a83f[0m
00> [00:00:11.659,423] <err> os:  xpsr:  0x41000005
00> [00:00:11.659,423] <err> os: Faulting instruction address (r15/pc): 0x0001d3e2
00> [00:00:11.659,423] <err> os: >>> ZEPHYR FATAL ERROR 0: CPU exception on CPU 0
00> [00:00:11.659,423] <err> os: Fault during interrupt handling
00> 
00> [00:00:11.659,454] <err> os: Current thread: 0x20001028 (unknown)
00> [00:00:12.096,588] <err> fatal_error: Resetting system
00> [00:00:00.609,130] <dbg> app.main: Waiting for 5 seconds for tests to start

This needs fixing before the data analysis API can be published.

Not correctly merging down Devices on mac address rotation

Following either a (15 min) mac address rotation or a bluetooth on/off and the same payload eventually pulled back, the 'old' remotes are not immediately removed.

In the callbacks clients MUST be fine with this anyway, as the device create/update on new mac/payload fetched is the only way to detect this. The BLEDatabase, though, should immediately remove old devices once a new one with the same payload has been identified. The 'old' creation time should NOT be used though, as this could result in false logic between the point of identification by mac and retrieving a payload ID.

The Analysis API should be unaffected because it is only invoked with a MeasuredID of a hash of its payload, not the mac address (target identifier on Zephyr).

00> [00:26:05.712,860] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:26:05.712,982] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:26:05.713,104] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,4e:a4:9c:64:82:5f
00> [00:26:05.713,226] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - Existing connection exists! Reusing.
00> [00:26:05.713,317] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection successful
00> [00:26:05.713,836] <dbg> heraldlogger.log: engine,coordinator,Activity herald-read-payload
00> [00:26:05.713,928] <dbg> heraldlogger.log: engine,coordinator, - Prereq satisfied
00> [00:26:05.713,989] <dbg> heraldlogger.log: engine,coordinator,All satisfied, calling activity
00> [00:26:05.714,233] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:26:05.964,355] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:26:05.964,447] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:26:05.964,813] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:26:05.965,148] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 5a:8d:ae:24:e7:f2, created=1508, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload~
00> [00:26:05.965,789] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 48:04:23:e9:3b:48, created=1530, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c003000650054~
00> [00:26:05.966,400] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 54:2a:89:33:23:e6, created=622, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c0030006500540~
00> [00:26:05.967,041] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 56:86:41:97:9a:b5, created=1553, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c003000650054~
00> [00:26:05.967,315] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4e:a4:9c:64:82:5f, created=1562, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=false
00> [00:26:05.967,498] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:26:05.967,590] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:26:05.967,712] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:26:05.967,773] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:26:05.967,895] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:26:05.968,048] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,4e:a4:9c:64:82:5f
00> [00:26:05.968,139] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - Existing connection exists! Reusing.
00> [00:26:05.968,261] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection successful

Allow Herald debug level to be set to 0 to compile

Herald debug mode = 0 should compile out all debug statements and code. Instead it currently errors during compilation with warnings about macros not being defined. Define all logging macros as empty when HERALD logging level = 0 and recompile/retest.

Create analysis data runner and sensor delegate adapter

Please start with a use case description for a USER of this enhancement

[Who] As an epidemiologist-developer OR DCT app developer

[What] I need to easily 'plug in' my data analysis pipeline to a real app, live

[Value] In order to evaluate and use my analysis algorithms within an app and evaluate their efficacy, and provide value to app users (E.g. a read out of their risk exposure estimate)

Describe the potential solution you'd like

  • Add a helper container class to store multiple SampleLists, one per BLE Device contact, with lifecycle methods to handle new/to-be-deleted devices, and calling a instance of an analysis chain per device via the analysis runner
  • Create an analysis runner to own and manage the lists (with a method to get/create a list, invoke an analysis chain, etc.)
  • Add an adapter to link a Herald Sensor Delegate in to these analysis chains managed by the analysis runner

Describe alternatives you've considered

Manual linking - complex and a repeatable pattern everyone will need, so it makes sense to solve it once.

Additional context

Please use template classes to allow type of Device and DeviceID to be dynamic (i.e. not just limited to the BLEDevice class and data)

Relative priority

High: Required for release v1.3

Periodic code review

Manual periodic review of all code files to look for any code issues/smells that may have crept in through incremental updates to the code base.

Epic: Create value analysis API

Initial API creation work to support user stories around the mid-level API. User stories in other issues.

Required features:-

  • Representation of a Typed Value that has been produced
  • Representation of a fixed maximum windowed and filtered aggregation algorithm
  • Generic re-usable filters (min/max)
  • Generic re-usable aggregators (mean, median, mode, variance, sd, min, max)
  • Ability to produce and consume values - Single produced value for now (i.e. we don't go back and 'fix' values that have already been produced)
  • Sink to save a produced value (E.g. results in to a CSV file, or metadata for upload)
  • Source to produce values (E.g. live BLE device, or previous results in a CSV file)

Determine how to set TxPower in advert for Zephyr and Nordic chips

[Who] As an Epidemiologist

[What] I need to access TxPower in a device advert

[Value] In order to accurately estimate distance between devices and thus exposure risk

Describe the potential solution you'd like

  • Determine how to get the TxPower (or vary it's setting) for Nordic nRF5340/52840/52832 chips
  • Add this to the advert (Depends on short service uuid being assigned as per theheraldproject/theheraldproject.github.io#23 )
  • Use this new value in zephyr/concrete_ble_transmitter.cpp Impl::startAdvertising()

Describe alternatives you've considered

Not including it and relying on a model code and a 'well known' number - doesn't allow for wearable to have different power modes in future, so we'd like a more dynamic solution.

Additional context

Key fields for distance estimation are Device make/model code, RSSI of receiver, TxPower of transmitter as a minimum. Ideally environment factors (in hand/freespace/bag, orientation).

Relative priority

Medium. Would be extremely useful for algorithms based on distance conversion and risk estimation for v1.3 and above of Herald for all platforms.

Investigate cause of crash over time on nRF52832DK

Seems to be related to the same device BLE going on/off/on repeatedly. 10 device (default) limit exceeded within time limit?

00> [00:11:45.740,051] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:11:45.990,142] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:11:45.990,234] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:11:45.990,417] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:11:45.990,783] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:11:45.991,058] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=false, hasServices=false, hasReadPayload=false
00> [00:11:45.991,210] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:11:45.991,302] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:11:45.991,424] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:11:45.991,485] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:11:45.991,638] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:11:45.991,790] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:11:45.992,462] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLETransmitter,Stop advertising completed successfully
00> [00:11:45.992,584] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:11:45.992,797] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:11:45.992,889] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:D5:0B:74:FA:CA (random)
00> [00:11:45.993,438] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:11:45.993,530] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:11:46.033,569] <dbg> app.main: main thread still running
00> [00:11:48.033,630] <dbg> app.main: main thread still running
00> [00:11:48.993,469] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:11:48.993,743] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:11:48.993,865] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Connected: Error value:-
00> [00:11:48.993,957] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2
00> [00:11:49.004,089] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection UNSUCCESSFUL
00> [00:11:49.004,333] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:11:49.004,425] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:11:49.004,547] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:11:49.004,577] <dbg> app.herald_entry: herald thread still running. Iteration: 2180
00> [00:11:49.007,263] <dbg> heraldlogger.log: herald,LoggingAnalysisDelegate,New Sample Recorded.
00> [00:11:49.257,537] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:11:49.257,629] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:11:49.257,843] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:11:49.258,178] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:11:49.258,483] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=false, hasServices=false, hasReadPayload=false
00> [00:11:49.258,636] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:11:49.258,728] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:11:49.258,850] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:11:49.258,911] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:11:49.259,033] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:11:49.259,185] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:11:49.259,277] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:11:49.259,521] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:11:49.259,582] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:D5:0B:74:FA:CA (random)
00> [00:11:49.260,131] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:11:49.260,253] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:11:50.033,691] <dbg> app.main: main thread still running
00> [00:11:52.033,752] <dbg> app.main: main thread still running
00> [00:11:52.260,192] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:11:52.260,467] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:11:52.260,589] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Connected: Error value:-
00> [00:11:52.260,681] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2
00> [00:11:52.270,812] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection UNSUCCESSFUL
00> [00:11:52.271,057] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:11:52.271,148] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:11:52.271,270] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:11:52.521,362] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:11:52.521,453] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:11:52.521,667] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:11:52.522,003] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:11:52.522,308] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=false, hasServices=false, hasReadPayload=false
00> [00:11:52.522,460] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:11:52.522,552] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:11:52.522,674] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:11:52.522,735] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:11:52.522,857] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:11:52.523,010] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:11:52.523,101] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:11:52.523,315] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:11:52.523,406] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:D5:0B:74:FA:CA (random)
00> [00:11:52.523,956] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:11:52.524,047] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:11:54.033,813] <dbg> app.main: main thread still running
00> [00:11:55.524,017] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:11:55.524,291] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:11:55.524,444] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Connected: Error value:-
00> [00:11:55.524,505] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2
00> [00:11:55.534,515] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection UNSUCCESSFUL
00> [00:11:55.534,759] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:11:55.534,851] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:11:55.534,973] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:11:55.785,064] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:11:55.785,156] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:11:55.785,369] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:11:55.785,705] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:11:55.786,010] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=false, hasServices=false, hasReadPayload=false
00> [00:11:55.786,163] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:11:55.786,254] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:11:55.786,376] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:11:55.786,437] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:11:55.786,560] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:11:55.786,712] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:11:55.786,804] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:11:55.787,017] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:11:55.787,109] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:D5:0B:74:FA:CA (random)
00> [00:11:55.787,658] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:11:55.787,750] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:11:56.033,874] <dbg> app.main: main thread still running
00> [00:11:58.033,935] <dbg> app.main: main thread still running
00> [00:11:58.787,719] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:11:58.787,994] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:11:58.788,116] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Connected: Error value:-
00> [00:11:58.788,208] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2
00> [00:11:58.798,217] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection UNSUCCESSFUL
00> [00:11:58.798,461] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:11:58.798,553] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:11:58.798,675] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:11:59.048,767] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:11:59.048,858] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:11:59.049,072] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:11:59.049,407] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:11:59.049,713] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=false, hasServices=false, hasReadPayload=false
00> [00:11:59.049,865] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:11:59.049,957] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:11:59.050,079] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:11:59.050,140] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:11:59.050,262] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:11:59.050,415] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:11:59.050,506] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:11:59.050,750] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:11:59.050,811] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:D5:0B:74:FA:CA (random)
00> [00:11:59.051,361] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:11:59.051,483] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:12:00.033,996] <dbg> app.main: main thread still running
00> [00:12:02.034,057] <dbg> app.main: main thread still running
00> [00:12:02.051,422] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:12:02.051,696] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:12:02.051,818] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Connected: Error value:-
00> [00:12:02.051,910] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2
00> [00:12:02.062,042] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection UNSUCCESSFUL
00> [00:12:02.062,286] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:12:02.062,347] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:12:02.062,469] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:02.312,561] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:02.312,652] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:02.312,866] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Current connection states cached:-
00> [00:12:02.313,049] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - cafa740bd545 state: disconnected, connection is null: true
00> [00:12:02.314,758] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLETransmitter,Start advertising completed successfully
00> [00:12:02.314,971] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:02.565,063] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:02.565,155] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:02.565,429] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:02.815,521] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:02.815,612] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:02.815,887] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:03.065,979] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:03.066,070] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:03.066,345] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:03.316,436] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:03.316,528] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:03.316,802] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:03.566,894] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:03.566,986] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:03.567,108] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:03.567,321] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:03.817,413] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:03.817,504] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:03.817,626] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:03.817,840] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:04.034,118] <dbg> app.main: main thread still running
00> [00:12:04.067,932] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:04.068,023] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:04.068,145] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:04.068,359] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:04.318,450] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:04.318,542] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:04.318,664] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:04.318,878] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:04.568,969] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:04.569,061] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:04.569,183] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:04.569,396] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:04.819,488] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:04.819,580] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:04.819,793] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:04.820,007] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:05.070,098] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:05.070,190] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:05.070,312] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:05.070,526] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:05.320,617] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:05.320,709] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:05.320,831] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:05.321,044] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:05.571,136] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:05.571,228] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:05.571,350] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:05.571,563] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:05.821,655] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:05.821,746] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:05.821,868] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:05.822,082] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:06.034,179] <dbg> app.main: main thread still running
00> [00:12:06.072,174] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:06.072,265] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:06.072,540] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:06.072,540] <dbg> app.herald_entry: herald thread still running. Iteration: 2200
00> [00:12:06.075,195] <dbg> heraldlogger.log: herald,LoggingAnalysisDelegate,New Sample Recorded.
00> [00:12:06.325,439] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:06.325,531] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:06.325,805] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:06.575,897] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:06.575,988] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:06.576,263] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:06.826,354] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:06.826,446] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:06.826,721] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:07.076,812] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:07.076,904] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:07.077,178] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:07.327,270] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:07.327,362] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:07.327,636] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:07.577,728] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:07.577,819] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:07.578,094] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:07.828,186] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:07.828,277] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:07.828,552] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:08.034,240] <dbg> app.main: main thread still running
00> [00:12:08.078,643] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:08.078,735] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:08.079,010] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:08.329,101] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:08.329,193] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:08.329,467] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:08.579,559] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:08.579,650] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:08.579,772] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:08.579,986] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:08.830,078] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:08.830,169] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:08.830,291] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:08.830,505] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:09.080,596] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:09.080,688] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:09.080,810] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:09.081,024] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:09.331,115] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:09.331,207] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:09.331,329] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:09.331,542] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:09.581,634] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:09.581,726] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:09.581,848] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:09.582,061] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:09.832,153] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:09.832,244] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:09.832,366] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:09.832,580] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:10.034,301] <dbg> app.main: main thread still running
00> [00:12:10.082,672] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:10.082,763] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:10.082,885] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:10.083,099] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:10.333,190] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:10.333,282] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:10.333,404] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:10.333,618] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:10.583,709] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:10.583,801] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:10.583,923] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:10.584,136] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:10.834,228] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:10.834,320] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:10.834,442] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:10.834,655] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:11.084,747] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:11.084,838] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:11.085,113] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:11.085,144] <dbg> app.herald_entry: herald thread still running. Iteration: 2220
00> [00:12:11.087,768] <dbg> heraldlogger.log: herald,LoggingAnalysisDelegate,New Sample Recorded.
00> [00:12:11.338,012] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:11.338,104] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:11.338,378] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:11.588,470] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:11.588,562] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:11.588,836] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:11.838,928] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:11.839,019] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:11.839,294] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:12.034,362] <dbg> app.main: main thread still running
00> [00:12:12.089,385] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:12.089,477] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:12.089,752] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:12.339,843] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:12.339,935] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:12.340,209] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:12.590,301] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:12.590,393] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:12.590,667] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:12.840,759] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:12.840,850] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:12.841,125] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:13.091,217] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:13.091,308] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:13.091,583] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:13.341,674] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:13.341,766] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:13.342,041] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:13.592,132] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:13.592,224] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:13.592,346] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:13.592,559] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:13.842,651] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:13.842,742] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:13.842,864] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:13.843,078] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:14.034,423] <dbg> app.main: main thread still running
00> [00:12:14.093,170] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:14.093,261] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:14.093,383] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:14.093,597] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:14.343,688] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:14.343,780] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:14.343,902] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:14.344,116] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:14.594,207] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:14.594,299] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:14.594,421] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:14.594,635] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:14.844,726] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:14.844,818] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:14.844,940] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:14.845,153] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:15.095,245] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:15.095,336] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:15.095,458] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:15.095,672] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:15.345,764] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:15.345,855] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:15.345,977] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:15.346,191] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:15.596,282] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:15.596,374] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:15.596,496] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:15.596,710] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
(Connection lost)
00> [00:12:16.350,585] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:16.350,708] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:16.350,982] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:16.601,043] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:16.601,135] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:16.601,409] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:16.851,501] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:16.851,684] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:16.851,989] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:17.102,081] <dbg> app.herald_entry: Calling Sensor Arm
00> [0m
00> [00:12:49.683,258] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:49.683,349] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:49.683,471] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:49.683,685] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:49.933,776] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:49.933,868] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:49.933,990] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:49.934,204] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:50.035,522] <dbg> app.main: main thread still running
00> [00:12:50.184,295] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:50.184,387] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:50.184,509] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:50.184,722] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:50.434,814] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:50.434,906] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:50.435,028] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:50.435,241] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:50.685,333] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:50.685,424] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:50.685,546] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:50.685,760] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:50.935,852] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:50.935,943] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:50.936,065] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:50.936,279] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:51.186,370] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:51.186,462] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:51.186,737] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:51.186,767] <dbg> app.herald_entry: herald thread still running. Iteration: 2380
00> [00:12:51.189,392] <dbg> heraldlogger.log: herald,LoggingAnalysisDelegate,New Sample Recorded.
00> [00:12:51.439,636] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:51.439,727] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:51.440,002] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:51.690,093] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:51.690,185] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:51.690,460] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:51.940,551] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:51.940,643] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:51.940,917] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:52.035,583] <dbg> app.main: main thread still running
00> [00:12:52.191,009] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:52.191,101] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:52.191,375] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:52.441,467] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:52.441,558] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:52.441,833] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:52.691,925] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:52.692,016] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:52.692,291] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:52.942,382] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:52.942,474] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:52.942,749] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:53.192,840] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:53.192,932] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:53.193,206] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:53.443,298] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:53.443,389] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:53.443,664] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:53.693,756] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:53.693,847] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:53.693,969] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:53.694,183] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:53.944,274] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:53.944,366] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:53.944,488] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:53.944,702] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:54.035,644] <dbg> app.main: main thread still running
00> [00:12:54.194,793] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:54.194,885] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:54.195,007] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:54.195,220] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:54.445,312] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:54.445,404] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:54.445,526] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:54.445,739] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:54.695,831] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:54.695,953] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:54.696,075] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:54.696,411] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:54.946,502] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:54.946,594] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:54.946,716] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:54.946,929] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:55.197,021] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:55.197,113] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:55.197,235] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:55.197,448] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:55.447,540] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:55.447,631] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:55.447,753] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:55.447,967] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:55.616,455] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,New target identified: 60ab88a6b279
00> [00:12:55.616,607] <dbg> app.sensor: sensor didDetect: 60ab88a6b279
00> [00:12:55.616,760] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,Found apple device
00> [00:12:55.616,882] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,131aa96a8a43
00> [00:12:55.616,973] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase, - Unknown apple device... Logging so we can discover services later
00> [00:12:55.617,218] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,New address FROM SCAN:-
00> [00:12:55.617,309] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,79:B2:A6:88:AB:60 (random)
00> [00:12:55.617,340] <dbg> app.sensor: sensor didMeasure
00> [00:12:55.698,059] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:55.698,150] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:55.698,272] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:55.698,577] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:12:55.698,669] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:12:55.698,791] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:55.948,852] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:55.948,944] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:55.949,066] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:12:55.949,371] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:12:55.949,462] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:12:55.949,584] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:56.035,705] <dbg> app.main: main thread still running
00> [00:12:56.154,724] <dbg> app.sensor: sensor didMeasure
00> [00:12:56.199,645] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:56.199,737] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:56.199,951] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:12:56.200,286] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:12:56.200,653] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=true (for 6000 more secs), hasServices=false, hasReadP~
00> [00:12:56.200,927] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=false, hasReadPayload=false
00> [00:12:56.201,080] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:12:56.201,171] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:12:56.201,293] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:12:56.201,354] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:12:56.201,507] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:12:56.201,629] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,79:b2:a6:88:ab:60
00> [00:12:56.202,331] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLETransmitter,Stop advertising completed successfully
00> [00:12:56.202,423] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:12:56.202,636] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:12:56.202,728] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,79:B2:A6:88:AB:60 (random)
00> [00:12:56.203,277] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:12:56.203,369] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:12:56.427,185] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:12:56.427,459] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,79:b2:a6:88:ab:60
00> [00:12:56.429,260] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection successful
00> [00:12:56.429,595] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:12:56.429,687] <dbg> heraldlogger.log: engine,coordinator, - Prereq satisfied
00> [00:12:56.429,779] <dbg> heraldlogger.log: engine,coordinator,All satisfied, calling activity
00> [00:12:56.429,962] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Attempting GATT service discovery
00> [00:12:56.430,145] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Service discovery succeeded... now do something with it in the callback!
00> [00:12:58.035,766] <dbg> app.main: main thread still running
00> [00:12:58.728,729] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,The GATT discovery procedure succeeded
00> [00:12:58.729,034] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,    - FOUND Herald ios signal characteristic. logging.
00> [00:12:58.729,156] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,    - FOUND Herald read characteristic. Reading.
00> [00:12:58.738,159] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:58.738,220] <dbg> app.herald_entry: herald thread still running. Iteration: 2400
00> [00:12:58.740,905] <dbg> heraldlogger.log: herald,LoggingAnalysisDelegate,New Sample Recorded.
00> [00:12:58.991,180] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:58.991,271] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:58.991,485] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:12:58.991,851] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:12:58.992,187] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=true (for 4000 more secs), hasServices=false, hasReadP~
00> [00:12:58.992,492] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=false
00> [00:12:58.992,645] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:12:58.992,736] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:12:58.992,858] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:12:58.992,919] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:12:58.993,041] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:12:58.993,164] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,79:b2:a6:88:ab:60
00> [00:12:58.993,255] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - Existing connection exists! Reusing.
00> [00:12:58.993,377] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection successful
00> [00:12:58.993,713] <dbg> heraldlogger.log: engine,coordinator,Activity herald-read-payload
00> [00:12:58.993,804] <dbg> heraldlogger.log: engine,coordinator, - Prereq satisfied
00> [00:12:58.993,896] <dbg> heraldlogger.log: engine,coordinator,All satisfied, calling activity
00> [00:12:58.994,079] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:59.244,201] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:59.244,293] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:59.244,506] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:12:59.244,873] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:12:59.245,239] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=true (for 3000 more secs), hasServices=false, hasReadP~
00> [00:12:59.245,513] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=false
00> [00:12:59.245,666] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:12:59.245,758] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:12:59.245,880] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:12:59.245,941] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:12:59.246,063] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:12:59.246,215] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,79:b2:a6:88:ab:60
00> [00:12:59.246,307] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - Existing connection exists! Reusing.
00> [00:12:59.246,429] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection successful
00> [00:12:59.246,765] <dbg> heraldlogger.log: engine,coordinator,Activity herald-read-payload
00> [00:12:59.246,856] <dbg> heraldlogger.log: engine,coordinator, - Prereq satisfied
00> [00:12:59.246,948] <dbg> heraldlogger.log: engine,coordinator,All satisfied, calling activity
00> [00:12:59.247,161] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:59.497,253] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:59.497,344] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:59.497,558] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:12:59.497,924] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:12:59.498,291] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=true (for 3000 more secs), hasServices=false, hasReadP~
00> [00:12:59.498,565] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=false
00> [00:12:59.498,748] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:12:59.498,809] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:12:59.498,931] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:12:59.499,023] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:12:59.499,114] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:12:59.499,267] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,79:b2:a6:88:ab:60
00> [00:12:59.499,359] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - Existing connection exists! Reusing.
00> [00:12:59.499,481] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection successful
00> [00:12:59.499,816] <dbg> heraldlogger.log: engine,coordinator,Activity herald-read-payload
00> [00:12:59.499,908] <dbg> heraldlogger.log: engine,coordinator, - Prereq satisfied
00> [00:12:59.500,000] <dbg> heraldlogger.log: engine,coordinator,All satisfied, calling activity
00> [00:12:59.500,213] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:59.728,942] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Finished reading CHAR read payload:-
00> [00:12:59.729,339] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,917c00300065005400414e657966674458736e344131374a2b414e657966674458736e344131374a2b414e657966674458736e344131374a2b414e6579666744~
00> [00:12:59.730,010] <dbg> app.sensor: sensor didRead: 60ab88a6b279 with payload: 917c00300065005400414e657966674458736e344131374a2b414e657966674458736e344131374a2b414e657966674458736e344131374a2b414e657966674458736e344131374a2b414e657966674~
00> [00:12:59.730,041] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:12:59.750,305] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:12:59.750,396] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:12:59.750,610] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Current connection states cached:-
00> [00:12:59.750,793] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - 60ab88a6b279 state: connected, connection is null: false
00> [00:12:59.752,868] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLETransmitter,Start advertising completed successfully
00> [00:12:59.752,990] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Found connection to remove
00> [00:12:59.753,082] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,closeConnection call for ADDR:-
00> [00:12:59.753,326] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,00:00:00:00:00:00 (public)
00> [00:12:59.753,631] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:12:59.929,016] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,********** Zephyr disconnection callback. Mac of disconnected:
00> [00:12:59.929,290] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,79:b2:a6:88:ab:60
00> [00:12:59.929,382] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Disconnection: Reason value:-
00> [00:12:59.929,473] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,22
00> [00:13:00.003,723] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:00.003,814] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:00.004,028] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Current connection states cached:-
00> [00:13:00.004,211] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - 60ab88a6b279 state: disconnected, connection is null: true
00> [00:13:00.004,516] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:00.035,827] <dbg> app.main: main thread still running
00> [00:13:00.254,608] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:00.254,699] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:00.255,096] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:00.505,187] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:00.505,279] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:00.505,645] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:00.755,737] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:00.755,828] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:00.756,195] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:00.875,457] <dbg> app.sensor: sensor didMeasure
00> [00:13:00.875,488] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:01.006,286] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:01.006,378] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:01.006,774] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:01.256,866] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:01.256,958] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:01.257,080] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:01.257,354] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:01.507,446] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:01.507,537] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:01.507,659] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:01.507,934] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:01.758,026] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:01.758,117] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:01.758,239] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:01.758,514] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:02.008,605] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:02.008,697] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:02.008,819] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:02.009,155] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:02.009,246] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:02.009,368] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:02.035,888] <dbg> app.main: main thread still running
00> [00:13:02.259,460] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:02.259,552] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:02.259,674] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:02.260,009] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:02.260,101] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:02.260,223] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:02.510,314] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:02.510,406] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:02.510,528] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:02.510,894] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:02.510,955] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:02.511,077] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:02.761,169] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:02.761,260] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:02.761,413] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:02.761,749] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:02.761,810] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:02.761,932] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:03.012,023] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:03.012,115] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:03.012,237] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:03.012,573] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:03.012,664] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:03.012,786] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:03.262,878] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:03.262,969] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:03.263,092] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:03.263,427] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:03.263,519] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:03.263,641] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:03.513,732] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:03.513,824] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:03.513,946] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:03.514,282] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:03.514,373] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:03.514,495] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:03.764,587] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:03.764,678] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:03.765,045] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:13:03.765,380] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:13:03.765,686] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=false, hasServices=false, hasReadPayload=false
00> [00:13:03.766,326] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c0030006500540~
00> [00:13:03.766,510] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:13:03.766,571] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:13:03.766,693] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:13:03.766,754] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:13:03.766,906] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:13:03.767,028] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:13:03.767,791] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLETransmitter,Stop advertising completed successfully
00> [00:13:03.767,883] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:13:03.768,096] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:13:03.768,188] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:D5:0B:74:FA:CA (random)
00> [00:13:03.768,737] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:13:03.768,829] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:13:04.035,949] <dbg> app.main: main thread still running
00> [00:13:06.036,010] <dbg> app.main: main thread still running
00> [00:13:06.768,798] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:13:06.769,073] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:13:06.769,195] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Connected: Error value:-
00> [00:13:06.769,287] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2
00> [00:13:06.779,388] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection UNSUCCESSFUL
00> [00:13:06.779,693] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:06.779,785] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:06.779,876] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:06.779,907] <dbg> app.herald_entry: herald thread still running. Iteration: 2420
00> [00:13:06.782,592] <dbg> heraldlogger.log: herald,LoggingAnalysisDelegate,New Sample Recorded.
00> [00:13:07.032,867] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:07.032,958] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:07.033,203] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:13:07.033,569] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=662, pseudoAddress=unset, os=ios, ignore=true (for 0 more secs), hasServices=true, hasReadPayload=~
00> [00:13:07.033,843] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=false, hasServices=false, hasReadPayload=false
00> [00:13:07.034,515] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c0030006500540~
00> [00:13:07.034,667] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:13:07.034,759] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:13:07.034,851] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:13:07.034,942] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:13:07.035,064] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:13:07.035,186] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:13:07.035,308] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:13:07.035,522] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:13:07.035,614] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:D5:0B:74:FA:CA (random)
00> [00:13:07.036,163] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:13:07.036,254] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:13:08.036,071] <dbg> app.main: main thread still running
00> [00:13:10.036,224] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:13:10.036,499] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:13:10.036,621] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Connected: Error value:-
00> [00:13:10.036,712] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2
00> [00:13:10.036,773] <dbg> app.main: main thread still running
00> [00:13:10.046,813] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection UNSUCCESSFUL
00> [00:13:10.047,241] <dbg> heraldlogger.log: heraldble,coordinationprovider,taskRemoveExpiredDevices (remove=2899bf8e3b4a)
00> [00:13:10.047,363] <dbg> heraldlogger.log: heraldble,coordinationprovider,  db size has reduced
00> [00:13:10.047,637] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:10.047,698] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:10.047,821] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:10.297,943] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:10.298,034] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:10.298,278] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:13:10.298,583] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=false, hasServices=false, hasReadPayload=false
00> [00:13:10.299,224] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c0030006500540~
00> [00:13:10.299,377] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:13:10.299,468] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:13:10.299,591] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:13:10.299,652] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:13:10.299,774] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:13:10.299,926] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:13:10.300,018] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:13:10.300,231] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:13:10.300,323] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:D5:0B:74:FA:CA (random)
00> [00:13:10.300,872] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:13:10.300,964] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:13:12.036,834] <dbg> app.main: main thread still running
00> [00:13:13.300,933] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:13:13.301,208] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:13:13.301,330] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Connected: Error value:-
00> [00:13:13.301,422] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2
00> [00:13:13.311,523] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection UNSUCCESSFUL
00> [00:13:13.311,828] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:13.311,889] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:13.312,011] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:13.562,103] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:13.562,194] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:13.562,438] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:13:13.562,744] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=false, hasServices=false, hasReadPayload=false
00> [00:13:13.563,385] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c0030006500540~
00> [00:13:13.563,537] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:13:13.563,629] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:13:13.563,751] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:13:13.563,812] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:13:13.563,903] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:13:13.564,056] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:13:13.564,147] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:13:13.564,392] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:13:13.564,483] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:D5:0B:74:FA:CA (random)
00> [00:13:13.565,002] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:13:13.565,124] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:13:14.036,895] <dbg> app.main: main thread still running
00> [00:13:16.036,956] <dbg> app.main: main thread still running
00> [00:13:16.565,063] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:13:16.565,338] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:13:16.565,460] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Connected: Error value:-
00> [00:13:16.565,551] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2
00> [00:13:16.575,561] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection UNSUCCESSFUL
00> [00:13:16.575,866] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:16.575,927] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:16.576,049] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:16.826,141] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:16.826,232] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:16.826,477] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:13:16.826,782] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=false, hasServices=false, hasReadPayload=false
00> [00:13:16.827,423] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c0030006500540~
00> [00:13:16.827,575] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:13:16.827,667] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:13:16.827,789] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:13:16.827,850] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:13:16.827,941] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:13:16.828,094] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:13:16.828,186] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:13:16.828,430] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:13:16.828,521] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:D5:0B:74:FA:CA (random)
00> [00:13:16.829,071] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:13:16.829,162] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:13:18.037,017] <dbg> app.main: main thread still running
00> [00:13:19.829,101] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:13:19.829,376] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,45:d5:0b:74:fa:ca
00> [00:13:19.829,498] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Connected: Error value:-
00> [00:13:19.829,589] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2
00> [00:13:19.839,721] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection UNSUCCESSFUL
00> [00:13:19.839,996] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:19.840,057] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:19.840,179] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:20.037,078] <dbg> app.main: main thread still running
00> [00:13:20.090,270] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:20.090,362] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:20.090,606] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Current connection states cached:-
00> [00:13:20.090,789] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - cafa740bd545 state: disconnected, connection is null: true
00> [00:13:20.092,498] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLETransmitter,Start advertising completed successfully
00> [00:13:20.092,773] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:20.342,864] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:20.342,956] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:20.343,322] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:20.465,179] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,New target identified: f32fc270d07d
00> [00:13:20.465,332] <dbg> app.sensor: sensor didDetect: f32fc270d07d
00> [00:13:20.465,484] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,Found apple device
00> [00:13:20.465,576] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,191a10e9ba44
00> [00:13:20.465,698] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase, - Unknown apple device... Logging so we can discover services later
00> [00:13:20.465,942] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,New address FROM SCAN:-
00> [00:13:20.466,033] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,7D:D0:70:C2:2F:F3 (random)
00> [00:13:20.466,064] <dbg> app.sensor: sensor didMeasure
00> [00:13:20.593,414] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:20.593,505] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:20.593,750] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:13:20.594,055] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 7d:d0:70:c2:2f:f3, created=800, pseudoAddress=unset, os=ios, ignore=false, hasServices=false, hasReadPayload=false
00> [00:13:20.594,390] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=true (for 60000 more secs), hasServices=false, hasRead~
00> [00:13:20.595,062] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c0030006500540~
00> [00:13:20.595,214] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:13:20.595,275] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:13:20.595,397] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:13:20.595,458] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:13:20.595,611] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:13:20.595,733] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,7d:d0:70:c2:2f:f3
00> [00:13:20.596,435] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLETransmitter,Stop advertising completed successfully
00> [00:13:20.596,527] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:13:20.596,740] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:13:20.596,832] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,7D:D0:70:C2:2F:F3 (random)
00> [00:13:20.597,381] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:13:20.597,503] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:13:20.797,821] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:13:20.798,095] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,7d:d0:70:c2:2f:f3
00> [00:13:20.798,675] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection successful
00> [00:13:20.799,194] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:20.799,285] <dbg> heraldlogger.log: engine,coordinator, - Prereq satisfied
00> [00:13:20.799,377] <dbg> heraldlogger.log: engine,coordinator,All satisfied, calling activity
00> [00:13:20.799,560] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Attempting GATT service discovery
00> [00:13:20.799,743] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Service discovery succeeded... now do something with it in the callback!
00> [00:13:22.037,139] <dbg> app.main: main thread still running
00> [00:13:23.099,365] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,The GATT discovery procedure succeeded
00> [00:13:23.099,670] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,    - FOUND Herald ios signal characteristic. logging.
00> [00:13:23.099,792] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,    - FOUND Herald read characteristic. Reading.
00> [00:13:23.107,727] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:23.357,849] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:23.357,940] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:23.358,184] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:13:23.358,489] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 7d:d0:70:c2:2f:f3, created=800, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=false
00> [00:13:23.358,856] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=true (for 57000 more secs), hasServices=false, hasRead~
00> [00:13:23.359,497] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c0030006500540~
00> [00:13:23.359,680] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:13:23.359,771] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:13:23.359,863] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:13:23.359,924] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:13:23.360,046] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:13:23.360,198] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,7d:d0:70:c2:2f:f3
00> [00:13:23.360,290] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - Existing connection exists! Reusing.
00> [00:13:23.360,382] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection successful
00> [00:13:23.360,778] <dbg> heraldlogger.log: engine,coordinator,Activity herald-read-payload
00> [00:13:23.360,870] <dbg> heraldlogger.log: engine,coordinator, - Prereq satisfied
00> [00:13:23.360,961] <dbg> heraldlogger.log: engine,coordinator,All satisfied, calling activity
00> [00:13:23.361,145] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:23.611,267] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:23.611,358] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:23.611,602] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:13:23.611,907] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 7d:d0:70:c2:2f:f3, created=800, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=false
00> [00:13:23.612,274] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=true (for 57000 more secs), hasServices=false, hasRead~
00> [00:13:23.612,945] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c0030006500540~
00> [00:13:23.613,098] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:13:23.613,189] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:13:23.613,311] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:13:23.613,372] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:13:23.613,494] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:13:23.613,647] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,7d:d0:70:c2:2f:f3
00> [00:13:23.613,739] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - Existing connection exists! Reusing.
00> [00:13:23.613,861] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection successful
00> [00:13:23.614,227] <dbg> heraldlogger.log: engine,coordinator,Activity herald-read-payload
00> [00:13:23.614,318] <dbg> heraldlogger.log: engine,coordinator, - Prereq satisfied
00> [00:13:23.614,410] <dbg> heraldlogger.log: engine,coordinator,All satisfied, calling activity
00> [00:13:23.614,624] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:23.864,746] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:23.864,837] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:23.864,959] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:23.865,081] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Current connection states cached:-
00> [00:13:23.865,234] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - f32fc270d07d state: connected, connection is null: false
00> [00:13:23.867,279] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLETransmitter,Start advertising completed successfully
00> [00:13:23.867,401] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Found connection to remove
00> [00:13:23.867,492] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,closeConnection call for ADDR:-
00> [00:13:23.867,736] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,00:00:00:00:00:00 (public)
00> [00:13:23.868,133] <dbg> heraldlogger.log: engine,coordinator,Activity herald-read-payload
00> [00:13:23.868,225] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:23.868,347] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:23.899,322] <wrn> bt_att: Not connected
00> [00:13:23.899,353] <err> bt_conn: not connected!
00> [00:13:23.900,146] <wrn> bt_att: Not connected
00> [00:13:23.900,329] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Finished reading CHAR read payload:-
00> [00:13:23.900,482] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,6e344131374a2b414e657966674458736e344131374a
00> [00:13:23.900,970] <dbg> app.sensor: sensor didRead: f32fc270d07d with payload: 6e344131374a2b414e657966674458736e344131374a
00> [00:13:23.900,970] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:23.999,664] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,********** Zephyr disconnection callback. Mac of disconnected:
00> [00:13:23.999,938] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,7d:d0:70:c2:2f:f3
00> [00:13:24.000,030] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Disconnection: Reason value:-
00> [00:13:24.000,122] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,22
00> [00:13:24.037,200] <dbg> app.main: main thread still running
00> [00:13:24.118,408] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:24.118,499] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:24.118,621] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:24.118,713] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Current connection states cached:-
00> [00:13:24.118,865] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - f32fc270d07d state: disconnected, connection is null: true
00> [00:13:24.119,201] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:24.221,710] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,New target identified: 2899bf8e3b4a
00> [00:13:24.221,862] <dbg> app.sensor: sensor didDetect: 2899bf8e3b4a
00> [00:13:24.222,045] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,Found apple device
00> [00:13:24.222,137] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,081c940907
00> [00:13:24.222,259] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase, - Unknown apple device... Logging so we can discover services later
00> [00:13:24.222,503] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,New address FROM SCAN:-
00> [00:13:24.222,595] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,4A:3B:8E:BF:99:28 (random)
00> [00:13:24.222,625] <dbg> app.sensor: sensor didMeasure
00> [00:13:24.274,841] <dbg> app.sensor: sensor didMeasure
00> [00:13:24.274,871] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:24.369,293] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:24.369,384] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:24.369,506] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:24.369,903] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:24.369,995] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:24.370,086] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:24.620,178] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:24.620,269] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:24.620,391] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:24.620,941] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:24.621,032] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:24.621,154] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:24.690,490] <dbg> app.sensor: sensor didMeasure
00> [00:13:24.690,490] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:24.871,246] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:24.871,337] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:24.871,459] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:24.871,856] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:24.871,917] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:24.872,039] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:24.873,016] <dbg> app.sensor: sensor didMeasure
00> [00:13:24.873,016] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:25.057,342] <dbg> app.sensor: sensor didMeasure
00> [00:13:25.057,373] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:25.122,131] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:25.122,222] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:25.122,344] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:25.122,741] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:25.122,802] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:25.122,924] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:25.373,016] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:25.373,107] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:25.373,229] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:25.373,626] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:25.373,718] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:25.373,840] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:25.423,004] <dbg> app.sensor: sensor didMeasure
00> [00:13:25.423,034] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:25.623,931] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:25.624,023] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:25.624,145] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:25.624,542] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:25.624,633] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:25.624,725] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:25.710,449] <dbg> app.sensor: sensor didMeasure
00> [00:13:25.710,479] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:25.874,816] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:25.874,908] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:25.875,030] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:25.875,427] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:25.875,518] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:25.875,640] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:26.037,261] <dbg> app.main: main thread still running
00> [00:13:26.125,732] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:26.125,823] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:26.126,007] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:26.126,434] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:26.126,495] <dbg> heraldlogger.log: engine,coordinator, - Prereq NOT SATISFIED
00> [00:13:26.126,617] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:26.259,246] <dbg> app.sensor: sensor didMeasure
00> [00:13:26.259,277] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:26.376,708] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:26.376,800] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:26.377,075] <dbg> heraldlogger.log: heraldble,coordinationprovider,BLE DATABASE CURRENT CONTENTS:-
00> [00:13:26.377,471] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 7d:d0:70:c2:2f:f3, created=800, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=6e344131374a2b414~
00> [00:13:26.377,838] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 45:d5:0b:74:fa:ca, created=17, pseudoAddress=unset, os=unknown, ignore=true (for 54000 more secs), hasServices=false, hasRead~
00> [00:13:26.378,509] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 79:b2:a6:88:ab:60, created=775, pseudoAddress=unset, os=ios, ignore=false, hasServices=true, hasReadPayload=917c0030006500540~
00> [00:13:26.378,784] <dbg> heraldlogger.log: heraldble,coordinationprovider, - 4a:3b:8e:bf:99:28, created=804, pseudoAddress=unset, os=ios, ignore=false, hasServices=false, hasReadPayload=false
00> [00:13:26.378,936] <dbg> heraldlogger.log: heraldble,coordinationprovider,Provisioning connections
00> [00:13:26.379,028] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Satisfying prereq
00> [00:13:26.379,150] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Have defined target for this prerequisite. Requesting connection be made available.
00> [00:13:26.379,211] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,openConnection
00> [00:13:26.379,364] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Address copied. Constituted as:-
00> [00:13:26.379,486] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,4a:3b:8e:bf:99:28
00> [00:13:26.380,187] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLETransmitter,Stop advertising completed successfully
00> [00:13:26.380,279] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - No existing connection. Attempting to connect
00> [00:13:26.380,493] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,ADDR AS STRING in openConnection:-
00> [00:13:26.380,584] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,4A:3B:8E:BF:99:28 (random)
00> [00:13:26.381,103] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - post connection attempt
00> [00:13:26.381,225] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Zephyr waitWithTimeout for new connection
00> [00:13:26.394,958] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,**************** Zephyr connection callback. Mac of connected:
00> [00:13:26.395,233] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,4a:3b:8e:bf:99:28
00> [00:13:26.406,402] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Ensuring connection successful
00> [00:13:26.406,829] <dbg> heraldlogger.log: engine,coordinator,Activity herald-service-discovery
00> [00:13:26.406,921] <dbg> heraldlogger.log: engine,coordinator, - Prereq satisfied
00> [00:13:26.406,982] <dbg> heraldlogger.log: engine,coordinator,All satisfied, calling activity
00> [00:13:26.407,196] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Attempting GATT service discovery
00> [00:13:26.407,348] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Service discovery succeeded... now do something with it in the callback!
00> [00:13:27.196,655] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,The service could not be found during the discovery. Ignoring device:
00> [00:13:27.196,746] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,2899bf8e3b4a
00> [00:13:27.210,235] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:27.210,296] <dbg> app.herald_entry: herald thread still running. Iteration: 2440
00> [00:13:27.213,012] <dbg> heraldlogger.log: herald,LoggingAnalysisDelegate,New Sample Recorded.
00> [00:13:27.214,324] <dbg> heraldlogger.log: herald,LoggingAnalysisDelegate,New Sample Recorded.
00> [00:13:27.464,477] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:27.464,569] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:27.464,813] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Current connection states cached:-
00> [00:13:27.464,996] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - 2899bf8e3b4a state: connected, connection is null: false
00> [00:13:27.467,041] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLETransmitter,Start advertising completed successfully
00> [00:13:27.467,163] <dbg> heraldlogger.log: heraldble,coordinationprovider, - Found connection to remove
00> [00:13:27.467,254] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,closeConnection call for ADDR:-
00> [00:13:27.467,498] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,00:00:00:00:00:00 (public)
00> [00:13:27.467,864] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:27.596,649] <wrn> bt_att: Not connected
00> [00:13:27.596,679] <err> bt_conn: not connected!
00> [00:13:27.597,045] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,********** Zephyr disconnection callback. Mac of disconnected:
00> [00:13:27.597,320] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,4a:3b:8e:bf:99:28
00> [00:13:27.597,412] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Disconnection: Reason value:-
00> [00:13:27.597,503] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,22
00> [00:13:27.687,347] <dbg> app.sensor: sensor didMeasure
00> [00:13:27.687,377] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:27.717,926] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:27.718,017] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:27.718,292] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,Current connection states cached:-
00> [00:13:27.718,475] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver, - 2899bf8e3b4a state: disconnected, connection is null: true
00> [00:13:27.718,811] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:27.968,902] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:27.968,994] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:27.969,451] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:28.037,322] <dbg> app.main: main thread still running
00> [00:13:28.056,701] <dbg> app.sensor: sensor didMeasure
00> [00:13:28.056,732] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:28.219,543] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:28.219,635] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:28.220,092] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:28.237,304] <dbg> app.sensor: sensor didMeasure
00> [00:13:28.237,335] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:28.470,184] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:28.470,275] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:28.470,733] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:28.720,825] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:28.720,916] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:28.721,374] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:28.786,682] <dbg> app.sensor: sensor didMeasure
00> [00:13:28.786,682] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:28.971,466] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:28.971,557] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:28.972,015] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:29.222,106] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:29.222,198] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:29.222,656] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:29.472,747] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:29.472,839] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:29.473,297] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:29.723,388] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:29.723,480] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:29.723,602] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:29.723,907] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:29.974,029] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:29.974,121] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:29.974,243] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:29.974,578] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:30.037,384] <dbg> app.main: main thread still running
00> [00:13:30.224,670] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:30.224,761] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:30.224,884] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:30.225,189] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:30.475,280] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:30.475,402] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:30.475,585] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:30.475,921] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:30.647,918] <dbg> app.sensor: sensor didMeasure
00> [00:13:30.647,949] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:30.726,013] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:30.726,104] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:30.726,226] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:30.726,562] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:30.886,688] <dbg> app.sensor: sensor didMeasure
00> [00:13:30.886,688] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:30.976,654] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:30.976,745] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:30.976,867] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:30.977,203] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:31.066,680] <dbg> app.sensor: sensor didMeasure
00> [00:13:31.066,711] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:31.227,294] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:31.227,386] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:31.227,508] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:31.227,813] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:31.248,535] <dbg> app.sensor: sensor didMeasure
00> [00:13:31.248,565] <dbg> app.sensor: sensor didMeasure withPayload
00> [00:13:31.477,905] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:31.477,996] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:31.478,118] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:31.478,454] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:31.728,546] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:31.728,698] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:31.728,820] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:31.729,125] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:31.979,217] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:31.979,309] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:31.979,431] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:31.979,766] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:32.037,445] <dbg> app.main: main thread still running
00> [00:13:32.229,827] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:32.229,919] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:32.230,377] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:32.230,407] <dbg> app.herald_entry: herald thread still running. Iteration: 2460
00> [00:13:32.233,093] <dbg> heraldlogger.log: herald,LoggingAnalysisDelegate,New Sample Recorded.
00> [00:13:32.234,649] <dbg> heraldlogger.log: herald,LoggingAnalysisDelegate,New Sample Recorded.
00> [00:13:32.484,802] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:32.484,893] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:32.485,351] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:32.735,443] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:32.735,534] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:32.735,992] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:32.986,083] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:32.986,175] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:32.986,663] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:33.236,755] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:33.236,846] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:33.237,304] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:33.487,396] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:33.487,487] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:33.487,945] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:33.738,037] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:33.738,128] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:33.738,586] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:33.988,677] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:33.988,769] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:33.989,227] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:34.037,506] <dbg> app.main: main thread still running
00> [00:13:34.239,318] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:34.239,410] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:34.239,868] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:34.489,959] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:34.490,051] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:34.490,509] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:34.740,600] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:34.740,692] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:34.740,814] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:34.741,149] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:34.991,241] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:34.991,333] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:34.991,485] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:34.991,790] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:35.241,882] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:35.241,973] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:35.242,095] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:35.242,401] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:35.492,492] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:35.492,584] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:35.492,706] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:35.493,041] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:35.743,133] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:35.743,225] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:35.743,347] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:35.743,682] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:35.993,743] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:35.993,835] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:35.993,957] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:35.994,293] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:36.037,567] <dbg> app.main: main thread still running
00> [00:13:36.244,354] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:36.244,445] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:36.244,567] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:36.244,903] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:36.494,995] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:36.495,086] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:36.495,239] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:36.495,544] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:36.745,635] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:36.745,727] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:36.745,849] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:36.746,185] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:36.996,276] <dbg> app.herald_entry: Calling Sensor Array iteration
00> [00:13:36.996,368] <dbg> heraldlogger.log: engine,coordinator,################# ITERATION #################
00> [00:13:36.996,490] <dbg> heraldlogger.log: heraldble,coordinationprovider,###### Skipping connections - giving advertising & scanning a chance
00> [00:13:36.996,826] <dbg> heraldlogger.log: engine,coordinator,#################    END    #################
00> [00:13:37.012,145] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,New target identified: 00a51088f37b
00> [00:13:37.012,268] <dbg> app.sensor: sensor didDetect: 00a51088f37b
00> [00:13:37.012,451] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,Found apple device
00> [00:13:37.012,542] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase,1d1a9a2ef551
00> [00:13:37.012,634] <dbg> heraldlogger.log: herald,ConcreteBLEDatabase, - Unknown apple device... Logging so we can discover services later
00> [00:13:37.013,031] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,New address FROM SCAN:-
00> [00:13:37.013,092] <dbg> heraldlogger.log: Sensor,BLE.ConcreteBLEReceiver,7B:F3:88:10:A5:00 (random)
00> [00:13:37.013,122] <dbg> app.sensor: sensor didMeasure
(Connection lost)

Provide Risk Integration API support

Please start with a use case description for a USER of this enhancement

[Who] As an epidemiologist or PHA

[What] I need to calculate accurate risk estimation based on distance, time, and other environmental factors and aggregate this in to a current risk of infection score

[Value] In order to achieve detection of a risk threshold being reached/exceeded and give health advice to a user

Describe the potential solution you'd like

Taking raw data and distance estimation results (See #18 ), provide a risk integration function that can execute one or more risk models on the fly to calculate a risk score. Support, but keep separate, the concept of social mixing (non confirmed risk), vs. exposure to someone with symptoms vs. exposure to a confirmed case.

Allow the subsequent re-calculation based on received data on the state of a recent contact. Allow this to execute on-device (E.g. wearable) based on received token data.

Describe alternatives you've considered

A clear and concise description of any alternative solutions or features you've considered.

Additional context

  • Base default models on existing models (E.g. Oxford Risk Model)
  • Support exposure token mechanism from GAEN and Herald Secured payload approaches
  • Ensure this uses the minimum amount of RAM and storage space. At least 14 days worth of raw+processed data to be fit in to only 1MB of off-SOC FLASH storage.

Relative priority

HIGH - Once #18 has been implemented.

C++ API feedback

Please comment on this issue.

Feedback requested:-

  • Ease of use
  • C++17 API constructs (PIMPL, class hiererchies vs. templated classes)
  • Utility classes that would be useful
  • Adapter patterns that would be useful

Feedback out of scope:-

  • Code style
  • Unsupported platforms
  • Requests for compatibility with specs before C++17
  • Anything off topic for Project aims

Feedback will be applied before the v1.2 release to the main branch.

Herald venue beacon demo app

[Who] As a venue (E.g. restaurant) owner
[What] I want to provide my customers with an automated check-in/check-out service instead of QR codes
[Value] So they can accurately diarise their presence on their phones, which increases accuracy and privacy of the information, placing my customers in control

Add max risk reached analysis delegate

Please start with a use case description for a USER of this enhancement

[Who] As a developer-epidemiologist

[What] I need to ignore devices once their individual risk exceeds a specified threshold

[Value] In order to optimise the processing and memory use so I can ignore exceeded risk individuals

Describe the potential solution you'd like
An analysis delegate that is BLEDatabase aware to 'ignore device' (mac and payload) after a threshold has been reached

Describe alternatives you've considered

Later: Based on a per-risk analysis rather than single risk analysis score (i.e. support multiple risk/diseases)

Additional context

Helps optimise memory use and processing use in BLEDatabase.

Relative priority

Medium, v1.3 release.

Periodic code review - Feb 2021

Manual periodic review of all code files to look for any code issues/smells that may have crept in through incremental updates to the code base.

Raw value source and sink

[Who] As an epidemiologist-developer
[What] I want to be able to read and write a simple sample format (Date,value) for any input/output for the data analysis API
[Value] To be able to quickly supply test data and evaluate results in a simple, consistent format

Desired Implementation

  • Source: CSV file date,value to SampleList<Sample>
  • Sink: Opposite of the above

Specify the file name in the constructor of the source/sink. (Single file only)

Stack overflow when running herald-wearable on nrf5340dk

I am experiencing a stack overflow when running the sample project herald-wearable on the nrf5340DK. The only changes made to the clean repository is to remove security in the configuration and comment it out in the main.c. I then comment out all of the code blocks marked "PRODUCTION ONLY" and uncomment all the blocks marked "TESTING ONLY".

The way I can fix this is by adding the following configuration option:
CONFIG_BT_RX_STACK_SIZE=8192

RSSI-to-distance CSV rssi value source

[Who] As an epidemiologist-developer
[What] I want to load the Edison robot sourced rssi/distance data format
[Value] In order to apply this data to my algorithms under test to allow me to validate their efficacy

Desired implementation

  • Load CSV data in to SampleList<Sample> to pass to Analysis Runner
  • Be memory efficient (no extraneous member created/destroyed repeatedly)

Other context

CSV format as per here: https://github.com/vmware/herald-analysis/tree/develop/reference-data/rssi-raw-edison

Allows testing of value source API

Depends upon #29

Check that Analysis API doesn't generate new sample based on old data

Once a device is not seen in adverts the analysis API shouldn't generate new distance/risk data for it if no new data has arrived. Add this check in to the API if it isn't already being done. Add tests to verify this behaviour. Apply to analyser NOT the list (some analysers should look at past data).

No longer advertises Herald service with TxPower enabled

Describe the bug

Logic has changed recently in the C++ API to provide TxPower in the advert packet. Due to advert packet restrictions on legacy BLe 4.0 devices this meant the Herald service was only advertised via its Gatt service. This causes iOS and Android versions of herald to not regard the wearable/beacons as Herald devices and so they are ignored.

Smartphone and App information (REQUIRED):

Introduced in a recent develop branch on C++. No need for code changes in iOS or Android code to fix.

Severity

Severe. To be fixed before v1.2.0 of the C++ API released.

Test using libc instead of newlibc

libc is Zephyr's default. It's not fully ANSI C compliant but does very well at minimising compiled object size and especially memory usage.

newlibc is also available but builds everything in. This costs ~3.5k in the binary and ~16k in RAM according to Zephyr RTOS project estimates.

We currently use newlibc due to early-days issues with standard C99 types in the early sample apps. If we can use libc instead then that will save us a significant amount of RAM at runtime.

  • Disable newlibc and see what changes are needed for the C++ code and sample apps to work with libc
  • If not disruptive, move to libc as the default (alter config file includes accordingly)
  • Perform a full range of tests and wearable/beacon scenarios to confirm
  • Report before/after binary size and memory use estimates (Note: Estimates are generally stack only)

Algorithm evaluation helpers and CLI example

[Who] As a DCT app researcher

[What] I need to evaluate algorithms using a command line tool with lots of external source data

[Value] In order to evaluate any new algorithms under test, outside of a DCT app

Describe the potential solution you'd like

C++ CLI helpers and sample for loading RSSI data and device metadata, running specified algorithms, and outputting the results and metadata in a standard, consistent, format.

Describe alternatives you've considered

Doing this in Jupyter notebook and then converting to other languages - lots of test time, no API helpers - would take longer.

Additional context

None

Relative priority

MEDIUM (Not on the critical path, but very useful for evaluating accuracy using external tools and datasets.

Depends on #29

Task: Memory Optimisation

Follow the guide for the wearable sample as per:-

https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/app_memory.html#app-memory

  • Remove old devices from BLEDatabase after time exceeded
  • Remove unused low-level connections from BLEReceiver on Zephyr
  • Add max simultaneous connection support to BLECoordinator
  • Ensure Zephyr connections are being properly released (so connections are not starved)
  • Make max simultaneous tracked devices fixed at compile time in BLEDatabase
  • Add optimisation for almost-starved tracking devices (remove oldest)
  • Add remove remote initiated connections optimisation (for iOS clients)

C++ API parity

Bring up to parity with core classes, and with classes required for embedded devices.

Doesn't necessarily include all classes from iOS and Android - just those required to function as a beacon or embedded DCT device.

Add niceties to data analysis API

Please start with a use case description for a USER of this enhancement

[Who] As an epidemiologist-developer

[What] I need to easily pass parameters to the analysis API

[Value] In order to easily understand and use the API without a large amount of C++ experience or weird error messages

Describe the potential solution you'd like

Several minor improvements:-

Describe alternatives you've considered

N/A

Additional context

N/A

Relative priority

High - before first release and documentation is created.

Provide distance conversion API support

Please start with a use case description for a USER of this enhancement

[Who] As an epidemiologist

[What] I need to provide an accurate distance conversion from signal strength

[Value] In order to provide accurate risk integration

Describe the potential solution you'd like

Provide a mid-level API that acts as a Sensor Delegate, applies a distance conversion routine, and logs distance (with error) and duration for each contact.

Provide the ability to retrieve these records via query by payload content seen, and call an aggregation function over them.

Describe alternatives you've considered

Currently we provide Apps with the ability to do this themselves, but each app team has to implement their own data processing system. The suggested change would create a standardised yet pluggable API for this.

Additional context

See distance - RSSI data (1.8 million records) collected in Jan 2021.

  • Wearable devices have very small data storage -> Being able to map/reduce on the fly is highly desirable (and remove old saved data in RAM)
  • Make flexible enough so an individual data, running mean style data, can be applied in the pluggable algorithms
  • Research for existing algorithms in the wild and implement them as samples

Relative priority

HIGH - Basis of risk estimation. Needed especially on wearables given the small data storage area available.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.