Giter Club home page Giter Club logo

amazfit-re's Introduction

Amazfit-RE

Reverse engineering notes for the Amazfit watches (based on ingenic)

General notes

  • The amazfit pace is apparently called "HuangHe", and the stratos/stratos+ "Everest" ("EverestS" for the stratos +, also called "sports watch 2s"), and the verge "Qogir"
  • Most of the logic is in com.huami.watch
  • com.huami.watch.companion seems like the background service that send notifications and weather data
  • The actual iwds init is made in com.huami.watch.connect.BaseConnection (used in PhoneConnection and WatchConnection)
  • Apparently the iwds jar and jni communicate on a double client-server model (?)
  • The amazfit app seems to work with these watches
    • A1602 pace chinese version
    • A1612 pace international version
    • A1609: stratos chinese version
    • A1619: stratos international version
    • A1801: verge chinese version
    • A1811: verse international version
    • AC1807: verge 2 chinese version
    • AC1903: ???
    • AC1817: verge 2 international version
    • A1916: Health Watch (bip 2?!?)
    • (to fill: Amazfit Sports Watch // Amazfit Sports Watch 2 // Amazfit Sports Watch 2S // Amazfit Stratos // Amazfit Stratos + // Amazfit Smartwatch // Amazfit Verge)
  • There is differences between "mainland" (chinese) and "oversea" (international) versions:
  • There's references to "TestModeBackDoor" (?!?), TestMode, and FlavorDev
  • There's some "features" (that seems to vary from model to model): "Alarm", "AmazonAlexa", "AssistantOTA", "AssistantFlight", "AssistantUpdates", "LvMi", "MIAI2_2", "MIAI_tts", "NfcDoor", "NfcUnionPay", "StepTargetSet", "WidgetManager2"

Layers

  • The base layer is the iwds protocol from ingenic, apparently not modified
  • On top of this, data are sent "packed" (from com.huami.watch.hmwatchmanager.DataPackingManager:packing())
  • The packing actually creates a CMyTransObj (from com.huami.watch.CMYTransObj)
  • Apparently, it's based on android's os.bundle and os.parcel
  • Not many things uses the ingenic libraries, they are:
    • com.huami.watch.companion.CompanionApplication (DeviceDescriptor)
    • com.huami.watch.connect.BaseConnection (DeviceDescriptor, IwdsApplication, app.ConnectionHelper, uniconnect.ConnectionServiceManager, uniconnect.link.Adapter, uniconnect.link.AdapterManager)
    • com.huami.watch.connect.Connectable (DeviceDescriptor)
    • com.huami.watch.connect.PhoneConnection (DeviceDescriptor, uniconnect.link.Adapter, uniconnect.link.Adapter.DeviceDiscoveryCallbacks, uniconnect.link.Link, uniconnect.link.RemoteDevice)
    • com.huami.watch.transport.DataTransportService (DeviceDescriptor, common.api.ServiceManagerContext, datatransactor.DataTransactor, datatransactor.DataTransactor.DataTransactResult, datatransactor.DataTransactor.DataTransactorCallback)
    • com.huami.watch.companion.agps.AGpsSyncHelper (datatransactor.DataTransactor.DataTransactResult)
    • com.huami.watch.companion.ble.lostwarning.LostWarningConstant (utils.serializable.UtilsConstants)
    • com.huami.watch.companion.ble.utils.BLEScanRecord (utils.serializable.UtilsConstants)
    • com.huami.watch.companion.components.bluetoothproxyserver.utils.HttpData (utils.serializable.UtilsConstants)
    • com.huami.watch.companion.otaphone.service.OtaModel (DeviceDescriptor, datatransactor.DataTransactor.DataTransactResult, datatransactor.FileInfo, datatransactor.FileTransactionmodel, datatransactor.FileTransactionmodel.FileTransactionInterruptCallback, datatransactor.FileTransactionmodel.FileTransactionModelCallback)
    • com.huami.watch.companion.sync.SyncWatchFaceBgHelper (datatransactor.DataTransactor.DataTransactResult)
    • com.huami.watch.companion.xiaomiai.FileTransfer (datatransactor.FileTransactionmodel, datatransactor.FileTransactionmodel.FileTransactionInterruptCallback, datatransactor.FileTransactionmodel.FileTransactionModelCallback)
    • com.huami.watch.companion.xiaomiai.FileTransferCallback (DeviceDescriptor, datatransactor.DataTransactor.DataTransactResult, datatransactor.FileInfo, datatransactor.FileTransactionModel, datatransactor.FileTransactionModel.FileTransactionModelCallback)
    • com.huami.watch.companion.xiaomiai.FileTransferInterruptCallback (datatransactor.FileTransactionmodel.FileTransactionInterruptCallback)
    • com.huami.watch.connect.WatchConnection (DeviceDescriptor, uniconnect.link.Adapter, uniconnect.link.Link)
    • com.huami.watch.dataflow.model.health.process.HeartRateDetailsInfo (utils.serializable.UtilsConstants)
    • com.huami.watch.hmwatchmanager.bt_connect.BGService_msg (DeviceDescriptor, datatransactor.DataTransactor, datatransactor.DataTransactor.DataTransactResult, datatransactor.DataTransactor.DataTransactorCallback
    • com.huami.watch.transport.FileTransporter (DeviceDescriptor, datatransactor.DataTransactor.DataTransactResult, datatransactor.FileInfo, datatransactor.FileTransactionModel, datatransactor.FileTransactionModel.FileTransactionModelCallback)
    • com.huami.watch.transport.httpsupport.transporter.file.MD5FileUtils (utils.serializable.UtilsConstants)
    • com.huami.watch.util.BytesUtul (utils.serializable.UtilsConstants)
    • com.xiaomi.account.utils.Base64Coder (utils.serializable.UtilsConstants)
    • com.xiaomi.ai.utils.WaveMaker (utils.serializable.UtilsConstants)

amazfit-re's People

Contributors

prototux avatar

Stargazers

Gionne Cannister avatar Gagan Malvi avatar Radomír Žemlička avatar Barry Harris avatar _m avatar FireFly avatar Paul avatar

Watchers

James Cloos avatar  avatar

Forkers

xueshenglin

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.