├── .gitignore ├── .idea ├── .gitignore ├── AndroidProjectSystem.xml ├── appInsightsSettings.xml ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── compiler.xml ├── deploymentTargetDropDown.xml ├── deploymentTargetSelector.xml ├── gradle.xml ├── inspectionProfiles │ └── Project_Default.xml ├── kotlinc.xml ├── migrations.xml ├── misc.xml ├── runConfigurations.xml └── vcs.xml ├── LICENSE ├── README.md ├── api ├── .gitignore ├── .idea │ ├── gradle.xml │ ├── misc.xml │ ├── vcs.xml │ └── workspace.xml ├── build.gradle ├── consumer-rules.pro ├── module.md ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── org │ │ └── avmedia │ │ └── gshockapi │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── org │ │ └── avmedia │ │ └── gshockapi │ │ ├── Alarm.kt │ │ ├── AppNotification.kt │ │ ├── Event.kt │ │ ├── EventDate.kt │ │ ├── EventPeriod.kt │ │ ├── GShockAPI.kt │ │ ├── GShockAPIMock.kt │ │ ├── IGShockAPI.kt │ │ ├── ProgressEvent.kt │ │ ├── Settings.kt │ │ ├── WatchInfo.kt │ │ ├── ble │ │ ├── Connection.kt │ │ ├── GShockScanner.kt │ │ ├── IDataReceived.kt │ │ └── IGShockManager.kt │ │ ├── casio │ │ ├── Alarms.kt │ │ ├── CasioConstants.kt │ │ ├── CasioTimeZoneHelper.kt │ │ ├── MessageDispatcher.kt │ │ └── ReminderMasks.kt │ │ ├── io │ │ ├── AlarmsIO.kt │ │ ├── AppInfoIO.kt │ │ ├── AppNotificationIO.kt │ │ ├── ButtonPressedIO.kt │ │ ├── CachedIO.kt │ │ ├── DstForWorldCitiesIO.kt │ │ ├── DstWatchStateIO.kt │ │ ├── ErrorIO.kt │ │ ├── EventsIO.kt │ │ ├── HomeTimeIO.kt │ │ ├── IO.kt │ │ ├── RunActionsIO.kt │ │ ├── SettingsIO.kt │ │ ├── TimeAdjustmentIO.kt │ │ ├── TimeIO.kt │ │ ├── TimerIO.kt │ │ ├── UnknownIO.kt │ │ ├── WaitForConnectionIO.kt │ │ ├── WatchConditionIO.kt │ │ ├── WatchNameIO.kt │ │ └── WorldCitiesIO.kt │ │ └── utils │ │ ├── Utils.kt │ │ └── WatchDataListener.kt │ └── test │ └── java │ └── org │ └── avmedia │ └── gshockapi │ └── ExampleUnitTest.kt ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── org │ │ └── avmedia │ │ └── gshock │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── org │ │ │ └── avmedia │ │ │ └── gshock │ │ │ ├── MainActivity.kt │ │ │ ├── PermissionManager.kt │ │ │ └── ui │ │ │ └── theme │ │ │ ├── Color.kt │ │ │ ├── Theme.kt │ │ │ └── Type.kt │ └── res │ │ ├── drawable │ │ ├── ic_launcher_background.xml │ │ └── ic_launcher_foreground.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── themes.xml │ │ └── xml │ │ ├── backup_rules.xml │ │ └── data_extraction_rules.xml │ └── test │ └── java │ └── org │ └── avmedia │ └── gshock │ └── ExampleUnitTest.kt ├── build.gradle.kts ├── docs ├── api │ ├── org.avmedia.gshockapi.apiIO │ │ ├── -alarms-i-o │ │ │ ├── -alarm-decoder │ │ │ │ ├── index.html │ │ │ │ └── to-json.html │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── send-to-watch.html │ │ │ ├── set.html │ │ │ └── to-json.html │ │ ├── -app-info-i-o │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -battery-level-i-o │ │ │ ├── -battery-level-decoder │ │ │ │ ├── decode-value.html │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -button-pressed-i-o │ │ │ ├── get.html │ │ │ ├── index.html │ │ │ ├── put.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -cached-i-o │ │ │ ├── cache.html │ │ │ ├── clear-cache.html │ │ │ ├── create-key.html │ │ │ ├── get.html │ │ │ ├── index.html │ │ │ ├── init.html │ │ │ ├── put.html │ │ │ ├── request.html │ │ │ ├── result-queue.html │ │ │ └── subscribe.html │ │ ├── -casio-i-o │ │ │ ├── -d-t-s_-s-t-a-t-e │ │ │ │ ├── -f-o-u-r │ │ │ │ │ └── index.html │ │ │ │ ├── -t-w-o │ │ │ │ │ └── index.html │ │ │ │ ├── -z-e-r-o │ │ │ │ │ └── index.html │ │ │ │ ├── index.html │ │ │ │ ├── state.html │ │ │ │ ├── value-of.html │ │ │ │ └── values.html │ │ │ ├── -w-a-t-c-h_-b-u-t-t-o-n │ │ │ │ ├── -i-n-v-a-l-i-d │ │ │ │ │ └── index.html │ │ │ │ ├── -l-o-w-e-r_-l-e-f-t │ │ │ │ │ └── index.html │ │ │ │ ├── -l-o-w-e-r_-r-i-g-h-t │ │ │ │ │ └── index.html │ │ │ │ ├── -n-o_-b-u-t-t-o-n │ │ │ │ │ └── index.html │ │ │ │ ├── -u-p-p-e-r_-l-e-f-t │ │ │ │ │ └── index.html │ │ │ │ ├── -u-p-p-e-r_-r-i-g-h-t │ │ │ │ │ └── index.html │ │ │ │ ├── index.html │ │ │ │ ├── value-of.html │ │ │ │ └── values.html │ │ │ ├── index.html │ │ │ ├── init.html │ │ │ ├── request.html │ │ │ ├── set-writer.html │ │ │ ├── write-cmd-from-string.html │ │ │ └── write-cmd.html │ │ ├── -dst-for-world-cities-i-o │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -dst-watch-state-i-o │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -events-i-o │ │ │ ├── -reminder-decoder │ │ │ │ ├── index.html │ │ │ │ ├── reminder-time-to-json.html │ │ │ │ └── reminder-title-to-json.html │ │ │ ├── -reminder-encoder │ │ │ │ ├── index.html │ │ │ │ ├── reminder-time-from-json.html │ │ │ │ └── reminder-title-from-json.html │ │ │ ├── get-event-from-watch.html │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── set.html │ │ │ ├── to-json-title.html │ │ │ └── to-json.html │ │ ├── -hand-i-o │ │ │ ├── index.html │ │ │ └── send-to-watch.html │ │ ├── -home-time-i-o │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ └── set.html │ │ ├── -result-queue │ │ │ ├── -keyed-result │ │ │ │ ├── -keyed-result.html │ │ │ │ ├── index.html │ │ │ │ ├── key.html │ │ │ │ ├── result.html │ │ │ │ └── to-string.html │ │ │ ├── -result-queue.html │ │ │ ├── clear.html │ │ │ ├── dequeue.html │ │ │ ├── enqueue.html │ │ │ ├── index.html │ │ │ ├── is-empty.html │ │ │ └── size.html │ │ ├── -settings-i-o │ │ │ ├── -settings-encoder │ │ │ │ ├── encode.html │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── send-to-watch.html │ │ │ ├── set.html │ │ │ └── to-json.html │ │ ├── -time-adjustment-i-o │ │ │ ├── -casio-is-auto-time-original-value │ │ │ │ ├── index.html │ │ │ │ └── value.html │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── send-to-watch.html │ │ │ ├── set.html │ │ │ └── to-json.html │ │ ├── -time-i-o │ │ │ ├── -time-encoder │ │ │ │ ├── index.html │ │ │ │ └── prepare-current-time.html │ │ │ ├── index.html │ │ │ ├── send-to-watch-set.html │ │ │ └── set.html │ │ ├── -timer-i-o │ │ │ ├── -timer-decoder │ │ │ │ ├── decode-value.html │ │ │ │ └── index.html │ │ │ ├── -timer-encoder │ │ │ │ ├── encode.html │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── send-to-watch.html │ │ │ ├── set.html │ │ │ └── to-json.html │ │ ├── -wait-for-connection-i-o │ │ │ ├── index.html │ │ │ └── request.html │ │ ├── -watch-name-i-o │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -watch-values-cache │ │ │ ├── -watch-values-cache.html │ │ │ ├── clear.html │ │ │ ├── get-cached.html │ │ │ ├── get.html │ │ │ ├── index.html │ │ │ ├── put.html │ │ │ └── remove.html │ │ ├── -world-cities-i-o │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ └── index.html │ ├── org.avmedia.gshockapi.io │ │ ├── -alarms-i-o │ │ │ ├── -alarm-decoder │ │ │ │ ├── index.html │ │ │ │ ├── to-json-new.html │ │ │ │ └── to-json.html │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── send-to-watch.html │ │ │ ├── set.html │ │ │ └── to-json.html │ │ ├── -app-info-i-o │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -battery-level-i-o │ │ │ ├── -battery-level-decoder │ │ │ │ ├── decode-value.html │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -button-pressed-i-o │ │ │ ├── get.html │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── put.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -cached-i-o │ │ │ ├── cache.html │ │ │ ├── clear-cache.html │ │ │ ├── create-key.html │ │ │ ├── get.html │ │ │ ├── index.html │ │ │ ├── init.html │ │ │ ├── put.html │ │ │ ├── remove.html │ │ │ ├── request.html │ │ │ ├── result-queue.html │ │ │ └── subscribe.html │ │ ├── -casio-i-o │ │ │ ├── -d-t-s_-s-t-a-t-e │ │ │ │ ├── -f-o-u-r │ │ │ │ │ └── index.html │ │ │ │ ├── -t-w-o │ │ │ │ │ └── index.html │ │ │ │ ├── -z-e-r-o │ │ │ │ │ └── index.html │ │ │ │ ├── entries.html │ │ │ │ ├── index.html │ │ │ │ ├── state.html │ │ │ │ ├── value-of.html │ │ │ │ └── values.html │ │ │ ├── -w-a-t-c-h_-b-u-t-t-o-n │ │ │ │ ├── -f-i-n-d_-p-h-o-n-e │ │ │ │ │ └── index.html │ │ │ │ ├── -i-n-v-a-l-i-d │ │ │ │ │ └── index.html │ │ │ │ ├── -l-o-w-e-r_-l-e-f-t │ │ │ │ │ └── index.html │ │ │ │ ├── -l-o-w-e-r_-r-i-g-h-t │ │ │ │ │ └── index.html │ │ │ │ ├── -n-o_-b-u-t-t-o-n │ │ │ │ │ └── index.html │ │ │ │ ├── -u-p-p-e-r_-l-e-f-t │ │ │ │ │ └── index.html │ │ │ │ ├── -u-p-p-e-r_-r-i-g-h-t │ │ │ │ │ └── index.html │ │ │ │ ├── entries.html │ │ │ │ ├── index.html │ │ │ │ ├── value-of.html │ │ │ │ └── values.html │ │ │ ├── index.html │ │ │ ├── init.html │ │ │ ├── remove-from-cache.html │ │ │ ├── request.html │ │ │ ├── set-writer.html │ │ │ ├── write-cmd-from-string.html │ │ │ └── write-cmd.html │ │ ├── -dst-for-world-cities-i-o │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ ├── set-d-s-t.html │ │ │ └── to-json.html │ │ ├── -dst-watch-state-i-o │ │ │ ├── -d-t-s_-v-a-l-u-e │ │ │ │ ├── -a-u-t-o │ │ │ │ │ └── index.html │ │ │ │ ├── -o-f-f │ │ │ │ │ └── index.html │ │ │ │ ├── -o-n │ │ │ │ │ └── index.html │ │ │ │ ├── -o-n_-a-n-d_-a-u-t-o │ │ │ │ │ └── index.html │ │ │ │ ├── index.html │ │ │ │ ├── value-of.html │ │ │ │ └── values.html │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ ├── set-d-s-t.html │ │ │ └── to-json.html │ │ ├── -error-i-o │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -events-i-o │ │ │ ├── -reminder-decoder │ │ │ │ ├── index.html │ │ │ │ ├── reminder-time-to-json.html │ │ │ │ └── reminder-title-to-json.html │ │ │ ├── -reminder-encoder │ │ │ │ ├── index.html │ │ │ │ ├── reminder-time-from-json.html │ │ │ │ └── reminder-title-from-json.html │ │ │ ├── clear-all.html │ │ │ ├── get-event-from-watch.html │ │ │ ├── index.html │ │ │ ├── on-received-title.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── set.html │ │ │ ├── to-json-title.html │ │ │ └── to-json.html │ │ ├── -hand-i-o │ │ │ ├── index.html │ │ │ └── send-to-watch.html │ │ ├── -home-time-i-o │ │ │ ├── index.html │ │ │ ├── request.html │ │ │ └── set.html │ │ ├── -result-queue │ │ │ ├── -keyed-result │ │ │ │ ├── -keyed-result.html │ │ │ │ ├── index.html │ │ │ │ ├── key.html │ │ │ │ ├── result.html │ │ │ │ └── to-string.html │ │ │ ├── -result-queue.html │ │ │ ├── clear.html │ │ │ ├── dequeue.html │ │ │ ├── enqueue.html │ │ │ ├── index.html │ │ │ ├── is-empty.html │ │ │ └── size.html │ │ ├── -run-actions-i-o │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ └── request.html │ │ ├── -settings-i-o │ │ │ ├── -d-o_-n-o-t_-d-i-s-t-u-r-b_-o-f-f.html │ │ │ ├── -m-a-s-k_-a-u-t-o_-l-i-g-h-t_-o-f-f.html │ │ │ ├── -m-a-s-k_-b-u-t-t-o-n_-t-o-n-e_-o-f-f.html │ │ │ ├── -m-a-s-k_24_-h-o-u-r-s.html │ │ │ ├── -p-o-w-e-r_-s-a-v-i-n-g_-m-o-d-e.html │ │ │ ├── -settings-encoder │ │ │ │ ├── encode.html │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── send-to-watch.html │ │ │ ├── set.html │ │ │ └── to-json.html │ │ ├── -time-adjustment-i-o │ │ │ ├── -casio-is-auto-time-original-value │ │ │ │ ├── index.html │ │ │ │ └── value.html │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── send-to-watch.html │ │ │ ├── set.html │ │ │ └── to-json.html │ │ ├── -time-adjustment-info │ │ │ ├── -time-adjustment-info.html │ │ │ ├── adjustment-time-minutes.html │ │ │ ├── index.html │ │ │ └── is-time-adjustment-set.html │ │ ├── -time-i-o │ │ │ ├── -d-t-s_-m-a-s-k │ │ │ │ ├── -a-u-t-o │ │ │ │ │ └── index.html │ │ │ │ ├── -o-f-f │ │ │ │ │ └── index.html │ │ │ │ ├── -o-n │ │ │ │ │ └── index.html │ │ │ │ ├── entries.html │ │ │ │ ├── index.html │ │ │ │ ├── value-of.html │ │ │ │ └── values.html │ │ │ ├── -dts-mask │ │ │ │ ├── -a-u-t-o │ │ │ │ │ └── index.html │ │ │ │ ├── -o-f-f │ │ │ │ │ └── index.html │ │ │ │ ├── -o-n │ │ │ │ │ └── index.html │ │ │ │ ├── entries.html │ │ │ │ ├── index.html │ │ │ │ ├── mask.html │ │ │ │ ├── value-of.html │ │ │ │ └── values.html │ │ │ ├── -time-encoder │ │ │ │ ├── index.html │ │ │ │ └── prepare-current-time.html │ │ │ ├── index.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── set-timezone.html │ │ │ └── set.html │ │ ├── -timer-i-o │ │ │ ├── -timer-decoder │ │ │ │ ├── decode-value.html │ │ │ │ └── index.html │ │ │ ├── -timer-encoder │ │ │ │ ├── encode.html │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ ├── send-to-watch-set.html │ │ │ ├── send-to-watch.html │ │ │ ├── set.html │ │ │ └── to-json.html │ │ ├── -unknown-i-o │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -wait-for-connection-i-o │ │ │ ├── index.html │ │ │ └── request.html │ │ ├── -watch-condition-i-o │ │ │ ├── -watch-condition-decoder │ │ │ │ ├── decode-value.html │ │ │ │ └── index.html │ │ │ ├── -watch-condition-value │ │ │ │ ├── -watch-condition-value.html │ │ │ │ ├── battery-level.html │ │ │ │ ├── index.html │ │ │ │ └── temperature.html │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -watch-name-i-o │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ ├── -watch-values-cache │ │ │ ├── -watch-values-cache.html │ │ │ ├── clear.html │ │ │ ├── get-cached.html │ │ │ ├── get.html │ │ │ ├── index.html │ │ │ ├── put.html │ │ │ └── remove.html │ │ ├── -world-cities-i-o │ │ │ ├── encode-and-pad.html │ │ │ ├── index.html │ │ │ ├── on-received.html │ │ │ ├── parse-city.html │ │ │ ├── request.html │ │ │ └── to-json.html │ │ └── index.html │ ├── org.avmedia.gshockapi │ │ ├── -alarm │ │ │ ├── -alarm.html │ │ │ ├── -companion │ │ │ │ ├── add-sorted.html │ │ │ │ ├── alarms.html │ │ │ │ ├── clear.html │ │ │ │ └── index.html │ │ │ ├── enabled.html │ │ │ ├── has-hourly-chime.html │ │ │ ├── hour.html │ │ │ ├── index.html │ │ │ ├── minute.html │ │ │ └── to-string.html │ │ ├── -event-action │ │ │ ├── -event-action.html │ │ │ ├── action.html │ │ │ ├── index.html │ │ │ └── label.html │ │ ├── -event-date │ │ │ ├── -event-date.html │ │ │ ├── day.html │ │ │ ├── equals.html │ │ │ ├── index.html │ │ │ ├── month.html │ │ │ └── year.html │ │ ├── -event │ │ │ ├── -event.html │ │ │ ├── enabled.html │ │ │ ├── end-date.html │ │ │ ├── get-day-of-month-suffix.html │ │ │ ├── get-frequency-formatted.html │ │ │ ├── get-period-formatted.html │ │ │ ├── incompatible.html │ │ │ ├── index.html │ │ │ ├── selected.html │ │ │ ├── title.html │ │ │ └── to-string.html │ │ ├── -g-shock-a-p-i │ │ │ ├── -g-shock-a-p-i.html │ │ │ ├── clear-events.html │ │ │ ├── disconnect.html │ │ │ ├── get-alarms.html │ │ │ ├── get-app-info.html │ │ │ ├── get-battery-level.html │ │ │ ├── get-d-s-t-for-world-cities.html │ │ │ ├── get-d-s-t-watch-state.html │ │ │ ├── get-device-id.html │ │ │ ├── get-error.html │ │ │ ├── get-event-from-watch.html │ │ │ ├── get-events-from-watch.html │ │ │ ├── get-home-time.html │ │ │ ├── get-pressed-button.html │ │ │ ├── get-settings.html │ │ │ ├── get-time-adjustment.html │ │ │ ├── get-timer.html │ │ │ ├── get-watch-name.html │ │ │ ├── get-watch-temperature.html │ │ │ ├── get-world-cities.html │ │ │ ├── index.html │ │ │ ├── init.html │ │ │ ├── is-action-button-pressed.html │ │ │ ├── is-auto-time-started.html │ │ │ ├── is-bluetooth-enabled.html │ │ │ ├── is-connected.html │ │ │ ├── is-find-phone-button-pressed.html │ │ │ ├── is-normal-button-pressed.html │ │ │ ├── prevent-reconnection.html │ │ │ ├── reset-hand.html │ │ │ ├── send-message.html │ │ │ ├── set-alarms.html │ │ │ ├── set-events.html │ │ │ ├── set-settings.html │ │ │ ├── set-time.html │ │ │ ├── set-timer.html │ │ │ ├── stop-scan.html │ │ │ ├── teardown-connection.html │ │ │ ├── validate-bluetooth-address.html │ │ │ └── wait-for-connection.html │ │ ├── -i-event-action │ │ │ ├── action.html │ │ │ ├── index.html │ │ │ └── label.html │ │ ├── -progress-events │ │ │ ├── -events │ │ │ │ ├── -alarm-data-loaded │ │ │ │ │ └── index.html │ │ │ │ ├── -all-permissions-accepted │ │ │ │ │ └── index.html │ │ │ │ ├── -button-pressed-info-received │ │ │ │ │ └── index.html │ │ │ │ ├── -calendar-updated │ │ │ │ │ └── index.html │ │ │ │ ├── -connection-failed │ │ │ │ │ └── index.html │ │ │ │ ├── -connection-setup-complete │ │ │ │ │ └── index.html │ │ │ │ ├── -connection-started │ │ │ │ │ └── index.html │ │ │ │ ├── -disconnect │ │ │ │ │ └── index.html │ │ │ │ ├── -events.html │ │ │ │ ├── -home-time-updated │ │ │ │ │ └── index.html │ │ │ │ ├── -init │ │ │ │ │ └── index.html │ │ │ │ ├── -need-to-update-u-i │ │ │ │ │ └── index.html │ │ │ │ ├── -notifications-disabled │ │ │ │ │ └── index.html │ │ │ │ ├── -notifications-enabled │ │ │ │ │ └── index.html │ │ │ │ ├── -settings-loaded │ │ │ │ │ └── index.html │ │ │ │ ├── -watch-initialization-completed │ │ │ │ │ └── index.html │ │ │ │ ├── index.html │ │ │ │ └── payload.html │ │ │ ├── -subscriber │ │ │ │ ├── -subscriber.html │ │ │ │ ├── index.html │ │ │ │ ├── run-event-actions.html │ │ │ │ ├── start.html │ │ │ │ └── stop.html │ │ │ ├── add-event.html │ │ │ ├── add-payload.html │ │ │ ├── connection-events-flowable.html │ │ │ ├── get-payload.html │ │ │ ├── get.html │ │ │ ├── index.html │ │ │ ├── on-next.html │ │ │ ├── run-event-actions.html │ │ │ └── subscriber.html │ │ ├── -repeat-period │ │ │ ├── -d-a-i-l-y │ │ │ │ └── index.html │ │ │ ├── -m-o-n-t-h-l-y │ │ │ │ └── index.html │ │ │ ├── -n-e-v-e-r │ │ │ │ └── index.html │ │ │ ├── -w-e-e-k-l-y │ │ │ │ └── index.html │ │ │ ├── -y-e-a-r-l-y │ │ │ │ └── index.html │ │ │ ├── entries.html │ │ │ ├── index.html │ │ │ ├── period-duration.html │ │ │ ├── value-of.html │ │ │ └── values.html │ │ ├── -settings │ │ │ ├── -dn-d.html │ │ │ ├── -settings.html │ │ │ ├── adjustment-time-minutes.html │ │ │ ├── auto-light.html │ │ │ ├── button-tone.html │ │ │ ├── date-format.html │ │ │ ├── index.html │ │ │ ├── language.html │ │ │ ├── light-duration.html │ │ │ ├── power-saving-mode.html │ │ │ ├── time-adjustment.html │ │ │ └── time-format.html │ │ ├── -watch-info │ │ │ ├── -model-info │ │ │ │ ├── -model-info.html │ │ │ │ ├── alarm-count.html │ │ │ │ ├── always-connected.html │ │ │ │ ├── battery-level-lower-limit.html │ │ │ │ ├── battery-level-upper-limit.html │ │ │ │ ├── dst-count.html │ │ │ │ ├── find-button-user-defined.html │ │ │ │ ├── has-auto-light.html │ │ │ │ ├── has-battery-level.html │ │ │ │ ├── has-dn-d.html │ │ │ │ ├── has-power-saving-mode.html │ │ │ │ ├── has-reminders.html │ │ │ │ ├── has-temperature.html │ │ │ │ ├── index.html │ │ │ │ ├── long-light-duration.html │ │ │ │ ├── model.html │ │ │ │ ├── short-light-duration.html │ │ │ │ ├── week-language-supported.html │ │ │ │ ├── world-cities-count.html │ │ │ │ └── world-cities.html │ │ │ ├── -w-a-t-c-h_-m-o-d-e-l │ │ │ │ ├── -b2100 │ │ │ │ │ └── index.html │ │ │ │ ├── -b5600 │ │ │ │ │ └── index.html │ │ │ │ ├── -d-w │ │ │ │ │ └── index.html │ │ │ │ ├── -e-c-b │ │ │ │ │ └── index.html │ │ │ │ ├── -e-q-b │ │ │ │ │ └── index.html │ │ │ │ ├── -g-a │ │ │ │ │ └── index.html │ │ │ │ ├── -g-b-d │ │ │ │ │ └── index.html │ │ │ │ ├── -g-b001 │ │ │ │ │ └── index.html │ │ │ │ ├── -g-c-w_-b5000 │ │ │ │ │ └── index.html │ │ │ │ ├── -g-m-w │ │ │ │ │ └── index.html │ │ │ │ ├── -g-p-r │ │ │ │ │ └── index.html │ │ │ │ ├── -g-s-t │ │ │ │ │ └── index.html │ │ │ │ ├── -g-w │ │ │ │ │ └── index.html │ │ │ │ ├── -m-r-g_-b5000 │ │ │ │ │ └── index.html │ │ │ │ ├── -m-s-g │ │ │ │ │ └── index.html │ │ │ │ ├── -u-n-k-n-o-w-n │ │ │ │ │ └── index.html │ │ │ │ ├── entries.html │ │ │ │ ├── index.html │ │ │ │ ├── value-of.html │ │ │ │ └── values.html │ │ │ ├── alarm-count.html │ │ │ ├── always-connected.html │ │ │ ├── battery-level-lower-limit.html │ │ │ ├── battery-level-upper-limit.html │ │ │ ├── dst-count.html │ │ │ ├── find-button-user-defined.html │ │ │ ├── get-address.html │ │ │ ├── get-device-name.html │ │ │ ├── get-name.html │ │ │ ├── has-auto-light.html │ │ │ ├── has-battery-level.html │ │ │ ├── has-dn-d.html │ │ │ ├── has-power-saving-mode.html │ │ │ ├── has-reminders.html │ │ │ ├── has-temperature.html │ │ │ ├── index.html │ │ │ ├── long-light-duration.html │ │ │ ├── model.html │ │ │ ├── name.html │ │ │ ├── reset.html │ │ │ ├── set-address.html │ │ │ ├── set-device-name.html │ │ │ ├── set-name-and-model.html │ │ │ ├── short-light-duration.html │ │ │ ├── short-name.html │ │ │ ├── week-language-supported.html │ │ │ ├── world-cities-count.html │ │ │ └── world-cities.html │ │ └── index.html │ └── package-list ├── images │ ├── anchor-copy-button.svg │ ├── arrow_down.svg │ ├── burger.svg │ ├── copy-icon.svg │ ├── copy-successful-icon.svg │ ├── footer-go-to-link.svg │ ├── go-to-top-icon.svg │ ├── logo-icon.svg │ ├── nav-icons │ │ ├── abstract-class-kotlin.svg │ │ ├── abstract-class.svg │ │ ├── annotation-kotlin.svg │ │ ├── annotation.svg │ │ ├── class-kotlin.svg │ │ ├── class.svg │ │ ├── enum-kotlin.svg │ │ ├── enum.svg │ │ ├── exception-class.svg │ │ ├── field-value.svg │ │ ├── field-variable.svg │ │ ├── function.svg │ │ ├── interface-kotlin.svg │ │ ├── interface.svg │ │ ├── object.svg │ │ └── typealias-kotlin.svg │ └── theme-toggle.svg ├── index.html ├── navigation.html ├── scripts │ ├── clipboard.js │ ├── main.js │ ├── navigation-loader.js │ ├── pages.json │ ├── platform-content-handler.js │ ├── prism.js │ ├── sourceset_dependencies.js │ └── symbol-parameters-wrapper_deferred.js └── styles │ ├── font-jb-sans-auto.css │ ├── jetbrains-mono.css │ ├── logo-styles.css │ ├── main.css │ ├── prism.css │ └── style.css ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── jitpack.yml ├── makedoc.sh ├── publish.sh └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /tools 4 | /local.properties 5 | /.idea/caches 6 | /.idea/libraries 7 | /.idea/modules.xml 8 | /.idea/workspace.xml 9 | /.idea/navEditor.xml 10 | /.idea/assetWizardSettings.xml 11 | .DS_Store 12 | /build 13 | /captures 14 | .externalNativeBuild 15 | .cxx 16 | local.properties 17 | publish.sh 18 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/AndroidProjectSystem.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/appInsightsSettings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 44 | 45 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/deploymentTargetDropDown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/deploymentTargetSelector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/migrations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Ivo Zivkov 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GShockAPI 2 | This library provides an API to communicate to the Casio G-Shock watches via the Bluetooth interface. It can perform the following tasks: 3 | 4 | - Set watch's time 5 | - Set Home Time (Home City) 6 | - Set Alarms 7 | - Set Reminders 8 | - Set watch's settings. 9 | - Get watch's name 10 | - Get watch's battery level 11 | - Get Watch's temperature 12 | - Get/Set watch's Timer 13 | 14 | **Supported Watches:** 15 | 16 | G(M)W-5600, G(M)W-5000, GA-B2100, GST-B500, MSG-B100, G-B001, GBD-800 (Partial support), MRG-B5000, GCW-B5000 17 | 18 | 19 | ## Documentation 20 | 21 | The API documentation can be found [here](https://izivkov.github.io/GShockAPI/api/org.avmedia.gshockapi/index.html) 22 | 23 | ## Dependency 24 | 25 | Add the following to your **build.gradle** file: 26 | ``` 27 | allprojects { 28 | repositories { 29 | ... 30 | maven { url 'https://jitpack.io' } 31 | } 32 | } 33 | 34 | dependencies { 35 | implementation 'com.github.izivkov:GShockAPI:1.4.27' 36 | } 37 | ``` 38 | 39 | [![](https://jitpack.io/v/izivkov/GShockAPI.svg)](https://jitpack.io/#izivkov/GShockAPI) 40 | 41 | ## Who is using it? 42 | 43 | The [Casio GShock Smart Sync](https://github.com/izivkov/CasioGShockSmartSync) app integrates G-Shock B5000/B5600/B2100 watches with Google services such as `Google Calendar` events. `Google Alarm Clock`, etc. 44 | 45 | If you like us to list your project which uses this library, [contact us](mailto:izivkov@gmail.com) and we will include a link. 46 | 47 | ## Related Project 48 | If you rather not use a mobile app, but still like to set the time on your G-Shock to the correct time, 49 | we have also developed a [Python program](https://github.com/izivkov/GShockTimeServer) which can run as a server on a regular PC or Raspberry PI with Bluetooth interface. 50 | The project is still WIP, but you can give it a try. 51 | 52 | -------------------------------------------------------------------------------- /api/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /api/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | -------------------------------------------------------------------------------- /api/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /api/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /api/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 13 | 14 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |