rumble_data_table.md
September 27, 2020 ยท View on GitHub
The encoding algorithm for frequency is log2((double)freq/10.0)*32.0. The algorithm for amplitude is split in 3 range indexes (idx < 16, 16 <= idx < 32, idx < 128), it is:
// 32<= idx < 128
log2f(8.7f*amp)*32.0f
// 16 <= idx < 32
log2f(17.0f*amp)*16.0f
An example of code using it is:
//Float frequency to hex conversion
if (freq < 0.0f)
freq = 0.0f;
else if (freq > 1252.0f)
freq = 1252.0f;
uint8_t encoded_hex_freq = (uint8_t)round(log2((double)freq/10.0)*32.0);
//Convert to Joy-Con HF range. Range in big-endian: 0x0004-0x01FC with +0x0004 steps.
uint16_t hf = (encoded_hex_freq-0x60)*4;
//Convert to Joy-Con LF range. Range: 0x01-0x7F.
uint8_t lf = encoded_hex_freq-0x40;
// Float amplitude to hex conversion
uint8_t encoded_hex_amp = 0;
if(amp > 0.23f)
encoded_hex_amp = (uint8_t)round(log2f(amp*8.7f)*32.f);
else if(amp > 0.12f)
encoded_hex_amp = (uint8_t)round(log2f(amp*17.f)*16.f);
else{
// TBD
}
uint16_t hf_amp = encoded_hex_amp * 2; // encoded_hex_amp<<1;
uint8_t lf_amp = encoded_hex_amp / 2 + 64;// (encoded_hex_amp>>1)+0x40;
The high frequency and low amplitude are encoded and must always add the "control" byte to the HA/LF byte. An example is the following:
//Left linear actuator
uint16_t hf = 0x01a8; //Set H.Frequency
uint8_t hf_amp = 0x88; //Set H.Frequency amplitude
//Byte swapping
byte[0] = hf & 0xFF;
byte[1] = hf_amp + ((hf >> 8) & 0xFF); //Add amp + 1st byte of frequency to amplitude byte
uint8_t lf = 0x63; //Set L.Frequency
uint16_t lf_amp = 0x804d; //Set L.Frequency amplitude
//Byte swapping
byte[2] = lf + ((lf_amp >> 8) & 0xFF); //Add freq + 1st byte of LF amplitude to the frequency byte
byte[3] = lf_amp & 0xFF;
Frequency Table
Values # are in HEX.
| HF Byte 0-1 # | LF Byte 2 # | Frequency (Hz) | Frequency Rounded (Hz) |
|---|---|---|---|
01 | 40.875885 | 41 | |
02 | 41.77095 | 42 | |
03 | 42.685616 | 43 | |
04 | 43.620308 | 44 | |
05 | 44.57547 | 45 | |
06 | 45.551544 | 46 | |
07 | 46.548996 | 47 | |
08 | 47.568283 | 48 | |
09 | 48.609894 | 49 | |
0A | 49.674313 | 50 | |
0B | 50.762039 | 51 | |
0C | 51.873581 | 52 | |
0D | 53.009464 | 53 | |
0E | 54.170223 | 54 | |
0F | 55.356396 | 55 | |
10 | 56.568542 | 57 | |
11 | 57.807232 | 58 | |
12 | 59.073048 | 59 | |
13 | 60.366577 | 60 | |
14 | 61.688435 | 62 | |
15 | 63.039234 | 63 | |
16 | 64.419617 | 64 | |
17 | 65.830215 | 66 | |
18 | 67.271713 | 67 | |
19 | 68.744774 | 69 | |
1A | 70.250084 | 70 | |
1B | 71.788361 | 72 | |
1C | 73.360321 | 73 | |
1D | 74.966705 | 75 | |
1e | 76.608261 | 77 | |
1f | 78.285767 | 78 | |
20 | 80 | 80 | |
04 00 | 21 | 81.75177 | 82 |
08 00 | 22 | 83.541901 | 84 |
0c 00 | 23 | 85.371231 | 85 |
10 00 | 24 | 87.240616 | 87 |
14 00 | 25 | 89.15094 | 89 |
18 00 | 26 | 91.103088 | 91 |
1c 00 | 27 | 93.097992 | 93 |
20 00 | 28 | 95.136566 | 95 |
24 00 | 29 | 97.219788 | 97 |
28 00 | 2a | 99.348625 | 99 |
2c 00 | 2b | 101.524078 | 102 |
30 00 | 2c | 103.747162 | 104 |
34 00 | 2d | 106.018929 | 106 |
38 00 | 2e | 108.340446 | 108 |
3c 00 | 2f | 110.712791 | 111 |
40 00 | 30 | 113.137085 | 113 |
44 00 | 31 | 115.614464 | 116 |
48 00 | 32 | 118.146095 | 118 |
4c 00 | 33 | 120.733154 | 121 |
50 00 | 34 | 123.376869 | 123 |
54 00 | 35 | 126.078468 | 126 |
58 00 | 36 | 128.839233 | 129 |
5c 00 | 37 | 131.660431 | 132 |
60 00 | 38 | 134.543427 | 135 |
64 00 | 39 | 137.489548 | 137 |
68 00 | 3a | 140.500168 | 141 |
6c 00 | 3b | 143.576721 | 144 |
70 00 | 3c | 146.720642 | 147 |
74 00 | 3d | 149.933411 | 150 |
78 00 | 3e | 153.216522 | 153 |
7c 00 | 3f | 156.571533 | 157 |
80 00 | 40 | 160 | 160 |
84 00 | 41 | 163.50354 | 164 |
88 00 | 42 | 167.083801 | 167 |
8c 00 | 43 | 170.742462 | 171 |
90 00 | 44 | 174.481232 | 174 |
94 00 | 45 | 178.30188 | 178 |
98 00 | 46 | 182.206177 | 182 |
9c 00 | 47 | 186.195984 | 186 |
a0 00 | 48 | 190.273132 | 190 |
a4 00 | 49 | 194.439575 | 194 |
a8 00 | 4a | 198.69725 | 199 |
ac 00 | 4b | 203.048157 | 203 |
b0 00 | 4c | 207.494324 | 207 |
b4 00 | 4d | 212.037857 | 212 |
b8 00 | 4e | 216.680893 | 217 |
bc 00 | 4f | 221.425583 | 221 |
c0 00 | 50 | 226.27417 | 226 |
c4 00 | 51 | 231.228928 | 231 |
c8 00 | 52 | 236.292191 | 236 |
cc 00 | 53 | 241.466309 | 241 |
d0 00 | 54 | 246.753738 | 247 |
d4 00 | 55 | 252.156937 | 252 |
d8 00 | 56 | 257.678467 | 258 |
dc 00 | 57 | 263.320862 | 263 |
e0 00 | 58 | 269.086853 | 269 |
e4 00 | 59 | 274.979095 | 275 |
e8 00 | 5a | 281.000336 | 281 |
ec 00 | 5b | 287.153442 | 287 |
f0 00 | 5c | 293.441284 | 293 |
f4 00 | 5d | 299.866821 | 300 |
f8 00 | 5e | 306.433044 | 306 |
fc 00 | 5f | 313.143066 | 313 |
00 01 | 60 | 320 | 320 |
04 01 | 61 | 327.00708 | 327 |
08 01 | 62 | 334.167603 | 334 |
0c 01 | 63 | 341.484924 | 341 |
10 01 | 64 | 348.962463 | 349 |
14 01 | 65 | 356.60376 | 357 |
18 01 | 66 | 364.412354 | 364 |
1c 01 | 67 | 372.391968 | 372 |
20 01 | 68 | 380.546265 | 381 |
24 01 | 69 | 388.87915 | 389 |
28 01 | 6a | 397.394501 | 397 |
2c 01 | 6b | 406.096313 | 406 |
30 01 | 6c | 414.988647 | 415 |
34 01 | 6d | 424.075714 | 424 |
38 01 | 6e | 433.361786 | 433 |
3c 01 | 6f | 442.851166 | 443 |
40 01 | 70 | 452.54834 | 453 |
44 01 | 71 | 462.457855 | 462 |
48 01 | 72 | 472.584381 | 473 |
4c 01 | 73 | 482.932617 | 483 |
50 01 | 74 | 493.507477 | 494 |
54 01 | 75 | 504.313873 | 504 |
58 01 | 76 | 515.356934 | 515 |
5c 01 | 77 | 526.641724 | 527 |
60 01 | 78 | 538.173706 | 538 |
64 01 | 79 | 549.958191 | 550 |
68 01 | 7a | 562.000671 | 562 |
6c 01 | 7b | 574.306885 | 574 |
70 01 | 7c | 586.882568 | 587 |
74 01 | 7d | 599.733643 | 600 |
78 01 | 7e | 612.866089 | 613 |
7c 01 | 7f | 626.286133 | 626 |
80 01 | 640 | 640 | |
84 01 | 654.01416 | 654 | |
88 01 | 668.335205 | 668 | |
8c 01 | 682.969849 | 683 | |
90 01 | 697.924927 | 698 | |
94 01 | 713.20752 | 713 | |
98 01 | 728.824707 | 729 | |
9c 01 | 744.783936 | 745 | |
a0 01 | 761.092529 | 761 | |
a4 01 | 777.758301 | 778 | |
a8 01 | 794.789001 | 795 | |
ac 01 | 812.192627 | 812 | |
b0 01 | 829.977295 | 830 | |
b4 01 | 848.151428 | 848 | |
b8 01 | 866.723572 | 867 | |
bc 01 | 885.702332 | 886 | |
c0 01 | 905.09668 | 905 | |
c4 01 | 924.91571 | 925 | |
c8 01 | 945.168762 | 945 | |
cc 01 | 965.865234 | 966 | |
d0 01 | 987.014954 | 987 | |
d4 01 | 1008.627747 | 1009 | |
d8 01 | 1030.713867 | 1031 | |
dc 01 | 1053.283447 | 1053 | |
e0 01 | 1076.347412 | 1076 | |
e4 01 | 1099.916382 | 1100 | |
e8 01 | 1124.001343 | 1124 | |
ec 01 | 1148.61377 | 1149 | |
f0 01 | 1173.765137 | 1174 | |
f4 01 | 1199.467285 | 1199 | |
f8 01 | 1225.732178 | 1226 | |
fc 01 | 1252.572266 | 1253 |
Amplitude Table
| HA Byte 1 # | LA Byte 2-3 # | Amplitude | Amplitude Rounded |
|---|---|---|---|
0 | 00 40 | 0.000000 | 0.000 |
2 | 80 40 | 0.007843 | 0.010 |
4 | 00 41 | 0.011823 | 0.012 |
6 | 80 41 | 0.014061 | 0.014 |
8 | 00 42 | 0.016720 | 0.017 |
0a | 80 42 | 0.019885 | 0.020 |
0c | 00 43 | 0.023648 | 0.024 |
0e | 80 43 | 0.028123 | 0.028 |
10 | 00 44 | 0.033442 | 0.033 |
12 | 80 44 | 0.039771 | 0.040 |
14 | 00 45 | 0.047296 | 0.047 |
16 | 80 45 | 0.056246 | 0.056 |
18 | 00 46 | 0.066886 | 0.067 |
1a | 80 46 | 0.079542 | 0.080 |
1c | 00 47 | 0.094592 | 0.095 |
1e | 80 47 | 0.112491 | 0.112 |
20 | 00 48 | 0.117471 | 0.117 |
22 | 80 48 | 0.122671 | 0.123 |
24 | 00 49 | 0.128102 | 0.128 |
26 | 80 49 | 0.133774 | 0.134 |
28 | 00 4a | 0.139697 | 0.140 |
2a | 80 4a | 0.145882 | 0.146 |
2c | 00 4b | 0.152341 | 0.152 |
2e | 80 4b | 0.159085 | 0.159 |
30 | 00 4c | 0.166129 | 0.166 |
32 | 80 4c | 0.173484 | 0.173 |
34 | 00 4d | 0.181166 | 0.181 |
36 | 80 4d | 0.189185 | 0.189 |
38 | 00 4e | 0.197561 | 0.198 |
3a | 80 4e | 0.206308 | 0.206 |
3c | 00 4f | 0.215442 | 0.215 |
3e | 80 4f | 0.224982 | 0.225 |
40 | 00 50 | 0.229908 | 0.230 |
42 | 80 50 | 0.234943 | 0.235 |
44 | 00 51 | 0.240087 | 0.240 |
46 | 80 51 | 0.245345 | 0.245 |
48 | 00 52 | 0.250715 | 0.251 |
4a | 80 52 | 0.256206 | 0.256 |
4c | 00 53 | 0.261816 | 0.262 |
4e | 80 53 | 0.267549 | 0.268 |
50 | 00 54 | 0.273407 | 0.273 |
52 | 80 54 | 0.279394 | 0.279 |
54 | 00 55 | 0.285514 | 0.286 |
56 | 80 55 | 0.291765 | 0.292 |
58 | 00 56 | 0.298154 | 0.298 |
5a | 80 56 | 0.304681 | 0.305 |
5c | 00 57 | 0.311353 | 0.311 |
5e | 80 57 | 0.318171 | 0.318 |
60 | 00 58 | 0.325138 | 0.325 |
62 | 80 58 | 0.332258 | 0.332 |
64 | 00 59 | 0.339534 | 0.340 |
66 | 80 59 | 0.346969 | 0.347 |
68 | 00 5a | 0.354566 | 0.355 |
6a | 80 5a | 0.362331 | 0.362 |
6c | 00 5b | 0.370265 | 0.370 |
6e | 80 5b | 0.378372 | 0.378 |
70 | 00 5c | 0.386657 | 0.387 |
72 | 80 5c | 0.395124 | 0.395 |
74 | 00 5d | 0.403777 | 0.404 |
76 | 80 5d | 0.412619 | 0.413 |
78 | 00 5e | 0.421652 | 0.422 |
7a | 80 5e | 0.430885 | 0.431 |
7c | 00 5f | 0.440321 | 0.440 |
7e | 80 5f | 0.449964 | 0.450 |
80 | 00 60 | 0.459817 | 0.460 |
82 | 80 60 | 0.469885 | 0.470 |
84 | 00 61 | 0.480174 | 0.480 |
86 | 80 61 | 0.490689 | 0.491 |
88 | 00 62 | 0.501433 | 0.501 |
8a | 80 62 | 0.512413 | 0.512 |
8c | 00 63 | 0.523633 | 0.524 |
8e | 80 63 | 0.535100 | 0.535 |
90 | 00 64 | 0.546816 | 0.547 |
92 | 80 64 | 0.558790 | 0.559 |
94 | 00 65 | 0.571027 | 0.571 |
96 | 80 65 | 0.583530 | 0.584 |
98 | 00 66 | 0.596307 | 0.596 |
9a | 80 66 | 0.609365 | 0.609 |
9c | 00 67 | 0.622708 | 0.623 |
9e | 80 67 | 0.636344 | 0.636 |
a0 | 00 68 | 0.650279 | 0.650 |
a2 | 80 68 | 0.664518 | 0.665 |
a4 | 00 69 | 0.679069 | 0.679 |
a6 | 80 69 | 0.693939 | 0.694 |
a8 | 00 6a | 0.709133 | 0.709 |
aa | 80 6a | 0.724662 | 0.725 |
ac | 00 6b | 0.740529 | 0.741 |
ae | 80 6b | 0.756745 | 0.757 |
b0 | 00 6c | 0.773316 | 0.773 |
b2 | 80 6c | 0.790249 | 0.790 |
b4 | 00 6d | 0.807554 | 0.808 |
b6 | 80 6d | 0.825237 | 0.825 |
b8 | 00 6e | 0.843307 | 0.843 |
ba | 80 6e | 0.861772 | 0.862 |
bc | 00 6f | 0.880643 | 0.881 |
be | 80 6f | 0.899928 | 0.900 |
c0 | 00 70 | 0.919633 | 0.920 |
c2 | 80 70 | 0.939771 | 0.940 |
c4 | 00 71 | 0.960348 | 0.960 |
c6 | 80 71 | 0.981378 | 0.981 |
c8 | 00 72 | 1.002867 | 1.003 |
The amplitudes below are not safe for the integrity of the linear resonant actuators.
| HA Byte 1 # | LA Byte 2-3 # | Amplitude | Amplitude Rounded |
|---|---|---|---|
ca | 80 72 | 1.024826 | 1.025 |
cc | 00 73 | 1.047266 | 1.047 |
ce | 80 73 | 1.070197 | 1.070 |
d0 | 00 74 | 1.093630 | 1.094 |
d2 | 80 74 | 1.117576 | 1.118 |
d4 | 00 75 | 1.142045 | 1.142 |
d6 | 80 75 | 1.167051 | 1.167 |
d8 | 00 76 | 1.192603 | 1.193 |
da | 80 76 | 1.218715 | 1.219 |
dc | 00 77 | 1.245398 | 1.245 |
de | 80 77 | 1.272665 | 1.273 |
e0 | 00 78 | 1.300529 | 1.301 |
e2 | 80 78 | 1.329003 | 1.329 |
e4 | 00 79 | 1.358100 | 1.358 |
e6 | 80 79 | 1.387834 | 1.388 |
e8 | 00 7a | 1.418218 | 1.418 |
ea | 80 7a | 1.449268 | 1.449 |
ec | 00 7b | 1.480997 | 1.481 |
ee | 80 7b | 1.513420 | 1.513 |
f0 | 00 7c | 1.546553 | 1.547 |
f2 | 80 7c | 1.580411 | 1.580 |
f4 | 00 7d | 1.615010 | 1.615 |
f6 | 80 7d | 1.650366 | 1.650 |
f8 | 00 7e | 1.686497 | 1.686 |
fa | 80 7e | 1.723417 | 1.723 |
fc | 00 7f | 1.761146 | 1.761 |
fe | 80 7f | 1.799701 | 1.800 |