Okay, I performed a battery run-down with a version of DS4Windows which outputs timestamped battery charge/voltage meter changes from the telemetry in every single packet (that is to say: these values are precise.) I'm going to continue updating this post as I gather some data with this controller. I'm going to upload this version momentarily so people can help gather data if they like. The 2014-03-18.0 release will also fix the small issue that you could no longer turn your light bar completely off for maximum battery life. Note that the output will go to the console, so you want to run the program like, "DS4Tool > battery-testing.txt" instead of just clicking on it.
Edit: I realize there is no time printed for the disconnection. I'll make sure to add a timestamp for that event, too, and then upload this build for you guys.
Edit2: 2014-03-18.1 is the newest build. It reports the full power subsystem octet, not just the bottom half interpreted as "charge."
Code:
Test 1, run-down, idle except with a 255,255,255 lightbar.
A4:15:66:7B:73:37 2014-03-18T07:11:11.6692337Z> charge = 5
A4:15:66:7B:73:37 2014-03-18T07:11:11.7843777Z> charge = 7
The thread 0x1cbc has exited with code 0 (0x0).
A4:15:66:7B:73:37 2014-03-18T07:12:31.1984928Z> charge = 6
A4:15:66:7B:73:37 2014-03-18T07:24:01.7373420Z> charge = 5
A4:15:66:7B:73:37 2014-03-18T07:55:31.5740126Z> charge = 4
A4:15:66:7B:73:37 2014-03-18T08:31:07.8712862Z> charge = 3
A4:15:66:7B:73:37 2014-03-18T09:11:03.4511662Z> charge = 2
A4:15:66:7B:73:37 2014-03-18T09:53:39.8267317Z> charge = 1
A4:15:66:7B:73:37 2014-03-18T10:39:10.1744290Z> charge = 0
Cancelling IO
Cancelled IO
Close fs
Close fs
Close sh
Close sh
Device is closed.
The thread 0x198c has exited with code 259 (0x103).
Code:
Battery charge-up from empty, USB only, light bar off 0,0,0, no input or rumble output.
A4:15:66:7B:73:37 2014-03-18T12:46:31.6527686Z> start
A first chance exception of type 'System.IO.IOException' occurred in mscorlib.dll
A4:15:66:7B:73:37 2014-03-18T12:46:31.6737947Z> power subsystem octet: 0x00
A4:15:66:7B:73:37 2014-03-18T12:46:31.9010782Z> power subsystem octet: 0x10
A4:15:66:7B:73:37 2014-03-18T12:47:12.1609954Z> power subsystem octet: 0x11
A4:15:66:7B:73:37 2014-03-18T12:52:21.0174737Z> power subsystem octet: 0x12
A4:15:66:7B:73:37 2014-03-18T13:06:21.6846950Z> power subsystem octet: 0x13
A4:15:66:7B:73:37 2014-03-18T13:15:34.9572245Z> power subsystem octet: 0x14
A4:15:66:7B:73:37 2014-03-18T13:26:32.4207929Z> power subsystem octet: 0x15
A4:15:66:7B:73:37 2014-03-18T14:12:46.5891818Z> power subsystem octet: 0x16
A4:15:66:7B:73:37 2014-03-18T14:48:36.6376180Z> power subsystem octet: 0x17
A4:15:66:7B:73:37 2014-03-18T15:15:27.0815840Z> power subsystem octet: 0x18
A4:15:66:7B:73:37 2014-03-18T15:40:55.4010517Z> power subsystem octet: 0x19
A4:15:66:7B:73:37 2014-03-18T16:13:39.7807583Z> power subsystem octet: 0x1a
A4:15:66:7B:73:37 2014-03-18T16:35:42.6888557Z> power subsystem octet: 0x1b
Code:
Battery run-down with idle controller, connected over Bluetooth, but no light bar or rumble activity.
A4:15:66:7B:73:37 2014-03-19T00:47:53.0821055Z> start
A4:15:66:7B:73:37 2014-03-19T00:47:53.1111423Z> power subsystem octet: 0x00
A4:15:66:7B:73:37 2014-03-19T00:47:53.1191523Z> power subsystem octet: 0x09
A4:15:66:7B:73:37 2014-03-19T01:52:48.4328218Z> power subsystem octet: 0x08
A4:15:66:7B:73:37 2014-03-19T03:13:00.4335924Z> power subsystem octet: 0x07
A4:15:66:7B:73:37 2014-03-19T04:35:12.2579131Z> power subsystem octet: 0x06
A4:15:66:7B:73:37 2014-03-19T05:55:29.1768217Z> power subsystem octet: 0x05
A4:15:66:7B:73:37 2014-03-19T07:11:56.5862843Z> power subsystem octet: 0x04
A4:15:66:7B:73:37 2014-03-19T08:37:22.0432739Z> power subsystem octet: 0x03
A4:15:66:7B:73:37 2014-03-19T10:01:17.5489968Z> power subsystem octet: 0x02
A4:15:66:7B:73:37 2014-03-19T11:11:19.4022530Z> power subsystem octet: 0x01
A4:15:66:7B:73:37 2014-03-19T12:26:33.2058493Z> power subsystem octet: 0x00
Cancelling IO
Cancelled IO
Close fs
Close sh
Device is closed.
A4:15:66:7B:73:37 2014-03-19T13:45:46.3451560Z> disconnect
It definitely does appear that the battery meter is meant to go from 0-100% but it is not ideally-calibrated to the non-linear discharge rate of the battery. It is very telling that the battery drains several times more quickly with the light bar on than off, so the next release is going to focus on having an active controller stop displaying the light bar, because you obviously do not need it to tell the controllers apart except when you do PS-Eye-type things, or the controllers are sitting down and you want to pick up controller #x specifically and not guess which is which. I'll also change back the charge indicator to a percentage because it does specifically use values 0-10 (0x0 through 0xb.)
You see that the 0x10 bit gets set when it is charging from USB. Notice also that the next two bits get set when I plug in a headset. This means that the description for the fields on
http://eleccelerator.com/wiki/index.php?...ualShock_4 does appear reasonably-accurate. Eventually, I want to add an estimate system to turn the charge level measurements into an actual number from 0.0 to 100.0 indicating estimated charge level, and from that we can estimate the estimated remaining battery life (minus rumbles and stuff which are essentially non-predictable.)