Skip to content

🚧 WIP 🚧 Reimagining the G-Shock app in Compose Multiplatform

License

Notifications You must be signed in to change notification settings

DinoLeung/skuare

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Skuare

Skuare logo

An alternative app that connects G-Shock watches via BLE.

Background

In October 2024, a significant data breach occurred, compromising the personal information of thousands of individuals, including employees, business partners, and customers. This incident raised concerns about how user data is handled, especially considering that the official app stores geolocation data online.

As a long-time enthusiast of Casio watches and a proponent of user privacy, I was motivated to develop Skuare—a simple, basic app with full support for the G-Shock Bluetooth protocol. Skuare enables users to connect to their Casio watches with trust, operating entirely offline to ensure that no personal data is transmitted over the internet.

The underlying protocol was reverse-engineered from the official Casio app, with significant assistance from GShockAPI.

Compatibility

Skuare is currently supported and has been tested on the following Casio modules:

Why rebuild everything when GShockAPI already exists?

GShockAPI offers broader support for multiple Casio watch models. However, I wanted a structure tailored more closely to my own preferences and found rebuilding from scratch to be an excellent opportunity to deepen my understanding of Kotlin, JetBrains Compose Multiplatform, and core BLE communication concepts.

Supported watch features

  • Watch settings
    • Watch name
    • Battery level
    • BLE connection timeout
    • Time adjustment settings
    • Date time display preference
    • Power saving mode
    • Backlight duration
    • Auto backlight
  • Time adjustment procedure
  • Home timezone and world timezone
    • Timezone names, info and DST settings
      • Currently ignores outputs from the watch, it always use values from timezones lookup tables.
    • Timezone gps coordinates and radio signal ID
      • For home time timezones, it tries to get coordinates from the equivalent world timezone.
  • Alarms
    • Hourly Signal
  • Timer
  • Reminders title and config

Roadmap

  • Map out the data models
  • Implement BLE communication protocol
  • Simple UI to pair and interact with the watch
  • Local sqlite or shared preference to keep track of paired watches
  • Support auto time adjustment procedure when app is not in foreground
    • Android companion device manager
    • iOS bluetooth central
  • Figure out unknown packets

To be fixed

  • Handle multiple peripheral found when scanning for watches
  • Default data when invalid data received from watch, including timezone

Disclaimer

This project is an independent, open-source implementation for communicating with Casio watches over Bluetooth. It is not affiliated with, endorsed by, or sponsored by Casio Computer Co., Ltd. All brand names and trademarks are the property of their respective owners.

The Bluetooth communication protocol and data formats used by Casio watches were independently reverse-engineered through behavioral observation and traffic analysis. No proprietary source code or copyrighted assets from Casio or its applications are included in this project.

About

🚧 WIP 🚧 Reimagining the G-Shock app in Compose Multiplatform

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published