EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+
+
If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
By default, EMBluetoothLowEnergyConnectionType will ‘discover’ devices that have a schema hash matching a schema in your application bundle.
+Set this flag to ‘YES’ for an instance of this class to discover all Emmoco BLE devices.
+NOTE: Most applications should not have this enabled.
A boolean indicating whether or not there is a connection with a device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionType.h
+
+
+
+
+
+
+
+
discoversAllEmmocoBLEDevices
+
+
+
+
+
By default, EMBluetoothLowEnergyConnectionType will ‘discover’ devices that have a schema hash matching a schema in your application bundle.
+Set this flag to ‘YES’ for an instance of this class to discover all Emmoco BLE devices.
+NOTE: Most applications should not have this enabled.
By default, EMBluetoothLowEnergyConnectionType will ‘discover’ devices that have a schema hash matching a schema in your application bundle.
+Set this flag to ‘YES’ for an instance of this class to discover all Emmoco BLE devices.
+NOTE: Most applications should not have this enabled.
EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+
+
If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+
+
If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
Creates a new EMTargetConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
Creates a new EMConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnection.h
+
+
+
+
+
+
+
+
initWithDevice:schema:
+
+
+
+
+
Creates a new EMTargetConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
the name of the target device, including one of the pre-defined prefixes
+
+
+
+
resourceSchema
+
the schema describing the resources available in this connection
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Creates a new EMTargetConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
@param automaticallyConnectsToLastDevice
+A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
@param automaticallyConnectsToLastDevice
+A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
@param automaticallyConnectsToLastDevice
+A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionListManager.h
+
+
+
+
+
+
+
+
devices
+
+
+
+
+
@property devices
+A list of devices that has been discovered as available by the connection list manager
@property backgroundUpdatesEnabled
+@description If you set this flag to “YES”, the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+Note: Accessing the connection manager in any way other is not recommended.
Tells EMConnectionManager to update its internal cache of schemas used for connection.
+@description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
Gets the embedded system protocol level from the schema used to connect to the device
+@description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Properties
+
+
+
+
backgroundUpdatesEnabled
+
+
+
+
+
@property backgroundUpdatesEnabled
+@description If you set this flag to “YES”, the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
@property backgroundUpdatesEnabled
+@description If you set this flag to “YES”, the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
+
+
+
+
Class Methods
+
+
+
+
sharedManager
+
+
+
+
+
Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+Note: Accessing the connection manager in any way other is not recommended.
+
+
+
+
+ (EMConnectionManager *)sharedManager
+
+
+
+
+
+
+
+
+
+
Discussion
+
Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+Note: Accessing the connection manager in any way other is not recommended.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
+
+
+
+
Instance Methods
+
+
+
+
addSchemaSearchForFilesInDirectory:
+
+
+
+
+
Tells the connection manager where it should look for schemas other than the NSBundle’s mainBundle
The time the connection manager should allow for a successful connection. After the specified time interval passes, the fail block will be called.
+
+
+
+
successBlock
+
The block to run after a successful connection
+
+
+
+
failBlock
+
The block to run if the connection fails
+@description The implementation of this method calls connectDevice:timeoutInterval:onSuccess:onFail: with a default time interval of 10 seconds
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Tells the connection manager to connect to a specific device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
connectedDevice
+
+
+
+
+
Returns an array of EMDeviceBasicDescription’s for the device that is actively connected
+
+
+
+
- (EMDeviceBasicDescription *)connectedDevice
+
+
+
+
+
+
+
+
+
+
Discussion
+
Returns an array of EMDeviceBasicDescription’s for the device that is actively connected
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
disconnectWithSuccess:onFail:
+
+
+
+
+
Tells the connection manager to disconnect from a specific device
Tells the connection manager to disconnect from a specific device
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
embeddedSystemProtocolLevel
+
+
+
+
+
Gets the embedded system protocol level from the schema used to connect to the device
+@description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+
+
+
+
- (NSNumber *)embeddedSystemProtocolLevel
+
+
+
+
+
+
+
+
+
+
Discussion
+
Gets the embedded system protocol level from the schema used to connect to the device
+@description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
forceConnectionWithDefaultSchema:
+
+
+
+
+
Forces the connection manager to connect to a device with the default schema
The device for the forced connection
+@description Use this method with extreme caution. Many undefined behaviors can come from using this method with a schema that isn’t an exact match for the specified device. EMConnectionManager uses this method internally. It is very rare that you will need to call this method directly.
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Forces the connection manager to connect to a device with the default schema
A full or partial schema hash string
+@description This method takes either a full hash or partial hash. If any schema begins with ‘hash string’, the file name in the bundle is returned. Returns nil if no matching schema was found in the bundle.
+If one or more schemas share ‘hashString’ at the beginning of their hash, the first path will be returned.
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Gives the schema name in the application bundle for a given hash string
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
schemaForConnectedDevice
+
+
+
+
+
Gets the schema for the connected device.
+@description Returns nil if no device is connected.
+
+
+
+
- (EMSchema *)schemaForConnectedDevice
+
+
+
+
+
+
+
+
+
+
Discussion
+
Gets the schema for the connected device.
+@description Returns nil if no device is connected.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
schemaHashForConnectedDevice
+
+
+
+
+
Returns a version of the the schema hash from a connected device’s firmware as it appears on em-hub
+
+
+
+
- (NSString *)schemaHashForConnectedDevice
+
+
+
+
+
+
+
+
+
+
Discussion
+
Returns a version of the the schema hash from a connected device’s firmware as it appears on em-hub
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
updateInternalSchemaCache
+
+
+
+
+
Tells EMConnectionManager to update its internal cache of schemas used for connection.
+@description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
+
+
+
+
- (void)updateInternalSchemaCache
+
+
+
+
+
+
+
+
+
+
Discussion
+
Tells EMConnectionManager to update its internal cache of schemas used for connection.
+@description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
writeValue:toResource:onSuccess:onFail:
+
+
+
+
+
Writes a value to a resource on a connected device
EMDeviceBasicDescription is a class used to describe basic device characteristics throughout the entire framework.
+All devices, regardless of connection type, will have these properties.
+
+
All classes implementing the EMConnectionType protocol will receive and deliver device information in the form of an EMDeviceBasicDescription.
An object taken from the advertise data based on the advertise resource in the device’s schema
+Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
The name of the schema file in your bundle that relates to this device.
+NOTE: Many devices do not broadcast this information. In this case, this property will not be set
+
+ property
+
+
+
+
+
+
+
+
+
+
+
+
+
Properties
+
+
+
+
advertiseData
+
+
+
+
+
Data that was discovered along with the device.
+Ex: When dealing with bluetooth, this is the advertising packet data
Data that was discovered along with the device.
+Ex: When dealing with bluetooth, this is the advertising packet data
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
advertiseObject
+
+
+
+
+
An object taken from the advertise data based on the advertise resource in the device’s schema
+Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
+
+
+
+
@property (nonatomic, strong) id advertiseObject
+
+
+
+
+
+
+
+
+
+
Discussion
+
An object taken from the advertise data based on the advertise resource in the device’s schema
+Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
connectionType
+
+
+
+
+
A concrete EMConnectionType instance that will be used to send messages to the device.
A concrete EMConnectionType instance that will be used to send messages to the device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
name
+
+
+
+
+
The name of the device used thoughout the framework.
+Like the unique_identifier, this property needs to be unique.
+
+
+
+
@property (nonatomic, strong) NSString *name
+
+
+
+
+
+
+
+
+
+
Discussion
+
The name of the device used thoughout the framework.
+Like the unique_identifier, this property needs to be unique.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
schemaFilePath
+
+
+
+
+
The name of the schema file in your bundle that relates to this device.
+NOTE: Many devices do not broadcast this information. In this case, this property will not be set
The name of the schema file in your bundle that relates to this device.
+NOTE: Many devices do not broadcast this information. In this case, this property will not be set
A container for different types of resource values.
+Instances of this class are used to hold values for resources whose types is
+either Void, Int, Enum, Num, String, Struct, Array, or File.
EMTargetDeviceHandler is implemented by classes interested in manageing connections to devices. By default, this will be the shared instance of EMConnectionManager.
+
+
\ No newline at end of file
diff --git a/EmmocoMobileFramework/Headers/EMBluetoothLowEnergyConnectionType.h b/EmmocoMobileFramework/Headers/EMBluetoothLowEnergyConnectionType.h
new file mode 100644
index 0000000..eb427f6
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMBluetoothLowEnergyConnectionType.h
@@ -0,0 +1,34 @@
+#import
+#import "EMConnectionType.h"
+
+#if TARGET_OS_IPHONE
+ #import
+#else
+ #import
+#endif
+
+
+
+/**
+ * EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+ *
+ * If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
+ */
+
+@interface EMBluetoothLowEnergyConnectionType : NSObject {
+
+}
+
+@property (nonatomic) NSTimeInterval scanResetTime;
+
+/**
+ * By default, EMBluetoothLowEnergyConnectionType will 'discover' devices that have a schema hash matching a schema in your application bundle.
+ * Set this flag to 'YES' for an instance of this class to discover all Emmoco BLE devices.
+ * NOTE: Most applications should not have this enabled.
+ */
+@property (nonatomic) BOOL discoversAllEmmocoBLEDevices;
+
++(CBUUID *)emmocoServiceUUID;
++(CBUUID *)emmocov12ServiceUUID;
+
+@end
diff --git a/EmmocoMobileFramework/Headers/EMChecksum.h b/EmmocoMobileFramework/Headers/EMChecksum.h
new file mode 100644
index 0000000..fb4d24c
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMChecksum.h
@@ -0,0 +1,19 @@
+//
+// EMChecksum.h
+// Emmoco
+//
+// Created by bob frankel on 8/18/11.
+// Copyright 2011 Emmoco, Inc.. All rights reserved.
+//
+
+#import
+
+@interface EMChecksum : NSObject {
+
+}
+
+- (void)addByte:(int)byte;
+- (void)clear;
+- (int)sum;
+
+@end
diff --git a/EmmocoMobileFramework/Headers/EMConnection.h b/EmmocoMobileFramework/Headers/EMConnection.h
new file mode 100644
index 0000000..b73f2b7
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMConnection.h
@@ -0,0 +1,134 @@
+
+/** @file */
+
+#import
+#import "EMSchema.h"
+#import "EMConnectionType.h"
+#import "EMTypes.h"
+
+@class EMConnection;
+
+@protocol EMConnectionDelegate
+
+-(void)connectionDidTimeout:(EMConnection *)connection;
+-(void)connectionDidDisconnect:(EMConnection *)connection;
+
+@end
+
+/**
+ * The state of the current connection. Use KVO to receive updates on this property and react to changes.
+ */
+
+typedef enum {
+ EMConnectionStateDisconnected, // Disconnected state, no error
+ EMConnectionStatePending, // A connection has been started, and is pending completion
+ EMConnectionStateSchemaNotFound, // The schema for the connection is not in the application bundle
+ EMConnectionStateInvalidSchemaHash, // The device didn't respond with a valid schema hash
+ EMConnectionStateConnected, // Connected state, no error
+ EMConnectionStateDisrupted, // The connection was interrupted
+ EMConnectionStatePendingForDefaultSchema, // The schema could not be found and the connection is being "forced" with the provided default schema. Note: This state will only occur if you have provided a default schema and told the connection manager to force a connection with it.
+ EMConnectionStateTimeout // The connection timed out
+} EMConnectionState;
+
+extern NSString * const kEMConnectionDidReceiveIndicatorNotificationName;
+extern NSString * const kEMIndicatorResourceKey;
+extern NSString * const kEMIndicatorNameKey;
+extern NSString * const kEMConnectionErrorDomain;
+extern NSString * const kEMIndicatorResourceValueKey;
+
+@interface EMConnection : NSObject {
+ @protected
+ EMSchema *_systemSchema;
+}
+
+/**
+ * This block will be called when an open connection is closed for any reason
+ */
+@property (atomic, strong) EMResourceBlock connectionClosedBlock;
+
+/**
+ * The timeout interval for a pending connection
+ */
+@property (atomic) NSTimeInterval connectionAttemptTimeout;
+
+/**
+ * The connection delegate. EMConnectionManager will post connect and disconnect delegate messages to this object if it is set.
+ */
+@property (nonatomic, unsafe_unretained) id connectionDelegate;
+
+
+/**
+ * The EMDeviceBasicDescription used for conenction
+ */
+@property (nonatomic, strong) EMDeviceBasicDescription *device;
+
+/**
+ * The schema for connection
+ */
+@property (nonatomic, strong) EMSchema *schema;
+
+
+/**
+ * Creates a new EMConnection object.
+ * Actual connection and disconnection to the named target occurs through calls to open and close on this object.
+ * @param device The basic description of a device
+ */
+- (id)initWithDevice:(EMDeviceBasicDescription *)device;
+
+/**
+ * Creates a new EMTargetConnection object.
+ * Actual connection and disconnection to the named target occurs through calls to open and close on this object.
+ * @param device the name of the target device, including one of the pre-defined prefixes
+ * @param resourceSchema the schema describing the resources available in this connection
+ */
+- (id)initWithDevice:(EMDeviceBasicDescription *)device schema:(EMSchema*)resourceSchema;
+
+
+/**
+ * Returns true if connected and false otherwise.
+ */
+- (BOOL)isConnected;
+
+/**
+ * Opens a connection to the @device device property
+ * @param successBlock A block to call on a successful connect
+ * @param failBlock A block to call on a failed connect
+ */
+- (void)openConnectionWithSuccess:(EMResourceBlock)successBlock onFail:(EMFailBlock)failBlock;
+
+/**
+ * Cancels the attempt to open this EMTargetConnection, posting the open block with a failed status.
+ */
+- (void)cancelOpen;
+
+/**
+ * Closes the connection
+ * @param successBlock A block to call on a successful disconnect
+ * @param failBlock A block to call on a failed disconnect
+ */
+- (void)closeConnectionWithSuccess:(EMResourceBlock)successBlock onFail:(EMFailBlock)failBlock;
+
+/**
+ * Reads a value
+ * @param resourceName The name of the resource to read
+ * @param successBlock A block to call on a successful read
+ * @param failBlock A block to call on a failed read
+ */
+-(void)readValueNamed:(NSString *)resourceName onSuccess:(EMResourceBlock)successBlock onFail:(EMFailBlock)failBlock;
+
+-(void)readSystemValueNamed:(NSString *)resourceName onSuccess:(EMResourceBlock)successBlock onFail:(EMFailBlock)failBlock;
+
+/**
+ * Writes a resource to the device
+ * @param resourceValue The resource value
+ * @param successBlock A block to call on a successful write
+ * @param failBlock A block to call on a failed write
+ */
+
+-(void)writeResource:(EMResourceValue *)resourceValue onSuccess:(EMResourceBlock)successBlock onFail:(EMFailBlock)failBlock;
+
+- (NSString*)connectedDeviceSchemaHash;
+
+
+@end
+
diff --git a/EmmocoMobileFramework/Headers/EMConnectionListManager.h b/EmmocoMobileFramework/Headers/EMConnectionListManager.h
new file mode 100644
index 0000000..7c75f7d
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMConnectionListManager.h
@@ -0,0 +1,95 @@
+#import "EMConnectionType.h"
+#import
+
+/**
+ * kEMConnectionManagerDidStartUpdating is the name of a notification that is posted when the list manager begins updating, or scanning, for available devices
+ */
+
+extern NSString * const kEMConnectionManagerDidStartUpdating;
+
+/**
+ * kEMConnectionManagerDidStopUpdating is the name of a notification that is posted when the list manager stops updating, or scanning, for available devices
+ */
+
+extern NSString * const kEMConnectionManagerDidStopUpdating;
+
+/**
+ * EMConnectionListManager is a singleton class used for viewing a list of devices available for interaction.
+ */
+@interface EMConnectionListManager : NSObject
+
+/**
+ * @property devices
+ * A list of devices that has been discovered as available by the connection list manager
+ */
+@property (nonatomic, strong, readonly) NSArray *devices;
+
+/**
+ * @property filterPredicate
+ * A filter that allows only devices conforming to the predicate to be visible
+ */
+@property (nonatomic, strong) NSPredicate *filterPredicate;
+
+/**
+ * @property updating
+ * A boolean value indicating whether or not the connection list manager is actively updating the devices list
+ */
+@property (nonatomic, getter = isUpdating, readonly) BOOL updating;
+
+/**
+ * @property updateRate
+ * updateRate determines the scan frequency for discovering devices
+ */
+@property (nonatomic) NSTimeInterval updateRate;
+
+
+/**
+ * @param automaticallyConnectsToLastDevice
+ * A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
+ */
+@property (nonatomic) BOOL automaticallyConnectsToLastDevice;
+
+
+/**
+ * Use the +sharedManager to get the singleton, shared instance of EMConnectionListManager
+ */
++(EMConnectionListManager *)sharedManager;
+
+/**
+ * Retrieve a device description for a given unique identifier
+ * @param name The name of the device
+ */
+
+-(EMDeviceBasicDescription *)deviceBasicDescriptionForDeviceNamed:(NSString *)name;
+
+/**
+ * Tells the connection list manager to begin actively looking for devices to interact with.
+ */
+-(void)startUpdating;
+
+/**
+ * Tells the connection list manager to stop looking for devices to interact with.
+ */
+-(void)stopUpdating;
+
+/**
+ * Manually clears out all devices on the connection list manager.
+ */
+-(void)reset;
+
+/**
+ * Detect if Bluetooth is available
+ */
+-(BOOL)isBluetoothAvailable;
+
+/**
+ * Add your own connection type outside of bluetooth low energy
+ */
+-(void)addConnectionTypeToUpdates:(id)connectionType;
+
+/**
+ * Remove your own connection type outside of bluetooth low energy
+ */
+-(void)removeConnectionToFromUpdates:(id)connectionType;
+
+@end
diff --git a/EmmocoMobileFramework/Headers/EMConnectionManager.h b/EmmocoMobileFramework/Headers/EMConnectionManager.h
new file mode 100644
index 0000000..65fb98c
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMConnectionManager.h
@@ -0,0 +1,167 @@
+#import
+#import
+#import "EMConnection.h"
+#import "EMSchema.h"
+#import "EMConnectionType.h"
+
+#ifndef CB_EXTERN_CLASS
+#warning "You must include CoreBluetooth in project to use Em-Framework"
+#endif
+
+/**
+ * A constant for NSUserDefaults that contains the name of the last connected device, if there is one
+ */
+
+extern NSString * const kLastConnectedDevice;
+
+extern NSString * const kEMConnectionManagerDidUpdateConnectionStateNotificationName;
+
+/**
+ * Various types of connection errors.
+ */
+
+typedef enum {
+ EMConnectionManagerErrorNoSchemaAvailable,
+ EMConnectionManagerErrorCouldNotDisconnect,
+ EMConnectionManagerErrorDeviceNotAvailable,
+} EMConnectionManagerError;
+
+extern NSString * const kEMConnectionManagerErrorDomain;
+
+@class EMTargetDevice;
+@class EMConnection;
+
+/**
+ * EMConnectionManager is a singleton class for managing a connection with a physical or mock device.
+ */
+
+@interface EMConnectionManager : NSObject
+
+@property (nonatomic) EMConnectionState connectionState;
+
+@property (nonatomic, strong) NSURL *defaultSchemaURL;
+
+
+/**
+ @property backgroundUpdatesEnabled
+ @description If you set this flag to "YES", the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
+ */
+@property (nonatomic) BOOL backgroundUpdatesEnabled;
+
+/**
+ * Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+ * Note: Accessing the connection manager in any way other is not recommended.
+ */
+
++(EMConnectionManager *)sharedManager;
+
+/**
+ * Tells the connection manager to connect to a specific device.
+ *
+ * @param device An instance of EMDeviceBasicDescription the connection manager should connect to
+ * @param successBlock The block to run after a successful connection
+ * @param failBlock The block to run if the connectino fails
+ * @description The implementation of this method calls connectDevice:timeoutInterval:onSuccess:onFail: with a default time interval of 10 seconds
+ */
+
+-(void)connectDevice:(EMDeviceBasicDescription *)device onSuccess:(void(^)(void))successBlock onFail:(void(^)(NSError *error))failBlock;
+
+/**
+ * Tells the connection manager to connect to a specific device.
+ *
+ * @param device An instance of EMDeviceBasicDescription the connection manager should connect to
+ * @param timeout The time the connection manager should allow for a successful connection. After the specified time interval passes, the fail block will be called.
+ * @param successBlock The block to run after a successful connection
+ * @param failBlock The block to run if the connection fails
+ * @description The implementation of this method calls connectDevice:timeoutInterval:onSuccess:onFail: with a default time interval of 10 seconds
+ */
+-(void)connectDevice:(EMDeviceBasicDescription *)device timeoutInterval:(NSTimeInterval)timeout onSuccess:(void(^)(void))successBlock onFail:(void(^)(NSError *error))failBlock;
+
+/**
+ * Tells the connection manager to disconnect from a specific device
+ *
+ * @param successBlock The block to run after a successful disconnection
+ * @param failBlock The block to run if the disconnection fails.
+ */
+-(void)disconnectWithSuccess:(void(^)(void))successBlock onFail:(void(^)(NSError *error))failBlock;
+
+/**
+ * Reads a resource from a connected device
+ *
+ * @param resourceName The name of the resource to read. This is the name of the resource in the device's schema.
+ * @param successBlock The block to call when a read occurs successfully. Connection manager will call this block with the value read.
+ * @param failBlock The block to call when a read fails.
+ */
+-(void)readResource:(NSString *)resourceName onSuccess:(void(^)(id readValue))successBlock onFail:(void(^)(NSError *error))failBlock;
+
+/**
+ * Writes a value to a resource on a connected device
+ *
+ * @param resourceValue The value to write to the resource. This should be an instance of NSString, NSData, NSArray, NSNumber, or NSDictionary
+ * @param resource The name of the resource for writing. This is the name of the resource in the schema.
+ * @param successBlock The block to call when the write occurs successfully.
+ * @param failBlock The block to call when the write fails.
+ */
+-(void)writeValue:(id)resourceValue toResource:(NSString *)resource onSuccess:(void(^)(void))successBlock onFail:(void(^)(NSError *error))failBlock;
+
+/**
+ * Returns an array of EMDeviceBasicDescription's for the device that is actively connected
+ */
+-(EMDeviceBasicDescription *)connectedDevice;
+
+/**
+ * Returns a version of the the schema hash from a connected device's firmware as it appears on em-hub
+ */
+-(NSString *)schemaHashForConnectedDevice;
+
+/**
+ * Tells the connection manager where it should look for schemas other than the NSBundle's mainBundle
+ *
+ * @param path The path for the directory in which to search
+ */
+-(void)addSchemaSearchForFilesInDirectory:(NSString *)path;
+
+/**
+ * Tells the connection manager to no longer look in the specified path for schemas
+ *
+ * @param path The path to no longer search
+ * @description Note: This method will never ignore the current bundle's mainBundle
+ */
+-(void)removeSchemaSearchForFilesInDirectory:(NSString *)path;
+
+/**
+ * Forces the connection manager to connect to a device with the default schema
+ * @param device The device for the forced connection
+ * @description Use this method with extreme caution. Many undefined behaviors can come from using this method with a schema that isn't an exact match for the specified device. EMConnectionManager uses this method internally. It is very rare that you will need to call this method directly.
+ */
+-(void)forceConnectionWithDefaultSchema:(EMDeviceBasicDescription *)device;
+
+/**
+ * Tells EMConnectionManager to update its internal cache of schemas used for connection.
+ * @description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
+ */
+-(void)updateInternalSchemaCache;
+
+/**
+ * Gives the schema name in the application bundle for a given hash string
+ * @param hashString A full or partial schema hash string
+ * @description This method takes either a full hash or partial hash. If any schema begins with 'hash string', the file name in the bundle is returned. Returns nil if no matching schema was found in the bundle.
+ * If one or more schemas share 'hashString' at the beginning of their hash, the first path will be returned.
+ */
+-(NSString *)schemaFileNameForHashString:(NSString *)hashString;
+
+/**
+ * Gets the schema for the connected device.
+ * @description Returns nil if no device is connected.
+ */
+
+-(EMSchema *)schemaForConnectedDevice;
+
+/**
+ * Gets the embedded system protocol level from the schema used to connect to the device
+ * @description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+ */
+
+-(NSNumber *)embeddedSystemProtocolLevel;
+
+@end
diff --git a/EmmocoMobileFramework/Headers/EMConnectionType.h b/EmmocoMobileFramework/Headers/EMConnectionType.h
new file mode 100644
index 0000000..c4dc364
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMConnectionType.h
@@ -0,0 +1,134 @@
+#import
+#import "EMSchema.h"
+#import "EMDeviceBasicDescription.h"
+#import "EMResourceValue.h"
+#import "EMSignalStrengthFilter.h"
+
+/**
+ * EMTargetDeviceHandler is implemented by classes interested in manageing connections to devices. By default, this will be the shared instance of EMConnectionManager.
+ */
+@protocol EMDeviceDelegate
+- (void)extendConnectTimeout;
+- (void)postIndicatorForResource:(EMResourceValue *)indicator;
+- (void)operationDone:(int)status;
+@end
+
+
+#pragma mark - EMConnectionTypeScannerDelegate Declaration
+
+/**
+ * These methods are sen tto the connection delegate to inform it of devices that come available or go offline.
+ */
+
+@protocol EMConnectionTypeScannerDelegate
+
+/**
+ * Tells the delegate a device was found.
+ */
+
+-(void)deviceScanner:(id)scanner didFindDevice:(EMDeviceBasicDescription *)device;
+
+/**
+ * Tells the delegate a device was lost.
+ */
+-(void)deviceScanner:(id)scanner didLoseDevice:(EMDeviceBasicDescription *)device;
+
+
+/**
+ * Updates the data for a device description
+ */
+-(void)deviceScanner:(id)scanner didUpdateDevice:(EMDeviceBasicDescription *)device;
+
+@end
+
+#pragma mark - EMConnectionType Declaration
+
+/**
+ * Abstracts a given protocol for connecting to devices.
+ */
+
+@protocol EMConnectionType
+
+/**
+ * The delegate for scanning
+ */
+@property (nonatomic, unsafe_unretained) id scanDelegate;
+
+/**
+ * The delegate for connection communication
+ */
+@property (nonatomic, unsafe_unretained) id connectionDelegate;
+
+/**
+ * The schema for connection
+ */
+@property (nonatomic, unsafe_unretained) EMSchema *schema;
+
+/**
+ * The last read resource value from the device
+ */
+@property (nonatomic, strong) EMResourceValue *lastReadValue;
+
+/**
+ * A boolean indicating whether or not there is a connection with a device.
+ */
+@property (nonatomic, readonly, getter = isConnected) BOOL connected;
+
+/**
+ * The class to use for filtering, or smoothin, signal strength values
+ */
+@property (nonatomic, strong) Class signalStrengthFilterClass;
+
+/**
+ * The type of device - this can be set to anything and retreived for printing or examining.
+ */
+-(NSString *)deviceType;
+
+/**
+ * Tells the connection to start looking for devices of its type.
+ */
+-(void)startUpdating;
+
+/**
+ * Tells the connection to stop looking for devices of its type.
+ */
+-(void)stopUpdating;
+
+/**
+ * Returns whether or not there is a connection with a device.
+ */
+-(BOOL)isConnected;
+
+/**
+ * disconnects the current device.
+ *
+ */
+-(void)disconnect;
+
+/**
+ * Establishes a connection with a device
+ */
+-(void)connectToDevice:(EMDeviceBasicDescription *)device connectionDelegate:(id)connDelegate;
+
+
+/**
+ * YES if available on the current device, NO if unavailable.
+ */
+-(BOOL)isAvailable;
+
+/**
+ * Fetches a resource. Can be retrieved in "lastReadValue"
+ */
+-(void)fetch:(id)resourceValue;
+
+/**
+ * Fetches a system resource. Can be retrieved in "lastReadValue".
+ */
+- (void)fetchSystemResource:(id)resourceValue;
+
+/**
+ * writes a value to a device.
+ */
+-(void)store:(id)resourceValue;
+@end
+
diff --git a/EmmocoMobileFramework/Headers/EMDeviceBasicDescription.h b/EmmocoMobileFramework/Headers/EMDeviceBasicDescription.h
new file mode 100644
index 0000000..826f60c
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMDeviceBasicDescription.h
@@ -0,0 +1,64 @@
+#import "EMSignalStrengthFilter.h"
+
+@protocol EMConnectionType;
+
+/**
+ * EMDeviceBasicDescription is a class used to describe basic device characteristics throughout the entire framework.
+ * All devices, regardless of connection type, will have these properties.
+ *
+ * All classes implementing the EMConnectionType protocol will receive and deliver device information in the form of an EMDeviceBasicDescription.
+ */
+
+@interface EMDeviceBasicDescription : NSObject
+
+/**
+ * The name of the device used thoughout the framework.
+ * Like the unique_identifier, this property needs to be unique.
+ */
+@property (nonatomic, strong) NSString *name;
+
+/**
+ * A concrete EMConnectionType instance that will be used to send messages to the device.
+ */
+@property (nonatomic, strong) id connectionType;
+
+/*
+ * An object that can describe the device to the provided connection type.
+ * For example, for bluetooth, this might be an instance of CBPeripheral.
+ */
+@property (nonatomic, strong) id deviceObject;
+
+/**
+ * A value between -100 and 0 used to describe signal strength.
+ */
+@property (nonatomic) float signalStrength;
+
+/**
+ * The signal strength filter for smoothing
+ */
+@property (nonatomic, strong) id signalStrengthFilter;
+
+/**
+ Data that was discovered along with the device.
+ Ex: When dealing with bluetooth, this is the advertising packet data
+ */
+@property (nonatomic, strong) NSData *advertiseData;
+
+/**
+ * An object taken from the advertise data based on the advertise resource in the device's schema
+ * Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
+ */
+@property (nonatomic, strong) id advertiseObject;
+
+/**
+ The first six characters of the device's schema
+ */
+@property (nonatomic, strong) NSString *shortSchemaHash;
+
+/**
+ The name of the schema file in your bundle that relates to this device.
+ NOTE: Many devices do not broadcast this information. In this case, this property will not be set
+ */
+@property (nonatomic, strong) NSString *schemaFilePath;
+
+@end
diff --git a/EmmocoMobileFramework/Headers/EMFramework.h b/EmmocoMobileFramework/Headers/EMFramework.h
new file mode 100644
index 0000000..bd5a435
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMFramework.h
@@ -0,0 +1,28 @@
+//
+// EMFramework.h
+// Emmoco
+//
+// Created by bob frankel on 8/22/11.
+// Copyright 2011 Emmoco, Inc.. All rights reserved.
+//
+
+#import
+#import "EMConnectionManager.h"
+#import "EMConnectionListManager.h"
+#import "EMConnection.h"
+#import "EMBluetoothLowEnergyConnectionType.h"
+#import "EMSchema.h"
+#import "EMResourceValue.h"
+
+#define EMFrameworkProtocol_11
+
+#define EMMinFramework @"12"
+#define EMMaxFramework @"13"
+
+#define SIGNAL_STRENGTH_UNAVAILABLE FLT_MIN
+
+#ifdef DEBUG
+#define EMLog(format, ...) NSLog(@"<%@:(%d)> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(format), ##__VA_ARGS__])
+#else
+#define EMLog(format, ...)
+#endif
\ No newline at end of file
diff --git a/EmmocoMobileFramework/Headers/EMRSSIFilter.h b/EmmocoMobileFramework/Headers/EMRSSIFilter.h
new file mode 100644
index 0000000..847cd9c
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMRSSIFilter.h
@@ -0,0 +1,19 @@
+//
+// EMRSSIFilter.h
+// EMFramework
+//
+// Created by Dexter Weiss on 8/9/13.
+// Copyright (c) 2013 Emmoco. All rights reserved.
+//
+
+#import
+#import "EMSignalStrengthFilter.h"
+
+@interface EMRSSIFilter : NSObject
+
++(EMRSSIFilter *)filterWithInitialRSSI:(float)rssi;
+
+-(id)initWithInitialSignalStrengthValue:(float)signalStrengthValue;
+-(float)addSignalStrengthValue:(float)signalStrengthValue;
+
+@end
diff --git a/EmmocoMobileFramework/Headers/EMResourceValue+CocoaAdditions.h b/EmmocoMobileFramework/Headers/EMResourceValue+CocoaAdditions.h
new file mode 100644
index 0000000..7de58f9
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMResourceValue+CocoaAdditions.h
@@ -0,0 +1,9 @@
+#import "EMResourceValue.h"
+
+@interface EMResourceValue (CocoaAdditions)
+
+-(void)setNSObjectValue:(id)object;
+
+-(id)NSObjectValue;
+
+@end
diff --git a/EmmocoMobileFramework/Headers/EMResourceValue.h b/EmmocoMobileFramework/Headers/EMResourceValue.h
new file mode 100644
index 0000000..44e36c5
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMResourceValue.h
@@ -0,0 +1,246 @@
+//
+// EMResourceValue.h
+// Emmoco
+//
+// Created by bob frankel on 8/8/11.
+// Copyright 2011 Emmoco, Inc.. All rights reserved.
+//
+
+#import
+#import "EMSerialPacket.h"
+
+@class EMSchema;
+@class EMSerialPacket;
+@class EMResourceValue;
+
+/**
+ * A protocol to define the methods that all EMResourceValue subclasses must define.
+ *
+ * Written by Carolyn Vaughan
+ */
+
+@protocol EMResourceValueProtocol
+
+/**
+ * Internal initialization method used by EMResourceValue subclasses
+ * @param theName the name of this value
+ * @param theType the type of this value
+ * @param theResourceSchema the schema associated with this value
+ * @return this value
+ */
+- (id)initWithName:(NSString*)theName type:(NSString*)theType schema:(EMSchema*)theResourceSchema;
+
+/**
+ * Returns true if the type of this value is an Array, and false otherwise.
+ */
+- (BOOL)isArray;
+
+/**
+ * Returns true if the type of this value is a Num, and false otherwise.
+ */
+- (BOOL)isNum;
+
+/**
+ * Returns true if the type of this value is an Enum, and false otherwise.
+ */
+- (BOOL)isEnum;
+
+/**
+ * Returns true if the type of this value is a File, and false otherwise.
+ */
+- (BOOL)isFile;
+
+/**
+ * Returns true if the type of this value is an Int, and false otherwise.
+ */
+- (BOOL)isInt;
+
+/**
+ * Returns true if the type of this value is a String, and false otherwise.
+ */
+- (BOOL)isString;
+
+/**
+ * Returns true if the type of this value is scalar (Num, Enum, Int, String), and false otherwise.
+ */
+- (BOOL)isScalar;
+
+/**
+ * Return true if the type of this value is a Struct, and false otherwise.
+ */
+- (BOOL)isStruct;
+
+/**
+ * Return true if the type of this value is a Void, and false otherwise.
+ */
+- (BOOL)isVoid;
+
+/**
+ * Used to put the resource's value to the device
+ * @param buffer the data buffer being sent to the device
+ *
+ * The PUT is based on RESTful resourcing
+ */
+- (void)putData:(EMSerialPacket*)buffer;
+
+/**
+ * Used to get the resource's value from the device
+ * @param buffer the data buffer being received from the device
+ * @param size the amount of data the buffer holds
+ *
+ * The GET is based on RESTful resourcing
+ */
+- (void)getDataOfSize:(int)size fromBuffer:(EMSerialPacket*)buffer;
+
+/**
+ * Assign a double value to a resource.
+ * @param value the value to be assigned, represented as a double
+ */
+- (void)setDoubleValue:(double)value;
+
+/**
+ * Assign a long value to a resource. For Num and Enum resources, this sets the ordinal value for the resource instead of setting the value directly.
+ * @param value the value to be assigned, represented as a long
+ */
+- (void)setLongValue:(long long)value;
+
+/**
+ * Assign a string value to a resource.
+ * @param value the value to be assigned, represented as a String
+ */
+- (void)setStringValue:(NSString*)value;
+
+/**
+ * This ResourceValue, as a double.
+ * @exception UsageError the type of this value is not a Num
+ */
+- (double)doubleValue;
+
+/**
+ * This ResourceValue, as a long. For Num and Enum resources, this returns the ordinal value for the resource instead of the actual value.
+ * @exception UsageError the type of this value is not a Scalar
+ */
+- (long long)longValue;
+
+/**
+ * This ResourceValue, as a String.
+ * @exception UsageError the type of this value is not a Scalar
+ */
+- (NSString*)stringValue;
+
+/**
+ * Assign another resource value's value to this resource value
+ * @param source the ResourceValue who's value you wish to assign to this EMResourceValue instance
+ */
+- (void)copyFromResource:(EMResourceValue*)source;
+
+/**
+ * Reset this ResourceValue to its initial state upon creation
+ */
+- (void)reset;
+
+/**
+ * The minimum numerical value for this ResourceValue.
+ */
+- (double)min;
+
+/**
+ * The maximum numerical value for this ResourceValue.
+ */
+- (double)max;
+
+/**
+ * The step for this ResourceValue.
+ */
+- (double)step;
+
+/**
+ * The maximum number of distinct values for this ResourceValue.
+ */
+- (long)length;
+
+/**
+ * An array of acceptable enum values for this ResourceValue.
+ */
+- (NSArray *)enumValues;
+
+/**
+ * An array of acceptable field names for this ResourceValue.
+ */
+- (NSArray *)fieldNames;
+
+/**
+ * Select a ResourceValue element from a ResourceValue Array by index
+ * @param index the element to be selected
+ * @return the indexed element
+ */
+- (EMResourceValue*)index:(int)index;
+
+/**
+ * Select a ResourceValue element from a ResourceValue Struct by field name
+ * @param fieldName the element to be selected
+ * @return the ResourceValue held in the selected field
+ */
+- (EMResourceValue*)select:(NSString*)fieldName;
+
+/**
+ * Return the end-of-file status for this ResourceValue File. For internal use only.
+ */
+- (BOOL)fileEof;
+
+/**
+ * Prepare a local file associated with this ResourceValue File for reading. For internal use only;
+ d*/
+- (void)fileFetch;
+
+/**
+ * Prepare a local file associated with this ResourceValue File for writing. For internal use only;
+ */
+- (void)fileStore;
+
+-(NSData *)fileData;
+
+@end
+
+/**
+ * A container for different types of resource values.
+ * Instances of this class are used to hold values for resources whose types is
+ * either Void, Int, Enum, Num, String, Struct, Array, or File.
+ *
+ * See also:
+ *
+ * - [EMSchema newResourceValueForResourceNamed:]
+ *
+ * Written by Bob Frankel and Carolyn Vaughan
+ */
+@interface EMResourceValue : NSObject {
+
+}
+
+/**
+ * The name of the resource.
+ */
+@property(readonly) NSString* name;
+
+/**
+ * The resource schema associated with the resource.
+ */
+@property(readonly) EMSchema* resourceSchema;
+
+/**
+ * The type of the resource.
+ */
+@property(readonly) NSString* type;
+
+- (int)valueSize;
+/**
+ * Create a EMResourceValue. This method is used internally by the framework.
+ * @param name the name given to the newly-created value
+ * @param type the type of the newly-created value
+ * @param resourceSchema an EMSchema instance
+ * @return a new EMResourceValue instance
+ */
++ (EMResourceValue*)resourceWithName:(NSString*)name ofType:(NSString*)type fromSchema:(EMSchema*)resourceSchema;
+
+@end
+
diff --git a/EmmocoMobileFramework/Headers/EMSchema.h b/EmmocoMobileFramework/Headers/EMSchema.h
new file mode 100644
index 0000000..e219126
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMSchema.h
@@ -0,0 +1,237 @@
+//
+// EMSchema.h
+// Emmoco
+//
+// Created by bob frankel on 8/7/11.
+// Copyright 2011 Emmoco, Inc.. All rights reserved.
+//
+
+#import
+#import "EMResourceValue.h"
+
+typedef enum {
+ EMResourceAccessTypeRead = 1 << 0,
+ EMResourceAccessTypeWrite = 1 << 1,
+ EMResourceAccessTypeIndicate = 1 << 2,
+} EMResourceAccessType;
+
+@class EMResourceValue;
+
+/**
+ * A set of meta-data describing a set of resources.
+ * Written by Bob Frankel and Carolyn Vaughan
+ */
+@interface EMSchema : NSObject {
+
+}
+
+/**
+ * Creates a EMResourceSchema instance from the contents of a file.
+ * @param fileName a file containing JSON content
+ * @return a newly created EMResourceSchema instance
+ */
++ (EMSchema*)schemaFromFile:(NSString*)fileName;
+
+/**
+ * Get the read/write/indicator access capabilities of a named resource
+ * @param resourceName a valid resource name in this schema
+ * @return an NSString containing the characters 'r', 'w', and 'i' as appropriate
+ * @exception UsageError the resource name is invalid
+ */
+- (EMResourceAccessType)accessForResource:(NSString*)resourceName;
+
+/**
+ * Returns a sorted NSArray containing all application resource names in this schema
+ */
+- (NSArray*)applicationResources;
+
+/**
+ * Get the parameters associated with a number type.
+ * @param type a valid number type name in this schema
+ * @return a four-element NSArray holding the min, max, step, and prec parameters of this type
+ * @exception UsageError the number type name is invalid
+ */
+- (NSArray*)numberParametersForType:(NSString*)type;
+
+/**
+* Get the representation type associated with a number type.
+* @param type a valid number type name in this schema
+* @return an integral representation type
+* @exception UsageError the number type name is invalid
+*/
+- (NSString*)numericRepresentationForType:(NSString*)type;
+
+/**
+ * Get the values associated with an enum type.
+ * @param type a valid enum type name in this schema
+ * @return a NSDictionary containing enum value names and their corresponding ordinal
+ * @exception UsageError the enum type name is invalid
+ */
+- (NSDictionary*)enumValuesForType:(NSString*)type;
+
+/**
+ * Get the names of the fields associated with a struct type.
+ * @param type a valid struct type name in this schema
+ * @return a NSArray containing field names
+ * @exception UsageError the struct type name is invalid
+ */
+- (NSArray*)fieldNamesForType:(NSString*)type;
+
+/**
+ * Get the fields associated with a struct type.
+ * @param type a valid struct type name in this schema
+ * @return a NSDictionary containing field names and their corresponding type code
+ * @exception UsageError the struct type name is invalid
+ */
+- (NSDictionary*)fieldsForType:(NSString*)type;
+
+/**
+ * Get the length of this string type.
+ * @param type a valid string type name in this schema
+ * @return the length of this string type
+ * @exception UsageError the string type name is invalid
+ */
+- (int)stringLengthForType:(NSString*)type;
+
+/**
+ * Returns the fully-qualified name of this schema.
+ */
+- (NSString*)name;
+
+/**
+ * Returns the protocol level of this schema
+ */
+- (int)protocolLevel;
+
+/**
+ * Returns an NSDictionary containing all resource names in this schema and their corresponding type code.
+ */
+- (NSDictionary*)resources;
+
+/**
+ * Returns the maximum size in bytes amongst all resource types in this schema.
+ */
+- (int)maxResourceSize;
+
+/**
+ * Get the alignment of a named resource
+ * @param resourceName a named resource in this schema
+ * @return the alignment in bytes of this resource
+ * @exception UsageError the resource name is invalid
+ */
+- (int)byteAlignmentForResource:(NSString*)resourceName;
+
+/**
+ * Get the unique id associated with a named resource
+ * @param resourceName a named resource in this schema
+ * @return the corresponding resource id
+ * @exception UsageError the resource name is invalid
+ */
+- (int)idForResource:(NSString*)resourceName;
+
+/**
+ * Get the resource name associated with this resource id
+ * @param resourceId a resource id
+ * @return the corresponding resource name
+ * @exception UsageError the resource id is invalid
+ * @see idForResource:
+ */
+- (NSString*)nameForResourceWithID:(NSInteger)resourceId;
+
+/**
+ * Get the size of a named resource
+ * @param resourceName a named resource in this schema
+ * @return the size in bytes of this resource
+ * @exception UsageError the resource name is invalid
+ */
+- (int)sizeForResourceNamed:(NSString*)resourceName;
+
+/**
+ * Get the size of a standard scalar type
+ * @param type a scalar type code
+ * @return the size in bytes of this standard type
+ * @exception UsageError the type code is invalid
+ */
+- (int)sizeForStandardType:(NSString*)type;
+
+/**
+ * Get the alignment of a standard scalar type
+ * @param type a scalar type code
+ * @return the alignment in bytes of this standard type
+ * @exception UsageError the type code is invalid
+ */
+- (int)alignmentForStandardType:(NSString*)type;
+
+/**
+ * Returns a sorted NSArray containing all system resource names in this schema
+ */
+- (NSArray*)systemResources;
+
+/**
+ * Get the type of a named resource
+ * @param resourceName the name of a resource in this schema
+ * @return the type code associated with this resource
+ * @exception UsageError the resource name is invalid
+ */
+- (NSString*)typeOfResourceNamed:(NSString*)resourceName;
+
+/**
+ * Returns the owner of the schema definition this schema was created from.
+ */
+- (NSString*)owner;
+
+/**
+ * Returns the version of the schema definition this schema was created from.
+ */
+- (NSString*)version;
+
+/**
+ * Returns the description associated with this schema.
+ */
+- (NSString*)schemaDescription;
+
+/**
+ * Returns the UUID associated with this schema.
+ */
+- (NSString*)UUID;
+
+/**
+ * Returns the UUID associated with this schema as an array of numbers.
+ */
+- (NSArray *)numericalUUID;
+
+/**
+ * Returns the build number associated with this schema as an array of numbers.
+ */
+- (NSArray *)buildDate;
+
+/**
+ * Returns the schema hash associated with this schema as an array of numbers.
+ */
+- (NSArray *)schemaHash;
+
+/**
+ * Returns the name of the resource that is being broadcast in the advertising packets. Returns nil if none.
+ */
+-(NSString *)broadcastResourceName;
+
+/**
+ * Create a new ResourceValue instance for a named resource.
+ * @param resourceName a named resource in this schema
+ * @return a newly created EMResourceValue to a value for this resource
+ * @exception UsageError the resource name is invalid
+ */
+- (EMResourceValue*)newResourceValueForResourceNamed:(NSString*)resourceName;
+
+/*
+ * TODO - fill in this documentation
+ */
+- (BOOL)validateResourceNamed:(NSString*)resourceName withAccess:(EMResourceAccessType)access;
+
+-(NSNumber *)embeddedProtocolNumber;
+
+-(int)packedSizeForType:(NSString*)type;
+-(int)unpackedSizeForType:(NSString*)type;
+-(NSArray *)fieldPackingsForType:(NSString*)type;
+
+@end
diff --git a/EmmocoMobileFramework/Headers/EMSerialPacket.h b/EmmocoMobileFramework/Headers/EMSerialPacket.h
new file mode 100644
index 0000000..4e10fbf
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMSerialPacket.h
@@ -0,0 +1,46 @@
+//
+// EMSerialPacket.h
+// Emmoco
+//
+// Created by bob frankel on 8/18/11.
+// Copyright 2011 Emmoco, Inc.. All rights reserved.
+//
+
+#import
+#import "EMSchema.h"
+#import "EMChecksum.h"
+
+@class EMSchema;
+
+#define EM_MAX_DATA_SIZE 240
+#define EM_HEADER_SIZE 4
+
+enum {
+ EMSerialPacket_NOP = 1 << 0,
+ EMSerialPacket_FETCH = 1 << 1,
+ EMSerialPacket_FETCH_DONE = 1 << 2,
+ EMSerialPacket_STORE = 1 << 3,
+ EMSerialPacket_STORE_DONE = 1 << 4,
+ EMSerialPacket_INDICATOR = 1 << 5
+};
+typedef NSUInteger EMSerialPacketKind;
+
+typedef struct EMSerialPacketHeader {
+ int size;
+ EMSerialPacketKind kind;
+ int resourceId;
+} EMSerialPacketHeader;
+
+@interface EMSerialPacket : NSObject {
+
+}
+
+@property(readonly) uint8_t* buffer;
+@property(readonly) int length;
+
+- (void)addInteger:(long long)anInt forByteSize:(int)size;
+- (void)alignTo:(int)align;
+- (void)rewind;
+- (long long)scanIntegerForByteSize:(int)size asUnsigned:(BOOL)isUnsigned;
+
+@end
diff --git a/EmmocoMobileFramework/Headers/EMSignalStrengthFilter.h b/EmmocoMobileFramework/Headers/EMSignalStrengthFilter.h
new file mode 100644
index 0000000..241d8fc
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMSignalStrengthFilter.h
@@ -0,0 +1,16 @@
+//
+// EMSignalStrengthFilter.h
+// EMFramework
+//
+// Created by Dexter Weiss on 8/9/13.
+// Copyright (c) 2013 Emmoco. All rights reserved.
+//
+
+#import
+
+@protocol EMSignalStrengthFilter
+
+-(id)initWithInitialSignalStrengthValue:(float)signalStrengthValue;
+-(float)addSignalStrengthValue:(float)signalStrengthValue;
+
+@end
diff --git a/EmmocoMobileFramework/Headers/EMTypes.h b/EmmocoMobileFramework/Headers/EMTypes.h
new file mode 100644
index 0000000..9aa20fb
--- /dev/null
+++ b/EmmocoMobileFramework/Headers/EMTypes.h
@@ -0,0 +1,21 @@
+//
+// EMDevice.h
+// Emmoco
+//
+// Copyright 2012 Emmoco, Inc.. All rights reserved.
+//
+
+typedef enum {
+ EMOperationStatusSuccess,
+ EMOperationStatusFailure
+} EMOperationStatus;
+
+/*
+ * Block type used to doing callbacks to user programs. User programs define callbacks conforming to this
+ * block signature and the framework calls them back suppling status value and data object
+ */
+typedef void(^EMResourceBlock)(EMOperationStatus status, EMResourceValue *value);
+
+typedef void(^EMStatusBlock)(EMOperationStatus status);
+
+typedef void(^EMFailBlock)(NSError *error);
\ No newline at end of file
diff --git a/EmmocoMobileFramework/README.md b/EmmocoMobileFramework/README.md
new file mode 100644
index 0000000..10c6a9a
--- /dev/null
+++ b/EmmocoMobileFramework/README.md
@@ -0,0 +1,147 @@
+# Introduction
+
+## What is the Emmoco Mobile Framework?
+
+ The Emmoco Mobile Framework allows you to control any Emmoco-powered embedded system with your phone. The framework exposes a simple interface, abstracting Apple’s CoreBluetooth.framework, to facilitate rapid prototyping and development.
+
+## Why not just use Core Bluetooth?
+
+ Getting data from an embedded system to a mobile device is no small task, Bluetooth quirks aside. There are bit-alignment issues, data interpretation issues, and a multitude of failure scenarios that must be handled. You must also work closely with the embedded system developer to define the communication contract.
+
+ By using Emmoco’s ecosystem, all of these problems are resolved for you. You can spend 0% of your time worrying about how to get data to and from the embedded system and 100% of your time building a great mobile app.
+
+## Schemas - The contract between you and the embedded system
+
+ All communication between a phone and an embedded system happens according to a communication contract, or *schema*. Here is an example schema:
+
+ version = "1.0.0"
+ description = "starter application"
+ schema MyApp {
+ uint8 myFavoriteNumber
+ }
+
+ You can see the embedded system has a single resource, * myFavoriteNumber*. It is a one-byte unsigned integer.
+On http://em-hub.com, you can download the “Mobile Schema” for any schema, which is a JSON file.
+
+## Adding the Mobile Framework to your iOS project
+
+### Download the mobile framework
+
+ You can download the latest version of the mobile framework from http://em-hub.com.
+
+### Library dependencies
+
+ Add the following frameworks to your list of “Link Binary with Libraries” in your project’s build phases.
+
+ • Corebluetooth.framework
+ • libEMFramework.a
+
+### Add the framework and headers to your project
+
+ Copy all the files in the “Headers” directory of the mobile framework into your project.
+
+### Add the system and application Schemas to your project
+
+ To add a schema to your project, simply copy it into your application bundle. The system.json schema is required. It can be found in the “Assets” folder of the mobile framework. Then, copy the schemas for your application over to the project.
+
+That’s it! You’re ready to go.
+
+## Using Emmoco’s mobile framework
+
+### Setup
+
+ To begin using the mobile framework, add the following code to your application delegate’s `application:didFinishLaunchingWithOptions:`
+
+ [[EMConnectionListManager sharedManager] startUpdating];
+
+This tells the framework to begin scanning for available devices.
+
+### Discovering available devices
+
+ The class `EMConnectionListManager` is responsible for discovering devices in your proximity that are available for connection. To get a list of available devices, look at the property `devices`.
+
+ If you want to get updates whenever devices are discovered or lost, you can use Key Value Observing (KVO).
+
+ [[EMConnectionListManager sharedManager] addObserver:self forKeyPath:@“devices” options:0 context:NULL];
+
+Each object in the devices array is an instance of `EMDeviceBasicDescription`. This class represents an embedded system.
+
+### Trouble shooting
+
+**Issue**: your embedded device is turned on, but not in the devices array
+
+**Solution**: Make sure the schema (json file) for that device is in your project’s bundle. You can download Em-Browser from the App Store to check the schema hash on the embedded system and compare it to the schema you’re using in the app.
+
+**Issue**: your KVO method isn’t being called when the devices array changes
+
+**Solution**: Make sure you called startUpdating on `EMConnectionListManager`.
+
+## Connecting to a device
+
+ You’ve got your `EMDeviceBasicDescription` and you’re ready to connect. Where `EMConnectionListManager` is responsible for discovering available devices, `EMConnectionManager` is responsible for managing a single connection.
+
+Here is some sample code for connecting to a device:
+
+ EMDeviceBasicDescription *device = …
+ [[EMConnectionManager sharedManager] connectDevice:device onSuccess:^{
+ NSLog(@“Successfully connected!”);
+ } onFail:^(NSError *error) {
+ NSLog(@“%@“, [error localizedDescription]);
+ }];
+
+ The Emmoco Mobile Framework currently only supports a single connection at a time. To get the currently connected device from anywhere in your application, you can look at the `connectedDevice` property on the `EMConnectionManager`.
+
+ There are eight possible connection states. Refer to `EMConnection.h` to see the full list. `connectionState` is KVO compliant.
+
+## Reading and writing values
+
+ Once the `connectionState` property is set to `EMConnectionStateConnected`, you are ready to read and write values.
+
+To read a value, call:
+
+ [[EMConnectionManager sharedManager] readResource:@“resourceName” successBlock:^(id readValue) {
+ // handle successful read
+ } failBlock:^(NSError *error) {
+ // handle error
+ }];
+
+ The string you pass in for the resource name should match the name of the property on your mobile schema.
+
+To write a value, call:
+
+ [[EMConnectionManager sharedManager] writeValue:@“Hello” toResource:@“resourceName” onSuccess:^{
+ // handle successful write
+ } onFail:(NSError *error) {
+ // handle error
+ }];
+
+ The object of type id for writing and returned when reading can be one of the following types:
+ NSNumber, NSString, NSArray, NSDictionary, NSData.
+
+ The types that you pass in and receive depend on the resource type.
+
+NSNumber - floats, integers
+NSString - enums, strings
+NSArray - Arrays
+NSDictionary - Structs
+NSData - files
+
+## Receiving indicators
+
+ There are times when your application needs to be notified of events from the embedded system. These events are delivered through NSNotificationCenter.
+
+ To get indicator notifications, subscribe to the notification like this:
+
+ [[NSNotificationCenter defaultCenter] addObserverForName:kEMConnectionDidReceiveIndicatorNotificationName object:nil queue:[NSOperationQueue currentQueue] usingBlock:^(NSNotification *note) {
+ NSDictionary *userInfo = [note userInfo];
+ NSString *indicatorResourceName = [userInfo objectForKey:kEMIndicatorNameKey];
+ id value = [userInfo objectForKey:kEMIndicatorResourceValueKey];
+ // handle resource name and value
+ }];
+
+ The value of the indicator is of the same type that would be returned reading the resource (NSString, NSNumber, NSArray, NSDictionary, NSData).
+
+## Reading information on broadcast
+
+Some embedded systems choose to broadcast information with their BLE broadcast packets. You can get this information without actually connecting to the embedded system.
+When you get an instance of `EMDeviceBasicDescription` from the devices property of `EMConnectionListManager`, you can look at the `advertiseObject` property. This object is a Foundation object representing the value of the broadcasted resource. If the device doesn’t have any broadcast information, this property will be nil.
\ No newline at end of file
diff --git a/FileTestSchema/bundle.properties b/FileTestSchema/bundle.properties
index 528d961..e756efa 100644
--- a/FileTestSchema/bundle.properties
+++ b/FileTestSchema/bundle.properties
@@ -6,5 +6,5 @@ com.emmoco.framework.Properties.schemaDestinationDirectory = out
com.emmoco.framework.Properties.serverAPIToken =
com.emmoco.framework.Properties.align16 = 2
com.emmoco.framework.Properties.align32 = 4
-com.emmoco.framework.Properties.schemaFile = /Users/imanol/devel/emmoco/FileTestSchema/schema.ems
+com.emmoco.framework.Properties.schemaFile = /Users/imanol/devel/durex/FileTestSchema/schema.ems
com.emmoco.framework.Properties.toolVersion = 12.0.0.201211010336
diff --git a/FileTestSchema/out/FileTest-TODO.c b/FileTestSchema/out/FileTest-TODO.c
index fa5519f..e8c29be 100644
--- a/FileTestSchema/out/FileTest-TODO.c
+++ b/FileTestSchema/out/FileTest-TODO.c
@@ -1,4 +1,4 @@
-/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.FileTest on 2014-05-09T14:33:36T ****/
+/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.FileTest on 2014-05-09T15:40:38T ****/
/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/
#include "FileTest.h"
diff --git a/FileTestSchema/out/FileTest.c b/FileTestSchema/out/FileTest.c
index 4976b76..f7361f9 100644
--- a/FileTestSchema/out/FileTest.c
+++ b/FileTestSchema/out/FileTest.c
@@ -1,4 +1,4 @@
-/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.FileTest on 2014-05-09T14:33:36T ****/
+/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.FileTest on 2014-05-09T15:40:38T ****/
/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/
#include "Em_Message.h"
@@ -19,7 +19,7 @@ typedef struct Em_App_Message {
const uint8_t Em_App_hash[] = {15, 80, 19, 228, 59, 147, 90, 236, 176, 26, 167, 221, 86, 191, 95, 150, 12, 0, ((sizeof(struct{uint8_t f1; uint16_t f2;}) - sizeof(uint16_t)) << 4) | (sizeof(struct{uint8_t f1; uint32_t f2;}) - sizeof(uint32_t))};
-const uint8_t Em_App_build[] = {32, 117, 249, 224, 69, 1, 0, 0};
+const uint8_t Em_App_build[] = {235, 212, 54, 225, 69, 1, 0, 0};
#define Em_App_APP_RESOURCE_COUNT 2
#define Em_App_SYS_RESOURCE_COUNT 8
diff --git a/FileTestSchema/out/FileTest.h b/FileTestSchema/out/FileTest.h
index e96d2d3..ea32125 100644
--- a/FileTestSchema/out/FileTest.h
+++ b/FileTestSchema/out/FileTest.h
@@ -1,4 +1,4 @@
-/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.FileTest on 2014-05-09T14:33:36T ****/
+/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.FileTest on 2014-05-09T15:40:38T ****/
/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/
#ifndef FileTest__H
diff --git a/FileTestSchema/out/FileTest.zip b/FileTestSchema/out/FileTest.zip
index 05edc4a..70d3c8a 100644
--- a/FileTestSchema/out/FileTest.zip
+++ b/FileTestSchema/out/FileTest.zip
diff --git a/FileTestSchema/out/filetest.json b/FileTestSchema/out/filetest.json
index bc088cd..f78fb09 100644
--- a/FileTestSchema/out/filetest.json
+++ b/FileTestSchema/out/filetest.json
@@ -115,16 +115,16 @@
"name": "FileTest",
"$$md5": "35fd15d0c33bc2126fe2cdd81f964d67",
"build": [
- 32,
- 117,
- 249,
- 224,
+ 235,
+ 212,
+ 54,
+ 225,
69,
1,
0,
0
],
- "date": "2014-05-09T14:33:36T",
+ "date": "2014-05-09T15:40:38T",
"maxAlign": 4,
"maxSize": 240,
"version": "1.0.0"
diff --git a/MyAppSchema/bundle.properties b/MyAppSchema/bundle.properties
index dc71afe..689ae49 100644
--- a/MyAppSchema/bundle.properties
+++ b/MyAppSchema/bundle.properties
@@ -6,5 +6,5 @@ com.emmoco.framework.Properties.schemaDestinationDirectory = out
com.emmoco.framework.Properties.serverAPIToken =
com.emmoco.framework.Properties.align16 = 2
com.emmoco.framework.Properties.align32 = 4
-com.emmoco.framework.Properties.schemaFile = /Users/imanol/devel/emmoco/MyAppSchema/schema.ems
+com.emmoco.framework.Properties.schemaFile = /Users/imanol/devel/durex/MyAppSchema/schema.ems
com.emmoco.framework.Properties.toolVersion = 12.0.0.201211010336
diff --git a/MyAppSchema/out/MyApp-TODO.c b/MyAppSchema/out/MyApp-TODO.c
index 5d1ed0b..4b8627e 100644
--- a/MyAppSchema/out/MyApp-TODO.c
+++ b/MyAppSchema/out/MyApp-TODO.c
@@ -1,4 +1,4 @@
-/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.MyApp on 2014-05-09T14:33:36T ****/
+/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.MyApp on 2014-05-09T15:40:38T ****/
/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/
#include "MyApp.h"
diff --git a/MyAppSchema/out/MyApp.c b/MyAppSchema/out/MyApp.c
index 9b88c1e..3ebe2ad 100644
--- a/MyAppSchema/out/MyApp.c
+++ b/MyAppSchema/out/MyApp.c
@@ -1,4 +1,4 @@
-/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.MyApp on 2014-05-09T14:33:36T ****/
+/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.MyApp on 2014-05-09T15:40:38T ****/
/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/
#include "Em_Message.h"
@@ -19,7 +19,7 @@ typedef struct Em_App_Message {
const uint8_t Em_App_hash[] = {214, 20, 94, 119, 153, 158, 83, 114, 52, 253, 232, 39, 41, 80, 38, 6, 12, 0, ((sizeof(struct{uint8_t f1; uint16_t f2;}) - sizeof(uint16_t)) << 4) | (sizeof(struct{uint8_t f1; uint32_t f2;}) - sizeof(uint32_t))};
-const uint8_t Em_App_build[] = {195, 117, 249, 224, 69, 1, 0, 0};
+const uint8_t Em_App_build[] = {134, 213, 54, 225, 69, 1, 0, 0};
#define Em_App_APP_RESOURCE_COUNT 1
#define Em_App_SYS_RESOURCE_COUNT 8
diff --git a/MyAppSchema/out/MyApp.h b/MyAppSchema/out/MyApp.h
index 180b68b..820d479 100644
--- a/MyAppSchema/out/MyApp.h
+++ b/MyAppSchema/out/MyApp.h
@@ -1,4 +1,4 @@
-/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.MyApp on 2014-05-09T14:33:36T ****/
+/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.MyApp on 2014-05-09T15:40:38T ****/
/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/
#ifndef MyApp__H
diff --git a/MyAppSchema/out/MyApp.zip b/MyAppSchema/out/MyApp.zip
index 2349d95..aefa315 100644
--- a/MyAppSchema/out/MyApp.zip
+++ b/MyAppSchema/out/MyApp.zip
diff --git a/MyAppSchema/out/myapp.json b/MyAppSchema/out/myapp.json
index 1439f52..675211f 100644
--- a/MyAppSchema/out/myapp.json
+++ b/MyAppSchema/out/myapp.json
@@ -107,16 +107,16 @@
"name": "MyApp",
"$$md5": "b184e3f65b05cd53903a85dfa1918a7b",
"build": [
- 195,
- 117,
- 249,
- 224,
+ 134,
+ 213,
+ 54,
+ 225,
69,
1,
0,
0
],
- "date": "2014-05-09T14:33:36T",
+ "date": "2014-05-09T15:40:38T",
"maxAlign": 2,
"maxSize": 20,
"version": "1.0.0"
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMAppDelegate.h b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMAppDelegate.h
new file mode 100644
index 0000000..98c4ade
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMAppDelegate.h
@@ -0,0 +1,15 @@
+//
+// EMAppDelegate.h
+// BroadcastExample
+//
+// Created by Dexter Weiss on 12/17/13.
+// Copyright (c) 2013 Emmoco. All rights reserved.
+//
+
+#import
+
+@interface EMAppDelegate : UIResponder
+
+@property (strong, nonatomic) UIWindow *window;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMAppDelegate.m b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMAppDelegate.m
new file mode 100644
index 0000000..acf4909
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMAppDelegate.m
@@ -0,0 +1,52 @@
+//
+// EMAppDelegate.m
+// BroadcastExample
+//
+// Created by Dexter Weiss on 12/17/13.
+// Copyright (c) 2013 Emmoco. All rights reserved.
+//
+
+#import "EMAppDelegate.h"
+#import "EMFramework.h"
+
+@implementation EMAppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ EMBluetoothLowEnergyConnectionType *bluetooth = [[EMBluetoothLowEnergyConnectionType alloc] init];
+ if ([bluetooth isAvailable]) {
+ [[EMConnectionListManager sharedManager] addConnectionTypeToUpdates:bluetooth];
+ [bluetooth setScanResetTime:0.5];
+ }
+ [[EMConnectionListManager sharedManager] startUpdating];
+ return YES;
+}
+
+- (void)applicationWillResignActive:(UIApplication *)application
+{
+ // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+ // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application
+{
+ // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+ // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application
+{
+ // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application
+{
+ // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application
+{
+ // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+}
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMBroadcastViewController.h b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMBroadcastViewController.h
new file mode 100644
index 0000000..75d4cea
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMBroadcastViewController.h
@@ -0,0 +1,13 @@
+//
+// EMBroadcastViewController.h
+// BroadcastExample
+//
+// Created by Dexter Weiss on 12/17/13.
+// Copyright (c) 2013 Emmoco. All rights reserved.
+//
+
+#import
+
+@interface EMBroadcastViewController : UIViewController
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMBroadcastViewController.m b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMBroadcastViewController.m
new file mode 100644
index 0000000..8bc2f64
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/EMBroadcastViewController.m
@@ -0,0 +1,66 @@
+//
+// EMBroadcastViewController.m
+// BroadcastExample
+//
+// Created by Dexter Weiss on 12/17/13.
+// Copyright (c) 2013 Emmoco. All rights reserved.
+//
+
+#import "EMBroadcastViewController.h"
+#import "EMFramework.h"
+
+@interface EMBroadcastViewController () {
+ IBOutlet UILabel *codeLabel;
+ IBOutlet UILabel *firstDataField;
+ IBOutlet UILabel *secondDataField;
+}
+
+@property (nonatomic, strong) EMDeviceBasicDescription *device;
+
+@end
+
+@implementation EMBroadcastViewController
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+ if (self) {
+ // Custom initialization
+ }
+ return self;
+}
+
+- (void)viewDidLoad
+{
+ [super viewDidLoad];
+ [[EMConnectionListManager sharedManager] addObserver:self forKeyPath:@"devices" options:0 context:NULL];
+}
+
+-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
+ if (object == [EMConnectionListManager sharedManager]) {
+ if ([keyPath isEqualToString:@"devices"]) {
+ NSArray *devices = [[EMConnectionListManager sharedManager] devices];
+ [self setDevice:[devices lastObject]];
+ }
+ }
+}
+
+-(void)setDevice:(EMDeviceBasicDescription *)device {
+ [self willChangeValueForKey:@"device"];
+ _device = device;
+ [self didChangeValueForKey:@"device"];
+ [self _updateInterfaceForDevice];
+}
+
+-(void)_updateInterfaceForDevice {
+ NSDictionary *broadcastInfo = [[self device] advertiseObject];
+ NSString *code = [broadcastInfo objectForKey:@"c"];
+ NSArray *values = [broadcastInfo objectForKey:@"d"];
+ NSNumber *first = [values firstObject];
+ NSNumber *second = [values lastObject];
+ [codeLabel setText:code];
+ [firstDataField setText:[NSString stringWithFormat:@"%0.1f", [first floatValue]]];
+ [secondDataField setText:[NSString stringWithFormat:@"%0.1f", [second floatValue]]];
+}
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Ex_Broadcast-Info.plist b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Ex_Broadcast-Info.plist
new file mode 100644
index 0000000..218b3ca
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Ex_Broadcast-Info.plist
@@ -0,0 +1,40 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ ${PRODUCT_NAME}
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIdentifier
+ com.emmoco.${PRODUCT_NAME:rfc1034identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ LSRequiresIPhoneOS
+
+ UIMainStoryboardFile
+ Storyboard
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Ex_Broadcast-Prefix.pch b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Ex_Broadcast-Prefix.pch
new file mode 100644
index 0000000..743435c
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Ex_Broadcast-Prefix.pch
@@ -0,0 +1,16 @@
+//
+// Prefix header
+//
+// The contents of this file are implicitly included at the beginning of every source file.
+//
+
+#import
+
+#ifndef __IPHONE_3_0
+#warning "This project uses features only available in iOS SDK 3.0 and later."
+#endif
+
+#ifdef __OBJC__
+ #import
+ #import
+#endif
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/120 - App Icon@2x.png b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/120 - App Icon@2x.png
new file mode 100644
index 0000000..db853cc
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/120 - App Icon@2x.png
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/29 - App Icon@2x.png b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/29 - App Icon@2x.png
new file mode 100644
index 0000000..3165ab3
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/29 - App Icon@2x.png
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/40 - App Icon@2x.png b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/40 - App Icon@2x.png
new file mode 100644
index 0000000..6444f2f
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/40 - App Icon@2x.png
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/Contents.json b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..837c342
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "29 - App Icon@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "40 - App Icon@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "120 - App Icon@2x.png",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/LaunchImage.launchimage/Contents.json b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/LaunchImage.launchimage/Contents.json
new file mode 100644
index 0000000..c79ebd3
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Images.xcassets/LaunchImage.launchimage/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "orientation" : "portrait",
+ "idiom" : "iphone",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "2x"
+ },
+ {
+ "orientation" : "portrait",
+ "idiom" : "iphone",
+ "subtype" : "retina4",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Storyboard.storyboard b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Storyboard.storyboard
new file mode 100644
index 0000000..f554ab6
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/Storyboard.storyboard
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/en.lproj/InfoPlist.strings b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/ex_broadcast.json b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/ex_broadcast.json
new file mode 100644
index 0000000..509542e
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/ex_broadcast.json
@@ -0,0 +1,244 @@
+{
+ "resources": {
+ "$schemaHash": {
+ "dim": 20,
+ "id": -6,
+ "align": 1,
+ "attributes": {"readonly": true},
+ "type": "A20:u1",
+ "access": "r",
+ "size": 20
+ },
+ "$eapProtocolLevel": {
+ "id": -3,
+ "align": 2,
+ "attributes": {"readonly": true},
+ "type": "u2",
+ "access": "r",
+ "size": 2
+ },
+ "$mcmProtocolLevel": {
+ "id": -2,
+ "align": 2,
+ "attributes": {"readonly": true},
+ "type": "u2",
+ "access": "r",
+ "size": 2
+ },
+ "$mobileRssi": {
+ "id": -8,
+ "align": 1,
+ "attributes": {"readonly": true},
+ "type": "i1",
+ "access": "r",
+ "size": 1
+ },
+ "$activeGroup": {
+ "id": -10,
+ "align": 1,
+ "pack": 1,
+ "attributes": {"readwrite": true},
+ "type": "E:system@emmoco.com.System/ParameterGroup",
+ "access": "rw",
+ "size": 1
+ },
+ "$mcmDisconnect": {
+ "id": -9,
+ "align": 1,
+ "attributes": {"writeonly": true},
+ "type": "u1",
+ "access": "w",
+ "size": 1
+ },
+ "$eapBuildDate": {
+ "dim": 8,
+ "id": -4,
+ "align": 1,
+ "attributes": {"readonly": true},
+ "type": "A8:u1",
+ "access": "r",
+ "size": 8
+ },
+ "$resourceCount": {
+ "id": -7,
+ "align": 1,
+ "attributes": {"readonly": true},
+ "type": "S:system@emmoco.com.System/ResourceCount",
+ "access": "r",
+ "size": 2
+ },
+ "$fileIndexReset": {
+ "id": -5,
+ "align": 2,
+ "attributes": {"writeonly": true},
+ "type": "i2",
+ "access": "w",
+ "size": 2
+ },
+ "info": {
+ "id": 1,
+ "align": 2,
+ "pack": 9,
+ "attributes": {"broadcast": true},
+ "type": "S:@emmoco.com.Ex_Broadcast/Info",
+ "access": "r",
+ "size": 2
+ }
+ },
+ "resourceNamesSys": [
+ "$activeGroup",
+ "$eapBuildDate",
+ "$eapProtocolLevel",
+ "$fileIndexReset",
+ "$mcmDisconnect",
+ "$mcmProtocolLevel",
+ "$mobileRssi",
+ "$resourceCount",
+ "$schemaHash"
+ ],
+ "manifest": {
+ "protocolLevel": 13,
+ "hash": [
+ 192,
+ 219,
+ 219,
+ 167,
+ 239,
+ 193,
+ 8,
+ 28,
+ 198,
+ 8,
+ 2,
+ 121,
+ 226,
+ 88,
+ 60,
+ 212
+ ],
+ "toolVersion": "13.3.7.201308302156",
+ "name": "Ex_Broadcast",
+ "broadcaster": "info",
+ "$$md5": "c0dbdba7efc1081cc6080279e2583cd4",
+ "build": [
+ 177,
+ 231,
+ 254,
+ 55,
+ 65,
+ 1,
+ 0,
+ 0
+ ],
+ "date": "2013-09-19T15:52:34",
+ "maxAlign": 2,
+ "maxSize": 20,
+ "version": "1.0.0"
+ },
+ "resourceNames": [
+ "info",
+ "$mcmProtocolLevel",
+ "$eapProtocolLevel",
+ "$eapBuildDate",
+ "$fileIndexReset",
+ "$schemaHash",
+ "$resourceCount",
+ "$mobileRssi",
+ "$mcmDisconnect",
+ "$activeGroup"
+ ],
+ "attributes": {
+ "description": "Broadcast example",
+ "version": "1.0.0"
+ },
+ "resourceNamesApp": ["info"],
+ "types": {
+ "system@emmoco.com.System/ResourceCount": {
+ "packed": false,
+ "align": 1,
+ "type": "S:system@emmoco.com.System/ResourceCount",
+ "size": 2,
+ "fields": [
+ {
+ "pad": 0,
+ "align": 1,
+ "name": "app",
+ "type": "u1",
+ "size": 1
+ },
+ {
+ "pad": 0,
+ "align": 1,
+ "name": "sys",
+ "type": "u1",
+ "size": 1
+ }
+ ]
+ },
+ "std:i2": {
+ "align": 2,
+ "size": 2
+ },
+ "std:i1": {
+ "align": 1,
+ "size": 1
+ },
+ "@emmoco.com.Ex_Broadcast/Code": {
+ "values": [
+ "C1",
+ "C2"
+ ],
+ "align": 1,
+ "pack": 1,
+ "type": "E:@emmoco.com.Ex_Broadcast/Code",
+ "size": 1
+ },
+ "std:u1": {
+ "align": 1,
+ "size": 1
+ },
+ "system@emmoco.com.System/ParameterGroup": {
+ "values": [
+ "GROUP_A",
+ "GROUP_B"
+ ],
+ "align": 1,
+ "pack": 1,
+ "type": "E:system@emmoco.com.System/ParameterGroup",
+ "size": 1
+ },
+ "std:u2": {
+ "align": 2,
+ "size": 2
+ },
+ "@emmoco.com.Ex_Broadcast/Info": {
+ "packed": true,
+ "align": 2,
+ "pack": 9,
+ "type": "S:@emmoco.com.Ex_Broadcast/Info",
+ "size": 2,
+ "fields": [
+ {
+ "pad": 0,
+ "packed": true,
+ "align": 1,
+ "name": "c",
+ "pack": 1,
+ "type": "E:@emmoco.com.Ex_Broadcast/Code",
+ "size": 1
+ },
+ {
+ "dim": 2,
+ "pad": 0,
+ "packed": true,
+ "align": 1,
+ "name": "d",
+ "pack": 8,
+ "type": "A2:N:1.000000,2.000000,0.100000,1/u1/10",
+ "size": 1
+ }
+ ]
+ }
+ },
+ "imports": {"@emmoco.com.Ex_Broadcast": true}
+}
\ No newline at end of file
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/main.m b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/main.m
new file mode 100644
index 0000000..d835a4d
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExample/main.m
@@ -0,0 +1,18 @@
+//
+// main.m
+// BroadcastExample
+//
+// Created by Dexter Weiss on 12/17/13.
+// Copyright (c) 2013 Emmoco. All rights reserved.
+//
+
+#import
+
+#import "EMAppDelegate.h"
+
+int main(int argc, char * argv[])
+{
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([EMAppDelegate class]));
+ }
+}
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExampleTests/BroadcastExampleTests.m b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExampleTests/BroadcastExampleTests.m
new file mode 100644
index 0000000..ef28cff
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExampleTests/BroadcastExampleTests.m
@@ -0,0 +1,34 @@
+//
+// BroadcastExampleTests.m
+// BroadcastExampleTests
+//
+// Created by Dexter Weiss on 12/17/13.
+// Copyright (c) 2013 Emmoco. All rights reserved.
+//
+
+#import
+
+@interface BroadcastExampleTests : XCTestCase
+
+@end
+
+@implementation BroadcastExampleTests
+
+- (void)setUp
+{
+ [super setUp];
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+}
+
+- (void)tearDown
+{
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ [super tearDown];
+}
+
+- (void)testExample
+{
+ XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
+}
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExampleTests/Ex_BroadcastTests-Info.plist b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExampleTests/Ex_BroadcastTests-Info.plist
new file mode 100644
index 0000000..b906695
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExampleTests/Ex_BroadcastTests-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIdentifier
+ com.emmoco.${PRODUCT_NAME:rfc1034identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+
+
diff --git a/ios-examples-13.4.9/Ex_Broadcast/BroadcastExampleTests/en.lproj/InfoPlist.strings b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExampleTests/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/BroadcastExampleTests/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/ios-examples-13.4.9/Ex_Broadcast/EmmocoMobileFramework/Assets/system.json b/ios-examples-13.4.9/Ex_Broadcast/EmmocoMobileFramework/Assets/system.json
new file mode 100644
index 0000000..7a27c17
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/EmmocoMobileFramework/Assets/system.json
@@ -0,0 +1,196 @@
+{
+ "resources": {
+ "$activeParameterGroup": {
+ "id": -10,
+ "align": 1,
+ "pack": 1,
+ "attributes": {"readwrite": true},
+ "type": "E:system@emmoco.com.System/ParameterGroup",
+ "access": "rw",
+ "size": 1
+ },
+ "$schemaHash": {
+ "dim": 20,
+ "id": -6,
+ "align": 1,
+ "attributes": {"readonly": true},
+ "type": "A20:u1",
+ "access": "r",
+ "size": 20
+ },
+ "$eapProtocolLevel": {
+ "id": -3,
+ "align": 2,
+ "attributes": {"readonly": true},
+ "type": "u2",
+ "access": "r",
+ "size": 2
+ },
+ "$mcmProtocolLevel": {
+ "id": -2,
+ "align": 2,
+ "attributes": {"readonly": true},
+ "type": "u2",
+ "access": "r",
+ "size": 2
+ },
+ "$mobileRssi": {
+ "id": -8,
+ "align": 1,
+ "attributes": {"readonly": true},
+ "type": "i1",
+ "access": "r",
+ "size": 1
+ },
+ "$mcmDisconnect": {
+ "id": -9,
+ "align": 1,
+ "attributes": {"writeonly": true},
+ "type": "u1",
+ "access": "w",
+ "size": 1
+ },
+ "$eapBuildDate": {
+ "dim": 8,
+ "id": -4,
+ "align": 1,
+ "attributes": {"readonly": true},
+ "type": "A8:u1",
+ "access": "r",
+ "size": 8
+ },
+ "$resourceCount": {
+ "id": -7,
+ "align": 1,
+ "attributes": {"readonly": true},
+ "type": "S:system@emmoco.com.System/ResourceCount",
+ "access": "r",
+ "size": 2
+ },
+ "$fileIndexReset": {
+ "id": -5,
+ "align": 2,
+ "attributes": {"writeonly": true},
+ "type": "i2",
+ "access": "w",
+ "size": 2
+ }
+ },
+ "resourceNamesSys": [
+ "$activeParameterGroup",
+ "$eapBuildDate",
+ "$eapProtocolLevel",
+ "$fileIndexReset",
+ "$mcmDisconnect",
+ "$mcmProtocolLevel",
+ "$mobileRssi",
+ "$resourceCount",
+ "$schemaHash"
+ ],
+ "manifest": {
+ "protocolLevel": 13,
+ "hash": [
+ 108,
+ 31,
+ 53,
+ 92,
+ 46,
+ 47,
+ 48,
+ 241,
+ 201,
+ 5,
+ 236,
+ 253,
+ 10,
+ 254,
+ 240,
+ 187
+ ],
+ "toolVersion": "13.3.0.201307022239",
+ "name": "System",
+ "$$md5": "6c1f355c2e2f30f1c905ecfd0afef0bb",
+ "build": [
+ 99,
+ 80,
+ 140,
+ 161,
+ 63,
+ 1,
+ 0,
+ 0
+ ],
+ "date": "2013-07-02T17:41:34",
+ "idFormat": "BINARY4",
+ "maxAlign": 2,
+ "maxSize": 20,
+ "version": "13.3.0"
+ },
+ "resourceNames": [
+ "$mcmProtocolLevel",
+ "$eapProtocolLevel",
+ "$eapBuildDate",
+ "$fileIndexReset",
+ "$schemaHash",
+ "$resourceCount",
+ "$mobileRssi",
+ "$mcmDisconnect",
+ "$activeParameterGroup"
+ ],
+ "attributes": {
+ "description": "System resources schema",
+ "version": "13.3.0"
+ },
+ "types": {
+ "system@emmoco.com.System/ResourceCount": {
+ "packed": false,
+ "align": 1,
+ "type": "S:system@emmoco.com.System/ResourceCount",
+ "size": 2,
+ "fields": [
+ {
+ "pad": 0,
+ "align": 1,
+ "name": "app",
+ "type": "u1",
+ "size": 1
+ },
+ {
+ "pad": 0,
+ "align": 1,
+ "name": "sys",
+ "type": "u1",
+ "size": 1
+ }
+ ]
+ },
+ "std:i2": {
+ "align": 2,
+ "size": 2
+ },
+ "std:i1": {
+ "align": 1,
+ "size": 1
+ },
+ "std:u1": {
+ "align": 1,
+ "size": 1
+ },
+ "system@emmoco.com.System/ParameterGroup": {
+ "values": [
+ "GROUP_A",
+ "GROUP_B"
+ ],
+ "align": 1,
+ "pack": 1,
+ "type": "E:system@emmoco.com.System/ParameterGroup",
+ "size": 1
+ },
+ "std:u2": {
+ "align": 2,
+ "size": 2
+ }
+ },
+ "resourceNamesApp": [],
+ "imports": {"@emmoco.com.System": true}
+}
\ No newline at end of file
diff --git a/ios-examples-13.4.9/Ex_Broadcast/EmmocoMobileFramework/Docs/Classes/ArrayValue.html b/ios-examples-13.4.9/Ex_Broadcast/EmmocoMobileFramework/Docs/Classes/ArrayValue.html
new file mode 100644
index 0000000..875bda7
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Broadcast/EmmocoMobileFramework/Docs/Classes/ArrayValue.html
@@ -0,0 +1,1231 @@
+
+
+
+
+ ArrayValue Class Reference
+
+
+
+
+
+
+
+
+
EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+
+
If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
By default, EMBluetoothLowEnergyConnectionType will ‘discover’ devices that have a schema hash matching a schema in your application bundle.
+Set this flag to ‘YES’ for an instance of this class to discover all Emmoco BLE devices.
+NOTE: Most applications should not have this enabled.
A boolean indicating whether or not there is a connection with a device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionType.h
+
+
+
+
+
+
+
+
discoversAllEmmocoBLEDevices
+
+
+
+
+
By default, EMBluetoothLowEnergyConnectionType will ‘discover’ devices that have a schema hash matching a schema in your application bundle.
+Set this flag to ‘YES’ for an instance of this class to discover all Emmoco BLE devices.
+NOTE: Most applications should not have this enabled.
By default, EMBluetoothLowEnergyConnectionType will ‘discover’ devices that have a schema hash matching a schema in your application bundle.
+Set this flag to ‘YES’ for an instance of this class to discover all Emmoco BLE devices.
+NOTE: Most applications should not have this enabled.
EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+
+
If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+
+
If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
Creates a new EMTargetConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
Creates a new EMConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnection.h
+
+
+
+
+
+
+
+
initWithDevice:schema:
+
+
+
+
+
Creates a new EMTargetConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
the name of the target device, including one of the pre-defined prefixes
+
+
+
+
resourceSchema
+
the schema describing the resources available in this connection
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Creates a new EMTargetConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
@param automaticallyConnectsToLastDevice
+A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
@param automaticallyConnectsToLastDevice
+A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
@param automaticallyConnectsToLastDevice
+A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionListManager.h
+
+
+
+
+
+
+
+
devices
+
+
+
+
+
@property devices
+A list of devices that has been discovered as available by the connection list manager
@property backgroundUpdatesEnabled
+@description If you set this flag to “YES”, the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+Note: Accessing the connection manager in any way other is not recommended.
Tells EMConnectionManager to update its internal cache of schemas used for connection.
+@description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
Gets the embedded system protocol level from the schema used to connect to the device
+@description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Properties
+
+
+
+
backgroundUpdatesEnabled
+
+
+
+
+
@property backgroundUpdatesEnabled
+@description If you set this flag to “YES”, the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
@property backgroundUpdatesEnabled
+@description If you set this flag to “YES”, the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
+
+
+
+
Class Methods
+
+
+
+
sharedManager
+
+
+
+
+
Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+Note: Accessing the connection manager in any way other is not recommended.
+
+
+
+
+ (EMConnectionManager *)sharedManager
+
+
+
+
+
+
+
+
+
+
Discussion
+
Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+Note: Accessing the connection manager in any way other is not recommended.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
+
+
+
+
Instance Methods
+
+
+
+
addSchemaSearchForFilesInDirectory:
+
+
+
+
+
Tells the connection manager where it should look for schemas other than the NSBundle’s mainBundle
The time the connection manager should allow for a successful connection. After the specified time interval passes, the fail block will be called.
+
+
+
+
successBlock
+
The block to run after a successful connection
+
+
+
+
failBlock
+
The block to run if the connection fails
+@description The implementation of this method calls connectDevice:timeoutInterval:onSuccess:onFail: with a default time interval of 10 seconds
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Tells the connection manager to connect to a specific device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
connectedDevice
+
+
+
+
+
Returns an array of EMDeviceBasicDescription’s for the device that is actively connected
+
+
+
+
- (EMDeviceBasicDescription *)connectedDevice
+
+
+
+
+
+
+
+
+
+
Discussion
+
Returns an array of EMDeviceBasicDescription’s for the device that is actively connected
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
disconnectWithSuccess:onFail:
+
+
+
+
+
Tells the connection manager to disconnect from a specific device
Tells the connection manager to disconnect from a specific device
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
embeddedSystemProtocolLevel
+
+
+
+
+
Gets the embedded system protocol level from the schema used to connect to the device
+@description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+
+
+
+
- (NSNumber *)embeddedSystemProtocolLevel
+
+
+
+
+
+
+
+
+
+
Discussion
+
Gets the embedded system protocol level from the schema used to connect to the device
+@description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
forceConnectionWithDefaultSchema:
+
+
+
+
+
Forces the connection manager to connect to a device with the default schema
The device for the forced connection
+@description Use this method with extreme caution. Many undefined behaviors can come from using this method with a schema that isn’t an exact match for the specified device. EMConnectionManager uses this method internally. It is very rare that you will need to call this method directly.
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Forces the connection manager to connect to a device with the default schema
A full or partial schema hash string
+@description This method takes either a full hash or partial hash. If any schema begins with ‘hash string’, the file name in the bundle is returned. Returns nil if no matching schema was found in the bundle.
+If one or more schemas share ‘hashString’ at the beginning of their hash, the first path will be returned.
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Gives the schema name in the application bundle for a given hash string
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
schemaForConnectedDevice
+
+
+
+
+
Gets the schema for the connected device.
+@description Returns nil if no device is connected.
+
+
+
+
- (EMSchema *)schemaForConnectedDevice
+
+
+
+
+
+
+
+
+
+
Discussion
+
Gets the schema for the connected device.
+@description Returns nil if no device is connected.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
schemaHashForConnectedDevice
+
+
+
+
+
Returns a version of the the schema hash from a connected device’s firmware as it appears on em-hub
+
+
+
+
- (NSString *)schemaHashForConnectedDevice
+
+
+
+
+
+
+
+
+
+
Discussion
+
Returns a version of the the schema hash from a connected device’s firmware as it appears on em-hub
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
updateInternalSchemaCache
+
+
+
+
+
Tells EMConnectionManager to update its internal cache of schemas used for connection.
+@description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
+
+
+
+
- (void)updateInternalSchemaCache
+
+
+
+
+
+
+
+
+
+
Discussion
+
Tells EMConnectionManager to update its internal cache of schemas used for connection.
+@description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
writeValue:toResource:onSuccess:onFail:
+
+
+
+
+
Writes a value to a resource on a connected device
EMDeviceBasicDescription is a class used to describe basic device characteristics throughout the entire framework.
+All devices, regardless of connection type, will have these properties.
+
+
All classes implementing the EMConnectionType protocol will receive and deliver device information in the form of an EMDeviceBasicDescription.
An object taken from the advertise data based on the advertise resource in the device’s schema
+Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
The name of the schema file in your bundle that relates to this device.
+NOTE: Many devices do not broadcast this information. In this case, this property will not be set
+
+ property
+
+
+
+
+
+
+
+
+
+
+
+
+
Properties
+
+
+
+
advertiseData
+
+
+
+
+
Data that was discovered along with the device.
+Ex: When dealing with bluetooth, this is the advertising packet data
Data that was discovered along with the device.
+Ex: When dealing with bluetooth, this is the advertising packet data
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
advertiseObject
+
+
+
+
+
An object taken from the advertise data based on the advertise resource in the device’s schema
+Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
+
+
+
+
@property (nonatomic, strong) id advertiseObject
+
+
+
+
+
+
+
+
+
+
Discussion
+
An object taken from the advertise data based on the advertise resource in the device’s schema
+Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
connectionType
+
+
+
+
+
A concrete EMConnectionType instance that will be used to send messages to the device.
A concrete EMConnectionType instance that will be used to send messages to the device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
name
+
+
+
+
+
The name of the device used thoughout the framework.
+Like the unique_identifier, this property needs to be unique.
+
+
+
+
@property (nonatomic, strong) NSString *name
+
+
+
+
+
+
+
+
+
+
Discussion
+
The name of the device used thoughout the framework.
+Like the unique_identifier, this property needs to be unique.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
schemaFilePath
+
+
+
+
+
The name of the schema file in your bundle that relates to this device.
+NOTE: Many devices do not broadcast this information. In this case, this property will not be set
The name of the schema file in your bundle that relates to this device.
+NOTE: Many devices do not broadcast this information. In this case, this property will not be set
A container for different types of resource values.
+Instances of this class are used to hold values for resources whose types is
+either Void, Int, Enum, Num, String, Struct, Array, or File.
EMTargetDeviceHandler is implemented by classes interested in manageing connections to devices. By default, this will be the shared instance of EMConnectionManager.
EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+
+
If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
By default, EMBluetoothLowEnergyConnectionType will ‘discover’ devices that have a schema hash matching a schema in your application bundle.
+Set this flag to ‘YES’ for an instance of this class to discover all Emmoco BLE devices.
+NOTE: Most applications should not have this enabled.
A boolean indicating whether or not there is a connection with a device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionType.h
+
+
+
+
+
+
+
+
discoversAllEmmocoBLEDevices
+
+
+
+
+
By default, EMBluetoothLowEnergyConnectionType will ‘discover’ devices that have a schema hash matching a schema in your application bundle.
+Set this flag to ‘YES’ for an instance of this class to discover all Emmoco BLE devices.
+NOTE: Most applications should not have this enabled.
By default, EMBluetoothLowEnergyConnectionType will ‘discover’ devices that have a schema hash matching a schema in your application bundle.
+Set this flag to ‘YES’ for an instance of this class to discover all Emmoco BLE devices.
+NOTE: Most applications should not have this enabled.
EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+
+
If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+
+
If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
Creates a new EMTargetConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
Creates a new EMConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnection.h
+
+
+
+
+
+
+
+
initWithDevice:schema:
+
+
+
+
+
Creates a new EMTargetConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
the name of the target device, including one of the pre-defined prefixes
+
+
+
+
resourceSchema
+
the schema describing the resources available in this connection
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Creates a new EMTargetConnection object.
+Actual connection and disconnection to the named target occurs through calls to open and close on this object.
@param automaticallyConnectsToLastDevice
+A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
@param automaticallyConnectsToLastDevice
+A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
@param automaticallyConnectsToLastDevice
+A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionListManager.h
+
+
+
+
+
+
+
+
devices
+
+
+
+
+
@property devices
+A list of devices that has been discovered as available by the connection list manager
@property backgroundUpdatesEnabled
+@description If you set this flag to “YES”, the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+Note: Accessing the connection manager in any way other is not recommended.
Tells EMConnectionManager to update its internal cache of schemas used for connection.
+@description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
Gets the embedded system protocol level from the schema used to connect to the device
+@description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Properties
+
+
+
+
backgroundUpdatesEnabled
+
+
+
+
+
@property backgroundUpdatesEnabled
+@description If you set this flag to “YES”, the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
@property backgroundUpdatesEnabled
+@description If you set this flag to “YES”, the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
+
+
+
+
Class Methods
+
+
+
+
sharedManager
+
+
+
+
+
Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+Note: Accessing the connection manager in any way other is not recommended.
+
+
+
+
+ (EMConnectionManager *)sharedManager
+
+
+
+
+
+
+
+
+
+
Discussion
+
Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+Note: Accessing the connection manager in any way other is not recommended.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
+
+
+
+
Instance Methods
+
+
+
+
addSchemaSearchForFilesInDirectory:
+
+
+
+
+
Tells the connection manager where it should look for schemas other than the NSBundle’s mainBundle
The time the connection manager should allow for a successful connection. After the specified time interval passes, the fail block will be called.
+
+
+
+
successBlock
+
The block to run after a successful connection
+
+
+
+
failBlock
+
The block to run if the connection fails
+@description The implementation of this method calls connectDevice:timeoutInterval:onSuccess:onFail: with a default time interval of 10 seconds
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Tells the connection manager to connect to a specific device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
connectedDevice
+
+
+
+
+
Returns an array of EMDeviceBasicDescription’s for the device that is actively connected
+
+
+
+
- (EMDeviceBasicDescription *)connectedDevice
+
+
+
+
+
+
+
+
+
+
Discussion
+
Returns an array of EMDeviceBasicDescription’s for the device that is actively connected
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
disconnectWithSuccess:onFail:
+
+
+
+
+
Tells the connection manager to disconnect from a specific device
Tells the connection manager to disconnect from a specific device
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
embeddedSystemProtocolLevel
+
+
+
+
+
Gets the embedded system protocol level from the schema used to connect to the device
+@description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+
+
+
+
- (NSNumber *)embeddedSystemProtocolLevel
+
+
+
+
+
+
+
+
+
+
Discussion
+
Gets the embedded system protocol level from the schema used to connect to the device
+@description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
forceConnectionWithDefaultSchema:
+
+
+
+
+
Forces the connection manager to connect to a device with the default schema
The device for the forced connection
+@description Use this method with extreme caution. Many undefined behaviors can come from using this method with a schema that isn’t an exact match for the specified device. EMConnectionManager uses this method internally. It is very rare that you will need to call this method directly.
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Forces the connection manager to connect to a device with the default schema
A full or partial schema hash string
+@description This method takes either a full hash or partial hash. If any schema begins with ‘hash string’, the file name in the bundle is returned. Returns nil if no matching schema was found in the bundle.
+If one or more schemas share ‘hashString’ at the beginning of their hash, the first path will be returned.
+
+
+
+
+
+
+
+
+
+
+
+
Discussion
+
Gives the schema name in the application bundle for a given hash string
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
schemaForConnectedDevice
+
+
+
+
+
Gets the schema for the connected device.
+@description Returns nil if no device is connected.
+
+
+
+
- (EMSchema *)schemaForConnectedDevice
+
+
+
+
+
+
+
+
+
+
Discussion
+
Gets the schema for the connected device.
+@description Returns nil if no device is connected.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
schemaHashForConnectedDevice
+
+
+
+
+
Returns a version of the the schema hash from a connected device’s firmware as it appears on em-hub
+
+
+
+
- (NSString *)schemaHashForConnectedDevice
+
+
+
+
+
+
+
+
+
+
Discussion
+
Returns a version of the the schema hash from a connected device’s firmware as it appears on em-hub
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
updateInternalSchemaCache
+
+
+
+
+
Tells EMConnectionManager to update its internal cache of schemas used for connection.
+@description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
+
+
+
+
- (void)updateInternalSchemaCache
+
+
+
+
+
+
+
+
+
+
Discussion
+
Tells EMConnectionManager to update its internal cache of schemas used for connection.
+@description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMConnectionManager.h
+
+
+
+
+
+
+
+
writeValue:toResource:onSuccess:onFail:
+
+
+
+
+
Writes a value to a resource on a connected device
EMDeviceBasicDescription is a class used to describe basic device characteristics throughout the entire framework.
+All devices, regardless of connection type, will have these properties.
+
+
All classes implementing the EMConnectionType protocol will receive and deliver device information in the form of an EMDeviceBasicDescription.
An object taken from the advertise data based on the advertise resource in the device’s schema
+Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
The name of the schema file in your bundle that relates to this device.
+NOTE: Many devices do not broadcast this information. In this case, this property will not be set
+
+ property
+
+
+
+
+
+
+
+
+
+
+
+
+
Properties
+
+
+
+
advertiseData
+
+
+
+
+
Data that was discovered along with the device.
+Ex: When dealing with bluetooth, this is the advertising packet data
Data that was discovered along with the device.
+Ex: When dealing with bluetooth, this is the advertising packet data
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
advertiseObject
+
+
+
+
+
An object taken from the advertise data based on the advertise resource in the device’s schema
+Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
+
+
+
+
@property (nonatomic, strong) id advertiseObject
+
+
+
+
+
+
+
+
+
+
Discussion
+
An object taken from the advertise data based on the advertise resource in the device’s schema
+Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
connectionType
+
+
+
+
+
A concrete EMConnectionType instance that will be used to send messages to the device.
A concrete EMConnectionType instance that will be used to send messages to the device.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
name
+
+
+
+
+
The name of the device used thoughout the framework.
+Like the unique_identifier, this property needs to be unique.
+
+
+
+
@property (nonatomic, strong) NSString *name
+
+
+
+
+
+
+
+
+
+
Discussion
+
The name of the device used thoughout the framework.
+Like the unique_identifier, this property needs to be unique.
+
+
+
+
+
+
+
+
+
+
Declared In
+ EMDeviceBasicDescription.h
+
+
+
+
+
+
+
+
schemaFilePath
+
+
+
+
+
The name of the schema file in your bundle that relates to this device.
+NOTE: Many devices do not broadcast this information. In this case, this property will not be set
The name of the schema file in your bundle that relates to this device.
+NOTE: Many devices do not broadcast this information. In this case, this property will not be set
A container for different types of resource values.
+Instances of this class are used to hold values for resources whose types is
+either Void, Int, Enum, Num, String, Struct, Array, or File.
EMTargetDeviceHandler is implemented by classes interested in manageing connections to devices. By default, this will be the shared instance of EMConnectionManager.
+
+
\ No newline at end of file
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMBluetoothLowEnergyConnectionType.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMBluetoothLowEnergyConnectionType.h
new file mode 100644
index 0000000..eb427f6
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMBluetoothLowEnergyConnectionType.h
@@ -0,0 +1,34 @@
+#import
+#import "EMConnectionType.h"
+
+#if TARGET_OS_IPHONE
+ #import
+#else
+ #import
+#endif
+
+
+
+/**
+ * EMBluethoothLowEnergyConnectionType is a concrete EMConnectionType for Bluetooth Low Energy.
+ *
+ * If you want the framework to interact with Bluetooth Low Energy devices, add an instance of this class to EMConnectionListManager via the -addConnectionTypeToUpdates: method.
+ */
+
+@interface EMBluetoothLowEnergyConnectionType : NSObject {
+
+}
+
+@property (nonatomic) NSTimeInterval scanResetTime;
+
+/**
+ * By default, EMBluetoothLowEnergyConnectionType will 'discover' devices that have a schema hash matching a schema in your application bundle.
+ * Set this flag to 'YES' for an instance of this class to discover all Emmoco BLE devices.
+ * NOTE: Most applications should not have this enabled.
+ */
+@property (nonatomic) BOOL discoversAllEmmocoBLEDevices;
+
++(CBUUID *)emmocoServiceUUID;
++(CBUUID *)emmocov12ServiceUUID;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMChecksum.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMChecksum.h
new file mode 100644
index 0000000..fb4d24c
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMChecksum.h
@@ -0,0 +1,19 @@
+//
+// EMChecksum.h
+// Emmoco
+//
+// Created by bob frankel on 8/18/11.
+// Copyright 2011 Emmoco, Inc.. All rights reserved.
+//
+
+#import
+
+@interface EMChecksum : NSObject {
+
+}
+
+- (void)addByte:(int)byte;
+- (void)clear;
+- (int)sum;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnection.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnection.h
new file mode 100644
index 0000000..b73f2b7
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnection.h
@@ -0,0 +1,134 @@
+
+/** @file */
+
+#import
+#import "EMSchema.h"
+#import "EMConnectionType.h"
+#import "EMTypes.h"
+
+@class EMConnection;
+
+@protocol EMConnectionDelegate
+
+-(void)connectionDidTimeout:(EMConnection *)connection;
+-(void)connectionDidDisconnect:(EMConnection *)connection;
+
+@end
+
+/**
+ * The state of the current connection. Use KVO to receive updates on this property and react to changes.
+ */
+
+typedef enum {
+ EMConnectionStateDisconnected, // Disconnected state, no error
+ EMConnectionStatePending, // A connection has been started, and is pending completion
+ EMConnectionStateSchemaNotFound, // The schema for the connection is not in the application bundle
+ EMConnectionStateInvalidSchemaHash, // The device didn't respond with a valid schema hash
+ EMConnectionStateConnected, // Connected state, no error
+ EMConnectionStateDisrupted, // The connection was interrupted
+ EMConnectionStatePendingForDefaultSchema, // The schema could not be found and the connection is being "forced" with the provided default schema. Note: This state will only occur if you have provided a default schema and told the connection manager to force a connection with it.
+ EMConnectionStateTimeout // The connection timed out
+} EMConnectionState;
+
+extern NSString * const kEMConnectionDidReceiveIndicatorNotificationName;
+extern NSString * const kEMIndicatorResourceKey;
+extern NSString * const kEMIndicatorNameKey;
+extern NSString * const kEMConnectionErrorDomain;
+extern NSString * const kEMIndicatorResourceValueKey;
+
+@interface EMConnection : NSObject {
+ @protected
+ EMSchema *_systemSchema;
+}
+
+/**
+ * This block will be called when an open connection is closed for any reason
+ */
+@property (atomic, strong) EMResourceBlock connectionClosedBlock;
+
+/**
+ * The timeout interval for a pending connection
+ */
+@property (atomic) NSTimeInterval connectionAttemptTimeout;
+
+/**
+ * The connection delegate. EMConnectionManager will post connect and disconnect delegate messages to this object if it is set.
+ */
+@property (nonatomic, unsafe_unretained) id connectionDelegate;
+
+
+/**
+ * The EMDeviceBasicDescription used for conenction
+ */
+@property (nonatomic, strong) EMDeviceBasicDescription *device;
+
+/**
+ * The schema for connection
+ */
+@property (nonatomic, strong) EMSchema *schema;
+
+
+/**
+ * Creates a new EMConnection object.
+ * Actual connection and disconnection to the named target occurs through calls to open and close on this object.
+ * @param device The basic description of a device
+ */
+- (id)initWithDevice:(EMDeviceBasicDescription *)device;
+
+/**
+ * Creates a new EMTargetConnection object.
+ * Actual connection and disconnection to the named target occurs through calls to open and close on this object.
+ * @param device the name of the target device, including one of the pre-defined prefixes
+ * @param resourceSchema the schema describing the resources available in this connection
+ */
+- (id)initWithDevice:(EMDeviceBasicDescription *)device schema:(EMSchema*)resourceSchema;
+
+
+/**
+ * Returns true if connected and false otherwise.
+ */
+- (BOOL)isConnected;
+
+/**
+ * Opens a connection to the @device device property
+ * @param successBlock A block to call on a successful connect
+ * @param failBlock A block to call on a failed connect
+ */
+- (void)openConnectionWithSuccess:(EMResourceBlock)successBlock onFail:(EMFailBlock)failBlock;
+
+/**
+ * Cancels the attempt to open this EMTargetConnection, posting the open block with a failed status.
+ */
+- (void)cancelOpen;
+
+/**
+ * Closes the connection
+ * @param successBlock A block to call on a successful disconnect
+ * @param failBlock A block to call on a failed disconnect
+ */
+- (void)closeConnectionWithSuccess:(EMResourceBlock)successBlock onFail:(EMFailBlock)failBlock;
+
+/**
+ * Reads a value
+ * @param resourceName The name of the resource to read
+ * @param successBlock A block to call on a successful read
+ * @param failBlock A block to call on a failed read
+ */
+-(void)readValueNamed:(NSString *)resourceName onSuccess:(EMResourceBlock)successBlock onFail:(EMFailBlock)failBlock;
+
+-(void)readSystemValueNamed:(NSString *)resourceName onSuccess:(EMResourceBlock)successBlock onFail:(EMFailBlock)failBlock;
+
+/**
+ * Writes a resource to the device
+ * @param resourceValue The resource value
+ * @param successBlock A block to call on a successful write
+ * @param failBlock A block to call on a failed write
+ */
+
+-(void)writeResource:(EMResourceValue *)resourceValue onSuccess:(EMResourceBlock)successBlock onFail:(EMFailBlock)failBlock;
+
+- (NSString*)connectedDeviceSchemaHash;
+
+
+@end
+
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnectionListManager.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnectionListManager.h
new file mode 100644
index 0000000..7c75f7d
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnectionListManager.h
@@ -0,0 +1,95 @@
+#import "EMConnectionType.h"
+#import
+
+/**
+ * kEMConnectionManagerDidStartUpdating is the name of a notification that is posted when the list manager begins updating, or scanning, for available devices
+ */
+
+extern NSString * const kEMConnectionManagerDidStartUpdating;
+
+/**
+ * kEMConnectionManagerDidStopUpdating is the name of a notification that is posted when the list manager stops updating, or scanning, for available devices
+ */
+
+extern NSString * const kEMConnectionManagerDidStopUpdating;
+
+/**
+ * EMConnectionListManager is a singleton class used for viewing a list of devices available for interaction.
+ */
+@interface EMConnectionListManager : NSObject
+
+/**
+ * @property devices
+ * A list of devices that has been discovered as available by the connection list manager
+ */
+@property (nonatomic, strong, readonly) NSArray *devices;
+
+/**
+ * @property filterPredicate
+ * A filter that allows only devices conforming to the predicate to be visible
+ */
+@property (nonatomic, strong) NSPredicate *filterPredicate;
+
+/**
+ * @property updating
+ * A boolean value indicating whether or not the connection list manager is actively updating the devices list
+ */
+@property (nonatomic, getter = isUpdating, readonly) BOOL updating;
+
+/**
+ * @property updateRate
+ * updateRate determines the scan frequency for discovering devices
+ */
+@property (nonatomic) NSTimeInterval updateRate;
+
+
+/**
+ * @param automaticallyConnectsToLastDevice
+ * A boolean value indicating whether or not the connection list manager should automatically connect to the last device it was connected to if it encounters it in a scan.
+ */
+@property (nonatomic) BOOL automaticallyConnectsToLastDevice;
+
+
+/**
+ * Use the +sharedManager to get the singleton, shared instance of EMConnectionListManager
+ */
++(EMConnectionListManager *)sharedManager;
+
+/**
+ * Retrieve a device description for a given unique identifier
+ * @param name The name of the device
+ */
+
+-(EMDeviceBasicDescription *)deviceBasicDescriptionForDeviceNamed:(NSString *)name;
+
+/**
+ * Tells the connection list manager to begin actively looking for devices to interact with.
+ */
+-(void)startUpdating;
+
+/**
+ * Tells the connection list manager to stop looking for devices to interact with.
+ */
+-(void)stopUpdating;
+
+/**
+ * Manually clears out all devices on the connection list manager.
+ */
+-(void)reset;
+
+/**
+ * Detect if Bluetooth is available
+ */
+-(BOOL)isBluetoothAvailable;
+
+/**
+ * Add your own connection type outside of bluetooth low energy
+ */
+-(void)addConnectionTypeToUpdates:(id)connectionType;
+
+/**
+ * Remove your own connection type outside of bluetooth low energy
+ */
+-(void)removeConnectionToFromUpdates:(id)connectionType;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnectionManager.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnectionManager.h
new file mode 100644
index 0000000..65fb98c
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnectionManager.h
@@ -0,0 +1,167 @@
+#import
+#import
+#import "EMConnection.h"
+#import "EMSchema.h"
+#import "EMConnectionType.h"
+
+#ifndef CB_EXTERN_CLASS
+#warning "You must include CoreBluetooth in project to use Em-Framework"
+#endif
+
+/**
+ * A constant for NSUserDefaults that contains the name of the last connected device, if there is one
+ */
+
+extern NSString * const kLastConnectedDevice;
+
+extern NSString * const kEMConnectionManagerDidUpdateConnectionStateNotificationName;
+
+/**
+ * Various types of connection errors.
+ */
+
+typedef enum {
+ EMConnectionManagerErrorNoSchemaAvailable,
+ EMConnectionManagerErrorCouldNotDisconnect,
+ EMConnectionManagerErrorDeviceNotAvailable,
+} EMConnectionManagerError;
+
+extern NSString * const kEMConnectionManagerErrorDomain;
+
+@class EMTargetDevice;
+@class EMConnection;
+
+/**
+ * EMConnectionManager is a singleton class for managing a connection with a physical or mock device.
+ */
+
+@interface EMConnectionManager : NSObject
+
+@property (nonatomic) EMConnectionState connectionState;
+
+@property (nonatomic, strong) NSURL *defaultSchemaURL;
+
+
+/**
+ @property backgroundUpdatesEnabled
+ @description If you set this flag to "YES", the connection manager has the ability to persist while running in the background. By default, the connection manager severs connections when entering the background.
+ */
+@property (nonatomic) BOOL backgroundUpdatesEnabled;
+
+/**
+ * Use the +sharedManager class method to access the application-wide singleton instance of EMConnectionManager.
+ * Note: Accessing the connection manager in any way other is not recommended.
+ */
+
++(EMConnectionManager *)sharedManager;
+
+/**
+ * Tells the connection manager to connect to a specific device.
+ *
+ * @param device An instance of EMDeviceBasicDescription the connection manager should connect to
+ * @param successBlock The block to run after a successful connection
+ * @param failBlock The block to run if the connectino fails
+ * @description The implementation of this method calls connectDevice:timeoutInterval:onSuccess:onFail: with a default time interval of 10 seconds
+ */
+
+-(void)connectDevice:(EMDeviceBasicDescription *)device onSuccess:(void(^)(void))successBlock onFail:(void(^)(NSError *error))failBlock;
+
+/**
+ * Tells the connection manager to connect to a specific device.
+ *
+ * @param device An instance of EMDeviceBasicDescription the connection manager should connect to
+ * @param timeout The time the connection manager should allow for a successful connection. After the specified time interval passes, the fail block will be called.
+ * @param successBlock The block to run after a successful connection
+ * @param failBlock The block to run if the connection fails
+ * @description The implementation of this method calls connectDevice:timeoutInterval:onSuccess:onFail: with a default time interval of 10 seconds
+ */
+-(void)connectDevice:(EMDeviceBasicDescription *)device timeoutInterval:(NSTimeInterval)timeout onSuccess:(void(^)(void))successBlock onFail:(void(^)(NSError *error))failBlock;
+
+/**
+ * Tells the connection manager to disconnect from a specific device
+ *
+ * @param successBlock The block to run after a successful disconnection
+ * @param failBlock The block to run if the disconnection fails.
+ */
+-(void)disconnectWithSuccess:(void(^)(void))successBlock onFail:(void(^)(NSError *error))failBlock;
+
+/**
+ * Reads a resource from a connected device
+ *
+ * @param resourceName The name of the resource to read. This is the name of the resource in the device's schema.
+ * @param successBlock The block to call when a read occurs successfully. Connection manager will call this block with the value read.
+ * @param failBlock The block to call when a read fails.
+ */
+-(void)readResource:(NSString *)resourceName onSuccess:(void(^)(id readValue))successBlock onFail:(void(^)(NSError *error))failBlock;
+
+/**
+ * Writes a value to a resource on a connected device
+ *
+ * @param resourceValue The value to write to the resource. This should be an instance of NSString, NSData, NSArray, NSNumber, or NSDictionary
+ * @param resource The name of the resource for writing. This is the name of the resource in the schema.
+ * @param successBlock The block to call when the write occurs successfully.
+ * @param failBlock The block to call when the write fails.
+ */
+-(void)writeValue:(id)resourceValue toResource:(NSString *)resource onSuccess:(void(^)(void))successBlock onFail:(void(^)(NSError *error))failBlock;
+
+/**
+ * Returns an array of EMDeviceBasicDescription's for the device that is actively connected
+ */
+-(EMDeviceBasicDescription *)connectedDevice;
+
+/**
+ * Returns a version of the the schema hash from a connected device's firmware as it appears on em-hub
+ */
+-(NSString *)schemaHashForConnectedDevice;
+
+/**
+ * Tells the connection manager where it should look for schemas other than the NSBundle's mainBundle
+ *
+ * @param path The path for the directory in which to search
+ */
+-(void)addSchemaSearchForFilesInDirectory:(NSString *)path;
+
+/**
+ * Tells the connection manager to no longer look in the specified path for schemas
+ *
+ * @param path The path to no longer search
+ * @description Note: This method will never ignore the current bundle's mainBundle
+ */
+-(void)removeSchemaSearchForFilesInDirectory:(NSString *)path;
+
+/**
+ * Forces the connection manager to connect to a device with the default schema
+ * @param device The device for the forced connection
+ * @description Use this method with extreme caution. Many undefined behaviors can come from using this method with a schema that isn't an exact match for the specified device. EMConnectionManager uses this method internally. It is very rare that you will need to call this method directly.
+ */
+-(void)forceConnectionWithDefaultSchema:(EMDeviceBasicDescription *)device;
+
+/**
+ * Tells EMConnectionManager to update its internal cache of schemas used for connection.
+ * @description EMConnectionManager uses this method internally. It is very rare taht you will need to call this method directly.
+ */
+-(void)updateInternalSchemaCache;
+
+/**
+ * Gives the schema name in the application bundle for a given hash string
+ * @param hashString A full or partial schema hash string
+ * @description This method takes either a full hash or partial hash. If any schema begins with 'hash string', the file name in the bundle is returned. Returns nil if no matching schema was found in the bundle.
+ * If one or more schemas share 'hashString' at the beginning of their hash, the first path will be returned.
+ */
+-(NSString *)schemaFileNameForHashString:(NSString *)hashString;
+
+/**
+ * Gets the schema for the connected device.
+ * @description Returns nil if no device is connected.
+ */
+
+-(EMSchema *)schemaForConnectedDevice;
+
+/**
+ * Gets the embedded system protocol level from the schema used to connect to the device
+ * @description This call does not send a message down to the board - the protocol level is pulled directly from the schema that was used to connect to the device.
+ */
+
+-(NSNumber *)embeddedSystemProtocolLevel;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnectionType.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnectionType.h
new file mode 100644
index 0000000..c4dc364
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMConnectionType.h
@@ -0,0 +1,134 @@
+#import
+#import "EMSchema.h"
+#import "EMDeviceBasicDescription.h"
+#import "EMResourceValue.h"
+#import "EMSignalStrengthFilter.h"
+
+/**
+ * EMTargetDeviceHandler is implemented by classes interested in manageing connections to devices. By default, this will be the shared instance of EMConnectionManager.
+ */
+@protocol EMDeviceDelegate
+- (void)extendConnectTimeout;
+- (void)postIndicatorForResource:(EMResourceValue *)indicator;
+- (void)operationDone:(int)status;
+@end
+
+
+#pragma mark - EMConnectionTypeScannerDelegate Declaration
+
+/**
+ * These methods are sen tto the connection delegate to inform it of devices that come available or go offline.
+ */
+
+@protocol EMConnectionTypeScannerDelegate
+
+/**
+ * Tells the delegate a device was found.
+ */
+
+-(void)deviceScanner:(id)scanner didFindDevice:(EMDeviceBasicDescription *)device;
+
+/**
+ * Tells the delegate a device was lost.
+ */
+-(void)deviceScanner:(id)scanner didLoseDevice:(EMDeviceBasicDescription *)device;
+
+
+/**
+ * Updates the data for a device description
+ */
+-(void)deviceScanner:(id)scanner didUpdateDevice:(EMDeviceBasicDescription *)device;
+
+@end
+
+#pragma mark - EMConnectionType Declaration
+
+/**
+ * Abstracts a given protocol for connecting to devices.
+ */
+
+@protocol EMConnectionType
+
+/**
+ * The delegate for scanning
+ */
+@property (nonatomic, unsafe_unretained) id scanDelegate;
+
+/**
+ * The delegate for connection communication
+ */
+@property (nonatomic, unsafe_unretained) id connectionDelegate;
+
+/**
+ * The schema for connection
+ */
+@property (nonatomic, unsafe_unretained) EMSchema *schema;
+
+/**
+ * The last read resource value from the device
+ */
+@property (nonatomic, strong) EMResourceValue *lastReadValue;
+
+/**
+ * A boolean indicating whether or not there is a connection with a device.
+ */
+@property (nonatomic, readonly, getter = isConnected) BOOL connected;
+
+/**
+ * The class to use for filtering, or smoothin, signal strength values
+ */
+@property (nonatomic, strong) Class signalStrengthFilterClass;
+
+/**
+ * The type of device - this can be set to anything and retreived for printing or examining.
+ */
+-(NSString *)deviceType;
+
+/**
+ * Tells the connection to start looking for devices of its type.
+ */
+-(void)startUpdating;
+
+/**
+ * Tells the connection to stop looking for devices of its type.
+ */
+-(void)stopUpdating;
+
+/**
+ * Returns whether or not there is a connection with a device.
+ */
+-(BOOL)isConnected;
+
+/**
+ * disconnects the current device.
+ *
+ */
+-(void)disconnect;
+
+/**
+ * Establishes a connection with a device
+ */
+-(void)connectToDevice:(EMDeviceBasicDescription *)device connectionDelegate:(id)connDelegate;
+
+
+/**
+ * YES if available on the current device, NO if unavailable.
+ */
+-(BOOL)isAvailable;
+
+/**
+ * Fetches a resource. Can be retrieved in "lastReadValue"
+ */
+-(void)fetch:(id)resourceValue;
+
+/**
+ * Fetches a system resource. Can be retrieved in "lastReadValue".
+ */
+- (void)fetchSystemResource:(id)resourceValue;
+
+/**
+ * writes a value to a device.
+ */
+-(void)store:(id)resourceValue;
+@end
+
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMDeviceBasicDescription.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMDeviceBasicDescription.h
new file mode 100644
index 0000000..826f60c
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMDeviceBasicDescription.h
@@ -0,0 +1,64 @@
+#import "EMSignalStrengthFilter.h"
+
+@protocol EMConnectionType;
+
+/**
+ * EMDeviceBasicDescription is a class used to describe basic device characteristics throughout the entire framework.
+ * All devices, regardless of connection type, will have these properties.
+ *
+ * All classes implementing the EMConnectionType protocol will receive and deliver device information in the form of an EMDeviceBasicDescription.
+ */
+
+@interface EMDeviceBasicDescription : NSObject
+
+/**
+ * The name of the device used thoughout the framework.
+ * Like the unique_identifier, this property needs to be unique.
+ */
+@property (nonatomic, strong) NSString *name;
+
+/**
+ * A concrete EMConnectionType instance that will be used to send messages to the device.
+ */
+@property (nonatomic, strong) id connectionType;
+
+/*
+ * An object that can describe the device to the provided connection type.
+ * For example, for bluetooth, this might be an instance of CBPeripheral.
+ */
+@property (nonatomic, strong) id deviceObject;
+
+/**
+ * A value between -100 and 0 used to describe signal strength.
+ */
+@property (nonatomic) float signalStrength;
+
+/**
+ * The signal strength filter for smoothing
+ */
+@property (nonatomic, strong) id signalStrengthFilter;
+
+/**
+ Data that was discovered along with the device.
+ Ex: When dealing with bluetooth, this is the advertising packet data
+ */
+@property (nonatomic, strong) NSData *advertiseData;
+
+/**
+ * An object taken from the advertise data based on the advertise resource in the device's schema
+ * Possible classes: NSString, NSNumber, NSDictionary, NSArray, NSData
+ */
+@property (nonatomic, strong) id advertiseObject;
+
+/**
+ The first six characters of the device's schema
+ */
+@property (nonatomic, strong) NSString *shortSchemaHash;
+
+/**
+ The name of the schema file in your bundle that relates to this device.
+ NOTE: Many devices do not broadcast this information. In this case, this property will not be set
+ */
+@property (nonatomic, strong) NSString *schemaFilePath;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMFramework.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMFramework.h
new file mode 100644
index 0000000..bd5a435
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMFramework.h
@@ -0,0 +1,28 @@
+//
+// EMFramework.h
+// Emmoco
+//
+// Created by bob frankel on 8/22/11.
+// Copyright 2011 Emmoco, Inc.. All rights reserved.
+//
+
+#import
+#import "EMConnectionManager.h"
+#import "EMConnectionListManager.h"
+#import "EMConnection.h"
+#import "EMBluetoothLowEnergyConnectionType.h"
+#import "EMSchema.h"
+#import "EMResourceValue.h"
+
+#define EMFrameworkProtocol_11
+
+#define EMMinFramework @"12"
+#define EMMaxFramework @"13"
+
+#define SIGNAL_STRENGTH_UNAVAILABLE FLT_MIN
+
+#ifdef DEBUG
+#define EMLog(format, ...) NSLog(@"<%@:(%d)> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(format), ##__VA_ARGS__])
+#else
+#define EMLog(format, ...)
+#endif
\ No newline at end of file
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMRSSIFilter.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMRSSIFilter.h
new file mode 100644
index 0000000..847cd9c
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMRSSIFilter.h
@@ -0,0 +1,19 @@
+//
+// EMRSSIFilter.h
+// EMFramework
+//
+// Created by Dexter Weiss on 8/9/13.
+// Copyright (c) 2013 Emmoco. All rights reserved.
+//
+
+#import
+#import "EMSignalStrengthFilter.h"
+
+@interface EMRSSIFilter : NSObject
+
++(EMRSSIFilter *)filterWithInitialRSSI:(float)rssi;
+
+-(id)initWithInitialSignalStrengthValue:(float)signalStrengthValue;
+-(float)addSignalStrengthValue:(float)signalStrengthValue;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMResourceValue+CocoaAdditions.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMResourceValue+CocoaAdditions.h
new file mode 100644
index 0000000..7de58f9
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMResourceValue+CocoaAdditions.h
@@ -0,0 +1,9 @@
+#import "EMResourceValue.h"
+
+@interface EMResourceValue (CocoaAdditions)
+
+-(void)setNSObjectValue:(id)object;
+
+-(id)NSObjectValue;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMResourceValue.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMResourceValue.h
new file mode 100644
index 0000000..44e36c5
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMResourceValue.h
@@ -0,0 +1,246 @@
+//
+// EMResourceValue.h
+// Emmoco
+//
+// Created by bob frankel on 8/8/11.
+// Copyright 2011 Emmoco, Inc.. All rights reserved.
+//
+
+#import
+#import "EMSerialPacket.h"
+
+@class EMSchema;
+@class EMSerialPacket;
+@class EMResourceValue;
+
+/**
+ * A protocol to define the methods that all EMResourceValue subclasses must define.
+ *
+ * Written by Carolyn Vaughan
+ */
+
+@protocol EMResourceValueProtocol
+
+/**
+ * Internal initialization method used by EMResourceValue subclasses
+ * @param theName the name of this value
+ * @param theType the type of this value
+ * @param theResourceSchema the schema associated with this value
+ * @return this value
+ */
+- (id)initWithName:(NSString*)theName type:(NSString*)theType schema:(EMSchema*)theResourceSchema;
+
+/**
+ * Returns true if the type of this value is an Array, and false otherwise.
+ */
+- (BOOL)isArray;
+
+/**
+ * Returns true if the type of this value is a Num, and false otherwise.
+ */
+- (BOOL)isNum;
+
+/**
+ * Returns true if the type of this value is an Enum, and false otherwise.
+ */
+- (BOOL)isEnum;
+
+/**
+ * Returns true if the type of this value is a File, and false otherwise.
+ */
+- (BOOL)isFile;
+
+/**
+ * Returns true if the type of this value is an Int, and false otherwise.
+ */
+- (BOOL)isInt;
+
+/**
+ * Returns true if the type of this value is a String, and false otherwise.
+ */
+- (BOOL)isString;
+
+/**
+ * Returns true if the type of this value is scalar (Num, Enum, Int, String), and false otherwise.
+ */
+- (BOOL)isScalar;
+
+/**
+ * Return true if the type of this value is a Struct, and false otherwise.
+ */
+- (BOOL)isStruct;
+
+/**
+ * Return true if the type of this value is a Void, and false otherwise.
+ */
+- (BOOL)isVoid;
+
+/**
+ * Used to put the resource's value to the device
+ * @param buffer the data buffer being sent to the device
+ *
+ * The PUT is based on RESTful resourcing
+ */
+- (void)putData:(EMSerialPacket*)buffer;
+
+/**
+ * Used to get the resource's value from the device
+ * @param buffer the data buffer being received from the device
+ * @param size the amount of data the buffer holds
+ *
+ * The GET is based on RESTful resourcing
+ */
+- (void)getDataOfSize:(int)size fromBuffer:(EMSerialPacket*)buffer;
+
+/**
+ * Assign a double value to a resource.
+ * @param value the value to be assigned, represented as a double
+ */
+- (void)setDoubleValue:(double)value;
+
+/**
+ * Assign a long value to a resource. For Num and Enum resources, this sets the ordinal value for the resource instead of setting the value directly.
+ * @param value the value to be assigned, represented as a long
+ */
+- (void)setLongValue:(long long)value;
+
+/**
+ * Assign a string value to a resource.
+ * @param value the value to be assigned, represented as a String
+ */
+- (void)setStringValue:(NSString*)value;
+
+/**
+ * This ResourceValue, as a double.
+ * @exception UsageError the type of this value is not a Num
+ */
+- (double)doubleValue;
+
+/**
+ * This ResourceValue, as a long. For Num and Enum resources, this returns the ordinal value for the resource instead of the actual value.
+ * @exception UsageError the type of this value is not a Scalar
+ */
+- (long long)longValue;
+
+/**
+ * This ResourceValue, as a String.
+ * @exception UsageError the type of this value is not a Scalar
+ */
+- (NSString*)stringValue;
+
+/**
+ * Assign another resource value's value to this resource value
+ * @param source the ResourceValue who's value you wish to assign to this EMResourceValue instance
+ */
+- (void)copyFromResource:(EMResourceValue*)source;
+
+/**
+ * Reset this ResourceValue to its initial state upon creation
+ */
+- (void)reset;
+
+/**
+ * The minimum numerical value for this ResourceValue.
+ */
+- (double)min;
+
+/**
+ * The maximum numerical value for this ResourceValue.
+ */
+- (double)max;
+
+/**
+ * The step for this ResourceValue.
+ */
+- (double)step;
+
+/**
+ * The maximum number of distinct values for this ResourceValue.
+ */
+- (long)length;
+
+/**
+ * An array of acceptable enum values for this ResourceValue.
+ */
+- (NSArray *)enumValues;
+
+/**
+ * An array of acceptable field names for this ResourceValue.
+ */
+- (NSArray *)fieldNames;
+
+/**
+ * Select a ResourceValue element from a ResourceValue Array by index
+ * @param index the element to be selected
+ * @return the indexed element
+ */
+- (EMResourceValue*)index:(int)index;
+
+/**
+ * Select a ResourceValue element from a ResourceValue Struct by field name
+ * @param fieldName the element to be selected
+ * @return the ResourceValue held in the selected field
+ */
+- (EMResourceValue*)select:(NSString*)fieldName;
+
+/**
+ * Return the end-of-file status for this ResourceValue File. For internal use only.
+ */
+- (BOOL)fileEof;
+
+/**
+ * Prepare a local file associated with this ResourceValue File for reading. For internal use only;
+ d*/
+- (void)fileFetch;
+
+/**
+ * Prepare a local file associated with this ResourceValue File for writing. For internal use only;
+ */
+- (void)fileStore;
+
+-(NSData *)fileData;
+
+@end
+
+/**
+ * A container for different types of resource values.
+ * Instances of this class are used to hold values for resources whose types is
+ * either Void, Int, Enum, Num, String, Struct, Array, or File.
+ *
+ * See also:
+ *
+ * - [EMSchema newResourceValueForResourceNamed:]
+ *
+ * Written by Bob Frankel and Carolyn Vaughan
+ */
+@interface EMResourceValue : NSObject {
+
+}
+
+/**
+ * The name of the resource.
+ */
+@property(readonly) NSString* name;
+
+/**
+ * The resource schema associated with the resource.
+ */
+@property(readonly) EMSchema* resourceSchema;
+
+/**
+ * The type of the resource.
+ */
+@property(readonly) NSString* type;
+
+- (int)valueSize;
+/**
+ * Create a EMResourceValue. This method is used internally by the framework.
+ * @param name the name given to the newly-created value
+ * @param type the type of the newly-created value
+ * @param resourceSchema an EMSchema instance
+ * @return a new EMResourceValue instance
+ */
++ (EMResourceValue*)resourceWithName:(NSString*)name ofType:(NSString*)type fromSchema:(EMSchema*)resourceSchema;
+
+@end
+
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMSchema.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMSchema.h
new file mode 100644
index 0000000..e219126
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMSchema.h
@@ -0,0 +1,237 @@
+//
+// EMSchema.h
+// Emmoco
+//
+// Created by bob frankel on 8/7/11.
+// Copyright 2011 Emmoco, Inc.. All rights reserved.
+//
+
+#import
+#import "EMResourceValue.h"
+
+typedef enum {
+ EMResourceAccessTypeRead = 1 << 0,
+ EMResourceAccessTypeWrite = 1 << 1,
+ EMResourceAccessTypeIndicate = 1 << 2,
+} EMResourceAccessType;
+
+@class EMResourceValue;
+
+/**
+ * A set of meta-data describing a set of resources.
+ * Written by Bob Frankel and Carolyn Vaughan
+ */
+@interface EMSchema : NSObject {
+
+}
+
+/**
+ * Creates a EMResourceSchema instance from the contents of a file.
+ * @param fileName a file containing JSON content
+ * @return a newly created EMResourceSchema instance
+ */
++ (EMSchema*)schemaFromFile:(NSString*)fileName;
+
+/**
+ * Get the read/write/indicator access capabilities of a named resource
+ * @param resourceName a valid resource name in this schema
+ * @return an NSString containing the characters 'r', 'w', and 'i' as appropriate
+ * @exception UsageError the resource name is invalid
+ */
+- (EMResourceAccessType)accessForResource:(NSString*)resourceName;
+
+/**
+ * Returns a sorted NSArray containing all application resource names in this schema
+ */
+- (NSArray*)applicationResources;
+
+/**
+ * Get the parameters associated with a number type.
+ * @param type a valid number type name in this schema
+ * @return a four-element NSArray holding the min, max, step, and prec parameters of this type
+ * @exception UsageError the number type name is invalid
+ */
+- (NSArray*)numberParametersForType:(NSString*)type;
+
+/**
+* Get the representation type associated with a number type.
+* @param type a valid number type name in this schema
+* @return an integral representation type
+* @exception UsageError the number type name is invalid
+*/
+- (NSString*)numericRepresentationForType:(NSString*)type;
+
+/**
+ * Get the values associated with an enum type.
+ * @param type a valid enum type name in this schema
+ * @return a NSDictionary containing enum value names and their corresponding ordinal
+ * @exception UsageError the enum type name is invalid
+ */
+- (NSDictionary*)enumValuesForType:(NSString*)type;
+
+/**
+ * Get the names of the fields associated with a struct type.
+ * @param type a valid struct type name in this schema
+ * @return a NSArray containing field names
+ * @exception UsageError the struct type name is invalid
+ */
+- (NSArray*)fieldNamesForType:(NSString*)type;
+
+/**
+ * Get the fields associated with a struct type.
+ * @param type a valid struct type name in this schema
+ * @return a NSDictionary containing field names and their corresponding type code
+ * @exception UsageError the struct type name is invalid
+ */
+- (NSDictionary*)fieldsForType:(NSString*)type;
+
+/**
+ * Get the length of this string type.
+ * @param type a valid string type name in this schema
+ * @return the length of this string type
+ * @exception UsageError the string type name is invalid
+ */
+- (int)stringLengthForType:(NSString*)type;
+
+/**
+ * Returns the fully-qualified name of this schema.
+ */
+- (NSString*)name;
+
+/**
+ * Returns the protocol level of this schema
+ */
+- (int)protocolLevel;
+
+/**
+ * Returns an NSDictionary containing all resource names in this schema and their corresponding type code.
+ */
+- (NSDictionary*)resources;
+
+/**
+ * Returns the maximum size in bytes amongst all resource types in this schema.
+ */
+- (int)maxResourceSize;
+
+/**
+ * Get the alignment of a named resource
+ * @param resourceName a named resource in this schema
+ * @return the alignment in bytes of this resource
+ * @exception UsageError the resource name is invalid
+ */
+- (int)byteAlignmentForResource:(NSString*)resourceName;
+
+/**
+ * Get the unique id associated with a named resource
+ * @param resourceName a named resource in this schema
+ * @return the corresponding resource id
+ * @exception UsageError the resource name is invalid
+ */
+- (int)idForResource:(NSString*)resourceName;
+
+/**
+ * Get the resource name associated with this resource id
+ * @param resourceId a resource id
+ * @return the corresponding resource name
+ * @exception UsageError the resource id is invalid
+ * @see idForResource:
+ */
+- (NSString*)nameForResourceWithID:(NSInteger)resourceId;
+
+/**
+ * Get the size of a named resource
+ * @param resourceName a named resource in this schema
+ * @return the size in bytes of this resource
+ * @exception UsageError the resource name is invalid
+ */
+- (int)sizeForResourceNamed:(NSString*)resourceName;
+
+/**
+ * Get the size of a standard scalar type
+ * @param type a scalar type code
+ * @return the size in bytes of this standard type
+ * @exception UsageError the type code is invalid
+ */
+- (int)sizeForStandardType:(NSString*)type;
+
+/**
+ * Get the alignment of a standard scalar type
+ * @param type a scalar type code
+ * @return the alignment in bytes of this standard type
+ * @exception UsageError the type code is invalid
+ */
+- (int)alignmentForStandardType:(NSString*)type;
+
+/**
+ * Returns a sorted NSArray containing all system resource names in this schema
+ */
+- (NSArray*)systemResources;
+
+/**
+ * Get the type of a named resource
+ * @param resourceName the name of a resource in this schema
+ * @return the type code associated with this resource
+ * @exception UsageError the resource name is invalid
+ */
+- (NSString*)typeOfResourceNamed:(NSString*)resourceName;
+
+/**
+ * Returns the owner of the schema definition this schema was created from.
+ */
+- (NSString*)owner;
+
+/**
+ * Returns the version of the schema definition this schema was created from.
+ */
+- (NSString*)version;
+
+/**
+ * Returns the description associated with this schema.
+ */
+- (NSString*)schemaDescription;
+
+/**
+ * Returns the UUID associated with this schema.
+ */
+- (NSString*)UUID;
+
+/**
+ * Returns the UUID associated with this schema as an array of numbers.
+ */
+- (NSArray *)numericalUUID;
+
+/**
+ * Returns the build number associated with this schema as an array of numbers.
+ */
+- (NSArray *)buildDate;
+
+/**
+ * Returns the schema hash associated with this schema as an array of numbers.
+ */
+- (NSArray *)schemaHash;
+
+/**
+ * Returns the name of the resource that is being broadcast in the advertising packets. Returns nil if none.
+ */
+-(NSString *)broadcastResourceName;
+
+/**
+ * Create a new ResourceValue instance for a named resource.
+ * @param resourceName a named resource in this schema
+ * @return a newly created EMResourceValue to a value for this resource
+ * @exception UsageError the resource name is invalid
+ */
+- (EMResourceValue*)newResourceValueForResourceNamed:(NSString*)resourceName;
+
+/*
+ * TODO - fill in this documentation
+ */
+- (BOOL)validateResourceNamed:(NSString*)resourceName withAccess:(EMResourceAccessType)access;
+
+-(NSNumber *)embeddedProtocolNumber;
+
+-(int)packedSizeForType:(NSString*)type;
+-(int)unpackedSizeForType:(NSString*)type;
+-(NSArray *)fieldPackingsForType:(NSString*)type;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMSerialPacket.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMSerialPacket.h
new file mode 100644
index 0000000..4e10fbf
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMSerialPacket.h
@@ -0,0 +1,46 @@
+//
+// EMSerialPacket.h
+// Emmoco
+//
+// Created by bob frankel on 8/18/11.
+// Copyright 2011 Emmoco, Inc.. All rights reserved.
+//
+
+#import
+#import "EMSchema.h"
+#import "EMChecksum.h"
+
+@class EMSchema;
+
+#define EM_MAX_DATA_SIZE 240
+#define EM_HEADER_SIZE 4
+
+enum {
+ EMSerialPacket_NOP = 1 << 0,
+ EMSerialPacket_FETCH = 1 << 1,
+ EMSerialPacket_FETCH_DONE = 1 << 2,
+ EMSerialPacket_STORE = 1 << 3,
+ EMSerialPacket_STORE_DONE = 1 << 4,
+ EMSerialPacket_INDICATOR = 1 << 5
+};
+typedef NSUInteger EMSerialPacketKind;
+
+typedef struct EMSerialPacketHeader {
+ int size;
+ EMSerialPacketKind kind;
+ int resourceId;
+} EMSerialPacketHeader;
+
+@interface EMSerialPacket : NSObject {
+
+}
+
+@property(readonly) uint8_t* buffer;
+@property(readonly) int length;
+
+- (void)addInteger:(long long)anInt forByteSize:(int)size;
+- (void)alignTo:(int)align;
+- (void)rewind;
+- (long long)scanIntegerForByteSize:(int)size asUnsigned:(BOOL)isUnsigned;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMSignalStrengthFilter.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMSignalStrengthFilter.h
new file mode 100644
index 0000000..241d8fc
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMSignalStrengthFilter.h
@@ -0,0 +1,16 @@
+//
+// EMSignalStrengthFilter.h
+// EMFramework
+//
+// Created by Dexter Weiss on 8/9/13.
+// Copyright (c) 2013 Emmoco. All rights reserved.
+//
+
+#import
+
+@protocol EMSignalStrengthFilter
+
+-(id)initWithInitialSignalStrengthValue:(float)signalStrengthValue;
+-(float)addSignalStrengthValue:(float)signalStrengthValue;
+
+@end
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMTypes.h b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMTypes.h
new file mode 100644
index 0000000..9aa20fb
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/Headers/EMTypes.h
@@ -0,0 +1,21 @@
+//
+// EMDevice.h
+// Emmoco
+//
+// Copyright 2012 Emmoco, Inc.. All rights reserved.
+//
+
+typedef enum {
+ EMOperationStatusSuccess,
+ EMOperationStatusFailure
+} EMOperationStatus;
+
+/*
+ * Block type used to doing callbacks to user programs. User programs define callbacks conforming to this
+ * block signature and the framework calls them back suppling status value and data object
+ */
+typedef void(^EMResourceBlock)(EMOperationStatus status, EMResourceValue *value);
+
+typedef void(^EMStatusBlock)(EMOperationStatus status);
+
+typedef void(^EMFailBlock)(NSError *error);
\ No newline at end of file
diff --git a/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/README.md b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/README.md
new file mode 100644
index 0000000..a2ec505
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/EmmocoMobileFramework/README.md
@@ -0,0 +1,18 @@
+# Adding EMFramework to your project
+==================
+### Library dependencies
+1) libEMFramework.a
+2) CoreBluetooth.framework
+
+==================
+
+### Add the headers to your project
+
+All headers found in the `EmmocoMobileFramework/Headers` folder should be included.
+
+==================
+
+### Add Schemas to your project
+
+Add the system.json file from the Assets/ directory into your application bundle.
+
diff --git a/ios-examples-13.4.9/Ex_Compound/Ex_Compound.xcodeproj/project.pbxproj b/ios-examples-13.4.9/Ex_Compound/Ex_Compound.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..65c4fc7
--- /dev/null
+++ b/ios-examples-13.4.9/Ex_Compound/Ex_Compound.xcodeproj/project.pbxproj
@@ -0,0 +1,572 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 340098A71860F0F900DE02A9 /* EMCompoundResourceCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 340098A61860F0F900DE02A9 /* EMCompoundResourceCell.m */; };
+ 3476EBB9180DBD0B00C71DA1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3476EBB8180DBD0B00C71DA1 /* Foundation.framework */; };
+ 3476EBBB180DBD0B00C71DA1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3476EBBA180DBD0B00C71DA1 /* CoreGraphics.framework */; };
+ 3476EBBD180DBD0B00C71DA1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3476EBBC180DBD0B00C71DA1 /* UIKit.framework */; };
+ 3476EBC3180DBD0B00C71DA1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3476EBC1180DBD0B00C71DA1 /* InfoPlist.strings */; };
+ 3476EBC5180DBD0B00C71DA1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 3476EBC4180DBD0B00C71DA1 /* main.m */; };
+ 3476EBC9180DBD0B00C71DA1 /* EMAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3476EBC8180DBD0B00C71DA1 /* EMAppDelegate.m */; };
+ 3476EBCB180DBD0B00C71DA1 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3476EBCA180DBD0B00C71DA1 /* Images.xcassets */; };
+ 3476EBD2180DBD0B00C71DA1 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3476EBD1180DBD0B00C71DA1 /* XCTest.framework */; };
+ 3476EBD3180DBD0B00C71DA1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3476EBB8180DBD0B00C71DA1 /* Foundation.framework */; };
+ 3476EBD4180DBD0B00C71DA1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3476EBBC180DBD0B00C71DA1 /* UIKit.framework */; };
+ 3476EBDC180DBD0B00C71DA1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3476EBDA180DBD0B00C71DA1 /* InfoPlist.strings */; };
+ 3476EBDE180DBD0B00C71DA1 /* Compound_ExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3476EBDD180DBD0B00C71DA1 /* Compound_ExampleTests.m */; };
+ 3476EBE9180DBD3400C71DA1 /* system.json in Resources */ = {isa = PBXBuildFile; fileRef = 3476EBE8180DBD3400C71DA1 /* system.json */; };
+ 3476EC04180DBD6000C71DA1 /* EMDevicePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3476EC02180DBD6000C71DA1 /* EMDevicePickerViewController.m */; };
+ 3476EC05180DBD6000C71DA1 /* EMConnectingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3476EC03180DBD6000C71DA1 /* EMConnectingView.xib */; };
+ 3476EC07180DBD6D00C71DA1 /* Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3476EC06180DBD6D00C71DA1 /* Storyboard.storyboard */; };
+ 3476EC09180DBE3B00C71DA1 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3476EC08180DBE3B00C71DA1 /* CoreBluetooth.framework */; };
+ 3476EC0B180DBF4700C71DA1 /* libEMFramework.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3476EC0A180DBF4700C71DA1 /* libEMFramework.a */; };
+ 3476EC0D180DC02000C71DA1 /* ex_compound.json in Resources */ = {isa = PBXBuildFile; fileRef = 3476EC0C180DC02000C71DA1 /* ex_compound.json */; };
+ 3476EC10180DC1A400C71DA1 /* EMCompoundExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3476EC0F180DC1A400C71DA1 /* EMCompoundExampleViewController.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 3476EBD5180DBD0B00C71DA1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 3476EBAD180DBD0B00C71DA1 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3476EBB4180DBD0B00C71DA1;
+ remoteInfo = "Compound Example";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 340098A51860F0F900DE02A9 /* EMCompoundResourceCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EMCompoundResourceCell.h; sourceTree = ""; };
+ 340098A61860F0F900DE02A9 /* EMCompoundResourceCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EMCompoundResourceCell.m; sourceTree = ""; };
+ 3476EBB5180DBD0B00C71DA1 /* Ex_Compound.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Ex_Compound.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3476EBB8180DBD0B00C71DA1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 3476EBBA180DBD0B00C71DA1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 3476EBBC180DBD0B00C71DA1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 3476EBC0180DBD0B00C71DA1 /* Ex_Compound-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Ex_Compound-Info.plist"; sourceTree = ""; };
+ 3476EBC2180DBD0B00C71DA1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
+ 3476EBC4180DBD0B00C71DA1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
+ 3476EBC6180DBD0B00C71DA1 /* Ex_Compound-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Ex_Compound-Prefix.pch"; sourceTree = ""; };
+ 3476EBC7180DBD0B00C71DA1 /* EMAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EMAppDelegate.h; sourceTree = ""; };
+ 3476EBC8180DBD0B00C71DA1 /* EMAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EMAppDelegate.m; sourceTree = ""; };
+ 3476EBCA180DBD0B00C71DA1 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
+ 3476EBD0180DBD0B00C71DA1 /* Ex_CompoundTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Ex_CompoundTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3476EBD1180DBD0B00C71DA1 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
+ 3476EBD9180DBD0B00C71DA1 /* Ex_CompoundTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Ex_CompoundTests-Info.plist"; sourceTree = ""; };
+ 3476EBDB180DBD0B00C71DA1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "