Repository: pebble/pebble-sdk-examples Branch: master Commit: e724bd740d76 Files: 932 Total size: 3.0 MB Directory structure: gitextract_zddnpbs2/ ├── README-ANDROID.txt ├── README.md ├── data-logging-demo/ │ ├── OceanSurveyDemo-Android/ │ │ ├── .gitignore │ │ ├── .idea/ │ │ │ ├── .name │ │ │ ├── compiler.xml │ │ │ ├── copyright/ │ │ │ │ └── profiles_settings.xml │ │ │ ├── encodings.xml │ │ │ ├── gradle.xml │ │ │ ├── misc.xml │ │ │ ├── modules.xml │ │ │ ├── scopes/ │ │ │ │ └── scope_settings.xml │ │ │ ├── vcs.xml │ │ │ └── workspace.xml │ │ ├── .project │ │ ├── AndroidManifest.xml │ │ ├── OceanSurveyDemo-Android.iml │ │ ├── README.md │ │ ├── ant.properties │ │ ├── app/ │ │ │ ├── app.iml │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── .classpath │ │ │ ├── .project │ │ │ ├── .settings/ │ │ │ │ └── org.eclipse.jdt.core.prefs │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ └── PebbleKitExample/ │ │ │ │ └── ExampleDataLoggingActivity.java │ │ │ ├── lib/ │ │ │ │ └── guava-14.0.1.jar │ │ │ ├── libs/ │ │ │ │ └── pebblekit-2.6.0-beta2-eclipse.jar │ │ │ ├── project.properties │ │ │ └── res/ │ │ │ ├── layout/ │ │ │ │ └── activity_counter.xml │ │ │ ├── menu/ │ │ │ │ └── counter.xml │ │ │ └── values/ │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── build.gradle │ │ ├── build.xml │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── proguard-project.txt │ │ ├── project.properties │ │ ├── res/ │ │ │ ├── layout/ │ │ │ │ └── activity_counter.xml │ │ │ ├── menu/ │ │ │ │ └── counter.xml │ │ │ ├── values/ │ │ │ │ ├── dimens.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ ├── values-sw600dp/ │ │ │ │ └── dimens.xml │ │ │ └── values-sw720dp-land/ │ │ │ └── dimens.xml │ │ ├── settings.gradle │ │ └── src/ │ │ └── com/ │ │ └── getpebble/ │ │ └── example/ │ │ └── logging/ │ │ └── ExampleDataLoggingActivity.java │ ├── OceanSurveyDemo-iOS/ │ │ ├── OceanSurveyDemo/ │ │ │ ├── OSAppDelegate.h │ │ │ ├── OSAppDelegate.m │ │ │ ├── OSDataLoggingViewController.h │ │ │ ├── OSDataLoggingViewController.m │ │ │ ├── OceanSurveyDemo-Info.plist │ │ │ ├── OceanSurveyDemo-Prefix.pch │ │ │ ├── appinfo.json │ │ │ ├── en.lproj/ │ │ │ │ ├── ACDespoolingViewController.xib │ │ │ │ ├── ACSecondViewController.xib │ │ │ │ └── InfoPlist.strings │ │ │ └── main.m │ │ ├── OceanSurveyDemo.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace/ │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata/ │ │ │ │ └── OceanSurveyDemo.xccheckout │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ └── OceanSurvey.xcscheme │ │ ├── OceanSurveyDemo.xcworkspace/ │ │ │ └── contents.xcworkspacedata │ │ ├── Podfile │ │ └── Pods/ │ │ ├── PebbleKit/ │ │ │ ├── PebbleKit.framework/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ ├── PBLog.h │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ └── gtypes.h │ │ │ │ ├── PebbleKit │ │ │ │ └── Versions/ │ │ │ │ ├── A/ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ │ ├── PBLog.h │ │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ │ └── gtypes.h │ │ │ │ │ └── PebbleKit │ │ │ │ └── Current/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ ├── PBLog.h │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ └── gtypes.h │ │ │ │ └── PebbleKit │ │ │ ├── PebbleVendor.framework/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ ├── DDLog.h │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ ├── PebbleVendor │ │ │ │ └── Versions/ │ │ │ │ ├── A/ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ │ ├── DDLog.h │ │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ │ └── PebbleVendor │ │ │ │ └── Current/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ ├── DDLog.h │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ └── PebbleVendor │ │ │ └── Readme.md │ │ ├── Pods-PebbleKit-Private.xcconfig │ │ ├── Pods-PebbleKit-dummy.m │ │ ├── Pods-PebbleKit-prefix.pch │ │ ├── Pods-PebbleKit.xcconfig │ │ ├── Pods-acknowledgements.markdown │ │ ├── Pods-acknowledgements.plist │ │ ├── Pods-dummy.m │ │ ├── Pods-environment.h │ │ ├── Pods-resources.sh │ │ ├── Pods.xcconfig │ │ └── Pods.xcodeproj/ │ │ └── project.pbxproj │ ├── README.md │ └── ocean-survey-demo/ │ ├── appinfo.json │ ├── src/ │ │ └── ocean-survey-demo.c │ └── wscript ├── golf-demo/ │ ├── GolfDemo-Android/ │ │ ├── .classpath │ │ ├── .idea/ │ │ │ ├── .name │ │ │ ├── compiler.xml │ │ │ ├── copyright/ │ │ │ │ └── profiles_settings.xml │ │ │ ├── encodings.xml │ │ │ ├── gradle.xml │ │ │ ├── misc.xml │ │ │ ├── modules.xml │ │ │ ├── scopes/ │ │ │ │ └── scope_settings.xml │ │ │ └── vcs.xml │ │ ├── .project │ │ ├── .settings/ │ │ │ └── org.eclipse.jdt.core.prefs │ │ ├── AndroidManifest.xml │ │ ├── GolfDemo-Android.iml │ │ ├── README.md │ │ ├── ant.properties │ │ ├── app/ │ │ │ ├── app.iml │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ └── PebbleKitExample/ │ │ │ │ └── ExampleGolfActivity.java │ │ │ └── res/ │ │ │ ├── layout/ │ │ │ │ └── activity_golf.xml │ │ │ ├── menu/ │ │ │ │ └── options_menu.xml │ │ │ └── values/ │ │ │ ├── dimens.xml │ │ │ ├── dslv_attrs.xml │ │ │ ├── ids.xml │ │ │ └── strings.xml │ │ ├── build.gradle │ │ ├── build.xml │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── libs/ │ │ │ ├── android-support-v4.jar │ │ │ └── gcm.jar │ │ ├── proguard-project.txt │ │ ├── project.properties │ │ ├── res/ │ │ │ ├── layout/ │ │ │ │ ├── activity_gcm.xml │ │ │ │ ├── activity_golf.xml │ │ │ │ ├── activity_sms.xml │ │ │ │ ├── activity_sports.xml │ │ │ │ ├── activity_todo_list.xml │ │ │ │ ├── activity_weather.xml │ │ │ │ ├── checkable_main.xml │ │ │ │ ├── dialog_add_todo_item.xml │ │ │ │ └── list_item_checkable.xml │ │ │ ├── menu/ │ │ │ │ └── options_menu.xml │ │ │ └── values/ │ │ │ ├── dimens.xml │ │ │ ├── dslv_attrs.xml │ │ │ ├── ids.xml │ │ │ └── strings.xml │ │ ├── settings.gradle │ │ └── src/ │ │ └── com/ │ │ ├── example/ │ │ │ └── PebbleKitExample/ │ │ │ ├── ExampleGCMActivity.java │ │ │ ├── ExampleGolfActivity.java │ │ │ ├── ExampleSmsActivity.java │ │ │ ├── ExampleSportsActivity.java │ │ │ ├── ExampleWeatherActivity.java │ │ │ ├── GCMIntentService.java │ │ │ ├── MainActivity.java │ │ │ └── TodoList/ │ │ │ ├── CheckableLinearLayout.java │ │ │ ├── ExampleTodoListActivity.java │ │ │ ├── TodoListAdapter.java │ │ │ └── TodoListItem.java │ │ └── mobeta/ │ │ └── android/ │ │ └── dslv/ │ │ ├── DragSortController.java │ │ ├── DragSortCursorAdapter.java │ │ ├── DragSortItemView.java │ │ ├── DragSortItemViewCheckable.java │ │ ├── DragSortListView.java │ │ ├── ResourceDragSortCursorAdapter.java │ │ ├── SimpleDragSortCursorAdapter.java │ │ └── SimpleFloatViewManager.java │ ├── GolfDemo-iOS/ │ │ ├── GolfDemo/ │ │ │ ├── GDAppDelegate.h │ │ │ ├── GDAppDelegate.m │ │ │ ├── GDAppViewController.h │ │ │ ├── GDAppViewController.m │ │ │ ├── GDDataViewController.h │ │ │ ├── GDDataViewController.m │ │ │ ├── GDIconViewController.h │ │ │ ├── GDIconViewController.m │ │ │ ├── GDIconViewController.xib │ │ │ ├── GolfDemo-Info.plist │ │ │ ├── GolfDemo-Prefix.pch │ │ │ ├── en.lproj/ │ │ │ │ ├── GDAppViewController.xib │ │ │ │ ├── GDDataViewController.xib │ │ │ │ └── InfoPlist.strings │ │ │ └── main.m │ │ ├── GolfDemo.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace/ │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── GolfDemo.xccheckout │ │ ├── GolfDemo.xcworkspace/ │ │ │ └── contents.xcworkspacedata │ │ ├── Podfile │ │ └── Pods/ │ │ ├── PebbleKit/ │ │ │ ├── PebbleKit.framework/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ ├── PBLog.h │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ └── gtypes.h │ │ │ │ ├── PebbleKit │ │ │ │ └── Versions/ │ │ │ │ ├── A/ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ │ ├── PBLog.h │ │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ │ └── gtypes.h │ │ │ │ │ └── PebbleKit │ │ │ │ └── Current/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ ├── PBLog.h │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ └── gtypes.h │ │ │ │ └── PebbleKit │ │ │ ├── PebbleVendor.framework/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ ├── DDLog.h │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ ├── PebbleVendor │ │ │ │ └── Versions/ │ │ │ │ ├── A/ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ │ ├── DDLog.h │ │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ │ └── PebbleVendor │ │ │ │ └── Current/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ ├── DDLog.h │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ └── PebbleVendor │ │ │ └── Readme.md │ │ ├── Pods-PebbleKit-Private.xcconfig │ │ ├── Pods-PebbleKit-dummy.m │ │ ├── Pods-PebbleKit-prefix.pch │ │ ├── Pods-PebbleKit.xcconfig │ │ ├── Pods-acknowledgements.markdown │ │ ├── Pods-acknowledgements.plist │ │ ├── Pods-dummy.m │ │ ├── Pods-environment.h │ │ ├── Pods-resources.sh │ │ ├── Pods.xcconfig │ │ └── Pods.xcodeproj/ │ │ └── project.pbxproj │ └── README.md ├── pebblekit-js/ │ ├── quotes/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ ├── entry.c │ │ │ ├── entry.h │ │ │ ├── js/ │ │ │ │ └── pebble-js-app.js │ │ │ └── quotes.c │ │ └── wscript │ └── weather/ │ ├── README.md │ ├── appinfo.json │ ├── src/ │ │ ├── js/ │ │ │ └── pebble-js-app.js │ │ └── weather.c │ └── wscript ├── sports-demo/ │ ├── README.md │ ├── SportsDemo-Android/ │ │ ├── .classpath │ │ ├── .idea/ │ │ │ ├── .name │ │ │ ├── compiler.xml │ │ │ ├── copyright/ │ │ │ │ └── profiles_settings.xml │ │ │ ├── encodings.xml │ │ │ ├── gradle.xml │ │ │ ├── misc.xml │ │ │ ├── modules.xml │ │ │ ├── scopes/ │ │ │ │ └── scope_settings.xml │ │ │ └── vcs.xml │ │ ├── .project │ │ ├── .settings/ │ │ │ └── org.eclipse.jdt.core.prefs │ │ ├── AndroidManifest.xml │ │ ├── README.md │ │ ├── SportsDemo-Android.iml │ │ ├── ant.properties │ │ ├── app/ │ │ │ ├── app.iml │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ └── PebbleKitExample/ │ │ │ │ └── ExampleSportsActivity.java │ │ │ └── res/ │ │ │ ├── layout/ │ │ │ │ └── activity_sports.xml │ │ │ ├── menu/ │ │ │ │ └── options_menu.xml │ │ │ └── values/ │ │ │ ├── dimens.xml │ │ │ ├── dslv_attrs.xml │ │ │ ├── ids.xml │ │ │ └── strings.xml │ │ ├── build.gradle │ │ ├── build.xml │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── libs/ │ │ │ ├── android-support-v4.jar │ │ │ └── gcm.jar │ │ ├── proguard-project.txt │ │ ├── project.properties │ │ ├── res/ │ │ │ ├── layout/ │ │ │ │ ├── activity_gcm.xml │ │ │ │ ├── activity_golf.xml │ │ │ │ ├── activity_sms.xml │ │ │ │ ├── activity_sports.xml │ │ │ │ ├── activity_todo_list.xml │ │ │ │ ├── activity_weather.xml │ │ │ │ ├── checkable_main.xml │ │ │ │ ├── dialog_add_todo_item.xml │ │ │ │ └── list_item_checkable.xml │ │ │ ├── menu/ │ │ │ │ └── options_menu.xml │ │ │ └── values/ │ │ │ ├── dimens.xml │ │ │ ├── dslv_attrs.xml │ │ │ ├── ids.xml │ │ │ └── strings.xml │ │ ├── settings.gradle │ │ └── src/ │ │ └── com/ │ │ ├── example/ │ │ │ └── PebbleKitExample/ │ │ │ ├── ExampleGCMActivity.java │ │ │ ├── ExampleGolfActivity.java │ │ │ ├── ExampleSmsActivity.java │ │ │ ├── ExampleSportsActivity.java │ │ │ ├── ExampleWeatherActivity.java │ │ │ ├── GCMIntentService.java │ │ │ ├── MainActivity.java │ │ │ └── TodoList/ │ │ │ ├── CheckableLinearLayout.java │ │ │ ├── ExampleTodoListActivity.java │ │ │ ├── TodoListAdapter.java │ │ │ └── TodoListItem.java │ │ └── mobeta/ │ │ └── android/ │ │ └── dslv/ │ │ ├── DragSortController.java │ │ ├── DragSortCursorAdapter.java │ │ ├── DragSortItemView.java │ │ ├── DragSortItemViewCheckable.java │ │ ├── DragSortListView.java │ │ ├── ResourceDragSortCursorAdapter.java │ │ ├── SimpleDragSortCursorAdapter.java │ │ └── SimpleFloatViewManager.java │ └── SportsDemo-iOS/ │ ├── Podfile │ ├── Pods/ │ │ ├── PebbleKit/ │ │ │ ├── PebbleKit.framework/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ ├── PBLog.h │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ └── gtypes.h │ │ │ │ ├── PebbleKit │ │ │ │ └── Versions/ │ │ │ │ ├── A/ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ │ ├── PBLog.h │ │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ │ └── gtypes.h │ │ │ │ │ └── PebbleKit │ │ │ │ └── Current/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ ├── PBLog.h │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ └── gtypes.h │ │ │ │ └── PebbleKit │ │ │ ├── PebbleVendor.framework/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ ├── DDLog.h │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ ├── PebbleVendor │ │ │ │ └── Versions/ │ │ │ │ ├── A/ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ │ ├── DDLog.h │ │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ │ └── PebbleVendor │ │ │ │ └── Current/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ ├── DDLog.h │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ └── PebbleVendor │ │ │ └── Readme.md │ │ ├── Pods-PebbleKit-Private.xcconfig │ │ ├── Pods-PebbleKit-dummy.m │ │ ├── Pods-PebbleKit-prefix.pch │ │ ├── Pods-PebbleKit.xcconfig │ │ ├── Pods-acknowledgements.markdown │ │ ├── Pods-acknowledgements.plist │ │ ├── Pods-dummy.m │ │ ├── Pods-environment.h │ │ ├── Pods-resources.sh │ │ ├── Pods.xcconfig │ │ └── Pods.xcodeproj/ │ │ └── project.pbxproj │ ├── SportsDemo/ │ │ ├── SDAppDelegate.h │ │ ├── SDAppDelegate.m │ │ ├── SDAppViewController.h │ │ ├── SDAppViewController.m │ │ ├── SDDataViewController.h │ │ ├── SDDataViewController.m │ │ ├── SDIconViewController.h │ │ ├── SDIconViewController.m │ │ ├── SDIconViewController.xib │ │ ├── SportsDemo-Info.plist │ │ ├── SportsDemo-Prefix.pch │ │ ├── en.lproj/ │ │ │ ├── InfoPlist.strings │ │ │ ├── SDAppViewController.xib │ │ │ └── SDDataViewController.xib │ │ └── main.m │ ├── SportsDemo.xcodeproj/ │ │ ├── project.pbxproj │ │ └── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── SportsDemo.xccheckout │ └── SportsDemo.xcworkspace/ │ └── contents.xcworkspacedata ├── watchapps/ │ ├── app_font_browser/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── app_font_browser.c │ │ └── wscript │ ├── app_font_viewer/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── resources/ │ │ │ └── fonts/ │ │ │ └── SIL - Open Font License.txt │ │ ├── src/ │ │ │ └── app_font_viewer.c │ │ └── wscript │ ├── app_mockup_helper/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── app_mockup_helper.c │ │ └── wscript │ ├── feature-background-counter/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── main.c │ │ ├── worker_src/ │ │ │ └── worker.c │ │ └── wscript │ ├── feature_accel_discs/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_accel_discs.c │ │ └── wscript │ ├── feature_app_logging/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_app_logging.c │ │ └── wscript │ ├── feature_app_wakeup/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── tea_timer.c │ │ └── wscript │ ├── feature_clock_mode/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_clock_mode.c │ │ └── wscript │ ├── feature_custom_font/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── resources/ │ │ │ └── fonts/ │ │ │ └── osp-din/ │ │ │ ├── COPYING.txt │ │ │ ├── FONTLOG │ │ │ ├── OFL-1.1.txt │ │ │ └── README.pebble │ │ ├── src/ │ │ │ └── feature_custom_font.c │ │ └── wscript │ ├── feature_draw_bitmap/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_draw_bitmap.c │ │ └── wscript │ ├── feature_draw_bitmap_composite/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_draw_bitmap_composite.c │ │ └── wscript │ ├── feature_focus_handler/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_focus_handler.c │ │ └── wscript │ ├── feature_frame_buffer/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_frame_buffer.c │ │ └── wscript │ ├── feature_gpath/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_gpath.c │ │ └── wscript │ ├── feature_image/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_image.c │ │ └── wscript │ ├── feature_image_transparent/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_image_transparent.c │ │ └── wscript │ ├── feature_inverter_layer/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_inverter_layer.c │ │ └── wscript │ ├── feature_layer_data/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_layer_data.c │ │ └── wscript │ ├── feature_menu_layer/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_menu_layer.c │ │ └── wscript │ ├── feature_persist_counter/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_persist_counter.c │ │ └── wscript │ ├── feature_property_animation/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_property_animation.c │ │ └── wscript │ ├── feature_scroll_layer/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_scroll_layer.c │ │ └── wscript │ ├── feature_simple_menu_layer/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_simple_menu_layer.c │ │ └── wscript │ ├── feature_stdlib/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_stdlib.c │ │ └── wscript │ ├── feature_text_alignment/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_text_alignment.c │ │ └── wscript │ ├── feature_text_draw/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_text_draw.c │ │ └── wscript │ ├── feature_timer/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_timer.c │ │ └── wscript │ ├── feature_timer_animation/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_timer_animation.c │ │ └── wscript │ ├── feature_vibe/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_vibe.c │ │ └── wscript │ ├── feature_vibe_custom/ │ │ ├── README.md │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── feature_vibe_custom.c │ │ └── wscript │ └── pebble_arcade/ │ ├── README.md │ ├── appinfo.json │ ├── src/ │ │ ├── entry.c │ │ ├── entry.h │ │ ├── game.c │ │ ├── game.h │ │ ├── pebble_arcade.c │ │ ├── score.c │ │ └── score.h │ └── wscript ├── watchfaces/ │ ├── big_time/ │ │ ├── appinfo.json │ │ ├── fonttools/ │ │ │ └── font2png.py │ │ ├── resources/ │ │ │ └── fonts/ │ │ │ └── README │ │ ├── src/ │ │ │ └── big_time.c │ │ └── wscript │ ├── classio/ │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── classio.c │ │ └── wscript │ ├── classio-battery-connection/ │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── classio.c │ │ └── wscript │ ├── drop_zone/ │ │ ├── appinfo.json │ │ ├── resources/ │ │ │ └── fonts/ │ │ │ └── Google Android License.txt │ │ ├── src/ │ │ │ └── drop_zone.c │ │ └── wscript │ ├── feature_compass/ │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── compass.c │ │ └── wscript │ ├── fuzzy_time/ │ │ ├── appinfo.json │ │ ├── src/ │ │ │ ├── fuzzy_time.c │ │ │ ├── num2words.c │ │ │ └── num2words.h │ │ └── wscript │ ├── just_a_bit/ │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── just_a_bit.c │ │ └── wscript │ ├── ninety_one_dub/ │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── ninety_one_dub.c │ │ └── wscript │ ├── onthebutton/ │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── onthebutton.c │ │ └── wscript │ ├── rumbletime/ │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── rumbletime.c │ │ └── wscript │ ├── segment_six/ │ │ ├── appinfo.json │ │ ├── src/ │ │ │ └── segment_six.c │ │ └── wscript │ ├── simple_analog/ │ │ ├── appinfo.json │ │ ├── src/ │ │ │ ├── simple_analog.c │ │ │ └── simple_analog.h │ │ └── wscript │ ├── simplicity/ │ │ ├── appinfo.json │ │ ├── resources/ │ │ │ └── fonts/ │ │ │ └── Google Android License.txt │ │ ├── src/ │ │ │ └── simplicity.c │ │ └── wscript │ └── tic_tock_toe/ │ ├── appinfo.json │ ├── src/ │ │ └── tic_tock_toe.c │ └── wscript └── weather-demo/ ├── WeatherDemo-Android/ │ ├── .classpath │ ├── .gradle/ │ │ └── 1.12/ │ │ └── taskArtifacts/ │ │ └── cache.properties │ ├── .idea/ │ │ ├── .name │ │ ├── compiler.xml │ │ ├── copyright/ │ │ │ └── profiles_settings.xml │ │ ├── encodings.xml │ │ ├── gradle.xml │ │ ├── libraries/ │ │ │ ├── guava_14_0_1.xml │ │ │ └── pebblekit_2_5_0.xml │ │ ├── misc.xml │ │ ├── modules.xml │ │ ├── scopes/ │ │ │ └── scope_settings.xml │ │ ├── vcs.xml │ │ └── workspace.xml │ ├── .project │ ├── .settings/ │ │ └── org.eclipse.jdt.core.prefs │ ├── AndroidManifest.xml │ ├── README.md │ ├── WeatherDemo-Android.iml │ ├── ant.properties │ ├── app/ │ │ ├── app.iml │ │ ├── build.gradle │ │ └── src/ │ │ └── main/ │ │ ├── .classpath │ │ ├── .project │ │ ├── .settings/ │ │ │ └── org.eclipse.jdt.core.prefs │ │ ├── AndroidManifest.xml │ │ ├── bin/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── ExampleWeatherActivity.apk │ │ │ ├── classes.dex │ │ │ ├── dexedLibs/ │ │ │ │ ├── annotations-3f671648eabb6a7168130867f2540da9.jar │ │ │ │ └── pebblekit-2.6.0-beta2-eclipse-3103148405a0d219b82d1f3520f07e33.jar │ │ │ ├── jarlist.cache │ │ │ └── resources.ap_ │ │ ├── gen/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── PebbleKitExample/ │ │ │ ├── BuildConfig.java │ │ │ └── R.java │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── PebbleKitExample/ │ │ │ └── ExampleWeatherActivity.java │ │ ├── libs/ │ │ │ └── pebblekit-2.6.0-beta2-eclipse.jar │ │ ├── project.properties │ │ └── res/ │ │ ├── layout/ │ │ │ └── activity_weather.xml │ │ └── values/ │ │ └── strings.xml │ ├── build.gradle │ ├── build.xml │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── libs/ │ │ ├── android-support-v4.jar │ │ └── gcm.jar │ ├── proguard-project.txt │ ├── project.properties │ ├── res/ │ │ ├── layout/ │ │ │ ├── activity_gcm.xml │ │ │ ├── activity_golf.xml │ │ │ ├── activity_sms.xml │ │ │ ├── activity_sports.xml │ │ │ ├── activity_todo_list.xml │ │ │ ├── activity_weather.xml │ │ │ ├── checkable_main.xml │ │ │ ├── dialog_add_todo_item.xml │ │ │ └── list_item_checkable.xml │ │ ├── menu/ │ │ │ └── options_menu.xml │ │ └── values/ │ │ ├── dimens.xml │ │ ├── dslv_attrs.xml │ │ ├── ids.xml │ │ └── strings.xml │ ├── settings.gradle │ └── src/ │ └── com/ │ ├── example/ │ │ └── PebbleKitExample/ │ │ ├── ExampleGCMActivity.java │ │ ├── ExampleGolfActivity.java │ │ ├── ExampleSmsActivity.java │ │ ├── ExampleSportsActivity.java │ │ ├── ExampleWeatherActivity.java │ │ ├── GCMIntentService.java │ │ ├── MainActivity.java │ │ └── TodoList/ │ │ ├── CheckableLinearLayout.java │ │ ├── ExampleTodoListActivity.java │ │ ├── TodoListAdapter.java │ │ └── TodoListItem.java │ └── mobeta/ │ └── android/ │ └── dslv/ │ ├── DragSortController.java │ ├── DragSortCursorAdapter.java │ ├── DragSortItemView.java │ ├── DragSortItemViewCheckable.java │ ├── DragSortListView.java │ ├── ResourceDragSortCursorAdapter.java │ ├── SimpleDragSortCursorAdapter.java │ └── SimpleFloatViewManager.java ├── WeatherDemo-iOS/ │ ├── Podfile │ ├── Pods/ │ │ ├── PebbleKit/ │ │ │ ├── PebbleKit.framework/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ ├── PBLog.h │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ └── gtypes.h │ │ │ │ ├── PebbleKit │ │ │ │ └── Versions/ │ │ │ │ ├── A/ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ │ ├── PBLog.h │ │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ │ └── gtypes.h │ │ │ │ │ └── PebbleKit │ │ │ │ └── Current/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── NSDictionary+Pebble.h │ │ │ │ │ ├── NSNumber+stdint.h │ │ │ │ │ ├── PBBitmap.h │ │ │ │ │ ├── PBDataLoggingService.h │ │ │ │ │ ├── PBErrors.h │ │ │ │ │ ├── PBLog.h │ │ │ │ │ ├── PBPebbleCentral.h │ │ │ │ │ ├── PBWatch+AppMessages.h │ │ │ │ │ ├── PBWatch+Golf.h │ │ │ │ │ ├── PBWatch+Ping.h │ │ │ │ │ ├── PBWatch+PollServices.h │ │ │ │ │ ├── PBWatch+Sports.h │ │ │ │ │ ├── PBWatch+Version.h │ │ │ │ │ ├── PBWatch.h │ │ │ │ │ ├── PebbleKit.h │ │ │ │ │ └── gtypes.h │ │ │ │ └── PebbleKit │ │ │ ├── PebbleVendor.framework/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ ├── DDLog.h │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ ├── PebbleVendor │ │ │ │ └── Versions/ │ │ │ │ ├── A/ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ │ ├── DDLog.h │ │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ │ └── PebbleVendor │ │ │ │ └── Current/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── CHMultiDictionary.h │ │ │ │ │ ├── CHMutableDictionary.h │ │ │ │ │ ├── DDASLLogger.h │ │ │ │ │ ├── DDFileLogger.h │ │ │ │ │ ├── DDLog.h │ │ │ │ │ ├── DDTTYLogger.h │ │ │ │ │ ├── NSJSONSerialization+ObjectWithNString.h │ │ │ │ │ ├── NSJSONSerialization+PBJSONHelpers.h │ │ │ │ │ ├── NSString+HexData.h │ │ │ │ │ └── UIDevice-Hardware.h │ │ │ │ └── PebbleVendor │ │ │ └── Readme.md │ │ ├── Pods-PebbleKit-Private.xcconfig │ │ ├── Pods-PebbleKit-dummy.m │ │ ├── Pods-PebbleKit-prefix.pch │ │ ├── Pods-PebbleKit.xcconfig │ │ ├── Pods-acknowledgements.markdown │ │ ├── Pods-acknowledgements.plist │ │ ├── Pods-dummy.m │ │ ├── Pods-environment.h │ │ ├── Pods-resources.sh │ │ ├── Pods.xcconfig │ │ └── Pods.xcodeproj/ │ │ └── project.pbxproj │ ├── WeatherDemo/ │ │ ├── WDAppDelegate.h │ │ ├── WDAppDelegate.m │ │ ├── WeatherDemo-Info.plist │ │ ├── WeatherDemo-Prefix.pch │ │ ├── en.lproj/ │ │ │ └── InfoPlist.strings │ │ └── main.m │ ├── WeatherDemo.xcodeproj/ │ │ ├── project.pbxproj │ │ └── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── WeatherDemo.xccheckout │ └── WeatherDemo.xcworkspace/ │ └── contents.xcworkspacedata └── weather/ ├── appinfo.json ├── src/ │ └── weather.c └── wscript ================================================ FILE CONTENTS ================================================ ================================================ FILE: README-ANDROID.txt ================================================ Important information for Android Examples users ================================================ Pebble Android examples are built and easier to run with Android Studio. If you prefer to use Eclipse, follow the instructions below to import the examples and add the PebbleKit library. ## Opening Android Examples with Android Studio - Open 'Android Studio' - Select 'Open project' in the start menu (or the main menu) - Select one of the Android examples (e.g.: weather-demo/WeatherDemo-Android) - Click "Open" Android Studio will automatically download the PebbleKit library. You can now build and run the project. ## Opening Android Examples with Eclipse ADT (Android Developer Tools) To import one of Pebble Android examples in Eclipse: - Open Eclipse - Select File -> Import... -> Android / Existing Android Code Into Workspace - Click on 'Browse' next to 'Root Directory' and select the root of one of the Android examples For example: weather-demo/WeatherDemo-Android - Click "Finish" With Eclipse, you must manually download the PebbleKit Android for Eclipse library and add it to the project. The most up to date version will always be available from GitHub: https://github.com/pebble/pebblekit-android Download the 'pebblekit-2.x.x-eclipse.jar' file and: - Create a "libs" folder in ExampleName-Android/app/src/main/ - Add the file in this folder - Refresh the project in Eclipse Finally, Eclipse cannot import Android Studio projects properly and you will need to manually fix the list of source folder: - Right click on the project and select Properties - Open "Java Build Path" - In the Source tab, click "Add Folder", select the checkbox next to "java" and click Ok twice to go back to the project. That's it! You can now build and run the project. ## Documentation and Support Full documentation is available on Pebble developer website: http://developer.getpebble.com/guides/mobile-apps/android/ We would love to hear your questions and feedbacks on those examples, you can contact us at: devsupport@getpebble.com. ================================================ FILE: README.md ================================================ ## Pebble Smartwatch SDK Examples ### This repository has been deprecated and will no longer be updated. Head over to [pebble-examples](https://github.com/pebble-examples) for official example repositories that can be individually imported to CloudPebble with ease. To learn more about the Pebble SDK visit . ## License All the examples are released under the MIT License. Please [contact us](mailto:devsupport@getpebble.com) if you would like to use another license. Copyright (C) 2013 Pebble Technology Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.gitignore ================================================ bin/ gen/ local.properties ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.idea/.name ================================================ OceanSurveyDemo-Android ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.idea/compiler.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.idea/copyright/profiles_settings.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.idea/encodings.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.idea/gradle.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.idea/misc.xml ================================================ Spelling localhost 5050 Android API 10 Platform ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.idea/modules.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.idea/scopes/scope_settings.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.idea/vcs.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.idea/workspace.xml ================================================ localhost 5050 1415694126178 1415694126178 ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/.project ================================================ Ocean Survey com.android.ide.eclipse.adt.ResourceManagerBuilder com.android.ide.eclipse.adt.PreCompilerBuilder org.eclipse.jdt.core.javabuilder com.android.ide.eclipse.adt.ApkBuilder com.android.ide.eclipse.adt.AndroidNature org.eclipse.jdt.core.javanature ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/AndroidManifest.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/OceanSurveyDemo-Android.iml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/README.md ================================================ # Ocean Surveying An example Android application that exercises the data spooling APIs of `PebbleKit`. ## Dependencies 1. Android SDK (http://developer.android.com/sdk/index.html) 1. PebbleKit-Android, which targets Android API 10 by default 1. Google Guava (https://code.google.com/p/guava-libraries/), included in `libs/` ## Building the APK Apache Ant may be used to build the example application from the command line. For information, see the Android documentation on [building from the command line](http://developer.android.com/tools/building/building-cmdline.html). To build this example application outside the directory structure of `pebblesdk-examples`, you may need to update the relative path of the `PebbleKit-Android` directory. To do this, use the android command line tools to update the build scripts, indicating the new relative path to the PebbleKit directory. For example, to compile this example application in its default location in the `pebblesdk-examples` repository: rm project.properties; android update project --path ./ --library ../../../PebbleKit-Android/PebbleKit To build and deploy a debug APK using Apache Ant: ant clean debug install ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/ant.properties ================================================ # This file is used to override default values used by the Ant build system. # # This file must be checked into Version Control Systems, as it is # integral to the build system of your project. # This file is only used by the Ant script. # You can use this to override default values such as # 'source.dir' for the location of your java source folder and # 'out.dir' for the location of your output folder. # You can also use it define how the release builds are signed by declaring # the following properties: # 'key.store' for the location of your keystore and # 'key.alias' for the name of the key to use. # The password will be asked during the build when you use the 'release' target. ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/app.iml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/build.gradle ================================================ apply plugin: 'com.android.application' repositories { mavenCentral() maven { url "https://oss.sonatype.org/content/groups/public/" } } android { compileSdkVersion 17 buildToolsVersion '20.0.0' defaultConfig { applicationId "com.example.pebblekit.datalogging" minSdkVersion 14 targetSdkVersion 17 } lintOptions { abortOnError false } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { compile 'com.getpebble:pebblekit:2.6.0' compile 'com.google.android:support-v4:r7@jar' } ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/.classpath ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/.project ================================================ ExampleDataLoggingActivity com.android.ide.eclipse.adt.ResourceManagerBuilder com.android.ide.eclipse.adt.PreCompilerBuilder org.eclipse.jdt.core.javabuilder com.android.ide.eclipse.adt.ApkBuilder com.android.ide.eclipse.adt.AndroidNature org.eclipse.jdt.core.javanature ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/.settings/org.eclipse.jdt.core.prefs ================================================ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.source=1.6 ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/AndroidManifest.xml ================================================ /> ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/java/com/example/PebbleKitExample/ExampleDataLoggingActivity.java ================================================ package com.example.PebbleKitExample; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.widget.TextView; import com.getpebble.android.kit.PebbleKit; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; import java.util.UUID; /** * Sample code demonstrating how Android applications can receive data logs from Pebble. */ public class ExampleDataLoggingActivity extends Activity { private static final UUID OCEAN_SURVEY_APP_UUID = UUID.fromString("0A5399d9-5693-4F3E-B768-9C99B5F5DCEA"); private static final DateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss"); private final StringBuilder mDisplayText = new StringBuilder(); private PebbleKit.PebbleDataLogReceiver mDataLogReceiver = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_counter); DATE_FORMAT.setTimeZone(TimeZone.getDefault()); } @Override protected void onPause() { super.onPause(); if (mDataLogReceiver != null) { unregisterReceiver(mDataLogReceiver); mDataLogReceiver = null; } } @Override protected void onResume() { super.onResume(); final Handler handler = new Handler(); // To receive data logs, Android applications must register a "DataLogReceiver" to receive data. // // In this example, we're implementing a handler to receive unsigned integer data that was logged by a // corresponding watch-app. In the watch-app, three separate logs were created, one per animal. Each log was // tagged with a key indicating the animal to which the data corresponds. So, the tag will be used here to // look up the animal name when data is received. // // The data being received contains the seconds since the epoch (a timestamp) of when an ocean faring animal // was sighted. The "timestamp" indicates when the log was first created, and will not be used in this example. mDataLogReceiver = new PebbleKit.PebbleDataLogReceiver(OCEAN_SURVEY_APP_UUID) { @Override public void receiveData(Context context, UUID logUuid, Long timestamp, Long tag, Long secondsSinceEpoch) { mDisplayText.append("\n"); mDisplayText.append(getLongAsTimestamp(secondsSinceEpoch)); mDisplayText.append(": Saw a "); mDisplayText.append(AnimalName.fromInt(tag.intValue()).getName()); handler.post(new Runnable() { @Override public void run() { updateUi(); } }); } }; PebbleKit.registerDataLogReceiver(this, mDataLogReceiver); PebbleKit.requestDataLogsForApp(this, OCEAN_SURVEY_APP_UUID); } private void updateUi() { TextView textView = (TextView) findViewById(R.id.log_data_text_view); textView.setText(mDisplayText.toString()); } private String getLongAsTimestamp(Long l) { return DATE_FORMAT.format(new Date(l.longValue() * 1000L)).toString(); } private static enum AnimalName { SEALION(0x5), DOLPHIN(0xd), PELICAN(0xb), UNKNOWN(0xff); public final int id; private AnimalName(final int id) { this.id = id; } public static AnimalName fromInt(final int id) { for (AnimalName animal : values()) { if (animal.id == id) { return animal; } } return UNKNOWN; } public String getName() { return name().toLowerCase(); } } } ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/project.properties ================================================ # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system edit # "ant.properties", and override values to adapt the script to your # project structure. # # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. target=android-14 ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/res/layout/activity_counter.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/res/menu/counter.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/res/values/dimens.xml ================================================ 16dp 16dp ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/res/values/strings.xml ================================================ Data Logging Demo Settings ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/app/src/main/res/values/styles.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/build.gradle ================================================ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.0.1' } } allprojects { repositories { jcenter() } } ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/build.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/gradle/wrapper/gradle-wrapper.properties ================================================ #Mon Feb 09 10:41:14 PST 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/gradlew ================================================ #!/usr/bin/env bash ############################################################################## ## ## Gradle start up script for UN*X ## ############################################################################## # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS="" APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" warn ( ) { echo "$*" } die ( ) { echo echo "$*" echo exit 1 } # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false case "`uname`" in CYGWIN* ) cygwin=true ;; Darwin* ) darwin=true ;; MINGW* ) msys=true ;; esac # For Cygwin, ensure paths are in UNIX format before anything is touched. if $cygwin ; then [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` fi # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" # Need this for relative symlinks. while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done SAVED="`pwd`" cd "`dirname \"$PRG\"`/" >&- APP_HOME="`pwd -P`" cd "$SAVED" >&- CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD="$JAVA_HOME/jre/sh/java" else JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD="java" which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi # Increase the maximum file descriptors if we can. if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD="$MAX_FD_LIMIT" fi ulimit -n $MAX_FD if [ $? -ne 0 ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi # For Darwin, add options to specify how the application appears in the dock if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin, switch paths to Windows format before running java if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` SEP="" for dir in $ROOTDIRSRAW ; do ROOTDIRS="$ROOTDIRS$SEP$dir" SEP="|" done OURCYGPATTERN="(^($ROOTDIRS))" # Add a user-defined pattern to the cygpath arguments if [ "$GRADLE_CYGPATTERN" != "" ] ; then OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" fi # Now convert the arguments - kludge to limit ourselves to /bin/sh i=0 for arg in "$@" ; do CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` else eval `echo args$i`="\"$arg\"" fi i=$((i+1)) done case $i in (0) set -- ;; (1) set -- "$args0" ;; (2) set -- "$args0" "$args1" ;; (3) set -- "$args0" "$args1" "$args2" ;; (4) set -- "$args0" "$args1" "$args2" "$args3" ;; (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules function splitJvmOpts() { JVM_OPTS=("$@") } eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/gradlew.bat ================================================ @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS= set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto init echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto init echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :init @rem Get command-line arguments, handling Windowz variants if not "%OS%" == "Windows_NT" goto win9xME_args if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. set CMD_LINE_ARGS= set _SKIP=2 :win9xME_args_slurp if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* goto execute :4NT_args @rem Get arguments from the 4NT Shell from JP Software set CMD_LINE_ARGS=%$ :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/proguard-project.txt ================================================ # To enable ProGuard in your project, edit project.properties # to define the proguard.config property as described in that file. # # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in ${sdk.dir}/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the ProGuard # include property in project.properties. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/project.properties ================================================ # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system edit # "ant.properties", and override values to adapt the script to your # project structure. # # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. target=android-14 android.library.reference.1=../../../PebbleKit-Android/PebbleKit ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/res/layout/activity_counter.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/res/menu/counter.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/res/values/dimens.xml ================================================ 16dp 16dp ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/res/values/strings.xml ================================================ Ocean Survey Settings Hello world! ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/res/values/styles.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/res/values-sw600dp/dimens.xml ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/res/values-sw720dp-land/dimens.xml ================================================ 128dp ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/settings.gradle ================================================ include ':app' ================================================ FILE: data-logging-demo/OceanSurveyDemo-Android/src/com/getpebble/example/logging/ExampleDataLoggingActivity.java ================================================ package com.getpebble.example.logging; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.widget.TextView; import com.getpebble.android.kit.PebbleKit; import com.google.common.primitives.UnsignedInteger; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; import java.util.UUID; /** * Sample code demonstrating how Android applications can receive data logs from Pebble. */ public class ExampleDataLoggingActivity extends Activity { private static final UUID OCEAN_SURVEY_APP_UUID = UUID.fromString("0A5399d9-5693-4F3E-B768-9C99B5F5DCEA"); private static final DateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss"); private final StringBuilder mDisplayText = new StringBuilder(); private PebbleKit.PebbleDataLogReceiver mDataLogReceiver = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_counter); DATE_FORMAT.setTimeZone(TimeZone.getDefault()); } @Override protected void onPause() { super.onPause(); if (mDataLogReceiver != null) { unregisterReceiver(mDataLogReceiver); mDataLogReceiver = null; } } @Override protected void onResume() { super.onResume(); final Handler handler = new Handler(); // To receive data logs, Android applications must register a "DataLogReceiver" to receive data. // // In this example, we're implementing a handler to receive unsigned integer data that was logged by a // corresponding watch-app. In the watch-app, three separate logs were created, one per animal. Each log was // tagged with a key indicating the animal to which the data corresponds. So, the tag will be used here to // look up the animal name when data is received. // // The data being received contains the seconds since the epoch (a timestamp) of when an ocean faring animal // was sighted. The "timestamp" indicates when the log was first created, and will not be used in this example. mDataLogReceiver = new PebbleKit.PebbleDataLogReceiver(OCEAN_SURVEY_APP_UUID) { @Override public void receiveData(Context context, UUID logUuid, UnsignedInteger timestamp, UnsignedInteger tag, UnsignedInteger secondsSinceEpoch) { mDisplayText.append("\n"); mDisplayText.append(getUintAsTimestamp(secondsSinceEpoch)); mDisplayText.append(": Saw a "); mDisplayText.append(AnimalName.fromInt(tag.intValue()).getName()); handler.post(new Runnable() { @Override public void run() { updateUi(); } }); } }; PebbleKit.registerDataLogReceiver(this, mDataLogReceiver); PebbleKit.requestDataLogsForApp(this, OCEAN_SURVEY_APP_UUID); } private void updateUi() { TextView textView = (TextView) findViewById(R.id.log_data_text_view); textView.setText(mDisplayText.toString()); } private String getUintAsTimestamp(UnsignedInteger uint) { return DATE_FORMAT.format(new Date(uint.longValue() * 1000L)).toString(); } private static enum AnimalName { SEALION(0x5), DOLPHIN(0xd), PELICAN(0xb), UNKNOWN(0xff); public final int id; private AnimalName(final int id) { this.id = id; } public static AnimalName fromInt(final int id) { for (AnimalName animal : values()) { if (animal.id == id) { return animal; } } return UNKNOWN; } public String getName() { return name().toLowerCase(); } } } ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/OSAppDelegate.h ================================================ // // OSAppDelegate.h // // Created by Martijn The on 8/13/13. // Copyright (c) 2013 Pebble Technology Corp. All rights reserved. // #import @interface OSAppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/OSAppDelegate.m ================================================ // // OSAppDelegate.m // // Created by Martijn The on 8/13/13. // Copyright (c) 2013 Pebble Technology Corp. All rights reserved. // #import "OSAppDelegate.h" #import "OSDataLoggingViewController.h" #import @interface OSAppDelegate () @end @implementation OSAppDelegate { OSDataLoggingViewController *_dataLoggingViewController; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [PBPebbleCentral setDebugLogsEnabled:YES]; uuid_t myAppUUIDbytes; NSUUID *myAppUUID = [[NSUUID alloc] initWithUUIDString:@"0a5399d9-5693-4f3e-b768-9c99b5f5dcea"]; [myAppUUID getUUIDBytes:myAppUUIDbytes]; [[PBPebbleCentral defaultCentral] setAppUUID:[NSData dataWithBytes:myAppUUIDbytes length:16]]; [[PBPebbleCentral defaultCentral] setDelegate:self]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; _dataLoggingViewController = [[OSDataLoggingViewController alloc] initWithNibName:nil bundle:nil]; self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:_dataLoggingViewController]; [self.window makeKeyAndVisible]; return YES; } @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/OSDataLoggingViewController.h ================================================ // // OSDataLoggingViewController.h // // Created by Martijn The on 8/13/13. // Copyright (c) 2013 Pebble Technology Corp. All rights reserved. // #import #import @interface OSDataLoggingViewController : UIViewController @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/OSDataLoggingViewController.m ================================================ // // OSDataLoggingViewController.m // // Created by Martijn The on 8/13/13. // Copyright (c) 2013 Pebble Technology Corp. All rights reserved. // #import "OSDataLoggingViewController.h" enum { OSAnimalSealion = 0x5, OSAnimalPelican = 0xb, OSAnimalDolphin = 0xd, }; @interface OSDataLoggingViewController () @end @implementation OSDataLoggingViewController { UITextView *_textView; NSDateFormatter *_dateFormatter; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.navigationItem.title = @"Ocean Survey"; [[[PBPebbleCentral defaultCentral] dataLoggingService] setDelegate:self]; _dateFormatter = [[NSDateFormatter alloc] init]; _dateFormatter.timeZone = [NSTimeZone localTimeZone]; _dateFormatter.dateStyle = NSDateFormatterShortStyle; _dateFormatter.timeStyle = NSDateFormatterShortStyle; } return self; } - (void)addLogLine:(NSString*)line { line = [line stringByAppendingString:@"\n"]; _textView.text = [_textView.text stringByAppendingString:line]; } - (void)viewDidLoad { [super viewDidLoad]; _textView = [[UITextView alloc] initWithFrame:self.view.bounds]; _textView.text = @"Log:\n-------------------\n"; _textView.editable = NO; _textView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; _textView.autoresizesSubviews = YES; [self.view addSubview:_textView]; } - (NSString*)animalStringWithTag:(UInt32)tag { switch (tag) { case OSAnimalSealion: return @"Sealion"; case OSAnimalPelican: return @"Pelican"; case OSAnimalDolphin: return @"Dolphin"; } return @"Unknown"; } - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt32s:(const UInt32 [])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)sessionMetadata{ for (int i = 0; i < numberOfItems; ++i) { NSString *animal = [self animalStringWithTag:sessionMetadata.tag]; const UInt32 loggedTime = data[i]; /* Add seconds to GMT, since the watch only keeps local time. */ NSTimeZone *timeZone = [NSTimeZone localTimeZone]; NSInteger secondsOffset = [timeZone secondsFromGMT]; NSTimeInterval secondsSince1970 = loggedTime - secondsOffset; NSDate *date = [NSDate dateWithTimeIntervalSince1970:secondsSince1970]; NSString *log = [NSString stringWithFormat:@"%@: %@", animal, [_dateFormatter stringFromDate:date]]; [self addLogLine:log]; } // We consumed the data, let the data logging service know: return YES; } - (void)dataLoggingService:(PBDataLoggingService *)service sessionDidFinish:(PBDataLoggingSessionMetadata *)sessionMetadata { NSString *animal = [self animalStringWithTag:sessionMetadata.tag]; NSString *log = [NSString stringWithFormat:@"%@ session closed.", animal]; [self addLogLine:log]; } @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/OceanSurveyDemo-Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleDisplayName ${PRODUCT_NAME} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier com.getpebble.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1.0 LSRequiresIPhoneOS UIRequiredDeviceCapabilities armv7 UIStatusBarTintParameters UINavigationBar Style UIBarStyleDefault Translucent UISupportedExternalAccessoryProtocols com.getpebble.public UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/OceanSurveyDemo-Prefix.pch ================================================ #import #ifndef __IPHONE_4_0 #warning "This project uses features only available in iOS SDK 4.0 and later." #endif #ifdef __OBJC__ #import #import #endif ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/appinfo.json ================================================ { "uuid": "0a5399d9-5693-4f3e-b768-9c99b5f5dcea", "shortName": "Ocean Survey", "longName": "Ocean Survey", "companyName": "Pebble Environment Services", "versionCode": 1, "versionLabel": "1.0", "watchapp": { "watchface": false }, "appKeys": {}, "resources": { "media": [ { "type": "png", "name": "IMAGE_ACTION_ICON_DOLPHIN", "file": "images/dolphin.png" }, { "type": "png", "name": "IMAGE_ACTION_ICON_SEALION", "file": "images/sealion.png" }, { "type": "png", "name": "IMAGE_ACTION_ICON_PELICAN", "file": "images/pelican.png" } ] } } ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/en.lproj/ACDespoolingViewController.xib ================================================ 1552 12E55 3084 1187.39 626.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin 2083 IBNSLayoutConstraint IBProxyObject IBUIButton IBUILabel IBUIView com.apple.InterfaceBuilder.IBCocoaTouchPlugin PluginDependencyRecalculationVersion IBFilesOwner IBCocoaTouchFramework IBFirstResponder IBCocoaTouchFramework 274 292 {{20, 436}, {280, 44}} _NS:9 NO IBCocoaTouchFramework 0 0 1 Reset 3 MQA 1 MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 3 MC41AA 2 15 Helvetica-Bold 15 16 292 {{20, 47}, {280, 36}} _NS:9 NO YES 7 NO IBCocoaTouchFramework Label 1 MCAwIDAAA darkTextColor 0 1 17 Helvetica 17 16 NO 292 {{20, 91}, {280, 36}} _NS:9 NO YES 7 NO IBCocoaTouchFramework Label 0 NO 292 {{20, 135}, {280, 36}} _NS:9 NO YES 7 NO IBCocoaTouchFramework Label 0 NO 292 {{20, 15}, {280, 36}} _NS:9 NO YES 7 NO IBCocoaTouchFramework CRCs 0 1 12 Helvetica 12 16 NO 292 {{20, 246}, {280, 36}} _NS:9 NO YES 7 NO IBCocoaTouchFramework Label 0 NO 292 {{20, 290}, {280, 36}} _NS:9 NO YES 7 NO IBCocoaTouchFramework Label 0 NO 292 {{20, 334}, {280, 36}} _NS:9 NO YES 7 NO IBCocoaTouchFramework Label 0 NO 292 {{20, 214}, {280, 36}} _NS:9 NO YES 7 NO IBCocoaTouchFramework Lengths 0 NO {{0, 20}, {320, 499}} IBUIScreenMetrics YES {320, 568} {568, 320} IBCocoaTouchFramework Retina 4 Full Screen 2 IBCocoaTouchFramework view 3 _crcLabels NSArray NO 83 _crcLabels NSArray NO 84 _crcLabels NSArray NO 85 _lengthLabels NSArray NO 86 _lengthLabels NSArray NO 87 _lengthLabels NSArray NO 88 reset: 7 26 0 1 6 0 6 1 20 1000 8 29 3 5 0 5 1 20 1000 8 29 3 4 0 4 1 20 1000 8 29 3 6 0 6 1 20 1000 8 29 3 3 0 4 1 8 1000 6 24 3 5 0 5 1 20 1000 8 29 3 3 0 4 1 8 1000 6 24 3 6 0 6 1 20 1000 8 29 3 5 0 5 1 20 1000 8 29 3 5 0 5 1 20 1000 8 29 3 6 0 6 1 20 1000 8 29 3 3 0 3 1 246 1000 3 9 3 5 0 5 1 20 1000 8 29 3 6 0 6 1 20 1000 8 29 3 3 0 3 1 214 1000 3 9 3 5 0 5 1 20 1000 8 29 3 6 0 6 1 20 1000 8 29 3 3 0 4 1 8 1000 6 24 3 5 0 5 1 20 1000 8 29 3 3 0 4 1 8 1000 6 24 3 6 0 6 1 20 1000 8 29 3 3 0 3 1 47 1000 3 9 3 6 0 6 1 20 1000 8 29 3 5 0 5 1 20 1000 8 29 3 3 0 3 1 15 1000 3 9 3 5 0 5 1 20 1000 8 29 3 6 0 6 1 20 1000 8 29 3 -1 File's Owner -2 20 23 24 25 27 8 0 0 1 36 1000 3 9 1 30 32 34 35 8 0 0 1 36 1000 3 9 1 36 37 38 39 40 8 0 0 1 36 1000 3 9 1 41 42 43 44 49 8 0 0 1 36 1000 3 9 1 50 51 52 56 61 62 8 0 0 1 36 1000 3 9 1 63 8 0 0 1 36 1000 3 9 1 64 8 0 0 1 36 1000 3 9 1 65 8 0 0 1 36 1000 3 9 1 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ACDespoolingViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin 88 ACDespoolingViewController UIViewController reset: id reset: reset: id IBProjectSource ./Classes/ACDespoolingViewController.h NSLayoutConstraint NSObject IBProjectSource ./Classes/NSLayoutConstraint.h 0 IBCocoaTouchFramework YES 3 YES 2083 ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/en.lproj/ACSecondViewController.xib ================================================ 1536 12A269 2837 1187 624.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1921 IBNSLayoutConstraint IBProxyObject IBUILabel IBUITextView IBUIView com.apple.InterfaceBuilder.IBCocoaTouchPlugin PluginDependencyRecalculationVersion IBFilesOwner IBCocoaTouchFramework IBFirstResponder IBCocoaTouchFramework 274 290 {{20, 123}, {280, 43}} 3 MQA 2 NO YES NO IBCocoaTouchFramework Second View 1 MCAwIDAAA darkTextColor 1 10 1 Helvetica Helvetica 0 36 Helvetica 36 16 290 {{20, 206}, {280, 88}} NO YES YES NO IBCocoaTouchFramework NO NO NO 0.0 0.0 NO NO TG9hZGVkIGJ5IHRoZSBzZWNvbmQgdmlldwpjb250cm9sbGVyIOKAlCBhbiBpbnN0YW5jZSBvZiBTZWNv bmRWaWV3Q29udHJvbGxlciDigJQgc3BlY2lmaWVkIGluIHRoZSBhcHAgZGVsZWdhdGUuA 1 IBCocoaTouchFramework 1 4 Helvetica 14 16 {{0, 20}, {320, 499}} 3 MQA IBUIScreenMetrics YES {320, 568} {568, 320} IBCocoaTouchFramework Retina 4 Full Screen 2 IBCocoaTouchFramework view 3 0 1 10 0 10 1 0.0 1000 9 40 2 3 0 4 1 40 1000 9 40 3 5 0 5 1 20 1000 8 29 3 6 0 6 1 20 1000 8 29 3 6 0 6 1 20 1000 8 29 3 5 0 5 1 20 1000 8 29 3 -1 File's Owner -2 5 7 8 0 0 1 88 1000 3 9 1 9 10 12 13 14 15 17 ACSecondViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin 17 NSLayoutConstraint NSObject IBProjectSource ./Classes/NSLayoutConstraint.h 0 IBCocoaTouchFramework YES 3 YES 1921 ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/en.lproj/InfoPlist.strings ================================================ /* Localized versions of Info.plist keys */ ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo/main.m ================================================ // // main.m // // Created by Martijn The on 8/13/13. // Copyright (c) 2013 Pebble Technology Corp. All rights reserved. // #import #import "OSAppDelegate.h" int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([OSAppDelegate class])); } } ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 0F872BA4182243AD0071E717 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F872BA3182243AD0071E717 /* CFNetwork.framework */; }; 1072217617CEF78A000C35FE /* OSAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1072217317CEF78A000C35FE /* OSAppDelegate.m */; }; 1072217717CEF78A000C35FE /* OSDataLoggingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1072217517CEF78A000C35FE /* OSDataLoggingViewController.m */; }; 107BAF1617BB246900B91FCD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 107BAF1517BB246900B91FCD /* UIKit.framework */; }; 107BAF1817BB246900B91FCD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 107BAF1717BB246900B91FCD /* Foundation.framework */; }; 107BAF1A17BB246900B91FCD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 107BAF1917BB246900B91FCD /* CoreGraphics.framework */; }; 107BAF2017BB246900B91FCD /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 107BAF1E17BB246900B91FCD /* InfoPlist.strings */; }; 107BAF2217BB246900B91FCD /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 107BAF2117BB246900B91FCD /* main.m */; }; 107BAF2817BB246900B91FCD /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 107BAF2717BB246900B91FCD /* Default.png */; }; 107BAF2A17BB246900B91FCD /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 107BAF2917BB246900B91FCD /* Default@2x.png */; }; 107BAF2C17BB246900B91FCD /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 107BAF2B17BB246900B91FCD /* Default-568h@2x.png */; }; 107BAF6B17BB24BF00B91FCD /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 107BAF6617BB24BF00B91FCD /* CoreBluetooth.framework */; }; 107BAF6C17BB24BF00B91FCD /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 107BAF6717BB24BF00B91FCD /* CoreMotion.framework */; }; 107BAF6D17BB24BF00B91FCD /* ExternalAccessory.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 107BAF6817BB24BF00B91FCD /* ExternalAccessory.framework */; }; 107BAF6E17BB24BF00B91FCD /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 107BAF6917BB24BF00B91FCD /* libz.dylib */; }; 107BAF6F17BB24BF00B91FCD /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 107BAF6A17BB24BF00B91FCD /* MessageUI.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 0F872BA3182243AD0071E717 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; 1072217217CEF78A000C35FE /* OSAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OSAppDelegate.h; sourceTree = ""; }; 1072217317CEF78A000C35FE /* OSAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OSAppDelegate.m; sourceTree = ""; }; 1072217417CEF78A000C35FE /* OSDataLoggingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OSDataLoggingViewController.h; sourceTree = ""; }; 1072217517CEF78A000C35FE /* OSDataLoggingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OSDataLoggingViewController.m; sourceTree = ""; }; 107BAF1217BB246900B91FCD /* OceanSurveyDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OceanSurveyDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 107BAF1517BB246900B91FCD /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 107BAF1717BB246900B91FCD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 107BAF1917BB246900B91FCD /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 107BAF1D17BB246900B91FCD /* OceanSurveyDemo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "OceanSurveyDemo-Info.plist"; sourceTree = ""; }; 107BAF1F17BB246900B91FCD /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 107BAF2117BB246900B91FCD /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 107BAF2317BB246900B91FCD /* OceanSurveyDemo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "OceanSurveyDemo-Prefix.pch"; sourceTree = ""; }; 107BAF2717BB246900B91FCD /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; 107BAF2917BB246900B91FCD /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; 107BAF2B17BB246900B91FCD /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 107BAF6617BB24BF00B91FCD /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; }; 107BAF6717BB24BF00B91FCD /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; }; 107BAF6817BB24BF00B91FCD /* ExternalAccessory.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ExternalAccessory.framework; path = System/Library/Frameworks/ExternalAccessory.framework; sourceTree = SDKROOT; }; 107BAF6917BB24BF00B91FCD /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; 107BAF6A17BB24BF00B91FCD /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; 28B10E22A9204568AF3CA000 /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 107BAF0F17BB246900B91FCD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 0F872BA4182243AD0071E717 /* CFNetwork.framework in Frameworks */, 107BAF6B17BB24BF00B91FCD /* CoreBluetooth.framework in Frameworks */, 107BAF6C17BB24BF00B91FCD /* CoreMotion.framework in Frameworks */, 107BAF6D17BB24BF00B91FCD /* ExternalAccessory.framework in Frameworks */, 107BAF6E17BB24BF00B91FCD /* libz.dylib in Frameworks */, 107BAF6F17BB24BF00B91FCD /* MessageUI.framework in Frameworks */, 107BAF1617BB246900B91FCD /* UIKit.framework in Frameworks */, 107BAF1817BB246900B91FCD /* Foundation.framework in Frameworks */, 107BAF1A17BB246900B91FCD /* CoreGraphics.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 107BAF0917BB246900B91FCD = { isa = PBXGroup; children = ( 107BAF1B17BB246900B91FCD /* OceanSurveyDemo */, 107BAF1417BB246900B91FCD /* Frameworks */, 107BAF1317BB246900B91FCD /* Products */, 28B10E22A9204568AF3CA000 /* Pods.xcconfig */, ); sourceTree = ""; }; 107BAF1317BB246900B91FCD /* Products */ = { isa = PBXGroup; children = ( 107BAF1217BB246900B91FCD /* OceanSurveyDemo.app */, ); name = Products; sourceTree = ""; }; 107BAF1417BB246900B91FCD /* Frameworks */ = { isa = PBXGroup; children = ( 0F872BA3182243AD0071E717 /* CFNetwork.framework */, 107BAF6617BB24BF00B91FCD /* CoreBluetooth.framework */, 107BAF6717BB24BF00B91FCD /* CoreMotion.framework */, 107BAF6817BB24BF00B91FCD /* ExternalAccessory.framework */, 107BAF6917BB24BF00B91FCD /* libz.dylib */, 107BAF6A17BB24BF00B91FCD /* MessageUI.framework */, 107BAF1517BB246900B91FCD /* UIKit.framework */, 107BAF1717BB246900B91FCD /* Foundation.framework */, 107BAF1917BB246900B91FCD /* CoreGraphics.framework */, ); name = Frameworks; sourceTree = ""; }; 107BAF1B17BB246900B91FCD /* OceanSurveyDemo */ = { isa = PBXGroup; children = ( 1072217217CEF78A000C35FE /* OSAppDelegate.h */, 1072217317CEF78A000C35FE /* OSAppDelegate.m */, 1072217417CEF78A000C35FE /* OSDataLoggingViewController.h */, 1072217517CEF78A000C35FE /* OSDataLoggingViewController.m */, 107BAF1C17BB246900B91FCD /* Supporting Files */, ); path = OceanSurveyDemo; sourceTree = ""; }; 107BAF1C17BB246900B91FCD /* Supporting Files */ = { isa = PBXGroup; children = ( 107BAF1D17BB246900B91FCD /* OceanSurveyDemo-Info.plist */, 107BAF1E17BB246900B91FCD /* InfoPlist.strings */, 107BAF2117BB246900B91FCD /* main.m */, 107BAF2317BB246900B91FCD /* OceanSurveyDemo-Prefix.pch */, 107BAF2717BB246900B91FCD /* Default.png */, 107BAF2917BB246900B91FCD /* Default@2x.png */, 107BAF2B17BB246900B91FCD /* Default-568h@2x.png */, ); name = "Supporting Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 107BAF1117BB246900B91FCD /* OceanSurveyDemo */ = { isa = PBXNativeTarget; buildConfigurationList = 107BAF4317BB246900B91FCD /* Build configuration list for PBXNativeTarget "OceanSurveyDemo" */; buildPhases = ( 77C4664C438F45B1B5D06091 /* Check Pods Manifest.lock */, 107BAF0E17BB246900B91FCD /* Sources */, 107BAF0F17BB246900B91FCD /* Frameworks */, 107BAF1017BB246900B91FCD /* Resources */, FBA3BC2A56B44DB38F2B1C00 /* Copy Pods Resources */, ); buildRules = ( ); dependencies = ( ); name = OceanSurveyDemo; productName = AccelDemo; productReference = 107BAF1217BB246900B91FCD /* OceanSurveyDemo.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 107BAF0A17BB246900B91FCD /* Project object */ = { isa = PBXProject; attributes = { CLASSPREFIX = DS; LastUpgradeCheck = 0510; ORGANIZATIONNAME = "Pebble Technology Corp."; }; buildConfigurationList = 107BAF0D17BB246900B91FCD /* Build configuration list for PBXProject "OceanSurveyDemo" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 107BAF0917BB246900B91FCD; productRefGroup = 107BAF1317BB246900B91FCD /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 107BAF1117BB246900B91FCD /* OceanSurveyDemo */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 107BAF1017BB246900B91FCD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 107BAF2017BB246900B91FCD /* InfoPlist.strings in Resources */, 107BAF2817BB246900B91FCD /* Default.png in Resources */, 107BAF2A17BB246900B91FCD /* Default@2x.png in Resources */, 107BAF2C17BB246900B91FCD /* Default-568h@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 77C4664C438F45B1B5D06091 /* Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; FBA3BC2A56B44DB38F2B1C00 /* Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Pods-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 107BAF0E17BB246900B91FCD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 1072217717CEF78A000C35FE /* OSDataLoggingViewController.m in Sources */, 1072217617CEF78A000C35FE /* OSAppDelegate.m in Sources */, 107BAF2217BB246900B91FCD /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 107BAF1E17BB246900B91FCD /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 107BAF1F17BB246900B91FCD /* en */, ); name = InfoPlist.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 107BAF4117BB246900B91FCD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 6.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; }; 107BAF4217BB246900B91FCD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 6.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; 107BAF4417BB246900B91FCD /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 28B10E22A9204568AF3CA000 /* Pods.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../../../PebbleKit-iOS", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "OceanSurveyDemo/OceanSurveyDemo-Prefix.pch"; INFOPLIST_FILE = "OceanSurveyDemo/OceanSurveyDemo-Info.plist"; PRODUCT_NAME = OceanSurveyDemo; WRAPPER_EXTENSION = app; }; name = Debug; }; 107BAF4517BB246900B91FCD /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 28B10E22A9204568AF3CA000 /* Pods.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../../../PebbleKit-iOS", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "OceanSurveyDemo/OceanSurveyDemo-Prefix.pch"; INFOPLIST_FILE = "OceanSurveyDemo/OceanSurveyDemo-Info.plist"; PRODUCT_NAME = OceanSurveyDemo; WRAPPER_EXTENSION = app; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 107BAF0D17BB246900B91FCD /* Build configuration list for PBXProject "OceanSurveyDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( 107BAF4117BB246900B91FCD /* Debug */, 107BAF4217BB246900B91FCD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 107BAF4317BB246900B91FCD /* Build configuration list for PBXNativeTarget "OceanSurveyDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( 107BAF4417BB246900B91FCD /* Debug */, 107BAF4517BB246900B91FCD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 107BAF0A17BB246900B91FCD /* Project object */; } ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo.xcodeproj/project.xcworkspace/xcshareddata/OceanSurveyDemo.xccheckout ================================================ IDESourceControlProjectIdentifier B40A83A3-665E-4E52-B6F8-5C0CE8745FA7 IDESourceControlProjectName OceanSurveyDemo IDESourceControlProjectOriginsDictionary 3A0B87F4-437B-4F41-9F0F-BACA80C47296 ssh://github.com/pebble/pebblesdk-examples.git IDESourceControlProjectPath ocean-survey-demo/OceanSurveyDemo-iOS/OceanSurveyDemo.xcodeproj/project.xcworkspace IDESourceControlProjectRelativeInstallPathDictionary 3A0B87F4-437B-4F41-9F0F-BACA80C47296 ../../../.. IDESourceControlProjectURL ssh://github.com/pebble/pebblesdk-examples.git IDESourceControlProjectVersion 110 IDESourceControlProjectWCCIdentifier 3A0B87F4-437B-4F41-9F0F-BACA80C47296 IDESourceControlProjectWCConfigurations IDESourceControlRepositoryExtensionIdentifierKey public.vcs.git IDESourceControlWCCIdentifierKey 3A0B87F4-437B-4F41-9F0F-BACA80C47296 IDESourceControlWCCName pebblesdk-examples ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo.xcodeproj/xcshareddata/xcschemes/OceanSurvey.xcscheme ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/OceanSurveyDemo.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Podfile ================================================ pod "PebbleKit" ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/NSDictionary+Pebble.h ================================================ // // NSDictionary+Pebble.h // PebbleKit // // Created by Martijn The on 3/20/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import @interface NSDictionary (Pebble) /** * Serializes the receiver into a Pebble dict. * @note The receiver dictionary must comply to the following constraints: * * The keys must be instances of NSNumber. Their -unsignedLongValue return value will be used as final key. * * The values must be instances of either NSString, NSData or NSNumber. Use the NSNumber (stdint) category * to specify the signedness and width of NSNumbers. * @param error[out] Pointer to an NSError that will be set after the method has returned * in case there was an error. Possible error codes: PBErrorCodeDictionaryUnsupportedKeyClass, * PBErrorCodeDictionaryUnsupportedValueClass or PBErrorCodeDictionaryUnsupportedValueClass. * @see -dictionaryFromPebbleDictionaryDataWithError: */ - (NSData*)pebbleDictionaryData:(NSError * __autoreleasing *)error; @end @interface NSData (Pebble) /** * Interprets the receiver as Pebble dict data and deserializes it into an NSDictionary. * @param error[out] Pointer to an NSError that will be set after the method has returned * in case there was an error. Possible error codes: PBErrorCodeDictionaryInternalConsistency. * @see -pebbleDictionaryData: */ - (NSDictionary*)dictionaryFromPebbleDictionaryDataWithError:(NSError * __autoreleasing *)error; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/NSNumber+stdint.h ================================================ // // NSNumber+stdint.h // PebbleKit // // Created by Martijn The on 3/20/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import /** * This category exposes the capabilities the underlying CFNumber to explicitely * store the signedness and the width of the storage. */ @interface NSNumber (stdint) /** * Interprets the receiver as a 32-bits wide, unsigned integer. */ - (uint32_t)uint32Value; /** * Interprets the receiver as a 16-bits wide, unsigned integer. */ - (uint16_t)uint16Value; /** * Interprets the receiver as a 8-bits wide, unsigned integer. */ - (uint8_t)uint8Value; /** * Interprets the receiver as a 32-bits wide, signed integer. */ - (int32_t)int32Value; /** * Interprets the receiver as a 16-bits wide, signed integer. */ - (int16_t)int16Value; /** * Interprets the receiver as a 8-bits wide, signed integer. */ - (int8_t)int8Value; /** * Creates an NSNumber with a 32-bits wide, unsigned integer. */ + (NSNumber *)numberWithUint32:(uint32_t)value; /** * Creates an NSNumber with a 16-bits wide, unsigned integer. */ + (NSNumber *)numberWithUint16:(uint16_t)value; /** * Creates an NSNumber with a 8-bits wide, unsigned integer. */ + (NSNumber *)numberWithUint8:(uint8_t)value; /** * Creates an NSNumber with a 32-bits wide, signed integer. */ + (NSNumber *)numberWithInt32:(int32_t)value; /** * Creates an NSNumber with a 16-bits wide, signed integer. */ + (NSNumber *)numberWithInt16:(int16_t)value; /** * Creates an NSNumber with a 8-bits wide, signed integer. */ + (NSNumber *)numberWithInt8:(int8_t)value; /** * Gets whether the number that is stored by the receiver should be interpreted * as a floating pointer number or not. */ - (BOOL)isFloat; /** * Gets whether the number that is stored by the receiver should be interpreted * as a signed integer or not. */ - (BOOL)isSigned; /** * Gets the width in bytes of the integer that is stored by the receiver. */ - (uint8_t)width; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBBitmap.h ================================================ // // PBBitmap.h // PebbleKit // // Created by Martijn The on 3/24/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import #import #import /** * Helper class to convert a UIImage to Pebble bitmap pixel data and GBitmap metadata. * Refer to the documentation of Pebble's native watch app SDK on the GBitmap format. */ @interface PBBitmap : NSObject /** * The pixel data of the bitmap. * This corresponds to the data as pointed to by GBitmap's `addr` field. */ @property (nonatomic, readonly, strong) NSData *pixelData; /** * The number of bytes per row. * Always a multiple of 4 bytes. */ @property (nonatomic, readonly, assign) uint16_t rowSizeBytes; /** * Bitfield of metadata flags. * This corresponds to GBitmap's `info_flags` field. */ @property (nonatomic, readonly, assign) uint16_t infoFlags; /** * The box of bits inside `pixelData`, that contains * the actual image data to use. * This corresponds to GBitmap's `bounds` field. */ @property (nonatomic, readonly, assign) GRect bounds; /** * Factory method to create a PBBitmap from a UIImage instance. * @param image The UIImage from which to create the PBBitmap */ + (PBBitmap*)pebbleBitmapWithUIImage:(UIImage*)image; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBDataLoggingService.h ================================================ // // PBDataLoggingService.h // PebbleKit // // Created by Martijn The on 7/19/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import /** * Data logging datatypes. */ enum { //! Array of bytes PBDataLoggingTypeByteArray = 0, //! unsigned integer PBDataLoggingTypeUInt = 2, //! signed integer PBDataLoggingTypeInt = 3, }; typedef UInt8 PBDataLoggingType; /** * The metadata of a data logging session. Used to identify a session. */ @interface PBDataLoggingSessionMetadata : NSObject /** * A tag associated with the session. */ @property (nonatomic, readonly) UInt32 tag; /** * The timestamp of the moment the session was created by the watchapp. */ @property (nonatomic, readonly) UInt32 timestamp; /** * The type of data stored in this session. */ @property (nonatomic, readonly) PBDataLoggingType type; /** * The size of a data item. */ @property (nonatomic, readonly) UInt16 itemSize; /** * The serial number of the watch that created the sessions. */ @property (nonatomic, readonly) NSString *serialNumber; /** * Creates a new data logging session metadata object, given all its property values. * This method is provided to create a metadata object that can be used to * compare it with a metadata object that is passed into one of the * PBDataLoggingServiceDelegate methods. * @param tag The tag associated with the session * @param timestamp The timestamp of the creation of the session * @param type The type of data stored in the session * @param itemSize The size of a data item * @param serialNumber The serial number of the watch that created the session * @return A session metadata object with the specified information */ + (id)metadataWithTag:(UInt32)tag timestamp:(UInt32)timestamp type:(PBDataLoggingType)type itemSize:(UInt16)itemSize serialNumber:(NSString *)serialNumber; /** * Tests the equality of two data logging session metadata objects. * This method can be used to compare two session metadata objects * to check whether they are referring to the same session or not. * @param sessionMetadata * @return YES if all the property values of receiver are equal to the property * values of the given session. * @note Equivalent to -[PBDataLoggingSessionMetadata isEqual:] */ - (BOOL)isEqualToDataLoggingSessionMetadata:(PBDataLoggingSessionMetadata *)sessionMetadata; @end /** * Data logging delegate protocol. The object that implements this protocol * is responsible for handling incoming data. */ @protocol PBDataLoggingServiceDelegate @optional /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param bytes Pointer to the array of bytes. * The array contains (numberOfItems * session.itemSize) bytes. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasByteArrays:(const UInt8 * const)bytes numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of UInt8`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt8s:(const UInt8[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of UInt16`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt16s:(const UInt16[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of UInt32`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt32s:(const UInt32[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of SInt8`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasSInt8s:(const SInt8[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of SInt16`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasSInt16s:(const SInt16[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of SInt32`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasSInt32s:(const SInt32[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time a session is finished. * This is guaranteed to be called only after all data has been received and * consumed by the application. * @param service The data logging service. * @param session The metadata of the session. */ - (void)dataLoggingService:(PBDataLoggingService *)service sessionDidFinish:(PBDataLoggingSessionMetadata *)session; @end /** * The data logging service. Assign a delegate object in order to receive * data from your watchapp. */ @interface PBDataLoggingService : NSObject /** * The delegate that has the responsility of handling callbacks from the * data logging service. */ @property (atomic, readwrite, weak) id delegate; /** * Sets the queue on which delegate methods will be executed. * Callbacks are intended to be processed in the order as they come in, so it * you must use a serial queue. If set to nil (default) the main queue is used. * @param delegateQueue The queue on which the delegate methods will be executed. */ - (void)setDelegateQueue:(dispatch_queue_t)delegateQueue; /** * Query the watch for data logging data. */ - (void)pollForData; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBErrors.h ================================================ // // PBErrors.h // PebbleSDK // // Created by Martijn The on 7/26/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import extern NSString *PBErrorDomain; /** * PebbleKit Error codes. * Inspect the localizedDescription of any NSError objects for a description. */ typedef enum { PBErrorCodeNoSupportedProtocolsInInfoPlist, PBErrorCodeErrorCreatingSession, PBErrorCodeOutputStreamError, PBErrorCodeInputStreamError, PBErrorCodeSendMessageTimeout, PBErrorCodeEndpointDisallowed, PBErrorCodeVersionInfoTimeout, PBErrorCodeCannotCreateSessionWhileClosing, PBErrorCodeNoAppUUID, PBErrorCodeAppMessageRejected, PBErrorCodeAppMessageAckTimeout, PBErrorCodeDictionaryUnsupportedKeyClass, PBErrorCodeDictionaryUnsupportedValueClass, PBErrorCodeDictionaryInternalConsistency, PBErrorCodeInvalidArguments, PBErrorCodePebbleAppUnreachable, PBErrorCodePebbleAppRequestTimeout, PBErrorCodePebbleAppEmptyResponse, PBErrorCodePebbleAppUnexpectedResponse, PBErrorCodeServerNotAvailable, PBErrorCodeDownloadFailed, PBErrorCodePebbleNotConnected } PBErrorCode; @interface NSError (Pebble) /** * Convenience method to create an NSError object with error domain * and a given PBErrorCode and with an underlying NSError object. * @param code The error code for which to create the error * @param error The underlying error */ + (NSError*)pebbleErrorWithCode:(PBErrorCode)code underLyingError:(NSError*)error; /** * Convenience method to create an NSError object with error domain * and a given PBErrorCode. * @param code The error code for which to create the error */ + (NSError*)pebbleErrorWithCode:(PBErrorCode)code; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBLog.h ================================================ // // PBLog.h // PebbleApp // // Created by Martijn The on 11/29/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import "DDLog.h" #ifndef PBWSLOG_CONTEXT #define PBWSLOG_CONTEXT 1 #endif extern int PBLogLevel; #define LogError(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_ERROR, PBLogLevel, LOG_FLAG_ERROR, 0, frmt, ##__VA_ARGS__) #define LogWarn(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_WARN, PBLogLevel, LOG_FLAG_WARN, 0, frmt, ##__VA_ARGS__) #define LogInfo(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_INFO, PBLogLevel, LOG_FLAG_INFO, 0, frmt, ##__VA_ARGS__) #define LogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, PBLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__) #define WSLogError(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_ERROR, PBLogLevel, LOG_FLAG_ERROR, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define WSLogWarn(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_WARN, PBLogLevel, LOG_FLAG_WARN, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define WSLogInfo(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_INFO, PBLogLevel, LOG_FLAG_INFO, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define WSLogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, PBLogLevel, LOG_FLAG_VERBOSE, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define LogCError(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_ERROR, PBLogLevel, LOG_FLAG_ERROR, 0, frmt, ##__VA_ARGS__) #define LogCWarn(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_WARN, PBLogLevel, LOG_FLAG_WARN, 0, frmt, ##__VA_ARGS__) #define LogCInfo(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_INFO, PBLogLevel, LOG_FLAG_INFO, 0, frmt, ##__VA_ARGS__) #define LogCVerbose(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_VERBOSE, PBLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__) ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBPebbleCentral.h ================================================ // // PBPebbleCentral.h // PebbleSDK-iOS // // Created by Martijn Thé on 4/24/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import @class PBWatch; @class PBDataLoggingService; @protocol PBPebbleCentralDelegate; /** PebbleCentral plays the central role for client iOS apps (e.g. RunKeeper). */ @interface PBPebbleCentral : NSObject /** @returns The default central singleton instance. */ + (PBPebbleCentral*)defaultCentral; /** * Enables debug logs. The logs will be routed to the system log (ASL) and * console. It is advised to call this before making any other calls to PebbleKit. */ + (void)setDebugLogsEnabled:(BOOL)logsEnabled; /** The watches that are currently connected. Do not cache the array because it can change over time. */ @property (nonatomic, readonly, strong) NSArray *connectedWatches; /** The watches that are stored in the user preferences of the application. */ @property (nonatomic, readonly, strong) NSArray *registeredWatches; /** The central's delegate. */ @property (nonatomic, readwrite, weak) id delegate; /** * The UUID is used as the identifier of the watch application and is used * to make sure that appMessage and dataLogging communications arrives at its companion app * on the other device (and not in another app). * For most app message methods there is are two variants: one that does not take a UUID parameter and one that does take * a UUID parameter (for example, -appMessagesAddReceiveUpdateHandler: vs appMessagesAddReceiveUpdateHandler:withUUID:). * The methods that do not take a UUID, will use the UUID as set prior to this property. * @param uuid The 16 byte UUID of your app. * @note The UUID needs to be set before using either app message or data logging. */ @property (nonatomic, strong, readwrite) NSData *appUUID; /** * Verifies the currently set application UUID. * @return YES if the currently set UUID is valid, NO if it is not. * @see -setAppUuid: */ - (BOOL)hasValidAppUUID; /** @returns YES if the Pebble iOS app is installed, NO if it is not installed. */ - (BOOL)isMobileAppInstalled; /** Redirects to Pebble in the App Store, so the user can install the app. */ - (void)installMobileApp; /** Wipes out the data associated with the registered watches, that is stored on the phone. */ - (void)unregisterAllWatches; /** Returns the most recently connected watch from the -registeredWatches array. */ - (PBWatch*)lastConnectedWatch; @property (nonatomic, readonly) PBDataLoggingService *dataLoggingService; @end @protocol PBPebbleCentralDelegate @optional /** @param central The Pebble Central responsible for calling the delegate method. @param watch The PBWatch object representing the watch that was connected. @param isNew YES if the watch has been connected for the first time since the app has been installed or NO if not. */ - (void)pebbleCentral:(PBPebbleCentral*)central watchDidConnect:(PBWatch*)watch isNew:(BOOL)isNew; /** @param central The Pebble Central responsible for calling the delegate method. @param watch The PBWatch object representing the watch that was disconnected. */ - (void)pebbleCentral:(PBPebbleCentral*)central watchDidDisconnect:(PBWatch*)watch; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBWatch+AppMessages.h ================================================ // // PBWatch+AppMessages.h // PebbleKit // // Created by Martijn The on 3/20/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import typedef NS_ENUM(UInt8, PBAppState) { PBAppStateNotRunning = 0x00, PBAppStateRunning = 0x01, }; @interface PBWatch (AppMessages) /** * Queries the watch whether AppMessages are supported. * @param fetchedBlock The block that will be called whenthe inquiry has finished. The fetchedBlock will be called * asynchronously on the queue that was originally used when calling this method. * @param watch The watch on which the query was performed. * @param isAppMessagesSupported YES if AppMessages are supported, NO if not. */ - (void)appMessagesGetIsSupported:(void(^)(PBWatch *watch, BOOL isAppMessagesSupported))fetchedBlock; /** * Pushes an update to the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param dictionary Contains the key/value pairs to update. The dictionary can only contain items with an NSNumber * key and only contain NSString, NSNumber or NSData values. Use the methods in the NSNumber (stdint) category to * create NSNumbers with specific types standard integer types. * @param onSent The block that will be called when the message was accepted, rejected or timed out. * @param watch The watch to which the update was sent. * @param update The dictionary that was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. */ - (void)appMessagesPushUpdate:(NSDictionary*)dictionary onSent:(void(^)(PBWatch *watch, NSDictionary *update, NSError *error))onSent; /** * Pushes an update to the watch application with the specified UUID. * @param dictionary Contains the key/value pairs to update. The dictionary can only contain items with an NSNumber * key and only contain NSString, NSNumber or NSData values. Use the methods in the NSNumber (stdint) category to * create NSNumbers with specific types standard integer types. * @param onSent The block that will be called when the message was accepted, rejected or timed out. * @param watch The watch to which the update was sent. * @param update The dictionary that was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. * @param uuid The UUID of the watchapp to which the update should be sent. */ - (void)appMessagesPushUpdate:(NSDictionary*)dictionary withUUID:(NSData*)uuid onSent:(void(^)(PBWatch *watch, NSDictionary *update, NSError *error))onSent; /** * Add a receive handler for incoming updates that are send by the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param update The dictionary containing the values sent by the watch. * @return An opaque handle object representing the installed receive handler, that can be used in -appMessagesRemoveUpdateHandler: * @see -appMessagesRemoveUpdateHandler: */ - (id)appMessagesAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, NSDictionary *update))onReceive; /** * Add a receive handler for incoming updates that are send by the watch application with the specified UUID. * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param update The dictionary containing the values sent by the watch. * @param uuid The UUID of the watchapp for which sent messages should be handled by the onReceive block. * @return An opaque handle object representing the installed receive handler, that can be used in -appMessagesRemoveUpdateHandler: * @see -appMessagesRemoveUpdateHandler: */ - (id)appMessagesAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, NSDictionary *update))onReceive withUUID:(NSData*)uuid; /** * Add a handler for lifecycle events of watch applications. * @param onLifecycleUpdate This block will be called when an application starts and * stops running. * @param watch The watch that has sent the event. * @param uuid The uuid of the application that caused the event. * @param newAppState The new state of the app (either PBAppStateNotRunning or PBAppStateRunning). */ - (id)appMessagesAddAppLifecycleUpdateHandler:(void(^)(PBWatch *watch, NSUUID *uuid, PBAppState newAppState))onLifecycleUpdate; // INTERNAL USE ONLY - (id)appMessagesAddReceiveAllUpdatesHandler:(BOOL(^)(PBWatch *watch, NSUUID *uuid, NSDictionary *update))onReceive; /** * Removes a receive handler that was previously installed using -appMessagesAddReceiveUpdateHandler: * @param opaqueHandle The handle object as returned by -appMessagesAddReceiveUpdateHandler: * @see -appMessagesAddReceiveUpdateHandler: */ - (void)appMessagesRemoveUpdateHandler:(id)opaqueHandle; /** * Fetches the run state of the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:]. You can use this method to determine whether the watch * application is running or not. * TODO: Ask Francois how this API works. * @param onSent The block that will be called after the fetch state command has been * sent to the watch. */ - (void)appMessagesFetchAppState:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends a command to launch the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param onSent The block that will be called after the launch command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. */ - (void)appMessagesLaunch:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends a command to launch the watch application with the specified UUID. * @param onSent The block that will be called after the launch command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. * @param uuid The UUID of the watch application to launch. */ - (void)appMessagesLaunch:(void(^)(PBWatch *watch, NSError *error))onSent withUUID:(NSData*)uuid; /** * Sends a command to kill the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param onSent The block that will be called after the kill command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. */ - (void)appMessagesKill:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends a command to kill the watch application with the specified UUID. * @param onSent The block that will be called after the kill command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. * @param uuid The UUID of the watch application to launch. */ - (void)appMessagesKill:(void(^)(PBWatch *watch, NSError *error))onSent withUUID:(NSData*)uuid; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBWatch+Golf.h ================================================ // // PBWatch+Golf.h // PebbleKit // // Created by Martijn The on 4/4/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import #import @interface PBWatch (Golf) /** * The UUID of the Golf watch app. */ extern NSData *PBGolfUUID; /** * The key of the "Front" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfFrontKey; /** * The key of the "Mid" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfMidKey; /** * The key of the "Back" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfBackKey; /** * The key of the "Hole" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfHoleKey; /** * The key of the "Par" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfParKey; /** * The command IDs that can be sent back by the Golf watch app. * @see -golfAppAddReceiveUpdateHandler: */ typedef enum { GolfAppCommandPrevious = 0x01, GolfAppCommandNext = 0x02, GolfAppCommandSelect = 0x03, } GolfAppCommand; /** * Queries the watch whether Golf Messages are supported. * @param fetchedBlock The block that will be called whenthe inquiry has finished. The fetchedBlock will be called * asynchronously on the queue that was originally used when calling this method. * @param watch The watch on which the query was performed. * @param isGolfSupported YES if Golf Messages are supported, NO if not. */ - (void)golfGetIsSupported:(void(^)(PBWatch *watch, BOOL isGolfSupported))fetchedBlock; /** * Send a command to launch the golf app on the watch that the receiver represents. * @param onSent The handler that will be called when the launch command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)golfAppLaunch:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to kill the golf app on the watch that the receiver represents. * @param onSent The handler that will be called when the kill command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)golfAppKill:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends an update to the golf app on the watch that the receiver represents. * @param update The update to send. Use one or more keys (PBGolfFrontKey, PBGolfMidKey, PBGolfBackKey, PBGolfHoleKey, PBGolfParKey) * note that the value for each key MUST be of NSString type. * @param onSent The handler that will be called when the update has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. * @see PBGolfFrontKey, PBGolfMidKey, PBGolfBackKey, PBGolfHoleKey and PBGolfParKey */ - (void)golfAppUpdate:(NSDictionary*)update onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Add a receive handler for incoming Golf updates that are send by the Golf watch application. * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param command The command as sent by the watch. * @return An opaque handle object representing the installed receive handler, that can be used in -golfAppRemoveUpdateHandler: * @see GolfAppCommand * @see -golfAppRemoveUpdateHandler: */ - (id)golfAppAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, GolfAppCommand command))onReceive; /** * Removes a receive handler that was previously installed using -golfAppAddReceiveUpdateHandler: * @param opaqueHandle The handle object as returned by -golfAppAddReceiveUpdateHandler: * @see -golfAppAddReceiveUpdateHandler: */ - (void)golfAppRemoveUpdateHandler:(id)opaqueHandle; /** * Assigns a custom title and icon to the golf app on the watch. * @discussion It is recommended to perform this as the first call after -golfGetIsSupported: * to avoid changing the title and icon while it is being displayed in the menu as to avoid confusion. * @param title The custom title (max. 20 bytes of UTF-8 string) * @param icon The custom icon (max. 32x32 pixels, black/white only) * @param onSent The handler that will be called when the title and icon have been set or timed out. * @param watch The watch on which the custom title and icon have been set. * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)golfSetTitle:(NSString*)title icon:(UIImage*)icon onSent:(void(^)(PBWatch *watch, NSError *error))onSent; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBWatch+Ping.h ================================================ // // PBWatch+Ping.h // PebbleKit // // Created by Martijn The on 9/14/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import @interface PBWatch (Ping) /** * Sends a ping to the watch. * @param cookie A number identifying the ping. * @param onPong The block handler that will be called when the "pong" reply from the watch has been received. * @param watch The watch that sent the "pong" reply, which is "self". It is passed in to avoid retain loops. * @param cookie The cookie that was initially passed when calling this method. * @param onTimeout The block handler that will be called when the watch failed to reply in time. */ - (void)pingWithCookie:(UInt32)cookie onPong:(void(^)(PBWatch *watch, UInt32 cookie))onPong onTimeout:(void(^)(PBWatch *watch, UInt32 cookie))onTimeout; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBWatch+PollServices.h ================================================ // // PBWatch+PollServices.h // PebblePrivateKit // // Created by Martijn The on 2/7/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import /** * PollServiceType */ enum { PBPollRemoteServiceMail = 0, PBPollRemoteServiceDataLogging = 1, PBNumPollRemoteServices }; typedef UInt8 PBPollRemoteServiceType; @interface PBWatch (PollServices) // Call this upon connect with the watch to add handlers: - (id)addPollServicesHandler:(void(^)(PBWatch *))handler forService:(PBPollRemoteServiceType)service interval:(UInt8)interval; - (void)sendPollRequestForService:(PBPollRemoteServiceType)service; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBWatch+Sports.h ================================================ // // PBWatch+Sports.h // PebbleKit // // Created by Martijn The on 2/7/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import #import /** * The UUID of the Sports watch app. */ extern NSData *PBSportsUUID; /** * The key of the "Time" field. * The accompanying value must be an NSString (max. ~8 characters). * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsTimeKey; /** * The key of the "Distance" field. * The value must be an NSString (max. ~5 characters). * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsDistanceKey; /** * The key of the general purpose "Data" field. * The value must be an NSString (max. ~5 characters). * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsDataKey; /** * The key of the "Activity State". * The value must be an NSNumber created using +[NSNumber numberWithUint8:]. * @see SportsAppActivityState for valid values to use * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsActivityStateKey; /** * Instances of this convenience class represent an update of the current time, distance and pace, * and has a method to convert the values into a dictionary that can be used with -sportsAppUpdate:onSent:. * @see -sportsAppUpdate:onSent: */ @interface PBSportsUpdate : NSObject /** * The current time in seconds. The possible range is currently limited from -7140. to 7140., inclusive. (±1h 59min 59sec). */ @property (nonatomic, readwrite, assign) NSTimeInterval time; /** * The current distance in km or mi. The possible range is currently limited from -99.9 to 99.9, inclusive. * The unit of distance is dependent on the current unit setting. * @see -sportsAppSetMetric:onSent: */ @property (nonatomic, readwrite, assign) float distance; /** * General purpose data variable. The possible range is currently limited from -99.99 to 99.99, inclusive. * @see -sportsAppSetMetric:onSent: */ @property (nonatomic, readwrite, assign) float data; /** * Convenience method to create an update object. */ + (PBSportsUpdate*)updateWithTime:(NSTimeInterval)time distance:(float)distance data:(float)data; /** * Creates an update dictionary from the receiver, that can be used with -sportsAppUpdate:onSent:. * @see -sportsAppUpdate:onSent: */ - (NSDictionary*)dictionary; /** * Creates a formatted time string with from a total seconds value, formatted as "h:mm:ss". * For example, supplying the value 3930.0f seconds will return @"1:05:30" * @param seconds The number of seconds from which to create the time string. * @return Formatted time as "h:mm:ss" */ + (NSString*)timeStringFromFloat:(float)seconds; @end @interface PBWatch (Sports) /** * The state of the Sports activity. * @see -sportsAppAddReceiveUpdateHandler: */ typedef enum { SportsAppActivityStateInit = 0x00, SportsAppActivityStateRunning = 0x01, SportsAppActivityStatePaused = 0x02, SportsAppActivityStateEnd = 0x03, } SportsAppActivityState; /** * Queries the watch whether Sports Messages are supported. * @param fetchedBlock The block that will be called whenthe inquiry has finished. The fetchedBlock will be called * asynchronously on the queue that was originally used when calling this method. * @param watch The watch on which the query was performed. * @param isSportsSupported YES if Sports Messages are supported, NO if not. */ - (void)sportsGetIsSupported:(void(^)(PBWatch *watch, BOOL isSportsSupported))fetchedBlock; /** * Send a command to launch the sports app on the watch that the receiver represents. * @param onSent The handler that will be called when the launch command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppLaunch:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to kill the sports app on the watch that the receiver represents. * @param onSent The handler that will be called when the kill command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppKill:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to the sports app on the watch that the receiver represents, to set the preferred * unit system, either metric or imperial. * @param isMetric YES to request metric units or NO to request imperial units * @param onSent The handler that will be called when the unit command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppSetMetric:(BOOL)isMetric onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to the sports app on the watch that the receiver represents, * to set the preferred data label (either PACE or SPEED) and corresponding units. * @param isMetric YES to request metric units or NO to request imperial units * @param onSent The handler that will be called when the unit command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppSetLabel:(BOOL)isPace onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to the sports app on the watch that the receiver represents, to set the state of the * sports activity. Currently only SportsAppActivityStateRunning and SportsAppActivityStatePaused are * supported. * @param state The new sports activity state * @param onSent The handler that will be called when the unit command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppSetActivityState:(SportsAppActivityState)state onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends the update to the sports app on the watch that the receiver represents. * @param update The update to send. Use one or more keys (PBSportsTimeKey, PBSportsPaceKey, PBSportsDistanceKey) * note that the value for each key MUST be of NSString type. * @param onSent The handler that will be called when the update has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppUpdate:(NSDictionary*)update onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Add a receive handler for incoming Sports updates that are send by the Sports watch application. * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param state The new sports activity state as set by the watch. * @return An opaque handle object representing the installed receive handler, that can be used in -sportsAppRemoveUpdateHandler: * @see SportsAppActivityState * @see -sportsAppRemoveUpdateHandler: */ - (id)sportsAppAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, SportsAppActivityState state))onReceive; /** * Removes a receive handler that was previously installed using -sportsAppAddReceiveUpdateHandler: * @param opaqueHandle The handle object as returned by -sportsAppAddReceiveUpdateHandler: * @see -sportsAppAddReceiveUpdateHandler: */ - (void)sportsAppRemoveUpdateHandler:(id)opaqueHandle; /** * Assigns a custom title and icon to the sports app on the watch. * @discussion It is recommended to perform this as the first call after -sportsGetIsSupported: * to avoid changing the title and icon while it is being displayed in the menu as to avoid confusion. * @param title The custom title (max. 20 bytes of UTF-8 string) * @param icon The custom icon (max. 32x32 pixels, black/white only) * @param onSent The handler that will be called when the title and icon have been set or timed out. * @param watch The watch on which the custom title and icon have been set. * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsSetTitle:(NSString*)title icon:(UIImage*)icon onSent:(void(^)(PBWatch *watch, NSError *error))onSent; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBWatch+Version.h ================================================ // // PBWatch+Version.h // PebbleKit // // Created by Martijn The on 9/17/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import /** * PBFirmwareVersion is a helper class that is able to parse the versionTag string * into its components (os, major, minor, suffix) and facilitate comparisons * between versions. * Valid versions follow the following format: * `vOS(.MAJOR(.MINOR(-SUFFIX)))` * Where the fields OS, MAJOR, MINOR are positive, decimal integer numbers and SUFFIX * an arbitrary string. MAJOR, MINOR and SUFFIX are optional (nested optionality). * Examples of valid versions: * `v1` * `v2.1234.99-alpha-beta-gamma` */ @interface PBFirmwareVersion : NSObject /** * The OS version component. */ @property (nonatomic, readonly) NSInteger os; /** * The major version component. * @note If a version tag string does not contain a major component, it will be set to 0. */ @property (nonatomic, readonly) NSInteger major; /** * The minor version component. * @note If a version tag string does not contain a major component, it will be set to 0. */ @property (nonatomic, readonly) NSInteger minor; /** * The release suffix, which is the part following the dash '-'. * @note If a version tag string does not contain a suffix, it will be set to an empty string. * @discussion The release suffix is not used in the -compare: method. */ @property (nonatomic, readonly, copy) NSString *suffix; /** * The version timestamp. * @note The timestamp is in the final comparison equation, in the -compare: method, after evaluating * os, major and minor components. */ @property (nonatomic, readonly) UInt32 timestamp; /** * The version's git commit hash. * @discussion The commit hash is not used in the -compare: method. */ @property (nonatomic, readonly, copy) NSString *commitHash; /** * The version's git tag. */ @property (nonatomic, readonly, copy) NSString *tag; /** * Creates a PBFirmwareVersion object given a tag string and timestamp. */ + (PBFirmwareVersion*)firmwareVersionWithTag:(NSString*)tag commitHash:(NSString*)commitHash timestamp:(UInt32)timestamp; /** * Creates a PBFirmwareVersion object given its components. * @discussion The tag string will be set to the canonical format vOS.MINOR.MAJOR(-SUFFIX). */ + (PBFirmwareVersion*)firmwareVersionWithOS:(NSInteger)os major:(NSInteger)major minor:(NSInteger)minor suffix:(NSString*)suffix commitHash:(NSString*)commitHash timestamp:(UInt32)timestamp; /** * Compares the receiver to another version object. * @param aVersion The version to compare with the receiver. * @return NSOrderedAscending if the value of aVersion is greater than the receiver’s, * NSOrderedSame if they’re equal, and NSOrderedDescending if the value of aVersion is less than the receiver’s. */ - (NSComparisonResult)compare:(PBFirmwareVersion *)aVersion; /** * Convenience wrappers around -compare: */ - (BOOL)isEqualOrNewer:(PBFirmwareVersion *)other; - (BOOL)isNewer:(PBFirmwareVersion *)other; - (BOOL)isEqualVersionOnly:(PBFirmwareVersion *)other; @end /** * Values specifying the Pebble hardware platform variant. */ typedef enum { FirmwareMetadataPlatformUnknown = 0, FirmwareMetadataPlatformPebbleOneEV1 = 1, FirmwareMetadataPlatformPebbleOneEV2 = 2, FirmwareMetadataPlatformPebbleOneEV2_3 = 3, FirmwareMetadataPlatformPebbleOneEV2_4 = 4, FirmwareMetadataPlatformPebbleOnePointFive = 5, FirmwareMetadataPlatformPebbleTwoPointZero = 6, FirmwareMetadataPlatformPebbleOneBigboard = 0xff, FirmwareMetadataPlatformPebbleOneBigboard2 = 0xfe, } FirmwareMetadataPlatform; /** * Instances of PBFirmwareMetadata describe a firmware in terms of * its version, whether it is a recovery firmware and its intended hardware * platform. * @see PBVersionInfo */ @interface PBFirmwareMetadata : NSObject /** * The version of the firmware. * @see PBFirmwareVersion */ @property (nonatomic, readonly) PBFirmwareVersion *version; /** * YES if the firmware is a recovery firmware, NO if it is a regular firmware. */ @property (nonatomic, readonly) BOOL isRecoveryFirmware; /** * The hardware platform variant with which the firmware is compatible. */ @property (nonatomic, readonly) FirmwareMetadataPlatform hardwarePlatform; /** * Converts a value to a string. * @param hardwarePlatform The hardware platform value to convert * @return A string of the hardware platform */ + (NSString*)hardwarePlatformToString:(FirmwareMetadataPlatform)hardwarePlatform; /** * Converts an NSString hardware platform string to the corresponding * FirmwareMetadataPlatform value. * @param hardwarePlatformString The string representing the hardware platform. * @return The hardware platform enum value */ + (FirmwareMetadataPlatform)stringToHardwarePlatform:(NSString *)hardwarePlatformString; @end /** * Instances of PBResourceMetadata describe (system) resources. * @see PBVersionInfo */ @interface PBResourceMetadata : NSObject /** * The version of the resources as the Epoch timestamp of the Git commit. */ @property (nonatomic, readonly) UInt32 timestamp; /** * The checksum of the resources. */ @property (nonatomic, readonly) UInt32 crc; /** * The human-friendly string version of the resources. */ @property (nonatomic, readonly, strong) NSString *friendlyVersion; /** * YES if the metadata represents valid resources, NO if it does not. */ - (BOOL)isValid; @end /** * An instance of PBVersionInfo describes all the different system software (Pebble OS) * on a Pebble watch and other auxiliary information. * @see PBWatch */ @interface PBVersionInfo : NSObject /** * The metadata of the firmware that is running. */ @property (nonatomic, readonly, strong) PBFirmwareMetadata *runningFirmwareMetadata; /** * The metadata of the recovery firmware that is in storage. */ @property (nonatomic, readonly, strong) PBFirmwareMetadata *recoveryFirmwareMetadata; /** * The metadata of the system resources. */ @property (nonatomic, readonly, strong) PBResourceMetadata *systemResources; /** * The version of the bootloader. */ @property (nonatomic, readonly) UInt32 bootloaderVersion; /** * The version of the hardware. */ @property (nonatomic, readonly, strong) NSString *hardwareVersion; /** * The serial number. */ @property (nonatomic, readonly, strong) NSString *serialNumber; /** * The current Bluetooth device address. */ @property (nonatomic, readonly, strong) NSData *deviceAddress; /** * YES if valid recovery firmware is installed, NO if not. */ - (BOOL)hasRecoveryFirmware; /** * YES if valid system resources are installed, NO if not. */ - (BOOL)hasSystemResources; @end @interface PBWatch (Version) /** * Requests the version info from the receiver. * @param handler The handler that will be called when the version info response has been received. * @param onTimeout The handler that will be called if the watch did not respond within 5 seconds. * @param watch The watch for which the version info was requested. * @param versionInfo The version info response. * @discussion The response will be cached. The latest version info can be * accessed through the property of . */ - (void)getVersionInfo:(void (^)(PBWatch *watch, PBVersionInfo *versionInfo))handler onTimeout:(void (^)(PBWatch *watch))onTimeout; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PBWatch.h ================================================ // // PBWatch.h // PebbleSDK-iOS // // Created by Martijn Thé on 4/24/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import @protocol PBWatchDelegate; @class PBVersionInfo; @class PBDataLoggingService; /** * Represents a Pebble watch. * * On iOS, there is the notion of a "communication session" between an app and * the Pebble watch. You can imagine this as a "data pipe" directly from the * watch to your app. However, there is only one session for 3rd party apps. * This one session has to be shared among all 3rd party apps that want to * communicate with Pebble (excluding the official Pebble iOS app). * * Unfortunately, the session can only be opened from the phone app. This means * that the iOS app has to start talking to the watch first to open the * communications channel; the other way around is not possible. * Most methods in the PBWatch categories (Ping), (Version), (Sports), (Golf) * and (AppMessages) all implicitly open the shared communication session. * * Lastly, iOS provides no good way to manage how the one shared session is * accessed or used. Simply, the last iOS app to try to open it, wins and gets * to use it. Therefore, it is important that your iOS app does **not** try * communicate when a Pebble is connected. * * When the user has stopped using your app (e.g. when going to the background * or when explicitely stopping a certain activity in the app) your iOS app * should close the communication session using the -closeSession: method. */ @interface PBWatch : NSObject /** * YES if the receiver is connected and NO if the receiver is disconnected. * @discussion This property is KVO-compliant. */ @property (nonatomic, readonly, getter=isConnected) BOOL connected; /** * The human-friendly name of the receiver. * This is the same name as the user will see in the iOS Bluetooth Settings. */ @property (nonatomic, readonly) NSString *name; /** * The serial number of the receiver. */ @property (nonatomic, readonly) NSString *serialNumber; /** * The versionInfo of the receiver. * @see PBVersionInfo */ @property (nonatomic, readonly) PBVersionInfo *versionInfo; /** * The delegate of the watch that will be notified of disconnections and errors. * @see PBWatchDelegate */ @property (nonatomic, readwrite, weak) id delegate; /** * The userInfo property can be used to associate application specific data * with the watch. Note that the application itself is responsible for persisting * the information if neccessary. */ @property (nonatomic, readwrite, strong) id userInfo; /** * The date when the watch was last known to be connected. * This date will be updated automatically when the watch connects and * disconnects. While the watch is being connected, this date will not be updated. */ @property (nonatomic, readonly) NSDate *lastConnectedDate; /** * Developer-friendly debugging description of the watch. * @return localized, user-friendly summary of the receiver, including * software and hardware version information, if available. */ - (NSString*)friendlyDescription; /** * Closes the communication session with the watch. * Since there is only one, shared session for all 3rd party iOS apps, * an app should close the session after the user is done using the app/watch-integration, * so it can be used by other apps. * The communication session is implicitely opened automatically when needed. * @param onDone Callback block that will be called after the closing of the session * has completed. If there is no open session, the onDone block will (also) be executed * asynchronously on the calling queue. */ - (void)closeSession:(void(^)(void))onDone; @end @protocol PBWatchDelegate @optional /** * Called when the watch got disconnected. */ - (void)watchDidDisconnect:(PBWatch*)watch; /** * Called when the watch caught an error. */ - (void)watch:(PBWatch*)watch handleError:(NSError*)error; /** * Called when the internal EASession is about to be reset. */ - (void)watchWillResetSession:(PBWatch*)watch; /** * Called when the internal EASession is opened */ - (void)watchDidOpenSession:(PBWatch*)watch; /** * Called when the internal EASession is closed */ - (void)watchDidCloseSession:(PBWatch*)watch; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/PebbleKit.h ================================================ // // PebbleSDK.h // PebbleSDK // // Created by Martijn Thé on 4/24/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import #import #import #import #import #import #import #import #import #import #import #import ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Headers/gtypes.h ================================================ // // gtypes.h // PebbleKit // // Created by Martijn The on 3/24/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #ifndef PebbleKit_gtypes_h #define PebbleKit_gtypes_h typedef struct GSize { int16_t w; int16_t h; } GSize; typedef struct GPoint { int16_t x; int16_t y; } GPoint; typedef struct GRect { GPoint origin; GSize size; } GRect; #endif ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/NSDictionary+Pebble.h ================================================ // // NSDictionary+Pebble.h // PebbleKit // // Created by Martijn The on 3/20/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import @interface NSDictionary (Pebble) /** * Serializes the receiver into a Pebble dict. * @note The receiver dictionary must comply to the following constraints: * * The keys must be instances of NSNumber. Their -unsignedLongValue return value will be used as final key. * * The values must be instances of either NSString, NSData or NSNumber. Use the NSNumber (stdint) category * to specify the signedness and width of NSNumbers. * @param error[out] Pointer to an NSError that will be set after the method has returned * in case there was an error. Possible error codes: PBErrorCodeDictionaryUnsupportedKeyClass, * PBErrorCodeDictionaryUnsupportedValueClass or PBErrorCodeDictionaryUnsupportedValueClass. * @see -dictionaryFromPebbleDictionaryDataWithError: */ - (NSData*)pebbleDictionaryData:(NSError * __autoreleasing *)error; @end @interface NSData (Pebble) /** * Interprets the receiver as Pebble dict data and deserializes it into an NSDictionary. * @param error[out] Pointer to an NSError that will be set after the method has returned * in case there was an error. Possible error codes: PBErrorCodeDictionaryInternalConsistency. * @see -pebbleDictionaryData: */ - (NSDictionary*)dictionaryFromPebbleDictionaryDataWithError:(NSError * __autoreleasing *)error; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/NSNumber+stdint.h ================================================ // // NSNumber+stdint.h // PebbleKit // // Created by Martijn The on 3/20/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import /** * This category exposes the capabilities the underlying CFNumber to explicitely * store the signedness and the width of the storage. */ @interface NSNumber (stdint) /** * Interprets the receiver as a 32-bits wide, unsigned integer. */ - (uint32_t)uint32Value; /** * Interprets the receiver as a 16-bits wide, unsigned integer. */ - (uint16_t)uint16Value; /** * Interprets the receiver as a 8-bits wide, unsigned integer. */ - (uint8_t)uint8Value; /** * Interprets the receiver as a 32-bits wide, signed integer. */ - (int32_t)int32Value; /** * Interprets the receiver as a 16-bits wide, signed integer. */ - (int16_t)int16Value; /** * Interprets the receiver as a 8-bits wide, signed integer. */ - (int8_t)int8Value; /** * Creates an NSNumber with a 32-bits wide, unsigned integer. */ + (NSNumber *)numberWithUint32:(uint32_t)value; /** * Creates an NSNumber with a 16-bits wide, unsigned integer. */ + (NSNumber *)numberWithUint16:(uint16_t)value; /** * Creates an NSNumber with a 8-bits wide, unsigned integer. */ + (NSNumber *)numberWithUint8:(uint8_t)value; /** * Creates an NSNumber with a 32-bits wide, signed integer. */ + (NSNumber *)numberWithInt32:(int32_t)value; /** * Creates an NSNumber with a 16-bits wide, signed integer. */ + (NSNumber *)numberWithInt16:(int16_t)value; /** * Creates an NSNumber with a 8-bits wide, signed integer. */ + (NSNumber *)numberWithInt8:(int8_t)value; /** * Gets whether the number that is stored by the receiver should be interpreted * as a floating pointer number or not. */ - (BOOL)isFloat; /** * Gets whether the number that is stored by the receiver should be interpreted * as a signed integer or not. */ - (BOOL)isSigned; /** * Gets the width in bytes of the integer that is stored by the receiver. */ - (uint8_t)width; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBBitmap.h ================================================ // // PBBitmap.h // PebbleKit // // Created by Martijn The on 3/24/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import #import #import /** * Helper class to convert a UIImage to Pebble bitmap pixel data and GBitmap metadata. * Refer to the documentation of Pebble's native watch app SDK on the GBitmap format. */ @interface PBBitmap : NSObject /** * The pixel data of the bitmap. * This corresponds to the data as pointed to by GBitmap's `addr` field. */ @property (nonatomic, readonly, strong) NSData *pixelData; /** * The number of bytes per row. * Always a multiple of 4 bytes. */ @property (nonatomic, readonly, assign) uint16_t rowSizeBytes; /** * Bitfield of metadata flags. * This corresponds to GBitmap's `info_flags` field. */ @property (nonatomic, readonly, assign) uint16_t infoFlags; /** * The box of bits inside `pixelData`, that contains * the actual image data to use. * This corresponds to GBitmap's `bounds` field. */ @property (nonatomic, readonly, assign) GRect bounds; /** * Factory method to create a PBBitmap from a UIImage instance. * @param image The UIImage from which to create the PBBitmap */ + (PBBitmap*)pebbleBitmapWithUIImage:(UIImage*)image; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBDataLoggingService.h ================================================ // // PBDataLoggingService.h // PebbleKit // // Created by Martijn The on 7/19/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import /** * Data logging datatypes. */ enum { //! Array of bytes PBDataLoggingTypeByteArray = 0, //! unsigned integer PBDataLoggingTypeUInt = 2, //! signed integer PBDataLoggingTypeInt = 3, }; typedef UInt8 PBDataLoggingType; /** * The metadata of a data logging session. Used to identify a session. */ @interface PBDataLoggingSessionMetadata : NSObject /** * A tag associated with the session. */ @property (nonatomic, readonly) UInt32 tag; /** * The timestamp of the moment the session was created by the watchapp. */ @property (nonatomic, readonly) UInt32 timestamp; /** * The type of data stored in this session. */ @property (nonatomic, readonly) PBDataLoggingType type; /** * The size of a data item. */ @property (nonatomic, readonly) UInt16 itemSize; /** * The serial number of the watch that created the sessions. */ @property (nonatomic, readonly) NSString *serialNumber; /** * Creates a new data logging session metadata object, given all its property values. * This method is provided to create a metadata object that can be used to * compare it with a metadata object that is passed into one of the * PBDataLoggingServiceDelegate methods. * @param tag The tag associated with the session * @param timestamp The timestamp of the creation of the session * @param type The type of data stored in the session * @param itemSize The size of a data item * @param serialNumber The serial number of the watch that created the session * @return A session metadata object with the specified information */ + (id)metadataWithTag:(UInt32)tag timestamp:(UInt32)timestamp type:(PBDataLoggingType)type itemSize:(UInt16)itemSize serialNumber:(NSString *)serialNumber; /** * Tests the equality of two data logging session metadata objects. * This method can be used to compare two session metadata objects * to check whether they are referring to the same session or not. * @param sessionMetadata * @return YES if all the property values of receiver are equal to the property * values of the given session. * @note Equivalent to -[PBDataLoggingSessionMetadata isEqual:] */ - (BOOL)isEqualToDataLoggingSessionMetadata:(PBDataLoggingSessionMetadata *)sessionMetadata; @end /** * Data logging delegate protocol. The object that implements this protocol * is responsible for handling incoming data. */ @protocol PBDataLoggingServiceDelegate @optional /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param bytes Pointer to the array of bytes. * The array contains (numberOfItems * session.itemSize) bytes. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasByteArrays:(const UInt8 * const)bytes numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of UInt8`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt8s:(const UInt8[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of UInt16`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt16s:(const UInt16[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of UInt32`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt32s:(const UInt32[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of SInt8`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasSInt8s:(const SInt8[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of SInt16`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasSInt16s:(const SInt16[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of SInt32`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasSInt32s:(const SInt32[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time a session is finished. * This is guaranteed to be called only after all data has been received and * consumed by the application. * @param service The data logging service. * @param session The metadata of the session. */ - (void)dataLoggingService:(PBDataLoggingService *)service sessionDidFinish:(PBDataLoggingSessionMetadata *)session; @end /** * The data logging service. Assign a delegate object in order to receive * data from your watchapp. */ @interface PBDataLoggingService : NSObject /** * The delegate that has the responsility of handling callbacks from the * data logging service. */ @property (atomic, readwrite, weak) id delegate; /** * Sets the queue on which delegate methods will be executed. * Callbacks are intended to be processed in the order as they come in, so it * you must use a serial queue. If set to nil (default) the main queue is used. * @param delegateQueue The queue on which the delegate methods will be executed. */ - (void)setDelegateQueue:(dispatch_queue_t)delegateQueue; /** * Query the watch for data logging data. */ - (void)pollForData; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBErrors.h ================================================ // // PBErrors.h // PebbleSDK // // Created by Martijn The on 7/26/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import extern NSString *PBErrorDomain; /** * PebbleKit Error codes. * Inspect the localizedDescription of any NSError objects for a description. */ typedef enum { PBErrorCodeNoSupportedProtocolsInInfoPlist, PBErrorCodeErrorCreatingSession, PBErrorCodeOutputStreamError, PBErrorCodeInputStreamError, PBErrorCodeSendMessageTimeout, PBErrorCodeEndpointDisallowed, PBErrorCodeVersionInfoTimeout, PBErrorCodeCannotCreateSessionWhileClosing, PBErrorCodeNoAppUUID, PBErrorCodeAppMessageRejected, PBErrorCodeAppMessageAckTimeout, PBErrorCodeDictionaryUnsupportedKeyClass, PBErrorCodeDictionaryUnsupportedValueClass, PBErrorCodeDictionaryInternalConsistency, PBErrorCodeInvalidArguments, PBErrorCodePebbleAppUnreachable, PBErrorCodePebbleAppRequestTimeout, PBErrorCodePebbleAppEmptyResponse, PBErrorCodePebbleAppUnexpectedResponse, PBErrorCodeServerNotAvailable, PBErrorCodeDownloadFailed, PBErrorCodePebbleNotConnected } PBErrorCode; @interface NSError (Pebble) /** * Convenience method to create an NSError object with error domain * and a given PBErrorCode and with an underlying NSError object. * @param code The error code for which to create the error * @param error The underlying error */ + (NSError*)pebbleErrorWithCode:(PBErrorCode)code underLyingError:(NSError*)error; /** * Convenience method to create an NSError object with error domain * and a given PBErrorCode. * @param code The error code for which to create the error */ + (NSError*)pebbleErrorWithCode:(PBErrorCode)code; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBLog.h ================================================ // // PBLog.h // PebbleApp // // Created by Martijn The on 11/29/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import "DDLog.h" #ifndef PBWSLOG_CONTEXT #define PBWSLOG_CONTEXT 1 #endif extern int PBLogLevel; #define LogError(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_ERROR, PBLogLevel, LOG_FLAG_ERROR, 0, frmt, ##__VA_ARGS__) #define LogWarn(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_WARN, PBLogLevel, LOG_FLAG_WARN, 0, frmt, ##__VA_ARGS__) #define LogInfo(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_INFO, PBLogLevel, LOG_FLAG_INFO, 0, frmt, ##__VA_ARGS__) #define LogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, PBLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__) #define WSLogError(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_ERROR, PBLogLevel, LOG_FLAG_ERROR, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define WSLogWarn(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_WARN, PBLogLevel, LOG_FLAG_WARN, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define WSLogInfo(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_INFO, PBLogLevel, LOG_FLAG_INFO, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define WSLogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, PBLogLevel, LOG_FLAG_VERBOSE, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define LogCError(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_ERROR, PBLogLevel, LOG_FLAG_ERROR, 0, frmt, ##__VA_ARGS__) #define LogCWarn(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_WARN, PBLogLevel, LOG_FLAG_WARN, 0, frmt, ##__VA_ARGS__) #define LogCInfo(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_INFO, PBLogLevel, LOG_FLAG_INFO, 0, frmt, ##__VA_ARGS__) #define LogCVerbose(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_VERBOSE, PBLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__) ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBPebbleCentral.h ================================================ // // PBPebbleCentral.h // PebbleSDK-iOS // // Created by Martijn Thé on 4/24/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import @class PBWatch; @class PBDataLoggingService; @protocol PBPebbleCentralDelegate; /** PebbleCentral plays the central role for client iOS apps (e.g. RunKeeper). */ @interface PBPebbleCentral : NSObject /** @returns The default central singleton instance. */ + (PBPebbleCentral*)defaultCentral; /** * Enables debug logs. The logs will be routed to the system log (ASL) and * console. It is advised to call this before making any other calls to PebbleKit. */ + (void)setDebugLogsEnabled:(BOOL)logsEnabled; /** The watches that are currently connected. Do not cache the array because it can change over time. */ @property (nonatomic, readonly, strong) NSArray *connectedWatches; /** The watches that are stored in the user preferences of the application. */ @property (nonatomic, readonly, strong) NSArray *registeredWatches; /** The central's delegate. */ @property (nonatomic, readwrite, weak) id delegate; /** * The UUID is used as the identifier of the watch application and is used * to make sure that appMessage and dataLogging communications arrives at its companion app * on the other device (and not in another app). * For most app message methods there is are two variants: one that does not take a UUID parameter and one that does take * a UUID parameter (for example, -appMessagesAddReceiveUpdateHandler: vs appMessagesAddReceiveUpdateHandler:withUUID:). * The methods that do not take a UUID, will use the UUID as set prior to this property. * @param uuid The 16 byte UUID of your app. * @note The UUID needs to be set before using either app message or data logging. */ @property (nonatomic, strong, readwrite) NSData *appUUID; /** * Verifies the currently set application UUID. * @return YES if the currently set UUID is valid, NO if it is not. * @see -setAppUuid: */ - (BOOL)hasValidAppUUID; /** @returns YES if the Pebble iOS app is installed, NO if it is not installed. */ - (BOOL)isMobileAppInstalled; /** Redirects to Pebble in the App Store, so the user can install the app. */ - (void)installMobileApp; /** Wipes out the data associated with the registered watches, that is stored on the phone. */ - (void)unregisterAllWatches; /** Returns the most recently connected watch from the -registeredWatches array. */ - (PBWatch*)lastConnectedWatch; @property (nonatomic, readonly) PBDataLoggingService *dataLoggingService; @end @protocol PBPebbleCentralDelegate @optional /** @param central The Pebble Central responsible for calling the delegate method. @param watch The PBWatch object representing the watch that was connected. @param isNew YES if the watch has been connected for the first time since the app has been installed or NO if not. */ - (void)pebbleCentral:(PBPebbleCentral*)central watchDidConnect:(PBWatch*)watch isNew:(BOOL)isNew; /** @param central The Pebble Central responsible for calling the delegate method. @param watch The PBWatch object representing the watch that was disconnected. */ - (void)pebbleCentral:(PBPebbleCentral*)central watchDidDisconnect:(PBWatch*)watch; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBWatch+AppMessages.h ================================================ // // PBWatch+AppMessages.h // PebbleKit // // Created by Martijn The on 3/20/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import typedef NS_ENUM(UInt8, PBAppState) { PBAppStateNotRunning = 0x00, PBAppStateRunning = 0x01, }; @interface PBWatch (AppMessages) /** * Queries the watch whether AppMessages are supported. * @param fetchedBlock The block that will be called whenthe inquiry has finished. The fetchedBlock will be called * asynchronously on the queue that was originally used when calling this method. * @param watch The watch on which the query was performed. * @param isAppMessagesSupported YES if AppMessages are supported, NO if not. */ - (void)appMessagesGetIsSupported:(void(^)(PBWatch *watch, BOOL isAppMessagesSupported))fetchedBlock; /** * Pushes an update to the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param dictionary Contains the key/value pairs to update. The dictionary can only contain items with an NSNumber * key and only contain NSString, NSNumber or NSData values. Use the methods in the NSNumber (stdint) category to * create NSNumbers with specific types standard integer types. * @param onSent The block that will be called when the message was accepted, rejected or timed out. * @param watch The watch to which the update was sent. * @param update The dictionary that was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. */ - (void)appMessagesPushUpdate:(NSDictionary*)dictionary onSent:(void(^)(PBWatch *watch, NSDictionary *update, NSError *error))onSent; /** * Pushes an update to the watch application with the specified UUID. * @param dictionary Contains the key/value pairs to update. The dictionary can only contain items with an NSNumber * key and only contain NSString, NSNumber or NSData values. Use the methods in the NSNumber (stdint) category to * create NSNumbers with specific types standard integer types. * @param onSent The block that will be called when the message was accepted, rejected or timed out. * @param watch The watch to which the update was sent. * @param update The dictionary that was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. * @param uuid The UUID of the watchapp to which the update should be sent. */ - (void)appMessagesPushUpdate:(NSDictionary*)dictionary withUUID:(NSData*)uuid onSent:(void(^)(PBWatch *watch, NSDictionary *update, NSError *error))onSent; /** * Add a receive handler for incoming updates that are send by the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param update The dictionary containing the values sent by the watch. * @return An opaque handle object representing the installed receive handler, that can be used in -appMessagesRemoveUpdateHandler: * @see -appMessagesRemoveUpdateHandler: */ - (id)appMessagesAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, NSDictionary *update))onReceive; /** * Add a receive handler for incoming updates that are send by the watch application with the specified UUID. * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param update The dictionary containing the values sent by the watch. * @param uuid The UUID of the watchapp for which sent messages should be handled by the onReceive block. * @return An opaque handle object representing the installed receive handler, that can be used in -appMessagesRemoveUpdateHandler: * @see -appMessagesRemoveUpdateHandler: */ - (id)appMessagesAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, NSDictionary *update))onReceive withUUID:(NSData*)uuid; /** * Add a handler for lifecycle events of watch applications. * @param onLifecycleUpdate This block will be called when an application starts and * stops running. * @param watch The watch that has sent the event. * @param uuid The uuid of the application that caused the event. * @param newAppState The new state of the app (either PBAppStateNotRunning or PBAppStateRunning). */ - (id)appMessagesAddAppLifecycleUpdateHandler:(void(^)(PBWatch *watch, NSUUID *uuid, PBAppState newAppState))onLifecycleUpdate; // INTERNAL USE ONLY - (id)appMessagesAddReceiveAllUpdatesHandler:(BOOL(^)(PBWatch *watch, NSUUID *uuid, NSDictionary *update))onReceive; /** * Removes a receive handler that was previously installed using -appMessagesAddReceiveUpdateHandler: * @param opaqueHandle The handle object as returned by -appMessagesAddReceiveUpdateHandler: * @see -appMessagesAddReceiveUpdateHandler: */ - (void)appMessagesRemoveUpdateHandler:(id)opaqueHandle; /** * Fetches the run state of the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:]. You can use this method to determine whether the watch * application is running or not. * TODO: Ask Francois how this API works. * @param onSent The block that will be called after the fetch state command has been * sent to the watch. */ - (void)appMessagesFetchAppState:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends a command to launch the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param onSent The block that will be called after the launch command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. */ - (void)appMessagesLaunch:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends a command to launch the watch application with the specified UUID. * @param onSent The block that will be called after the launch command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. * @param uuid The UUID of the watch application to launch. */ - (void)appMessagesLaunch:(void(^)(PBWatch *watch, NSError *error))onSent withUUID:(NSData*)uuid; /** * Sends a command to kill the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param onSent The block that will be called after the kill command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. */ - (void)appMessagesKill:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends a command to kill the watch application with the specified UUID. * @param onSent The block that will be called after the kill command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. * @param uuid The UUID of the watch application to launch. */ - (void)appMessagesKill:(void(^)(PBWatch *watch, NSError *error))onSent withUUID:(NSData*)uuid; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBWatch+Golf.h ================================================ // // PBWatch+Golf.h // PebbleKit // // Created by Martijn The on 4/4/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import #import @interface PBWatch (Golf) /** * The UUID of the Golf watch app. */ extern NSData *PBGolfUUID; /** * The key of the "Front" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfFrontKey; /** * The key of the "Mid" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfMidKey; /** * The key of the "Back" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfBackKey; /** * The key of the "Hole" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfHoleKey; /** * The key of the "Par" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfParKey; /** * The command IDs that can be sent back by the Golf watch app. * @see -golfAppAddReceiveUpdateHandler: */ typedef enum { GolfAppCommandPrevious = 0x01, GolfAppCommandNext = 0x02, GolfAppCommandSelect = 0x03, } GolfAppCommand; /** * Queries the watch whether Golf Messages are supported. * @param fetchedBlock The block that will be called whenthe inquiry has finished. The fetchedBlock will be called * asynchronously on the queue that was originally used when calling this method. * @param watch The watch on which the query was performed. * @param isGolfSupported YES if Golf Messages are supported, NO if not. */ - (void)golfGetIsSupported:(void(^)(PBWatch *watch, BOOL isGolfSupported))fetchedBlock; /** * Send a command to launch the golf app on the watch that the receiver represents. * @param onSent The handler that will be called when the launch command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)golfAppLaunch:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to kill the golf app on the watch that the receiver represents. * @param onSent The handler that will be called when the kill command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)golfAppKill:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends an update to the golf app on the watch that the receiver represents. * @param update The update to send. Use one or more keys (PBGolfFrontKey, PBGolfMidKey, PBGolfBackKey, PBGolfHoleKey, PBGolfParKey) * note that the value for each key MUST be of NSString type. * @param onSent The handler that will be called when the update has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. * @see PBGolfFrontKey, PBGolfMidKey, PBGolfBackKey, PBGolfHoleKey and PBGolfParKey */ - (void)golfAppUpdate:(NSDictionary*)update onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Add a receive handler for incoming Golf updates that are send by the Golf watch application. * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param command The command as sent by the watch. * @return An opaque handle object representing the installed receive handler, that can be used in -golfAppRemoveUpdateHandler: * @see GolfAppCommand * @see -golfAppRemoveUpdateHandler: */ - (id)golfAppAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, GolfAppCommand command))onReceive; /** * Removes a receive handler that was previously installed using -golfAppAddReceiveUpdateHandler: * @param opaqueHandle The handle object as returned by -golfAppAddReceiveUpdateHandler: * @see -golfAppAddReceiveUpdateHandler: */ - (void)golfAppRemoveUpdateHandler:(id)opaqueHandle; /** * Assigns a custom title and icon to the golf app on the watch. * @discussion It is recommended to perform this as the first call after -golfGetIsSupported: * to avoid changing the title and icon while it is being displayed in the menu as to avoid confusion. * @param title The custom title (max. 20 bytes of UTF-8 string) * @param icon The custom icon (max. 32x32 pixels, black/white only) * @param onSent The handler that will be called when the title and icon have been set or timed out. * @param watch The watch on which the custom title and icon have been set. * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)golfSetTitle:(NSString*)title icon:(UIImage*)icon onSent:(void(^)(PBWatch *watch, NSError *error))onSent; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBWatch+Ping.h ================================================ // // PBWatch+Ping.h // PebbleKit // // Created by Martijn The on 9/14/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import @interface PBWatch (Ping) /** * Sends a ping to the watch. * @param cookie A number identifying the ping. * @param onPong The block handler that will be called when the "pong" reply from the watch has been received. * @param watch The watch that sent the "pong" reply, which is "self". It is passed in to avoid retain loops. * @param cookie The cookie that was initially passed when calling this method. * @param onTimeout The block handler that will be called when the watch failed to reply in time. */ - (void)pingWithCookie:(UInt32)cookie onPong:(void(^)(PBWatch *watch, UInt32 cookie))onPong onTimeout:(void(^)(PBWatch *watch, UInt32 cookie))onTimeout; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBWatch+PollServices.h ================================================ // // PBWatch+PollServices.h // PebblePrivateKit // // Created by Martijn The on 2/7/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import /** * PollServiceType */ enum { PBPollRemoteServiceMail = 0, PBPollRemoteServiceDataLogging = 1, PBNumPollRemoteServices }; typedef UInt8 PBPollRemoteServiceType; @interface PBWatch (PollServices) // Call this upon connect with the watch to add handlers: - (id)addPollServicesHandler:(void(^)(PBWatch *))handler forService:(PBPollRemoteServiceType)service interval:(UInt8)interval; - (void)sendPollRequestForService:(PBPollRemoteServiceType)service; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBWatch+Sports.h ================================================ // // PBWatch+Sports.h // PebbleKit // // Created by Martijn The on 2/7/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import #import /** * The UUID of the Sports watch app. */ extern NSData *PBSportsUUID; /** * The key of the "Time" field. * The accompanying value must be an NSString (max. ~8 characters). * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsTimeKey; /** * The key of the "Distance" field. * The value must be an NSString (max. ~5 characters). * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsDistanceKey; /** * The key of the general purpose "Data" field. * The value must be an NSString (max. ~5 characters). * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsDataKey; /** * The key of the "Activity State". * The value must be an NSNumber created using +[NSNumber numberWithUint8:]. * @see SportsAppActivityState for valid values to use * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsActivityStateKey; /** * Instances of this convenience class represent an update of the current time, distance and pace, * and has a method to convert the values into a dictionary that can be used with -sportsAppUpdate:onSent:. * @see -sportsAppUpdate:onSent: */ @interface PBSportsUpdate : NSObject /** * The current time in seconds. The possible range is currently limited from -7140. to 7140., inclusive. (±1h 59min 59sec). */ @property (nonatomic, readwrite, assign) NSTimeInterval time; /** * The current distance in km or mi. The possible range is currently limited from -99.9 to 99.9, inclusive. * The unit of distance is dependent on the current unit setting. * @see -sportsAppSetMetric:onSent: */ @property (nonatomic, readwrite, assign) float distance; /** * General purpose data variable. The possible range is currently limited from -99.99 to 99.99, inclusive. * @see -sportsAppSetMetric:onSent: */ @property (nonatomic, readwrite, assign) float data; /** * Convenience method to create an update object. */ + (PBSportsUpdate*)updateWithTime:(NSTimeInterval)time distance:(float)distance data:(float)data; /** * Creates an update dictionary from the receiver, that can be used with -sportsAppUpdate:onSent:. * @see -sportsAppUpdate:onSent: */ - (NSDictionary*)dictionary; /** * Creates a formatted time string with from a total seconds value, formatted as "h:mm:ss". * For example, supplying the value 3930.0f seconds will return @"1:05:30" * @param seconds The number of seconds from which to create the time string. * @return Formatted time as "h:mm:ss" */ + (NSString*)timeStringFromFloat:(float)seconds; @end @interface PBWatch (Sports) /** * The state of the Sports activity. * @see -sportsAppAddReceiveUpdateHandler: */ typedef enum { SportsAppActivityStateInit = 0x00, SportsAppActivityStateRunning = 0x01, SportsAppActivityStatePaused = 0x02, SportsAppActivityStateEnd = 0x03, } SportsAppActivityState; /** * Queries the watch whether Sports Messages are supported. * @param fetchedBlock The block that will be called whenthe inquiry has finished. The fetchedBlock will be called * asynchronously on the queue that was originally used when calling this method. * @param watch The watch on which the query was performed. * @param isSportsSupported YES if Sports Messages are supported, NO if not. */ - (void)sportsGetIsSupported:(void(^)(PBWatch *watch, BOOL isSportsSupported))fetchedBlock; /** * Send a command to launch the sports app on the watch that the receiver represents. * @param onSent The handler that will be called when the launch command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppLaunch:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to kill the sports app on the watch that the receiver represents. * @param onSent The handler that will be called when the kill command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppKill:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to the sports app on the watch that the receiver represents, to set the preferred * unit system, either metric or imperial. * @param isMetric YES to request metric units or NO to request imperial units * @param onSent The handler that will be called when the unit command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppSetMetric:(BOOL)isMetric onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to the sports app on the watch that the receiver represents, * to set the preferred data label (either PACE or SPEED) and corresponding units. * @param isMetric YES to request metric units or NO to request imperial units * @param onSent The handler that will be called when the unit command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppSetLabel:(BOOL)isPace onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to the sports app on the watch that the receiver represents, to set the state of the * sports activity. Currently only SportsAppActivityStateRunning and SportsAppActivityStatePaused are * supported. * @param state The new sports activity state * @param onSent The handler that will be called when the unit command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppSetActivityState:(SportsAppActivityState)state onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends the update to the sports app on the watch that the receiver represents. * @param update The update to send. Use one or more keys (PBSportsTimeKey, PBSportsPaceKey, PBSportsDistanceKey) * note that the value for each key MUST be of NSString type. * @param onSent The handler that will be called when the update has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppUpdate:(NSDictionary*)update onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Add a receive handler for incoming Sports updates that are send by the Sports watch application. * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param state The new sports activity state as set by the watch. * @return An opaque handle object representing the installed receive handler, that can be used in -sportsAppRemoveUpdateHandler: * @see SportsAppActivityState * @see -sportsAppRemoveUpdateHandler: */ - (id)sportsAppAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, SportsAppActivityState state))onReceive; /** * Removes a receive handler that was previously installed using -sportsAppAddReceiveUpdateHandler: * @param opaqueHandle The handle object as returned by -sportsAppAddReceiveUpdateHandler: * @see -sportsAppAddReceiveUpdateHandler: */ - (void)sportsAppRemoveUpdateHandler:(id)opaqueHandle; /** * Assigns a custom title and icon to the sports app on the watch. * @discussion It is recommended to perform this as the first call after -sportsGetIsSupported: * to avoid changing the title and icon while it is being displayed in the menu as to avoid confusion. * @param title The custom title (max. 20 bytes of UTF-8 string) * @param icon The custom icon (max. 32x32 pixels, black/white only) * @param onSent The handler that will be called when the title and icon have been set or timed out. * @param watch The watch on which the custom title and icon have been set. * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsSetTitle:(NSString*)title icon:(UIImage*)icon onSent:(void(^)(PBWatch *watch, NSError *error))onSent; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBWatch+Version.h ================================================ // // PBWatch+Version.h // PebbleKit // // Created by Martijn The on 9/17/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import /** * PBFirmwareVersion is a helper class that is able to parse the versionTag string * into its components (os, major, minor, suffix) and facilitate comparisons * between versions. * Valid versions follow the following format: * `vOS(.MAJOR(.MINOR(-SUFFIX)))` * Where the fields OS, MAJOR, MINOR are positive, decimal integer numbers and SUFFIX * an arbitrary string. MAJOR, MINOR and SUFFIX are optional (nested optionality). * Examples of valid versions: * `v1` * `v2.1234.99-alpha-beta-gamma` */ @interface PBFirmwareVersion : NSObject /** * The OS version component. */ @property (nonatomic, readonly) NSInteger os; /** * The major version component. * @note If a version tag string does not contain a major component, it will be set to 0. */ @property (nonatomic, readonly) NSInteger major; /** * The minor version component. * @note If a version tag string does not contain a major component, it will be set to 0. */ @property (nonatomic, readonly) NSInteger minor; /** * The release suffix, which is the part following the dash '-'. * @note If a version tag string does not contain a suffix, it will be set to an empty string. * @discussion The release suffix is not used in the -compare: method. */ @property (nonatomic, readonly, copy) NSString *suffix; /** * The version timestamp. * @note The timestamp is in the final comparison equation, in the -compare: method, after evaluating * os, major and minor components. */ @property (nonatomic, readonly) UInt32 timestamp; /** * The version's git commit hash. * @discussion The commit hash is not used in the -compare: method. */ @property (nonatomic, readonly, copy) NSString *commitHash; /** * The version's git tag. */ @property (nonatomic, readonly, copy) NSString *tag; /** * Creates a PBFirmwareVersion object given a tag string and timestamp. */ + (PBFirmwareVersion*)firmwareVersionWithTag:(NSString*)tag commitHash:(NSString*)commitHash timestamp:(UInt32)timestamp; /** * Creates a PBFirmwareVersion object given its components. * @discussion The tag string will be set to the canonical format vOS.MINOR.MAJOR(-SUFFIX). */ + (PBFirmwareVersion*)firmwareVersionWithOS:(NSInteger)os major:(NSInteger)major minor:(NSInteger)minor suffix:(NSString*)suffix commitHash:(NSString*)commitHash timestamp:(UInt32)timestamp; /** * Compares the receiver to another version object. * @param aVersion The version to compare with the receiver. * @return NSOrderedAscending if the value of aVersion is greater than the receiver’s, * NSOrderedSame if they’re equal, and NSOrderedDescending if the value of aVersion is less than the receiver’s. */ - (NSComparisonResult)compare:(PBFirmwareVersion *)aVersion; /** * Convenience wrappers around -compare: */ - (BOOL)isEqualOrNewer:(PBFirmwareVersion *)other; - (BOOL)isNewer:(PBFirmwareVersion *)other; - (BOOL)isEqualVersionOnly:(PBFirmwareVersion *)other; @end /** * Values specifying the Pebble hardware platform variant. */ typedef enum { FirmwareMetadataPlatformUnknown = 0, FirmwareMetadataPlatformPebbleOneEV1 = 1, FirmwareMetadataPlatformPebbleOneEV2 = 2, FirmwareMetadataPlatformPebbleOneEV2_3 = 3, FirmwareMetadataPlatformPebbleOneEV2_4 = 4, FirmwareMetadataPlatformPebbleOnePointFive = 5, FirmwareMetadataPlatformPebbleTwoPointZero = 6, FirmwareMetadataPlatformPebbleOneBigboard = 0xff, FirmwareMetadataPlatformPebbleOneBigboard2 = 0xfe, } FirmwareMetadataPlatform; /** * Instances of PBFirmwareMetadata describe a firmware in terms of * its version, whether it is a recovery firmware and its intended hardware * platform. * @see PBVersionInfo */ @interface PBFirmwareMetadata : NSObject /** * The version of the firmware. * @see PBFirmwareVersion */ @property (nonatomic, readonly) PBFirmwareVersion *version; /** * YES if the firmware is a recovery firmware, NO if it is a regular firmware. */ @property (nonatomic, readonly) BOOL isRecoveryFirmware; /** * The hardware platform variant with which the firmware is compatible. */ @property (nonatomic, readonly) FirmwareMetadataPlatform hardwarePlatform; /** * Converts a value to a string. * @param hardwarePlatform The hardware platform value to convert * @return A string of the hardware platform */ + (NSString*)hardwarePlatformToString:(FirmwareMetadataPlatform)hardwarePlatform; /** * Converts an NSString hardware platform string to the corresponding * FirmwareMetadataPlatform value. * @param hardwarePlatformString The string representing the hardware platform. * @return The hardware platform enum value */ + (FirmwareMetadataPlatform)stringToHardwarePlatform:(NSString *)hardwarePlatformString; @end /** * Instances of PBResourceMetadata describe (system) resources. * @see PBVersionInfo */ @interface PBResourceMetadata : NSObject /** * The version of the resources as the Epoch timestamp of the Git commit. */ @property (nonatomic, readonly) UInt32 timestamp; /** * The checksum of the resources. */ @property (nonatomic, readonly) UInt32 crc; /** * The human-friendly string version of the resources. */ @property (nonatomic, readonly, strong) NSString *friendlyVersion; /** * YES if the metadata represents valid resources, NO if it does not. */ - (BOOL)isValid; @end /** * An instance of PBVersionInfo describes all the different system software (Pebble OS) * on a Pebble watch and other auxiliary information. * @see PBWatch */ @interface PBVersionInfo : NSObject /** * The metadata of the firmware that is running. */ @property (nonatomic, readonly, strong) PBFirmwareMetadata *runningFirmwareMetadata; /** * The metadata of the recovery firmware that is in storage. */ @property (nonatomic, readonly, strong) PBFirmwareMetadata *recoveryFirmwareMetadata; /** * The metadata of the system resources. */ @property (nonatomic, readonly, strong) PBResourceMetadata *systemResources; /** * The version of the bootloader. */ @property (nonatomic, readonly) UInt32 bootloaderVersion; /** * The version of the hardware. */ @property (nonatomic, readonly, strong) NSString *hardwareVersion; /** * The serial number. */ @property (nonatomic, readonly, strong) NSString *serialNumber; /** * The current Bluetooth device address. */ @property (nonatomic, readonly, strong) NSData *deviceAddress; /** * YES if valid recovery firmware is installed, NO if not. */ - (BOOL)hasRecoveryFirmware; /** * YES if valid system resources are installed, NO if not. */ - (BOOL)hasSystemResources; @end @interface PBWatch (Version) /** * Requests the version info from the receiver. * @param handler The handler that will be called when the version info response has been received. * @param onTimeout The handler that will be called if the watch did not respond within 5 seconds. * @param watch The watch for which the version info was requested. * @param versionInfo The version info response. * @discussion The response will be cached. The latest version info can be * accessed through the property of . */ - (void)getVersionInfo:(void (^)(PBWatch *watch, PBVersionInfo *versionInfo))handler onTimeout:(void (^)(PBWatch *watch))onTimeout; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PBWatch.h ================================================ // // PBWatch.h // PebbleSDK-iOS // // Created by Martijn Thé on 4/24/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import @protocol PBWatchDelegate; @class PBVersionInfo; @class PBDataLoggingService; /** * Represents a Pebble watch. * * On iOS, there is the notion of a "communication session" between an app and * the Pebble watch. You can imagine this as a "data pipe" directly from the * watch to your app. However, there is only one session for 3rd party apps. * This one session has to be shared among all 3rd party apps that want to * communicate with Pebble (excluding the official Pebble iOS app). * * Unfortunately, the session can only be opened from the phone app. This means * that the iOS app has to start talking to the watch first to open the * communications channel; the other way around is not possible. * Most methods in the PBWatch categories (Ping), (Version), (Sports), (Golf) * and (AppMessages) all implicitly open the shared communication session. * * Lastly, iOS provides no good way to manage how the one shared session is * accessed or used. Simply, the last iOS app to try to open it, wins and gets * to use it. Therefore, it is important that your iOS app does **not** try * communicate when a Pebble is connected. * * When the user has stopped using your app (e.g. when going to the background * or when explicitely stopping a certain activity in the app) your iOS app * should close the communication session using the -closeSession: method. */ @interface PBWatch : NSObject /** * YES if the receiver is connected and NO if the receiver is disconnected. * @discussion This property is KVO-compliant. */ @property (nonatomic, readonly, getter=isConnected) BOOL connected; /** * The human-friendly name of the receiver. * This is the same name as the user will see in the iOS Bluetooth Settings. */ @property (nonatomic, readonly) NSString *name; /** * The serial number of the receiver. */ @property (nonatomic, readonly) NSString *serialNumber; /** * The versionInfo of the receiver. * @see PBVersionInfo */ @property (nonatomic, readonly) PBVersionInfo *versionInfo; /** * The delegate of the watch that will be notified of disconnections and errors. * @see PBWatchDelegate */ @property (nonatomic, readwrite, weak) id delegate; /** * The userInfo property can be used to associate application specific data * with the watch. Note that the application itself is responsible for persisting * the information if neccessary. */ @property (nonatomic, readwrite, strong) id userInfo; /** * The date when the watch was last known to be connected. * This date will be updated automatically when the watch connects and * disconnects. While the watch is being connected, this date will not be updated. */ @property (nonatomic, readonly) NSDate *lastConnectedDate; /** * Developer-friendly debugging description of the watch. * @return localized, user-friendly summary of the receiver, including * software and hardware version information, if available. */ - (NSString*)friendlyDescription; /** * Closes the communication session with the watch. * Since there is only one, shared session for all 3rd party iOS apps, * an app should close the session after the user is done using the app/watch-integration, * so it can be used by other apps. * The communication session is implicitely opened automatically when needed. * @param onDone Callback block that will be called after the closing of the session * has completed. If there is no open session, the onDone block will (also) be executed * asynchronously on the calling queue. */ - (void)closeSession:(void(^)(void))onDone; @end @protocol PBWatchDelegate @optional /** * Called when the watch got disconnected. */ - (void)watchDidDisconnect:(PBWatch*)watch; /** * Called when the watch caught an error. */ - (void)watch:(PBWatch*)watch handleError:(NSError*)error; /** * Called when the internal EASession is about to be reset. */ - (void)watchWillResetSession:(PBWatch*)watch; /** * Called when the internal EASession is opened */ - (void)watchDidOpenSession:(PBWatch*)watch; /** * Called when the internal EASession is closed */ - (void)watchDidCloseSession:(PBWatch*)watch; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/PebbleKit.h ================================================ // // PebbleSDK.h // PebbleSDK // // Created by Martijn Thé on 4/24/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import #import #import #import #import #import #import #import #import #import #import #import ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/A/Headers/gtypes.h ================================================ // // gtypes.h // PebbleKit // // Created by Martijn The on 3/24/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #ifndef PebbleKit_gtypes_h #define PebbleKit_gtypes_h typedef struct GSize { int16_t w; int16_t h; } GSize; typedef struct GPoint { int16_t x; int16_t y; } GPoint; typedef struct GRect { GPoint origin; GSize size; } GRect; #endif ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/NSDictionary+Pebble.h ================================================ // // NSDictionary+Pebble.h // PebbleKit // // Created by Martijn The on 3/20/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import @interface NSDictionary (Pebble) /** * Serializes the receiver into a Pebble dict. * @note The receiver dictionary must comply to the following constraints: * * The keys must be instances of NSNumber. Their -unsignedLongValue return value will be used as final key. * * The values must be instances of either NSString, NSData or NSNumber. Use the NSNumber (stdint) category * to specify the signedness and width of NSNumbers. * @param error[out] Pointer to an NSError that will be set after the method has returned * in case there was an error. Possible error codes: PBErrorCodeDictionaryUnsupportedKeyClass, * PBErrorCodeDictionaryUnsupportedValueClass or PBErrorCodeDictionaryUnsupportedValueClass. * @see -dictionaryFromPebbleDictionaryDataWithError: */ - (NSData*)pebbleDictionaryData:(NSError * __autoreleasing *)error; @end @interface NSData (Pebble) /** * Interprets the receiver as Pebble dict data and deserializes it into an NSDictionary. * @param error[out] Pointer to an NSError that will be set after the method has returned * in case there was an error. Possible error codes: PBErrorCodeDictionaryInternalConsistency. * @see -pebbleDictionaryData: */ - (NSDictionary*)dictionaryFromPebbleDictionaryDataWithError:(NSError * __autoreleasing *)error; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/NSNumber+stdint.h ================================================ // // NSNumber+stdint.h // PebbleKit // // Created by Martijn The on 3/20/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import /** * This category exposes the capabilities the underlying CFNumber to explicitely * store the signedness and the width of the storage. */ @interface NSNumber (stdint) /** * Interprets the receiver as a 32-bits wide, unsigned integer. */ - (uint32_t)uint32Value; /** * Interprets the receiver as a 16-bits wide, unsigned integer. */ - (uint16_t)uint16Value; /** * Interprets the receiver as a 8-bits wide, unsigned integer. */ - (uint8_t)uint8Value; /** * Interprets the receiver as a 32-bits wide, signed integer. */ - (int32_t)int32Value; /** * Interprets the receiver as a 16-bits wide, signed integer. */ - (int16_t)int16Value; /** * Interprets the receiver as a 8-bits wide, signed integer. */ - (int8_t)int8Value; /** * Creates an NSNumber with a 32-bits wide, unsigned integer. */ + (NSNumber *)numberWithUint32:(uint32_t)value; /** * Creates an NSNumber with a 16-bits wide, unsigned integer. */ + (NSNumber *)numberWithUint16:(uint16_t)value; /** * Creates an NSNumber with a 8-bits wide, unsigned integer. */ + (NSNumber *)numberWithUint8:(uint8_t)value; /** * Creates an NSNumber with a 32-bits wide, signed integer. */ + (NSNumber *)numberWithInt32:(int32_t)value; /** * Creates an NSNumber with a 16-bits wide, signed integer. */ + (NSNumber *)numberWithInt16:(int16_t)value; /** * Creates an NSNumber with a 8-bits wide, signed integer. */ + (NSNumber *)numberWithInt8:(int8_t)value; /** * Gets whether the number that is stored by the receiver should be interpreted * as a floating pointer number or not. */ - (BOOL)isFloat; /** * Gets whether the number that is stored by the receiver should be interpreted * as a signed integer or not. */ - (BOOL)isSigned; /** * Gets the width in bytes of the integer that is stored by the receiver. */ - (uint8_t)width; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBBitmap.h ================================================ // // PBBitmap.h // PebbleKit // // Created by Martijn The on 3/24/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import #import #import /** * Helper class to convert a UIImage to Pebble bitmap pixel data and GBitmap metadata. * Refer to the documentation of Pebble's native watch app SDK on the GBitmap format. */ @interface PBBitmap : NSObject /** * The pixel data of the bitmap. * This corresponds to the data as pointed to by GBitmap's `addr` field. */ @property (nonatomic, readonly, strong) NSData *pixelData; /** * The number of bytes per row. * Always a multiple of 4 bytes. */ @property (nonatomic, readonly, assign) uint16_t rowSizeBytes; /** * Bitfield of metadata flags. * This corresponds to GBitmap's `info_flags` field. */ @property (nonatomic, readonly, assign) uint16_t infoFlags; /** * The box of bits inside `pixelData`, that contains * the actual image data to use. * This corresponds to GBitmap's `bounds` field. */ @property (nonatomic, readonly, assign) GRect bounds; /** * Factory method to create a PBBitmap from a UIImage instance. * @param image The UIImage from which to create the PBBitmap */ + (PBBitmap*)pebbleBitmapWithUIImage:(UIImage*)image; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBDataLoggingService.h ================================================ // // PBDataLoggingService.h // PebbleKit // // Created by Martijn The on 7/19/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import /** * Data logging datatypes. */ enum { //! Array of bytes PBDataLoggingTypeByteArray = 0, //! unsigned integer PBDataLoggingTypeUInt = 2, //! signed integer PBDataLoggingTypeInt = 3, }; typedef UInt8 PBDataLoggingType; /** * The metadata of a data logging session. Used to identify a session. */ @interface PBDataLoggingSessionMetadata : NSObject /** * A tag associated with the session. */ @property (nonatomic, readonly) UInt32 tag; /** * The timestamp of the moment the session was created by the watchapp. */ @property (nonatomic, readonly) UInt32 timestamp; /** * The type of data stored in this session. */ @property (nonatomic, readonly) PBDataLoggingType type; /** * The size of a data item. */ @property (nonatomic, readonly) UInt16 itemSize; /** * The serial number of the watch that created the sessions. */ @property (nonatomic, readonly) NSString *serialNumber; /** * Creates a new data logging session metadata object, given all its property values. * This method is provided to create a metadata object that can be used to * compare it with a metadata object that is passed into one of the * PBDataLoggingServiceDelegate methods. * @param tag The tag associated with the session * @param timestamp The timestamp of the creation of the session * @param type The type of data stored in the session * @param itemSize The size of a data item * @param serialNumber The serial number of the watch that created the session * @return A session metadata object with the specified information */ + (id)metadataWithTag:(UInt32)tag timestamp:(UInt32)timestamp type:(PBDataLoggingType)type itemSize:(UInt16)itemSize serialNumber:(NSString *)serialNumber; /** * Tests the equality of two data logging session metadata objects. * This method can be used to compare two session metadata objects * to check whether they are referring to the same session or not. * @param sessionMetadata * @return YES if all the property values of receiver are equal to the property * values of the given session. * @note Equivalent to -[PBDataLoggingSessionMetadata isEqual:] */ - (BOOL)isEqualToDataLoggingSessionMetadata:(PBDataLoggingSessionMetadata *)sessionMetadata; @end /** * Data logging delegate protocol. The object that implements this protocol * is responsible for handling incoming data. */ @protocol PBDataLoggingServiceDelegate @optional /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param bytes Pointer to the array of bytes. * The array contains (numberOfItems * session.itemSize) bytes. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasByteArrays:(const UInt8 * const)bytes numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of UInt8`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt8s:(const UInt8[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of UInt16`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt16s:(const UInt16[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of UInt32`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt32s:(const UInt32[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of SInt8`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasSInt8s:(const SInt8[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of SInt16`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasSInt16s:(const SInt16[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time there is data available that has not been * consumed yet. * @param service The data logging service. * @param data Pointer to the array of SInt32`s. * @param numberOfItems The number of items that the array contains. * @param session The metadata of the session. * @return YES if the data was consumed and the service can discard the data. * Return NO if the data was not be consumed after the method returned. * If NO is returned, the next time this callback is invoked for the session, the * data argument will (also) contain the data of the items of the previous * invocation of the callback. */ - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasSInt32s:(const SInt32[])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)session; /** * Called by the service every time a session is finished. * This is guaranteed to be called only after all data has been received and * consumed by the application. * @param service The data logging service. * @param session The metadata of the session. */ - (void)dataLoggingService:(PBDataLoggingService *)service sessionDidFinish:(PBDataLoggingSessionMetadata *)session; @end /** * The data logging service. Assign a delegate object in order to receive * data from your watchapp. */ @interface PBDataLoggingService : NSObject /** * The delegate that has the responsility of handling callbacks from the * data logging service. */ @property (atomic, readwrite, weak) id delegate; /** * Sets the queue on which delegate methods will be executed. * Callbacks are intended to be processed in the order as they come in, so it * you must use a serial queue. If set to nil (default) the main queue is used. * @param delegateQueue The queue on which the delegate methods will be executed. */ - (void)setDelegateQueue:(dispatch_queue_t)delegateQueue; /** * Query the watch for data logging data. */ - (void)pollForData; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBErrors.h ================================================ // // PBErrors.h // PebbleSDK // // Created by Martijn The on 7/26/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import extern NSString *PBErrorDomain; /** * PebbleKit Error codes. * Inspect the localizedDescription of any NSError objects for a description. */ typedef enum { PBErrorCodeNoSupportedProtocolsInInfoPlist, PBErrorCodeErrorCreatingSession, PBErrorCodeOutputStreamError, PBErrorCodeInputStreamError, PBErrorCodeSendMessageTimeout, PBErrorCodeEndpointDisallowed, PBErrorCodeVersionInfoTimeout, PBErrorCodeCannotCreateSessionWhileClosing, PBErrorCodeNoAppUUID, PBErrorCodeAppMessageRejected, PBErrorCodeAppMessageAckTimeout, PBErrorCodeDictionaryUnsupportedKeyClass, PBErrorCodeDictionaryUnsupportedValueClass, PBErrorCodeDictionaryInternalConsistency, PBErrorCodeInvalidArguments, PBErrorCodePebbleAppUnreachable, PBErrorCodePebbleAppRequestTimeout, PBErrorCodePebbleAppEmptyResponse, PBErrorCodePebbleAppUnexpectedResponse, PBErrorCodeServerNotAvailable, PBErrorCodeDownloadFailed, PBErrorCodePebbleNotConnected } PBErrorCode; @interface NSError (Pebble) /** * Convenience method to create an NSError object with error domain * and a given PBErrorCode and with an underlying NSError object. * @param code The error code for which to create the error * @param error The underlying error */ + (NSError*)pebbleErrorWithCode:(PBErrorCode)code underLyingError:(NSError*)error; /** * Convenience method to create an NSError object with error domain * and a given PBErrorCode. * @param code The error code for which to create the error */ + (NSError*)pebbleErrorWithCode:(PBErrorCode)code; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBLog.h ================================================ // // PBLog.h // PebbleApp // // Created by Martijn The on 11/29/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import "DDLog.h" #ifndef PBWSLOG_CONTEXT #define PBWSLOG_CONTEXT 1 #endif extern int PBLogLevel; #define LogError(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_ERROR, PBLogLevel, LOG_FLAG_ERROR, 0, frmt, ##__VA_ARGS__) #define LogWarn(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_WARN, PBLogLevel, LOG_FLAG_WARN, 0, frmt, ##__VA_ARGS__) #define LogInfo(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_INFO, PBLogLevel, LOG_FLAG_INFO, 0, frmt, ##__VA_ARGS__) #define LogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, PBLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__) #define WSLogError(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_ERROR, PBLogLevel, LOG_FLAG_ERROR, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define WSLogWarn(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_WARN, PBLogLevel, LOG_FLAG_WARN, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define WSLogInfo(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_INFO, PBLogLevel, LOG_FLAG_INFO, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define WSLogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, PBLogLevel, LOG_FLAG_VERBOSE, PBWSLOG_CONTEXT, frmt, ##__VA_ARGS__) #define LogCError(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_ERROR, PBLogLevel, LOG_FLAG_ERROR, 0, frmt, ##__VA_ARGS__) #define LogCWarn(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_WARN, PBLogLevel, LOG_FLAG_WARN, 0, frmt, ##__VA_ARGS__) #define LogCInfo(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_INFO, PBLogLevel, LOG_FLAG_INFO, 0, frmt, ##__VA_ARGS__) #define LogCVerbose(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_VERBOSE, PBLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__) ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBPebbleCentral.h ================================================ // // PBPebbleCentral.h // PebbleSDK-iOS // // Created by Martijn Thé on 4/24/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import @class PBWatch; @class PBDataLoggingService; @protocol PBPebbleCentralDelegate; /** PebbleCentral plays the central role for client iOS apps (e.g. RunKeeper). */ @interface PBPebbleCentral : NSObject /** @returns The default central singleton instance. */ + (PBPebbleCentral*)defaultCentral; /** * Enables debug logs. The logs will be routed to the system log (ASL) and * console. It is advised to call this before making any other calls to PebbleKit. */ + (void)setDebugLogsEnabled:(BOOL)logsEnabled; /** The watches that are currently connected. Do not cache the array because it can change over time. */ @property (nonatomic, readonly, strong) NSArray *connectedWatches; /** The watches that are stored in the user preferences of the application. */ @property (nonatomic, readonly, strong) NSArray *registeredWatches; /** The central's delegate. */ @property (nonatomic, readwrite, weak) id delegate; /** * The UUID is used as the identifier of the watch application and is used * to make sure that appMessage and dataLogging communications arrives at its companion app * on the other device (and not in another app). * For most app message methods there is are two variants: one that does not take a UUID parameter and one that does take * a UUID parameter (for example, -appMessagesAddReceiveUpdateHandler: vs appMessagesAddReceiveUpdateHandler:withUUID:). * The methods that do not take a UUID, will use the UUID as set prior to this property. * @param uuid The 16 byte UUID of your app. * @note The UUID needs to be set before using either app message or data logging. */ @property (nonatomic, strong, readwrite) NSData *appUUID; /** * Verifies the currently set application UUID. * @return YES if the currently set UUID is valid, NO if it is not. * @see -setAppUuid: */ - (BOOL)hasValidAppUUID; /** @returns YES if the Pebble iOS app is installed, NO if it is not installed. */ - (BOOL)isMobileAppInstalled; /** Redirects to Pebble in the App Store, so the user can install the app. */ - (void)installMobileApp; /** Wipes out the data associated with the registered watches, that is stored on the phone. */ - (void)unregisterAllWatches; /** Returns the most recently connected watch from the -registeredWatches array. */ - (PBWatch*)lastConnectedWatch; @property (nonatomic, readonly) PBDataLoggingService *dataLoggingService; @end @protocol PBPebbleCentralDelegate @optional /** @param central The Pebble Central responsible for calling the delegate method. @param watch The PBWatch object representing the watch that was connected. @param isNew YES if the watch has been connected for the first time since the app has been installed or NO if not. */ - (void)pebbleCentral:(PBPebbleCentral*)central watchDidConnect:(PBWatch*)watch isNew:(BOOL)isNew; /** @param central The Pebble Central responsible for calling the delegate method. @param watch The PBWatch object representing the watch that was disconnected. */ - (void)pebbleCentral:(PBPebbleCentral*)central watchDidDisconnect:(PBWatch*)watch; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBWatch+AppMessages.h ================================================ // // PBWatch+AppMessages.h // PebbleKit // // Created by Martijn The on 3/20/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import typedef NS_ENUM(UInt8, PBAppState) { PBAppStateNotRunning = 0x00, PBAppStateRunning = 0x01, }; @interface PBWatch (AppMessages) /** * Queries the watch whether AppMessages are supported. * @param fetchedBlock The block that will be called whenthe inquiry has finished. The fetchedBlock will be called * asynchronously on the queue that was originally used when calling this method. * @param watch The watch on which the query was performed. * @param isAppMessagesSupported YES if AppMessages are supported, NO if not. */ - (void)appMessagesGetIsSupported:(void(^)(PBWatch *watch, BOOL isAppMessagesSupported))fetchedBlock; /** * Pushes an update to the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param dictionary Contains the key/value pairs to update. The dictionary can only contain items with an NSNumber * key and only contain NSString, NSNumber or NSData values. Use the methods in the NSNumber (stdint) category to * create NSNumbers with specific types standard integer types. * @param onSent The block that will be called when the message was accepted, rejected or timed out. * @param watch The watch to which the update was sent. * @param update The dictionary that was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. */ - (void)appMessagesPushUpdate:(NSDictionary*)dictionary onSent:(void(^)(PBWatch *watch, NSDictionary *update, NSError *error))onSent; /** * Pushes an update to the watch application with the specified UUID. * @param dictionary Contains the key/value pairs to update. The dictionary can only contain items with an NSNumber * key and only contain NSString, NSNumber or NSData values. Use the methods in the NSNumber (stdint) category to * create NSNumbers with specific types standard integer types. * @param onSent The block that will be called when the message was accepted, rejected or timed out. * @param watch The watch to which the update was sent. * @param update The dictionary that was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. * @param uuid The UUID of the watchapp to which the update should be sent. */ - (void)appMessagesPushUpdate:(NSDictionary*)dictionary withUUID:(NSData*)uuid onSent:(void(^)(PBWatch *watch, NSDictionary *update, NSError *error))onSent; /** * Add a receive handler for incoming updates that are send by the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param update The dictionary containing the values sent by the watch. * @return An opaque handle object representing the installed receive handler, that can be used in -appMessagesRemoveUpdateHandler: * @see -appMessagesRemoveUpdateHandler: */ - (id)appMessagesAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, NSDictionary *update))onReceive; /** * Add a receive handler for incoming updates that are send by the watch application with the specified UUID. * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param update The dictionary containing the values sent by the watch. * @param uuid The UUID of the watchapp for which sent messages should be handled by the onReceive block. * @return An opaque handle object representing the installed receive handler, that can be used in -appMessagesRemoveUpdateHandler: * @see -appMessagesRemoveUpdateHandler: */ - (id)appMessagesAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, NSDictionary *update))onReceive withUUID:(NSData*)uuid; /** * Add a handler for lifecycle events of watch applications. * @param onLifecycleUpdate This block will be called when an application starts and * stops running. * @param watch The watch that has sent the event. * @param uuid The uuid of the application that caused the event. * @param newAppState The new state of the app (either PBAppStateNotRunning or PBAppStateRunning). */ - (id)appMessagesAddAppLifecycleUpdateHandler:(void(^)(PBWatch *watch, NSUUID *uuid, PBAppState newAppState))onLifecycleUpdate; // INTERNAL USE ONLY - (id)appMessagesAddReceiveAllUpdatesHandler:(BOOL(^)(PBWatch *watch, NSUUID *uuid, NSDictionary *update))onReceive; /** * Removes a receive handler that was previously installed using -appMessagesAddReceiveUpdateHandler: * @param opaqueHandle The handle object as returned by -appMessagesAddReceiveUpdateHandler: * @see -appMessagesAddReceiveUpdateHandler: */ - (void)appMessagesRemoveUpdateHandler:(id)opaqueHandle; /** * Fetches the run state of the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:]. You can use this method to determine whether the watch * application is running or not. * TODO: Ask Francois how this API works. * @param onSent The block that will be called after the fetch state command has been * sent to the watch. */ - (void)appMessagesFetchAppState:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends a command to launch the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param onSent The block that will be called after the launch command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. */ - (void)appMessagesLaunch:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends a command to launch the watch application with the specified UUID. * @param onSent The block that will be called after the launch command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. * @param uuid The UUID of the watch application to launch. */ - (void)appMessagesLaunch:(void(^)(PBWatch *watch, NSError *error))onSent withUUID:(NSData*)uuid; /** * Sends a command to kill the watch application with UUID as set using * -[PBPebbleCentral setAppUUID:] * @param onSent The block that will be called after the kill command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. */ - (void)appMessagesKill:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends a command to kill the watch application with the specified UUID. * @param onSent The block that will be called after the kill command has been * sent to the watch. * @param watch The watch to which the command was sent. * @param error If there was a problem, this will contain information about the underlying problem. See PBError.h for error codes. * @param uuid The UUID of the watch application to launch. */ - (void)appMessagesKill:(void(^)(PBWatch *watch, NSError *error))onSent withUUID:(NSData*)uuid; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBWatch+Golf.h ================================================ // // PBWatch+Golf.h // PebbleKit // // Created by Martijn The on 4/4/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import #import @interface PBWatch (Golf) /** * The UUID of the Golf watch app. */ extern NSData *PBGolfUUID; /** * The key of the "Front" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfFrontKey; /** * The key of the "Mid" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfMidKey; /** * The key of the "Back" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfBackKey; /** * The key of the "Hole" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfHoleKey; /** * The key of the "Par" field. * The accompanying value must be an NSString (max. ~5 characters). * @see -golfAppUpdate:onSent: */ extern NSNumber *PBGolfParKey; /** * The command IDs that can be sent back by the Golf watch app. * @see -golfAppAddReceiveUpdateHandler: */ typedef enum { GolfAppCommandPrevious = 0x01, GolfAppCommandNext = 0x02, GolfAppCommandSelect = 0x03, } GolfAppCommand; /** * Queries the watch whether Golf Messages are supported. * @param fetchedBlock The block that will be called whenthe inquiry has finished. The fetchedBlock will be called * asynchronously on the queue that was originally used when calling this method. * @param watch The watch on which the query was performed. * @param isGolfSupported YES if Golf Messages are supported, NO if not. */ - (void)golfGetIsSupported:(void(^)(PBWatch *watch, BOOL isGolfSupported))fetchedBlock; /** * Send a command to launch the golf app on the watch that the receiver represents. * @param onSent The handler that will be called when the launch command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)golfAppLaunch:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to kill the golf app on the watch that the receiver represents. * @param onSent The handler that will be called when the kill command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)golfAppKill:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends an update to the golf app on the watch that the receiver represents. * @param update The update to send. Use one or more keys (PBGolfFrontKey, PBGolfMidKey, PBGolfBackKey, PBGolfHoleKey, PBGolfParKey) * note that the value for each key MUST be of NSString type. * @param onSent The handler that will be called when the update has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. * @see PBGolfFrontKey, PBGolfMidKey, PBGolfBackKey, PBGolfHoleKey and PBGolfParKey */ - (void)golfAppUpdate:(NSDictionary*)update onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Add a receive handler for incoming Golf updates that are send by the Golf watch application. * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param command The command as sent by the watch. * @return An opaque handle object representing the installed receive handler, that can be used in -golfAppRemoveUpdateHandler: * @see GolfAppCommand * @see -golfAppRemoveUpdateHandler: */ - (id)golfAppAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, GolfAppCommand command))onReceive; /** * Removes a receive handler that was previously installed using -golfAppAddReceiveUpdateHandler: * @param opaqueHandle The handle object as returned by -golfAppAddReceiveUpdateHandler: * @see -golfAppAddReceiveUpdateHandler: */ - (void)golfAppRemoveUpdateHandler:(id)opaqueHandle; /** * Assigns a custom title and icon to the golf app on the watch. * @discussion It is recommended to perform this as the first call after -golfGetIsSupported: * to avoid changing the title and icon while it is being displayed in the menu as to avoid confusion. * @param title The custom title (max. 20 bytes of UTF-8 string) * @param icon The custom icon (max. 32x32 pixels, black/white only) * @param onSent The handler that will be called when the title and icon have been set or timed out. * @param watch The watch on which the custom title and icon have been set. * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)golfSetTitle:(NSString*)title icon:(UIImage*)icon onSent:(void(^)(PBWatch *watch, NSError *error))onSent; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBWatch+Ping.h ================================================ // // PBWatch+Ping.h // PebbleKit // // Created by Martijn The on 9/14/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import @interface PBWatch (Ping) /** * Sends a ping to the watch. * @param cookie A number identifying the ping. * @param onPong The block handler that will be called when the "pong" reply from the watch has been received. * @param watch The watch that sent the "pong" reply, which is "self". It is passed in to avoid retain loops. * @param cookie The cookie that was initially passed when calling this method. * @param onTimeout The block handler that will be called when the watch failed to reply in time. */ - (void)pingWithCookie:(UInt32)cookie onPong:(void(^)(PBWatch *watch, UInt32 cookie))onPong onTimeout:(void(^)(PBWatch *watch, UInt32 cookie))onTimeout; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBWatch+PollServices.h ================================================ // // PBWatch+PollServices.h // PebblePrivateKit // // Created by Martijn The on 2/7/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import /** * PollServiceType */ enum { PBPollRemoteServiceMail = 0, PBPollRemoteServiceDataLogging = 1, PBNumPollRemoteServices }; typedef UInt8 PBPollRemoteServiceType; @interface PBWatch (PollServices) // Call this upon connect with the watch to add handlers: - (id)addPollServicesHandler:(void(^)(PBWatch *))handler forService:(PBPollRemoteServiceType)service interval:(UInt8)interval; - (void)sendPollRequestForService:(PBPollRemoteServiceType)service; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBWatch+Sports.h ================================================ // // PBWatch+Sports.h // PebbleKit // // Created by Martijn The on 2/7/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #import #import /** * The UUID of the Sports watch app. */ extern NSData *PBSportsUUID; /** * The key of the "Time" field. * The accompanying value must be an NSString (max. ~8 characters). * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsTimeKey; /** * The key of the "Distance" field. * The value must be an NSString (max. ~5 characters). * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsDistanceKey; /** * The key of the general purpose "Data" field. * The value must be an NSString (max. ~5 characters). * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsDataKey; /** * The key of the "Activity State". * The value must be an NSNumber created using +[NSNumber numberWithUint8:]. * @see SportsAppActivityState for valid values to use * @see -sportsAppUpdate:onSent: * @see PBSportsUpdate */ extern NSNumber *PBSportsActivityStateKey; /** * Instances of this convenience class represent an update of the current time, distance and pace, * and has a method to convert the values into a dictionary that can be used with -sportsAppUpdate:onSent:. * @see -sportsAppUpdate:onSent: */ @interface PBSportsUpdate : NSObject /** * The current time in seconds. The possible range is currently limited from -7140. to 7140., inclusive. (±1h 59min 59sec). */ @property (nonatomic, readwrite, assign) NSTimeInterval time; /** * The current distance in km or mi. The possible range is currently limited from -99.9 to 99.9, inclusive. * The unit of distance is dependent on the current unit setting. * @see -sportsAppSetMetric:onSent: */ @property (nonatomic, readwrite, assign) float distance; /** * General purpose data variable. The possible range is currently limited from -99.99 to 99.99, inclusive. * @see -sportsAppSetMetric:onSent: */ @property (nonatomic, readwrite, assign) float data; /** * Convenience method to create an update object. */ + (PBSportsUpdate*)updateWithTime:(NSTimeInterval)time distance:(float)distance data:(float)data; /** * Creates an update dictionary from the receiver, that can be used with -sportsAppUpdate:onSent:. * @see -sportsAppUpdate:onSent: */ - (NSDictionary*)dictionary; /** * Creates a formatted time string with from a total seconds value, formatted as "h:mm:ss". * For example, supplying the value 3930.0f seconds will return @"1:05:30" * @param seconds The number of seconds from which to create the time string. * @return Formatted time as "h:mm:ss" */ + (NSString*)timeStringFromFloat:(float)seconds; @end @interface PBWatch (Sports) /** * The state of the Sports activity. * @see -sportsAppAddReceiveUpdateHandler: */ typedef enum { SportsAppActivityStateInit = 0x00, SportsAppActivityStateRunning = 0x01, SportsAppActivityStatePaused = 0x02, SportsAppActivityStateEnd = 0x03, } SportsAppActivityState; /** * Queries the watch whether Sports Messages are supported. * @param fetchedBlock The block that will be called whenthe inquiry has finished. The fetchedBlock will be called * asynchronously on the queue that was originally used when calling this method. * @param watch The watch on which the query was performed. * @param isSportsSupported YES if Sports Messages are supported, NO if not. */ - (void)sportsGetIsSupported:(void(^)(PBWatch *watch, BOOL isSportsSupported))fetchedBlock; /** * Send a command to launch the sports app on the watch that the receiver represents. * @param onSent The handler that will be called when the launch command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppLaunch:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to kill the sports app on the watch that the receiver represents. * @param onSent The handler that will be called when the kill command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppKill:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to the sports app on the watch that the receiver represents, to set the preferred * unit system, either metric or imperial. * @param isMetric YES to request metric units or NO to request imperial units * @param onSent The handler that will be called when the unit command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppSetMetric:(BOOL)isMetric onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to the sports app on the watch that the receiver represents, * to set the preferred data label (either PACE or SPEED) and corresponding units. * @param isMetric YES to request metric units or NO to request imperial units * @param onSent The handler that will be called when the unit command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppSetLabel:(BOOL)isPace onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Send a command to the sports app on the watch that the receiver represents, to set the state of the * sports activity. Currently only SportsAppActivityStateRunning and SportsAppActivityStatePaused are * supported. * @param state The new sports activity state * @param onSent The handler that will be called when the unit command has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppSetActivityState:(SportsAppActivityState)state onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Sends the update to the sports app on the watch that the receiver represents. * @param update The update to send. Use one or more keys (PBSportsTimeKey, PBSportsPaceKey, PBSportsDistanceKey) * note that the value for each key MUST be of NSString type. * @param onSent The handler that will be called when the update has been sent or timed out (after 1.5 secs). * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsAppUpdate:(NSDictionary*)update onSent:(void(^)(PBWatch *watch, NSError *error))onSent; /** * Add a receive handler for incoming Sports updates that are send by the Sports watch application. * @param onReceive The block that will be called every time a new update message arrives. * @param watch The watch that has sent the update. * @param state The new sports activity state as set by the watch. * @return An opaque handle object representing the installed receive handler, that can be used in -sportsAppRemoveUpdateHandler: * @see SportsAppActivityState * @see -sportsAppRemoveUpdateHandler: */ - (id)sportsAppAddReceiveUpdateHandler:(BOOL(^)(PBWatch *watch, SportsAppActivityState state))onReceive; /** * Removes a receive handler that was previously installed using -sportsAppAddReceiveUpdateHandler: * @param opaqueHandle The handle object as returned by -sportsAppAddReceiveUpdateHandler: * @see -sportsAppAddReceiveUpdateHandler: */ - (void)sportsAppRemoveUpdateHandler:(id)opaqueHandle; /** * Assigns a custom title and icon to the sports app on the watch. * @discussion It is recommended to perform this as the first call after -sportsGetIsSupported: * to avoid changing the title and icon while it is being displayed in the menu as to avoid confusion. * @param title The custom title (max. 20 bytes of UTF-8 string) * @param icon The custom icon (max. 32x32 pixels, black/white only) * @param onSent The handler that will be called when the title and icon have been set or timed out. * @param watch The watch on which the custom title and icon have been set. * @param error nil if the operation was successful, or else an NSError with more information why it failed. */ - (void)sportsSetTitle:(NSString*)title icon:(UIImage*)icon onSent:(void(^)(PBWatch *watch, NSError *error))onSent; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBWatch+Version.h ================================================ // // PBWatch+Version.h // PebbleKit // // Created by Martijn The on 9/17/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import /** * PBFirmwareVersion is a helper class that is able to parse the versionTag string * into its components (os, major, minor, suffix) and facilitate comparisons * between versions. * Valid versions follow the following format: * `vOS(.MAJOR(.MINOR(-SUFFIX)))` * Where the fields OS, MAJOR, MINOR are positive, decimal integer numbers and SUFFIX * an arbitrary string. MAJOR, MINOR and SUFFIX are optional (nested optionality). * Examples of valid versions: * `v1` * `v2.1234.99-alpha-beta-gamma` */ @interface PBFirmwareVersion : NSObject /** * The OS version component. */ @property (nonatomic, readonly) NSInteger os; /** * The major version component. * @note If a version tag string does not contain a major component, it will be set to 0. */ @property (nonatomic, readonly) NSInteger major; /** * The minor version component. * @note If a version tag string does not contain a major component, it will be set to 0. */ @property (nonatomic, readonly) NSInteger minor; /** * The release suffix, which is the part following the dash '-'. * @note If a version tag string does not contain a suffix, it will be set to an empty string. * @discussion The release suffix is not used in the -compare: method. */ @property (nonatomic, readonly, copy) NSString *suffix; /** * The version timestamp. * @note The timestamp is in the final comparison equation, in the -compare: method, after evaluating * os, major and minor components. */ @property (nonatomic, readonly) UInt32 timestamp; /** * The version's git commit hash. * @discussion The commit hash is not used in the -compare: method. */ @property (nonatomic, readonly, copy) NSString *commitHash; /** * The version's git tag. */ @property (nonatomic, readonly, copy) NSString *tag; /** * Creates a PBFirmwareVersion object given a tag string and timestamp. */ + (PBFirmwareVersion*)firmwareVersionWithTag:(NSString*)tag commitHash:(NSString*)commitHash timestamp:(UInt32)timestamp; /** * Creates a PBFirmwareVersion object given its components. * @discussion The tag string will be set to the canonical format vOS.MINOR.MAJOR(-SUFFIX). */ + (PBFirmwareVersion*)firmwareVersionWithOS:(NSInteger)os major:(NSInteger)major minor:(NSInteger)minor suffix:(NSString*)suffix commitHash:(NSString*)commitHash timestamp:(UInt32)timestamp; /** * Compares the receiver to another version object. * @param aVersion The version to compare with the receiver. * @return NSOrderedAscending if the value of aVersion is greater than the receiver’s, * NSOrderedSame if they’re equal, and NSOrderedDescending if the value of aVersion is less than the receiver’s. */ - (NSComparisonResult)compare:(PBFirmwareVersion *)aVersion; /** * Convenience wrappers around -compare: */ - (BOOL)isEqualOrNewer:(PBFirmwareVersion *)other; - (BOOL)isNewer:(PBFirmwareVersion *)other; - (BOOL)isEqualVersionOnly:(PBFirmwareVersion *)other; @end /** * Values specifying the Pebble hardware platform variant. */ typedef enum { FirmwareMetadataPlatformUnknown = 0, FirmwareMetadataPlatformPebbleOneEV1 = 1, FirmwareMetadataPlatformPebbleOneEV2 = 2, FirmwareMetadataPlatformPebbleOneEV2_3 = 3, FirmwareMetadataPlatformPebbleOneEV2_4 = 4, FirmwareMetadataPlatformPebbleOnePointFive = 5, FirmwareMetadataPlatformPebbleTwoPointZero = 6, FirmwareMetadataPlatformPebbleOneBigboard = 0xff, FirmwareMetadataPlatformPebbleOneBigboard2 = 0xfe, } FirmwareMetadataPlatform; /** * Instances of PBFirmwareMetadata describe a firmware in terms of * its version, whether it is a recovery firmware and its intended hardware * platform. * @see PBVersionInfo */ @interface PBFirmwareMetadata : NSObject /** * The version of the firmware. * @see PBFirmwareVersion */ @property (nonatomic, readonly) PBFirmwareVersion *version; /** * YES if the firmware is a recovery firmware, NO if it is a regular firmware. */ @property (nonatomic, readonly) BOOL isRecoveryFirmware; /** * The hardware platform variant with which the firmware is compatible. */ @property (nonatomic, readonly) FirmwareMetadataPlatform hardwarePlatform; /** * Converts a value to a string. * @param hardwarePlatform The hardware platform value to convert * @return A string of the hardware platform */ + (NSString*)hardwarePlatformToString:(FirmwareMetadataPlatform)hardwarePlatform; /** * Converts an NSString hardware platform string to the corresponding * FirmwareMetadataPlatform value. * @param hardwarePlatformString The string representing the hardware platform. * @return The hardware platform enum value */ + (FirmwareMetadataPlatform)stringToHardwarePlatform:(NSString *)hardwarePlatformString; @end /** * Instances of PBResourceMetadata describe (system) resources. * @see PBVersionInfo */ @interface PBResourceMetadata : NSObject /** * The version of the resources as the Epoch timestamp of the Git commit. */ @property (nonatomic, readonly) UInt32 timestamp; /** * The checksum of the resources. */ @property (nonatomic, readonly) UInt32 crc; /** * The human-friendly string version of the resources. */ @property (nonatomic, readonly, strong) NSString *friendlyVersion; /** * YES if the metadata represents valid resources, NO if it does not. */ - (BOOL)isValid; @end /** * An instance of PBVersionInfo describes all the different system software (Pebble OS) * on a Pebble watch and other auxiliary information. * @see PBWatch */ @interface PBVersionInfo : NSObject /** * The metadata of the firmware that is running. */ @property (nonatomic, readonly, strong) PBFirmwareMetadata *runningFirmwareMetadata; /** * The metadata of the recovery firmware that is in storage. */ @property (nonatomic, readonly, strong) PBFirmwareMetadata *recoveryFirmwareMetadata; /** * The metadata of the system resources. */ @property (nonatomic, readonly, strong) PBResourceMetadata *systemResources; /** * The version of the bootloader. */ @property (nonatomic, readonly) UInt32 bootloaderVersion; /** * The version of the hardware. */ @property (nonatomic, readonly, strong) NSString *hardwareVersion; /** * The serial number. */ @property (nonatomic, readonly, strong) NSString *serialNumber; /** * The current Bluetooth device address. */ @property (nonatomic, readonly, strong) NSData *deviceAddress; /** * YES if valid recovery firmware is installed, NO if not. */ - (BOOL)hasRecoveryFirmware; /** * YES if valid system resources are installed, NO if not. */ - (BOOL)hasSystemResources; @end @interface PBWatch (Version) /** * Requests the version info from the receiver. * @param handler The handler that will be called when the version info response has been received. * @param onTimeout The handler that will be called if the watch did not respond within 5 seconds. * @param watch The watch for which the version info was requested. * @param versionInfo The version info response. * @discussion The response will be cached. The latest version info can be * accessed through the property of . */ - (void)getVersionInfo:(void (^)(PBWatch *watch, PBVersionInfo *versionInfo))handler onTimeout:(void (^)(PBWatch *watch))onTimeout; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PBWatch.h ================================================ // // PBWatch.h // PebbleSDK-iOS // // Created by Martijn Thé on 4/24/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import @protocol PBWatchDelegate; @class PBVersionInfo; @class PBDataLoggingService; /** * Represents a Pebble watch. * * On iOS, there is the notion of a "communication session" between an app and * the Pebble watch. You can imagine this as a "data pipe" directly from the * watch to your app. However, there is only one session for 3rd party apps. * This one session has to be shared among all 3rd party apps that want to * communicate with Pebble (excluding the official Pebble iOS app). * * Unfortunately, the session can only be opened from the phone app. This means * that the iOS app has to start talking to the watch first to open the * communications channel; the other way around is not possible. * Most methods in the PBWatch categories (Ping), (Version), (Sports), (Golf) * and (AppMessages) all implicitly open the shared communication session. * * Lastly, iOS provides no good way to manage how the one shared session is * accessed or used. Simply, the last iOS app to try to open it, wins and gets * to use it. Therefore, it is important that your iOS app does **not** try * communicate when a Pebble is connected. * * When the user has stopped using your app (e.g. when going to the background * or when explicitely stopping a certain activity in the app) your iOS app * should close the communication session using the -closeSession: method. */ @interface PBWatch : NSObject /** * YES if the receiver is connected and NO if the receiver is disconnected. * @discussion This property is KVO-compliant. */ @property (nonatomic, readonly, getter=isConnected) BOOL connected; /** * The human-friendly name of the receiver. * This is the same name as the user will see in the iOS Bluetooth Settings. */ @property (nonatomic, readonly) NSString *name; /** * The serial number of the receiver. */ @property (nonatomic, readonly) NSString *serialNumber; /** * The versionInfo of the receiver. * @see PBVersionInfo */ @property (nonatomic, readonly) PBVersionInfo *versionInfo; /** * The delegate of the watch that will be notified of disconnections and errors. * @see PBWatchDelegate */ @property (nonatomic, readwrite, weak) id delegate; /** * The userInfo property can be used to associate application specific data * with the watch. Note that the application itself is responsible for persisting * the information if neccessary. */ @property (nonatomic, readwrite, strong) id userInfo; /** * The date when the watch was last known to be connected. * This date will be updated automatically when the watch connects and * disconnects. While the watch is being connected, this date will not be updated. */ @property (nonatomic, readonly) NSDate *lastConnectedDate; /** * Developer-friendly debugging description of the watch. * @return localized, user-friendly summary of the receiver, including * software and hardware version information, if available. */ - (NSString*)friendlyDescription; /** * Closes the communication session with the watch. * Since there is only one, shared session for all 3rd party iOS apps, * an app should close the session after the user is done using the app/watch-integration, * so it can be used by other apps. * The communication session is implicitely opened automatically when needed. * @param onDone Callback block that will be called after the closing of the session * has completed. If there is no open session, the onDone block will (also) be executed * asynchronously on the calling queue. */ - (void)closeSession:(void(^)(void))onDone; @end @protocol PBWatchDelegate @optional /** * Called when the watch got disconnected. */ - (void)watchDidDisconnect:(PBWatch*)watch; /** * Called when the watch caught an error. */ - (void)watch:(PBWatch*)watch handleError:(NSError*)error; /** * Called when the internal EASession is about to be reset. */ - (void)watchWillResetSession:(PBWatch*)watch; /** * Called when the internal EASession is opened */ - (void)watchDidOpenSession:(PBWatch*)watch; /** * Called when the internal EASession is closed */ - (void)watchDidCloseSession:(PBWatch*)watch; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/PebbleKit.h ================================================ // // PebbleSDK.h // PebbleSDK // // Created by Martijn Thé on 4/24/12. // Copyright (c) 2012 Pebble Technology. All rights reserved. // #import #import #import #import #import #import #import #import #import #import #import #import ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleKit.framework/Versions/Current/Headers/gtypes.h ================================================ // // gtypes.h // PebbleKit // // Created by Martijn The on 3/24/13. // Copyright (c) 2013 Pebble Technology. All rights reserved. // #ifndef PebbleKit_gtypes_h #define PebbleKit_gtypes_h typedef struct GSize { int16_t w; int16_t h; } GSize; typedef struct GPoint { int16_t x; int16_t y; } GPoint; typedef struct GRect { GPoint origin; GSize size; } GRect; #endif ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleVendor.framework/Headers/CHMultiDictionary.h ================================================ /* CHDataStructures.framework -- CHMultiDictionary.h Copyright (c) 2008-2010, Quinn Taylor This source code is released under the ISC License. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. The software is provided "as is", without warranty of any kind, including all implied warranties of merchantability and fitness. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software. */ #import "CHMutableDictionary.h" /** @file CHMultiDictionary.h A multimap in which multiple values may be associated with a given key. */ /** A multimap implementation, in which multiple values may be associated with a given key. A map is the same as a "dictionary", "associative array", etc. and consists of a unique set of keys and a collection of values. In a standard map, each key is associated with one value; in a multimap, more than one value may be associated with a given key. A multimap is appropriate for any situation in which one item may correspond to (map to) multiple values, such as a term in an book index and occurrences of that term, courses for which a student is registered, etc. The values for a key may or may not be ordered. This implementation does not maintain an ordering for objects associated with a key, nor does it allow for multiple occurrences of an object associated with the same key. Internally, this class uses an NSMutableDictionary, and the associated values for each key are stored in distinct NSMutableSet instances. (Just as with NSDictionary, each key added to a CHMultiDictionary is copied using \link NSCopying#copyWithZone: -copyWithZone:\endlink and all keys must conform to the NSCopying protocol.) Objects are retained on insertion and released on removal or deallocation. Since NSDictionary and NSSet conform to the NSCoding protocol, any internal data can be serialized. However, NSSet cannot automatically be written to or read from a property list, since it has no specified order. Thus, instances of CHMultiDictionary must be encoded as an NSData object before saving to disk. Currently, this implementation does not support key-value coding, observing, or binding like NSDictionary does. Consequently, the distinction between "object" and "value" is blurrier, although hopefully consistent with the Cocoa APIs in general.... Unlike NSDictionary and other Cocoa collections, CHMultiDictionary has not been designed with mutable and immutable variants. A multimap is not that much more useful if it is immutable, so any copies made of this class are mutable by definition. */ @interface CHMultiDictionary : CHMutableDictionary { NSUInteger objectCount; // Number of objects currently in the dictionary. } #pragma mark Querying Contents /** Returns the number of objects in the receiver, associated with any key. @return The number of objects in the receiver. This is the sum total of objects associated with each key in the dictonary. @see allObjects */ - (NSUInteger) countForAllKeys; /** Returns the number of objects associated with a given key. @param aKey The key for which to return the object count. @return The number of objects associated with a given key in the dictionary. @see objectsForKey: */ - (NSUInteger) countForKey:(id)aKey; /** Returns an array of objects associated with a given key. @param aKey The key for which to return the corresponding objects. @return An NSSet of objects associated with a given key, or nil if the key is not in the receiver. @see countForKey: @see removeObjectsForKey: */ - (NSSet*) objectsForKey:(id)aKey; #pragma mark Modifying Contents /** Adds a given object to an entry for a given key in the receiver. @param aKey The key with which to associate @a anObject. @param anObject An object to add to an entry for @a aKey in the receiver. If an entry for @a aKey already exists in the receiver, @a anObject is added using \link NSMutableSet#addObject: -[NSMutableSet addObject:]\endlink, otherwise a new entry is created. @throw NSInvalidArgumentException if @a aKey or @a anObject is @c nil. @see addObjects:forKey: @see objectsForKey: @see removeObjectsForKey: @see setObjects:forKey: */ - (void) addObject:(id)anObject forKey:(id)aKey; /** Adds the given object(s) to a key entry in the receiver. @param aKey The key with which to associate @a anObject. @param objectSet A set of objects to add to an entry for @a aKey in the receiver. If an entry for @a aKey already exists in the receiver, @a anObject is added using \link NSMutableSet#unionSet: -[NSMutableSet unionSet:]\endlink, otherwise a new entry is created. @throw NSInvalidArgumentException if @a aKey or @a objectSet is @c nil. @see addObject:forKey: @see objectsForKey: @see removeObjectsForKey: @see setObjects:forKey: */ - (void) addObjects:(NSSet*)objectSet forKey:(id)aKey; /** Remove @b all occurrences of @a anObject associated with a given key. @param aKey The key for which to remove an entry. @param anObject An object (possibly) associated with @a aKey in the receiver. Objects are considered to be equal if -compare: returns NSOrderedSame. @throw NSInvalidArgumentException if @a aKey or @a anObject is @c nil. If @a aKey does not exist in the receiver, or if @a anObject is not associated with @a aKey, the contents of the receiver are not modified. @see containsObject @see objectsForKey: @see removeObjectsForKey: */ - (void) removeObject:(id)anObject forKey:(id)aKey; /** Remove a given key and its associated value(s) from the receiver. @param aKey The key for which to remove an entry. If @a aKey does not exist in the receiver, there is no effect on the receiver. @see objectsForKey: @see removeObject:forKey: */ - (void) removeObjectsForKey:(id)aKey; /** Sets the object(s) associated with a key entry in the receiver. @param aKey The key with which to associate the objects in @a objectSet. @param objectSet A set of objects to associate with @a key. If @a objectSet is empty, the contents of the receiver are not modified. If an entry for @a key already exists in the receiver, @a objectSet is added using \link NSMutableSet#setSet: -[NSMutableSet setSet:]\endlink, otherwise a new entry is created. @throw NSInvalidArgumentException if @a aKey or @a objectSet is @c nil. @see addObject:forKey: @see addObjects:forKey: @see objectsForKey: @see removeObjectsForKey: */ - (void) setObjects:(NSSet*)objectSet forKey:(id)aKey; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleVendor.framework/Headers/CHMutableDictionary.h ================================================ /* CHDataStructures.framework -- CHMutableDictionary.h Copyright (c) 2009-2010, Quinn Taylor This source code is released under the ISC License. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. The software is provided "as is", without warranty of any kind, including all implied warranties of merchantability and fitness. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software. */ __attribute__((visibility("hidden"))) void createCollectableCFMutableDictionary(CFMutableDictionaryRef* dictionary, NSUInteger initialCapacity); /** @file CHMutableDictionary.h A mutable dictionary class. */ /** A mutable dictionary class. A CFMutableDictionaryRef is used internally to store the key-value pairs. Subclasses may choose to add other instance variables to enable a specific ordering of keys, override methods to modify behavior, and add methods to extend existing behaviors. However, all subclasses should behave like a standard Cocoa dictionary as much as possible, and document clearly when they do not. @note Any method inherited from NSDictionary or NSMutableDictionary is supported by this class and its children. Please see the documentation for those classes for details. @todo Implement @c -copy and @c -mutableCopy differently (so users can actually obtain an immutable copy) and make mutation methods aware of immutability? */ @interface CHMutableDictionary : NSMutableDictionary { CFMutableDictionaryRef dictionary; // A Core Foundation dictionary. } - (id) initWithCapacity:(NSUInteger)numItems; - (NSUInteger) count; - (NSEnumerator*) keyEnumerator; - (id) objectForKey:(id)aKey; - (void) removeAllObjects; - (void) removeObjectForKey:(id)aKey; - (void) setObject:(id)anObject forKey:(id)aKey; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleVendor.framework/Headers/DDASLLogger.h ================================================ #import #import #import "DDLog.h" /** * Welcome to Cocoa Lumberjack! * * The project page has a wealth of documentation if you have any questions. * https://github.com/CocoaLumberjack/CocoaLumberjack * * If you're new to the project you may wish to read the "Getting Started" wiki. * https://github.com/CocoaLumberjack/CocoaLumberjack/wiki/GettingStarted * * * This class provides a logger for the Apple System Log facility. * * As described in the "Getting Started" page, * the traditional NSLog() function directs it's output to two places: * * - Apple System Log * - StdErr (if stderr is a TTY) so log statements show up in Xcode console * * To duplicate NSLog() functionality you can simply add this logger and a tty logger. * However, if you instead choose to use file logging (for faster performance), * you may choose to use a file logger and a tty logger. **/ @interface DDASLLogger : DDAbstractLogger { aslclient client; } + (instancetype)sharedInstance; // Inherited from DDAbstractLogger // - (id )logFormatter; // - (void)setLogFormatter:(id )formatter; @end ================================================ FILE: data-logging-demo/OceanSurveyDemo-iOS/Pods/PebbleKit/PebbleVendor.framework/Headers/DDFileLogger.h ================================================ #import #import "DDLog.h" @class DDLogFileInfo; /** * Welcome to Cocoa Lumberjack! * * The project page has a wealth of documentation if you have any questions. * https://github.com/CocoaLumberjack/CocoaLumberjack * * If you're new to the project you may wish to read the "Getting Started" wiki. * https://github.com/CocoaLumberjack/CocoaLumberjack/wiki/GettingStarted * * * This class provides a logger to write log statements to a file. **/ // Default configuration and safety/sanity values. // // maximumFileSize -> DEFAULT_LOG_MAX_FILE_SIZE // rollingFrequency -> DEFAULT_LOG_ROLLING_FREQUENCY // maximumNumberOfLogFiles -> DEFAULT_LOG_MAX_NUM_LOG_FILES // // You should carefully consider the proper configuration values for your application. #define DEFAULT_LOG_MAX_FILE_SIZE (1024 * 1024) // 1 MB #define DEFAULT_LOG_ROLLING_FREQUENCY (60 * 60 * 24) // 24 Hours #define DEFAULT_LOG_MAX_NUM_LOG_FILES (5) // 5 Files //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // The LogFileManager protocol is designed to allow you to control all aspects of your log files. // // The primary purpose of this is to allow you to do something with the log files after they have been rolled. // Perhaps you want to compress them to save disk space. // Perhaps you want to upload them to an FTP server. // Perhaps you want to run some analytics on the file. // // A default LogFileManager is, of course, provided. // The default LogFileManager simply deletes old log files according to the maximumNumberOfLogFiles property. // // This protocol provides various methods to fetch the list of log files. // // There are two variants: sorted and unsorted. // If sorting is not necessary, the unsorted variant is obviously faster. // The sorted variant will return an array sorted by when the log files were created, // with the most recently created log file at index 0, and the oldest log file at the end of the array. // // You can fetch only the log file paths (full path including name), log file names (name only), // or an array of DDLogFileInfo objects. // The DDLogFileInfo class is documented below, and provides a handy wrapper that // gives you easy access to various file attributes such as the creation date or the file size. @protocol DDLogFileManager @required // Public properties /** * The maximum number of archived log files to keep on disk. * For example, if this property is set to 3, * then the LogFileManager will only keep 3 archived log files (plus the current active log file) on disk. * Once the active log file is rolled/archived, then the oldest of the existing 3 rolled/archived log files is deleted. * * You may optionally disable deleting old/rolled/archived log files by setting this property to zero. **/ @property (readwrite, assign) NSUInteger maximumNumberOfLogFiles; // Public methods - (NSString *)logsDirectory; - (NSArray *)unsortedLogFilePaths; - (NSArray *)unsortedLogFileNames; - (NSArray *)unsortedLogFileInfos; - (NSArray *)sortedLogFilePaths; - (NSArray *)sortedLogFileNames; - (NSArray *)sortedLogFileInfos; // Private methods (only to be used by DDFileLogger) - (NSString *)createNewLogFile; @optional // Notifications from DDFileLogger - (void)didArchiveLogFile:(NSString *)logFilePath; - (void)didRollAndArchiveLogFile:(NSString *)logFilePath; @end //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * Default log file manager. * * All log files are placed inside the logsDirectory. * If a specific logsDirectory isn't specified, the default directory is used. * On Mac, this is in ~/Library/Logs/. * On iPhone, this is in ~/Library/Caches/Logs. * * Log files are named "