• This repository has been archived on 20/Jan/2022
  • Stars
    star
    610
  • Rank 73,497 (Top 2 %)
  • Language
    Swift
  • Created about 6 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Experimental bluetooth headset battery monitoring application for MacOS

⚠️ IMPORTANT ⚠️

MacOS monterey now supports 3rd party bluetooth headsets by itself!
I have therefore decided to stop development on this project.

This app will not work on Monterey, I have no plans on adding adding compatibility with Monterey, and I recommend not using it at all on Monterey to begin with.
You can read my full announcement here.


Akku

The missing macOS bluetooth headset battery indicator app.

Build Status GitHub pre-release GitHub release

What does it do?

  • Displays headset battery status, which can't be viewed on macOS at all (only for Apple accessories).
  • (Optionally) notifies you when headset battery gets low.
  • Menu bar icon.

Download

DMG

Get the latest .DMG here.

brew cask

Coming soon once app goes stable.

Compatibility

It will work with any headset that conforms to the Apple bluetooth spec*

Translation:
If your Android device can read it's battery status, it will very likely work.
If your iPhone device can read your headset's battery status, it will work.


* = You read that correctly, Apple did not bother to implement their own specifications on the Mac.

FAQ

My device doesn't work!

Whilst we're still in beta, it might be possible that Akku reports that it can't find any battery status for your device.
Before opening an issue, check the following:

  • If you have a iPhone/Android device, please confirm that it shows you the battery status.
    If not, chances are high that your device simply doesn't support battery statuses.
  • If you just installed Akku, reconnect at least once.
  • If your phone can read the status, but Akku can't, please follow this guide that tells you what data you need to provide in order for us to fix the issue.

I don't want Akku in my menubar all the time!

Use Bartender to hide it, and configure it to only show Akku on changes. I recommend the following config:

Will this app be in the App Store?

No. Like most of my apps, it uses pretty unorthodox API's that will very likely not work in the app sandbox and/or be approved by Apple.
However, Akku contains a automatic updater that will keep it up to date, and additionally, you can manually check by clicking 'Check for updates' from it's menu.

How does it work?

The simple explanation:
You give it root, and it will monitor all bluetooth communication that goes through the system to intercept battery indicator commands.

The hard explanation:
You give it root, and it will install a helper application.
The helper proceeds to communicate to the app through XPC
Once the helper is activated, it will communicate with the IOBluetoothHCIController driver through IOKit
It will map a region of memory from the kernel to Akku, and scan through the raw bluetooth data.
Akku can currently decode HCI events, L2CAP packets and RFCOMM packets (RFCOMM is build upon L2CAP).
Once it has exhausted said bluetooth data, it will poll and instruct the system to dump any new data to Akku's mapped memory every 5 seconds.
The only communication that goes back to the non-privileged process is the normalized battery indication signals.
Both Akku and it's helper verify their signatures to ensure no unauthorized access is made.
Both are codesigned with a valid Apple developer cert.

Inspirations / Shoutouts

  • Jeff Reiner // @mirshko
    Icon Design, moral support 😍
  • SwiftPrivilegedHelper
    Great starting point to implement helper installation & XPC communication, thanks @ekkrik!
  • cocoapods-amimono
    Needed to embed the pods into the helper itself, which is not really something cocoapods is designed to do.
    Luckily amimono was there, despite needing a few more patches to make it do what I wanted.
  • Android's BluetoothHeadset.java
    Gives some good information on the vendor specific AT commands that Android accepts.
  • Wireshark
    Wouldn't have gotten anywhere with figuring out the raw bluetooth data without wireshark.

More Repositories

1

vibrant.js

Extract prominent colors from an image. JS port of Android's Palette.
CoffeeScript
4,611
star
2

Noti

Receive Android notifications on your mac. (w/PushBullet) ⛺
Swift
910
star
3

MaterialUp

MaterialUp Android App
Java
586
star
4

tabbie

A material, customizable, and hackable new tab extension
HTML
477
star
5

react-native-fingerprint-android

Fingerprint authentication for react-native (android only)
JavaScript
97
star
6

react-truncate-html

Truncate multiline HTML with React
JavaScript
50
star
7

homeassistant-basestation

Read and manage power states for your Valve Index® Base Stations in Home Assistant.
Python
43
star
8

XDiscord

Xcode Discord Integration
Swift
38
star
9

scdl

The intelligent SoundCloud downloader. Downloads any url, tags automatically.
CoffeeScript
25
star
10

byeblock

ByeBlock unblocks the geoblocking on SoundCloud.
JavaScript
17
star
11

ChannelBot

A reddit bot that posts the newest uploaded videos to subreddits.
PHP
17
star
12

checkly

Find another you, with your Reddit account!
CoffeeScript
15
star
13

streamit

Turn any subreddit into a real radio station!
CoffeeScript
9
star
14

jZm

A C# plugin framework to enhance the gameplay of COD : Black Ops II Zombies
C#
8
star
15

basestation

Python lib to interface with the Valve Index® Base Stations (also commonly referred to as 'Lighthouse V2') through BLE.
Python
5
star
16

2stepauth

MyBB plugin that provides 2 step authentication trough Google Authenticator.
PHP
4
star
17

byeblock-server

Server software that the byeblock extension uses to route SC API requests.
JavaScript
4
star
18

Osmozis

Fuck Osmozis
JavaScript
4
star
19

Akku-old

A tiny bluetooth headset battery monitoring application for MacOS
Swift
4
star
20

rtrap.org

r/trap essentials list
TypeScript
4
star
21

trapped

Source of TRAPPED, A reddit-based soundcloud link aggregator (amongst other things)
CSS
4
star
22

MentionBot

Reddit bot that monitors all posts and checks if a user gets mentioned, then PMs mentioned user
PHP
3
star
23

RedditOAuth

A really basic Reddit OAuth library. Still space for expansion.
PHP
3
star
24

EasyCapture

EasyCapture - share your media instantly.
C#
2
star
25

StarTruckerCustomRadio

Mod to replace Star Trucker's radio station with your own
C#
2
star
26

Skipify

Skipify is a open source spotify advertisement skipper extension for firefox and chrome (created for http://play.spotify.com/)
JavaScript
2
star
27

reddit-re

The ultimate reddit tools collection
PHP
2
star
28

jariz-error

Better Error Handling mod for Game Dev Tycoon.
JavaScript
2
star
29

jari.io

Portfolio
JavaScript
2
star
30

Reisplanner

A un-official recreated version of the 'NS Reisplanner Xtra' app that follows the android guidelines.
Java
1
star
31

hackathon

Amsterdam Hackathon 2014
JavaScript
1
star
32

PlatformerEngine

A game engine written in typescript for text-adventure (platformer) games. Allows you to write a text adventure game really easily.
TypeScript
1
star
33

Akku-website

https://akku.software
HTML
1
star
34

fairtrade

Proef van bekwaamheid, mediacollege
PHP
1
star
35

OpenWiFi

Android open networks scanner and connector.
Java
1
star
36

converse

Converse is the AI behind the conversation window on my portfolio site, JARI.IO.
JavaScript
1
star
37

corruptor

HTML
1
star
38

AirtimeIRC

IRC bot for Sourcefabric Airtime
PHP
1
star
39

pushbullet-native

Native Android notifcations on any platform.
CoffeeScript
1
star