An alternative app that connects G-Shock watches via BLE.
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.
Skuare is currently supported and has been tested on the following Casio modules:
- Module 3539
- Module 3540
- Module 3461 (not tested)
- Module 3459 (not tested)
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.
- 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.
- Timezone names, info and DST settings
- Alarms
- Hourly Signal
- Timer
- Reminders title and config
- 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
- Handle multiple peripheral found when scanning for watches
- Default data when invalid data received from watch, including timezone
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.