PageSourceSearch

https://racechrono.com/forum/

html racechrono.com collected 2026-09-24 10:26:00 UTC 82,679 bytes, 224 lines download raw bytes

1<!doctype html>
2<html  dir="ltr"        lang="en" >
3    <head>
4        <meta charset="utf-8">
5        <title>RaceChrono forum</title>
6
7        <link rel="stylesheet" href="https://racechrono.com/forum/assets/forum.css?v=52db56d5">
8<link rel="next" href="https://racechrono.com/forum?page=2">
9<link rel="canonical" href="https://racechrono.com/forum">
10<link rel="preload" href="https://racechrono.com/forum/assets/forum.css?v=52db56d5" as="style">
11<link rel="preload" href="https://racechrono.com/forum/assets/forum.js?v=94e48792" as="script">
12<link rel="preload" href="https://racechrono.com/forum/assets/forum-en.js?v=62e68859" as="script">
13<link rel="preload" href="https://racechrono.com/forum/assets/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin="">
14<link rel="preload" href="https://racechrono.com/forum/assets/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin="">
15<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1">
16<meta name="description" content="">
17<meta name="theme-color" content="#4D698E">
18<link rel="shortcut icon" href="https://racechrono.com/forum/assets/favicon-xfrbhnwr.png">
19<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit"></script>
19
20    </head>
21
22    <body>
23        <div id="app" class="App">
24
25    <div id="app-navigation" class="App-navigation"></div>
26
27    <div id="drawer" class="App-drawer">
28
29        <header id="header" class="App-header">
30            <div id="header-navigation" class="Header-navigation"></div>
31            <div class="container">
32                <div class="Header-title">
33                    <a href="https://racechrono.com/forum" id="home-link">
34                                                    <img src="https://racechrono.com/forum/assets/logo-knbjcuvi.png" alt="RaceChrono forum" class="Header-logo">
35                                            </a>
36                </div>
37                <div id="header-primary" class="Header-primary"></div>
38                <div id="header-secondary" class="Header-secondary"></div>
39            </div>
40        </header>
41
42    </div>
43
44    <main class="App-content">
45        <div id="content"></div>
46
47        <div id="flarum-loading" style="display: none">
48    Loading...
49</div>
50
51<noscript>
52    <div class="Alert">
53        <div class="container">
54            This site is best viewed in a modern browser with JavaScript enabled.
55        </div>
56    </div>
57</noscript>
58
59<div id="flarum-loading-error" style="display: none">
60    <div class="Alert">
61        <div class="container">
62            Something went wrong while trying to load the full version of this site. Try hard-refreshing this page to fix the error.
63        </div>
64    </div>
65</div>
66
67<noscript id="flarum-content">
68    <div class="container">
69    <h1>All Discussions</h1>
70
71    <ul>
72                    <li>
73                <a href="https://racechrono.com/forum/d/2776-racechrono-v102-beta">
74                    RaceChrono v10.2 beta
75                </a>
76            </li>
77                    <li>
78                <a href="https://racechrono.com/forum/d/1746-1746">
79                    My first build: CAN-Bus and GPS through Bluetooth LE
80                </a>
81            </li>
82                    <li>
83                <a href="https://racechrono.com/forum/d/2704-track-library-status-in-2026">
84                    Track library status in 2026
85                </a>
86            </li>
87                    <li>
88                <a href="https://racechrono.com/forum/d/2832-haltech-connect-app">
89                    Haltech Connect app
90                </a>
91            </li>
92                    <li>
93                <a href="https://racechrono.com/forum/d/2831-racesync">
94                    RaceSync
95                </a>
96            </li>
97                    <li>
98                <a href="https://racechrono.com/forum/d/2829-issues-with-diy-ble-monitor-display-esp32-nimble">
99                    Issues with DIY BLE Monitor Display (ESP32 / NimBLE)
100                </a>
101            </li>
102                    <li>
103                <a href="https://racechrono.com/forum/d/2830-is-it-possible-to-add-warning-feature-to-the-digital-gauge">
104                    Is it possible to add warning feature to the digital gauge?
105                </a>
106            </li>
107                    <li>
108                <a href="https://racechrono.com/forum/d/2147-2147">
109                    RejsaCAN = ESP32 + CAN
110                </a>
111            </li>
112                    <li>
113                <a href="https://racechrono.com/forum/d/2828-bug-report-ir-tyre-gauge-duplicate-data-from-a-diy-device">
114                    Bug Report: IR tyre gauge duplicate data from a diy device
115                </a>
116            </li>
117                    <li>
118                <a href="https://racechrono.com/forum/d/2824-bug-report-rc-fails-intermittently-with-large-0x22-rspns-payloads-159-bytes">
119                    Bug report: RC fails intermittently with large 0x22 rspns payloads (159 bytes)
120                </a>
121            </li>
122                    <li>
123                <a href="https://racechrono.com/forum/d/2822-when-to-convert-can-bus-data">
124                    When to convert CAN bus data?
125                </a>
126            </li>
127                    <li>
128                <a href="https://racechrono.com/forum/d/2826-racechrono-no-longer-automatically-detects-and-synchronizes-gopro-videos">
129                    RaceChrono no longer automatically detects and synchronizes GoPro videos
130                </a>
131            </li>
132                    <li>
133                <a href="https://racechrono.com/forum/d/2818-joining-exported-vi
133deos">
134                    Joining exported videos
135                </a>
136            </li>
137                    <li>
138                <a href="https://racechrono.com/forum/d/2823-bug-report-formulas-not-working-for-uds-mode-0x22-queries-over-obd">
139                    Bug report: Formulas not working for UDS mode 0x22 queries over OBD
140                </a>
141            </li>
142                    <li>
143                <a href="https://racechrono.com/forum/d/2772-brake-pid-for-m2-f87-og">
144                    Brake PID for M2 f87 og 
145                </a>
146            </li>
147                    <li>
148                <a href="https://racechrono.com/forum/d/2821-external-sd-card-videos-no-longer-recognized-after-update">
149                    External SD card videos no longer recognized after update
150                </a>
151            </li>
152                    <li>
153                <a href="https://racechrono.com/forum/d/2820-rfes-add-channel-explicitly-called-boost-pressure-custom-channel-names">
154                    RFEs: Add channel explicitly called &quot;Boost Pressure&quot; &amp; Custom channel names
155                </a>
156            </li>
157                    <li>
158                <a href="https://racechrono.com/forum/d/2728-can-bus-pids-for-s1000rr-k67-2019">
159                    CAN-Bus PIDs for S1000RR K67 (2019+)?
160                </a>
161            </li>
162                    <li>
163                <a href="https://racechrono.com/forum/d/2199-2199">
164                    gnss imu fusion
165                </a>
166            </li>
167                    <li>
168                <a href="https://racechrono.com/forum/d/2819-feeding-circuit-tools-higher-resolution-data-with-claude">
169                    Feeding Circuit Tools higher resolution data with Claude
170                </a>
171            </li>
172            </ul>
173
174    
175            <a href="https://racechrono.com/forum/all?page=2">Next Page &raquo;</a>
176    </div>
177
178</noscript>
179
180
181        <div class="App-composer">
182            <div class="container">
183                <div id="composer"></div>
184            </div>
185        </div>
186    </main>
187
188</div>
189
190
191
192
193        <div id="modal"></div>
194        <div id="alerts"></div>
195
196        
196<script>
197            document.getElementById('flarum-loading').style.display = 'block';
198            var flarum = {extensions: {}};
199        </script>
199
200
201        
201<script src="https://racechrono.com/forum/assets/forum.js?v=94e48792"></script>
vendor: 1 bytes, line 201
201
202<script src="https://racechrono.com/forum/assets/forum-en.js?v=62e68859"></script>
202
203
204        
204<script id="flarum-json-payload" type="application/json">{"resources":[{"type":"forums","id":"1","attributes":{"title":"RaceChrono forum","description":"","showLanguageSelector":true,"baseUrl":"https:\/\/racechrono.com\/forum","basePath":"\/forum","baseOrigin":"https:\/\/racechrono.com","debug":false,"apiUrl":"https:\/\/racechrono.com\/forum\/api","welcomeTitle":"Welcome to RaceChrono forum","welcomeMessage":"","themePrimaryColor":"#4D698E","themeSecondaryColor":"#4D698E","logoUrl":"https:\/\/racechrono.com\/forum\/assets\/logo-knbjcuvi.png","faviconUrl":"https:\/\/racechrono.com\/forum\/assets\/favicon-xfrbhnwr.png","headerHtml":null,"footerHtml":null,"allowSignUp":true,"defaultRoute":"\/all","canViewForum":true,"canStartDiscussion":false,"canSearchUsers":false,"canCreateAccessToken":false,"canModerateAccessTokens":false,"assetsBaseUrl":"https:\/\/racechrono.com\/forum\/assets","canViewFlags":false,"guidelinesUrl":null,"canBypassTagCounts":false,"minPrimaryTags":"1","maxPrimaryTags":"1","minSecondaryTags":"0","maxSecondaryTags":"3","allowUsernameMentionFormat":true,"blomstra-turnstile.site_key":"0x4AAAAAACK4kkXdbIP-QxgH","turnstile_dark_mode":false,"blomstra-turnstile.signup":true,"blomstra-turnstile.signin":true,"blomstra-turnstile.forgot":true}
204,"relationships":{"groups":{"data":[{"type":"groups","id":"1"},{"type":"groups","id":"2"},{"type":"groups","id":"3"},{"type":"groups","id":"4"}]},"tags":{"data":[{"type":"tags","id":"11"},{"type":"tags","id":"12"},{"type":"tags","id":"16"},{"type":"tags","id":"17"},{"type":"tags","id":"18"},{"type":"tags","id":"19"},{"type":"tags","id":"20"}]}}},{"type":"groups","id":"1","attributes":{"nameSingular":"Admin","namePlural":"Admins","color":"#fa0000","icon":"fas fa-cog","isHidden":0}},{"type":"groups","id":"2","attributes":{"nameSingular":"Guest","namePlural":"Guests","color":null,"icon":null,"isHidden":0}},{"type":"groups","id":"3","attributes":{"nameSingular":"Member","namePlural":"Members","color":null,"icon":null,"isHidden":0}},{"type":"groups","id":"4","attributes":{"nameSingular":"Mod","namePlural":"Mods","color":"#0011fa","icon":"fas fa-wrench","isHidden":0}},{"type":"tags","id":"11","attributes":{"name":"RaceChrono for Android","description":"Questions and bug reports on RaceChrono for Android","slug":"android-support","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":1397,"position":4,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-09-24T05:01:55+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"tags","id":"12","attributes":{"name":"Older versions of RaceChrono","description":"User support for old versions of RaceChrono","slug":"older","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":573,"position":14,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-07-02T20:02:13+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"tags","id":"16","attributes":{"name":"User videos etc","description":"Post your track videos here","slug":"user-content","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":94,"position":12,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-05-06T17:57:21+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"tags","id":"17","attributes":{"name":"Track library","description":"Questions, complaints, requests and discussion about tracks in RaceChrono track library","slug":"track-library","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":112,"position":10,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-06-11T18:42:00+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"tags","id":"18","attributes":{"name":"General","description":"General stuff about the forum etc.","slug":"general","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":620,"position":8,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-09-16T22:27:13+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"tags","id":"19","attributes":{"name":"RaceChrono for iOS","description":"Questions and bug reports for RaceChrono for iOS","slug":"ios-support","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":371,"position":2,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-09-10T10:49:53+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"tags","id":"20","attributes":{"name":"DIY builds","description":"Discussion about DIY builds to be used with RaceChrono","slug":"diy-builds","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":334,"position":6,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-09-21T12:25:23+00:00","canStartDiscussion":false,"canAddToDiscussion":false}}],"session":{"userId":0,"csrfToken":"hUB5vS21W4eQzBawsPTC2qbDp95FzwHjRYPigG98"},"locales":{"en":"English"},"locale":"en","apiDocument":{"links":{"first":"https:\/\/racechrono.com\/forum\/api\/discussions?sort=\u0026page%5Blimit%5D=20","next":"https:\/\/racechrono.com\/forum\/api\/discussions?sort=\u0026page%5Boffset%5
204D=20\u0026page%5Blimit%5D=20"},"data":[{"type":"discussions","id":"2776","attributes":{"title":"RaceChrono v10.2 beta","slug":"2776-racechrono-v102-beta","commentCount":26,"participantCount":10,"createdAt":"2026-06-04T21:16:46+00:00","lastPostedAt":"2026-09-05T20:36:11+00:00","lastPostNumber":28,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":true,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"2"}},"lastPostedUser":{"data":{"type":"users","id":"5825"}},"tags":{"data":[{"type":"tags","id":"18"}]},"firstPost":{"data":{"type":"posts","id":"17367"}}}},{"type":"discussions","id":"1746","attributes":{"title":"My first build: CAN-Bus and GPS through Bluetooth LE","slug":"1746-1746","commentCount":108,"participantCount":23,"createdAt":"2019-05-14T20:37:46+00:00","lastPostedAt":"2026-08-22T01:56:27+00:00","lastPostNumber":108,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":true,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"2"}},"lastPostedUser":{"data":{"type":"users","id":"6199"}},"tags":{"data":[{"type":"tags","id":"20"}]},"firstPost":{"data":{"type":"posts","id":"9997"}}}},{"type":"discussions","id":"2704","attributes":{"title":"Track library status in 2026","slug":"2704-track-library-status-in-2026","commentCount":13,"participantCount":8,"createdAt":"2026-01-28T16:36:20+00:00","lastPostedAt":"2026-06-11T18:42:00+00:00","lastPostNumber":14,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":true,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"2"}},"lastPostedUser":{"data":{"type":"users","id":"5921"}},"tags":{"data":[{"type":"tags","id":"17"}]},"firstPost":{"data":{"type":"posts","id":"17119"}}}},{"type":"discussions","id":"2832","attributes":{"title":"Haltech Connect app","slug":"2832-haltech-connect-app","commentCount":1,"participantCount":1,"createdAt":"2026-09-24T05:01:55+00:00","lastPostedAt":"2026-09-24T05:01:55+00:00","lastPostNumber":1,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"7484"}},"lastPostedUser":{"data":{"type":"users","id":"7484"}},"tags":{"data":[{"type":"tags","id":"11"}]},"firstPost":{"data":{"type":"posts","id":"17653"}}}},{"type":"discussions","id":"2831","attributes":{"title":"RaceSync","slug":"2831-racesync","commentCount":2,"participantCount":2,"createdAt":"2026-09-18T13:37:55+00:00","lastPostedAt":"2026-09-21T12:25:23+00:00","lastPostNumber":2,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"8530"}},"lastPostedUser":{"data":{"type":"users","id":"2"}},"tags":{"data":[{"type":"tags","id":"20"}]},"firstPost":{"data":{"type":"posts","id":"17651"}}}},{"type":"discussions","id":"2829","attributes":{"title":"Issues with DIY BLE Monitor Display (ESP32 \/ NimBLE)","slug":"2829-issues-with-diy-ble-monitor-display-esp32-nimble","commentCount":3,"participantCount":2,"createdAt":"2026-09-14T15:40:27+00:00","lastPostedAt":"2026-09-18T05:36:54+00:00","lastPostNumber":3,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"1023"}},"lastPostedUser":{"data":{"type":"users","id":"1023"}},"tags":{"data":[{"type":"tags","id":"20"}]},"firstPost":{"data":{"type":"posts","id":"17645"}}}},{"type":"discussions","id":"2830","attributes":{"title":"Is it possible to add warning feature to the digital gauge?","slug":"2830-is-it-possible-to-add-warning-feature-to-the-digital-gauge","commentCount":3,"participantCount":2,"createdAt":"2026-09-15T07:28:11+00:00","lastPostedAt":"2026-09-16T22:27:13+00:00","lastPostNumber":3,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"8206"}},"lastPostedUser":{"data":{"type":"users","id":"8206"}},"tags":{"data":[{"type":"tags","id":"18"}]},"firstPost":{"data":{"type":"posts","id":"17646"}}}},{"type":"discussions","id":"2147","attributes":{"title":"RejsaCAN = ESP32 + CAN","slug":"2147-2147","commentCount":16,"participantCount":9,"createdAt":"2021-11-05T09:05:42+00:00","lastPostedAt":"2026-09-12T17:06:07+00:00","lastPostNumber":16,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"2369"}},"lastPostedUser":{"data":{"type":"users","id":"8116"}},"tags":{"data":[{"type":"tags","id":"20"}]},"firstPost":{"data":{"type":"posts","id":"12198"}}}},{"type":"discussions","id":"2828","attributes":{"title":"Bug Report: IR tyre gauge duplicate data from a diy device","slug":"2828-bug-report-ir-tyre-gauge-duplicate-data-from-a-diy-device","commentCount":1,"participantCount":1,"createdAt":"2026-09-12T17:04:13+00:00","lastPostedAt":"2026-09-12T17:04:13+00:00","lastPostNumber":1,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"8116"}},"lastPostedUser":{"data":{"type":"users","id":"8116"}},"tags":{"data":[{"type":"tags","id":"20"}]},"firstPost":{"data":{"type":"posts","id":"17643"}}}},{"type":"discussions","id":"2824","attributes":{"title":"Bug report: RC fails intermittently with large 0x22 rspns payloads (159 bytes)","slug":"2824-bug-report-rc-fails-intermittently-with-large-0x22-rspns-payloads-159-bytes","commentCount":2,"participantCount":2,"createdAt":"2026-09-07T00:47:53+00:00","lastPostedAt":"2026-09-10T10:49:53+00:00","lastPostNumber":2,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"7308"}},"lastPostedUser":{"data":{"type":"users","id":"2"}},"tags":{"data":[{"type":"tags","id":"19"}]},"firstPost":{"data":{"type":"posts","id":"17631"}}}},{"type":"discussions","id":"2822","attributes":{"title":"When to convert CAN bus data?","slug":"2822-when-to-convert-can-bus-data","commentCount":6,"participantCount":3,"createdAt":"2026-09-06T21:11:14+00:00","lastPostedAt":"2026-09-10T07:32:28+00:00","lastPostNumber":7,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"8116"}},"lastPostedUser":{"data":{"type":"users","id":"6734"}},"tags":{"data":[{"type":"tags","id":"20"}]},"firstPost":{"data":{"type":"posts","id":"17625"}}}},{"type":"discussions","id":"2826","attributes":{"title":"RaceChrono no longer automatically detects and synchronizes GoPro videos","slug":"2826-racechrono-no-longer-automatically-detects-and-synchronizes-gopro-videos","commentCount":1,"participantCount":0,"createdAt":"2026-09-08T08:47:23+00:00","lastPostedAt":"2026-09-08T08:47:23+00:00","lastPostNumber":1,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"8528"}},"lastPostedUser":{"data":{"type":"users","id":"8528"}},"tags":{"data":[{"type":"tags","id":"11"}]},"firstPost":{"data":{"type":"posts","id":"17636"}}}},{"type":"discussions","id":"2818","attributes":{"title":"Joining exported videos","slug":"2818-joining-exported-vi
204deos","commentCount":4,"participantCount":3,"createdAt":"2026-09-03T03:08:32+00:00","lastPostedAt":"2026-09-08T00:20:36+00:00","lastPostNumber":4,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"5825"}},"lastPostedUser":{"data":{"type":"users","id":"7308"}},"tags":{"data":[{"type":"tags","id":"18"}]},"firstPost":{"data":{"type":"posts","id":"17606"}}}},{"type":"discussions","id":"2823","attributes":{"title":"Bug report: Formulas not working for UDS mode 0x22 queries over OBD","slug":"2823-bug-report-formulas-not-working-for-uds-mode-0x22-queries-over-obd","commentCount":3,"participantCount":1,"createdAt":"2026-09-06T22:27:41+00:00","lastPostedAt":"2026-09-06T23:16:25+00:00","lastPostNumber":3,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"7308"}},"lastPostedUser":{"data":{"type":"users","id":"7308"}},"tags":{"data":[{"type":"tags","id":"19"}]},"firstPost":{"data":{"type":"posts","id":"17628"}}}},{"type":"discussions","id":"2772","attributes":{"title":"Brake PID for M2 f87 og ","slug":"2772-brake-pid-for-m2-f87-og","commentCount":11,"participantCount":7,"createdAt":"2026-05-31T10:27:07+00:00","lastPostedAt":"2026-09-06T21:06:57+00:00","lastPostNumber":11,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"8473"}},"lastPostedUser":{"data":{"type":"users","id":"8116"}},"tags":{"data":[{"type":"tags","id":"18"}]},"firstPost":{"data":{"type":"posts","id":"17355"}}}},{"type":"discussions","id":"2821","attributes":{"title":"External SD card videos no longer recognized after update","slug":"2821-external-sd-card-videos-no-longer-recognized-after-update","commentCount":1,"participantCount":0,"createdAt":"2026-09-06T15:09:01+00:00","lastPostedAt":"2026-09-06T15:09:01+00:00","lastPostNumber":1,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"8526"}},"lastPostedUser":{"data":{"type":"users","id":"8526"}},"tags":{"data":[{"type":"tags","id":"11"}]},"firstPost":{"data":{"type":"posts","id":"17623"}}}},{"type":"discussions","id":"2820","attributes":{"title":"RFEs: Add channel explicitly called \u0022Boost Pressure\u0022 \u0026 Custom channel names","slug":"2820-rfes-add-channel-explicitly-called-boost-pressure-custom-channel-names","commentCount":1,"participantCount":1,"createdAt":"2026-09-04T23:18:38+00:00","lastPostedAt":"2026-09-04T23:18:38+00:00","lastPostNumber":1,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"7308"}},"lastPostedUser":{"data":{"type":"users","id":"7308"}},"tags":{"data":[{"type":"tags","id":"19"}]},"firstPost":{"data":{"type":"posts","id":"17619"}}}},{"type":"discussions","id":"2728","attributes":{"title":"CAN-Bus PIDs for S1000RR K67 (2019+)?","slug":"2728-can-bus-pids-for-s1000rr-k67-2019","commentCount":2,"participantCount":1,"createdAt":"2026-04-06T12:48:46+00:00","lastPostedAt":"2026-09-04T21:30:48+00:00","lastPostNumber":2,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"8419"}},"lastPostedUser":{"data":{"type":"users","id":"8524"}},"tags":{"data":[{"type":"tags","id":"20"}]},"firstPost":{"data":{"type":"posts","id":"17231"}}}},{"type":"discussions","id":"2199","attributes":{"title":"gnss imu fusion","slug":"2199-2199","commentCount":12,"participantCount":4,"createdAt":"2022-05-11T23:42:49+00:00","lastPostedAt":"2026-09-04T07:45:06+00:00","lastPostNumber":12,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"4029"}},"lastPostedUser":{"data":{"type":"users","id":"8523"}},"tags":{"data":[{"type":"tags","id":"18"}]},"firstPost":{"data":{"type":"posts","id":"12498"}}}},{"type":"discussions","id":"2819","attributes":{"title":"Feeding Circuit Tools higher resolution data with Claude","slug":"2819-feeding-circuit-tools-higher-resolution-data-with-claude","commentCount":1,"participantCount":1,"createdAt":"2026-09-04T05:35:51+00:00","lastPostedAt":"2026-09-04T05:35:51+00:00","lastPostNumber":1,"canReply":false,"canRename":false,"canDelete":false,"canHide":false,"isApproved":true,"canTag":false,"subscription":null,"isSticky":false,"canSticky":false,"isLocked":false,"canLock":false},"relationships":{"user":{"data":{"type":"users","id":"7308"}},"lastPostedUser":{"data":{"type":"users","id":"7308"}},"tags":{"data":[{"type":"tags","id":"20"}]},"firstPost":{"data":{"type":"posts","id":"17615"}}}}],"included":[{"type":"users","id":"2","attributes":{"username":"aol","displayName":"aol","avatarUrl":"https:\/\/racechrono.com\/forum\/assets\/avatars\/iVgGZwL7nAbvlVtC.png","slug":"aol"}},{"type":"users","id":"5825","attributes":{"username":"hasole","displayName":"hasole","avatarUrl":null,"slug":"hasole"}},{"type":"users","id":"6199","attributes":{"username":"edub","displayName":"edub","avatarUrl":null,"slug":"edub"}},{"type":"users","id":"5921","attributes":{"username":"ThePetrolHeart","displayName":"ThePetrolHeart","avatarUrl":null,"slug":"ThePetrolHeart"}},{"type":"users","id":"7484","attributes":{"username":"MarkF","displayName":"MarkF","avatarUrl":null,"slug":"MarkF"}},{"type":"users","id":"8530","attributes":{"username":"mgoode180566","displayName":"mgoode180566","avatarUrl":null,"slug":"mgoode180566"}},{"type":"users","id":"1023","attributes":{"username":"sima79","displayName":"sima79","avatarUrl":null,"slug":"sima79"}},{"type":"users","id":"8206","attributes":{"username":"viewtiful","displayName":"viewtiful","avatarUrl":null,"slug":"viewtiful"}},{"type":"users","id":"2369","attributes":{"username":"MagnusThome","displayName":"MagnusThome","avatarUrl":null,"slug":"MagnusThome"}},{"type":"users","id":"8116","attributes":{"username":"nbdnnm","displayName":"nbdnnm","avatarUrl":null,"slug":"nbdnnm"}},{"type":"users","id":"7308","attributes":{"username":"Cali_Chuck","displayName":"Cali_Chuck","avatarUrl":"https:\/\/racechrono.com\/forum\/assets\/avatars\/6u7V5mkqxUxEjnQT.png","slug":"Cali_Chuck"}},{"type":"users","id":"6734","attributes":{"username":"chiller","displayName":"chiller","avatarUrl":null,"slug":"chiller"}},{"type":"users","id":"8528","attributes":{"username":"profmilo","displayName":"profmilo","avatarUrl":null,"slug":"profmilo"}},{"type":"users","id":"8473","attributes":{"username":"SebLJ","displayName":"SebLJ","avatarUrl":null,"slug":"SebLJ"}},{"type":"users","id":"8526","attributes":{"username":"bigboss60","displayName":"bigboss60","avatarUrl":null,"slug":"bigboss60"}},{"type":"users","id":"8419","attributes":{"username":"shehab","displayName":"shehab","avatarUrl":null,"slug":"shehab"}},{"type":"users","id":"8524","attributes":{"username":"feelhip","displayName":"feelhip","avatarUrl":null,"slug":"feelhip"}},{"type":"users","id":"4029","attributes":{"username":"Liuyanting","displayName":"Liuyanting","avatarUrl":null,"slug":"Liuyanting"}},{"type":"users","id":"8523","attributes":{"username":"krisa9977","displayName":"krisa9977","avatarUrl":null,"slug":"krisa9977"}},{"type":"tags","id":"18","attributes":{"name":"General","description":"General stuff about the forum etc.","slug":"general","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discu
204ssionCount":620,"position":8,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-09-16T22:27:13+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"tags","id":"20","attributes":{"name":"DIY builds","description":"Discussion about DIY builds to be used with RaceChrono","slug":"diy-builds","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":334,"position":6,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-09-21T12:25:23+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"tags","id":"17","attributes":{"name":"Track library","description":"Questions, complaints, requests and discussion about tracks in RaceChrono track library","slug":"track-library","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":112,"position":10,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-06-11T18:42:00+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"tags","id":"11","attributes":{"name":"RaceChrono for Android","description":"Questions and bug reports on RaceChrono for Android","slug":"android-support","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":1397,"position":4,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-09-24T05:01:55+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"tags","id":"19","attributes":{"name":"RaceChrono for iOS","description":"Questions and bug reports for RaceChrono for iOS","slug":"ios-support","color":null,"backgroundUrl":null,"backgroundMode":null,"icon":null,"discussionCount":371,"position":2,"defaultSort":null,"isChild":false,"isHidden":false,"lastPostedAt":"2026-09-10T10:49:53+00:00","canStartDiscussion":false,"canAddToDiscussion":false}},{"type":"posts","id":"17367","attributes":{"number":1,"createdAt":"2026-06-04T21:16:46+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EI\u0027ve just released RaceChrono v10.2 to the Android and iOS beta groups. This one will go to production very soon, so I\u0027m posting this merely out of habit. \ud83d\ude42\u003C\/p\u003E \n\n\u003Cp\u003EThe Android beta group is available here ( \u003Ca href=\u0022https:\/\/racechrono.com\/article\/faq\/how-do-i-join-the-beta-group\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/racechrono.com\/article\/faq\/how-do-i-join-the-beta-group\u003C\/a\u003E ), and the iOS beta group can be requested through the feedback form.\u003C\/p\u003E \n\n\u003Cp\u003ERaceChrono v10.2.1 change log:\u003C\/p\u003E\n\u003Cul\u003E\u003Cli\u003ETwo GoPro cameras can now be remote controlled at once\u003C\/li\u003E\n\u003Cli\u003EFaster GoPro remote control connections\u003C\/li\u003E\n\u003Cli\u003EAdded Settings option to shift data to align with Chinese map tiles\u003C\/li\u003E\n\u003Cli\u003EAdded GPX exporter\u003C\/li\u003E\n\u003Cli\u003ERemoved GoPro WiFi connection option\u003C\/li\u003E\n\u003Cli\u003EFixed Google Maps swipe back gesture glitch (iOS only)\u003C\/li\u003E\n\u003Cli\u003EFixed Few crashes\u003C\/li\u003E\u003C\/ul\u003E\n\n\u003Cp\u003ERaceChrono v10.2.2 change log:\u003C\/p\u003E\n\u003Cul\u003E\u003Cli\u003EFixed GoPro remote control sync points were no longer added if session was resumed\u003C\/li\u003E\n\u003Cli\u003EFixed GoPro remote control sync points did not automatically select video channel #2\u003C\/li\u003E\u003C\/ul\u003E\n\n\u003Cp\u003ERaceChrono v10.2.3 change log:\u003C\/p\u003E\n\u003Cul\u003E\u003Cli\u003EMedia Store usage is replaced by shared folders: Permission READ_MEDIA_VIDEO is no longer needed (Android only)\u003C\/li\u003E\u003C\/ul\u003E\n","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"9997","attributes":{"number":2,"createdAt":"2019-05-18T04:53:15+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EI will follow this post, it\u0027s interesing for programmable ECU\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17119","attributes":{"number":1,"createdAt":"2026-01-28T16:36:20+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EEverybody please reply this post or write to feedback form, if there\u0027s major circuits that need to be added.\u003C\/p\u003E \n\n\u003Cp\u003EWe have now more than 200k registered users (and plenty more unregistered). The track library review queue is full of personal test tracks, \u0022touge\u0022 tracks etc. Proactively sorting through the queue for real circuits that could be added to the library is really painful now.\u003C\/p\u003E\n\n\u003Cp\u003ESo most likely some major tracks are not going to be added before I write some better tools. Or get a kick to my behind to add it.  \ud83d\ude03\u003C\/p\u003E\n\n","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17653","attributes":{"number":1,"createdAt":"2026-09-24T05:01:55+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EWith the newer Haltech ECUs having WIFI with live data to the Heltech Connect app. Can this be used in RC similar to an OBD2 device?\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17651","attributes":{"number":1,"createdAt":"2026-09-18T13:37:55+00:00","contentType":"comment","contentHtml":"\u003Cp\u003E\u003Ca href=\u0022https:\/\/github.com\/mgoode180566\/RaceSyncLogger\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/github.com\/mgoode180566\/RaceSyncLogger\u003C\/a\u003E\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17645","attributes":{"number":1,"createdAt":"2026-09-14T15:40:27+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EHi everyone,\u003C\/p\u003E\n\n\u003Cp\u003EI\u0027m trying to build a custom BLE monitor display for RaceChrono using an ESP32 (M5Stack Atom). I am following the official racechrono-ble-diy-device documentation and examples.\u003Cbr\u003E\n\u003Ca href=\u0022https:\/\/github.com\/aollin\/racechrono-ble-diy-device\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/github.com\/aollin\/racechrono-ble-diy-device\u003C\/a\u003E\u003C\/p\u003E\n\n\u003Cp\u003EThe Problem:\u003Cbr\u003E\nThe device is discovered by the app and the connection is stable. However, the app never starts sending telemetry data, and I don\u0027t see any read\/write activity on the characteristics.\u003C\/p\u003E\n\n\u003Cp\u003ETechnical Details:\u003C\/p\u003E\n\n\u003Cp\u003EHardware: ESP32 (M5Stack Atom)\u003Cbr\u003E\nLibrary: NimBLE-Arduino (to ensure better Android compatibility)\u003Cbr\u003E\nService UUID: 00001ff8-0000-1000-8000-00805f9b34fb\u003Cbr\u003E\nConfig Characteristic (0x05): Properties: READ | WRITE | INDICATE.\u003Cbr\u003E\nData Characteristic (0x06): Properties: WRITE | WRITE_NR.\u003Cbr\u003E\nMTU: Set to 517.\u003Cbr\u003E\nDevice Name: RC_Matrix_V1\u003Cbr\u003E\nWhat I\u0027ve tried so far:\u003C\/p\u003E\n\n\u003Cp\u003EConfiguration Push: I\u0027ve implemented an automatic push of the monitor configuration (Message Type 0x01) via indicate() and notify() every 10 seconds after connection.\u003Cbr\u003E\nMinimal Config: I reduced the request to just one channel (Channel 1: Elapsed Time) to rule out payload issues.\u003Cbr\u003E\nCache Clearing: I\u0027ve tried unpairing the device, clearing the Bluetooth cache on Android, and restarting the app\/phone.\u003Cbr\u003E\nAdvertising: Using \u0022General Discoverable\u0022 flags and adding the Service UUID to the advertising packet.\u003Cbr\u003E\nObservation:\u003Cbr\u003E\n
204In the Serial Monitor, I see \u0022Device Connected\u0022, and my code successfully calls indicate() \/ notify() for the configuration. However, the app never writes any telemetry data to the Data Characteristic (0x06), and after some time, the connection is simply closed.\u003C\/p\u003E\n\n\u003Cp\u003EMy Setup in App:\u003Cbr\u003E\nSettings \u2192 Add other device \u2192 RaceChrono DIY \u2192 Bluetooth LE \u2192 [My Device] \u2192 Monitor \u2192 OK.\u003C\/p\u003E\n\n\u003Cp\u003EHas anyone encountered this behavior? Is there a specific requirement for the handshake or a specific Android version\/setting that might be blocking the telemetry stream?\u003C\/p\u003E\n\n\u003Cp\u003EAny help would be greatly appreciated!\u003C\/p\u003E\n\n\u003Cp\u003EBest regards,\u003Cbr\u003E\nMarc\u003C\/p\u003E\n\n\u003Cp\u003E`#include \u0026lt;M5Unified.h\u0026gt;\u003Cbr\u003E\n#include \u0026lt;NimBLEDevice.h\u0026gt;\u003Cbr\u003E\n#include \u0026lt;Adafruit_NeoPixel.h\u0026gt;\u003Cbr\u003E\n#include \u0026lt;string\u0026gt; \/\/ Standard C++ String Library\u003C\/p\u003E\n\n\u003Cp\u003E\/\/ --- Hardware Konfiguration ---\u003Cbr\u003E\n#define LED_PIN 27\u003Cbr\u003E\n#define NUM_LEDS 25\u003Cbr\u003E\nAdafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);\u003C\/p\u003E\n\n\u003Cp\u003E\/\/ --- Global Variables ---\u003Cbr\u003E\nNimBLEServer* pServer = NULL;\u003Cbr\u003E\nNimBLECharacteristic* pConfigCharacteristic = NULL;\u003Cbr\u003E\nNimBLECharacteristic* pNotifyCharacteristic = NULL;\u003C\/p\u003E\n\n\u003Cp\u003Evolatile bool isDeviceConnected = false;\u003Cbr\u003E\nvolatile bool monitorsConfigured = false;\u003C\/p\u003E\n\n\u003Cp\u003E\/\/ --- Hardware Abstraction ---\u003Cbr\u003E\nvoid setMatrixColor(uint8_t r, uint8_t g, uint8_t b) {\u003Cbr\u003E\n    Serial.printf(\u0022Matrix Color Set to: R:%d G:%d B:%d\\n\u0022, r, g, b);\u003C\/p\u003E\n    \u003Cbr\u003E\n\u003Cpre\u003E\u003Ccode\u003Efor (int i = 0; i \u0026lt; NUM_LEDS; i++) {\n    strip.setPixelColor(i, strip.Color(r, g, b));\n}\nstrip.show();\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E}\u003C\/p\u003E\n\n\u003Cp\u003E\/\/ --- Forward Declarations ---\u003Cbr\u003E\nvoid configureMonitors();\u003Cbr\u003E\nvoid monitorConfigWriteCallback(uint8_t* data, uint16_t len, BLECharacteristic* pChar);\u003Cbr\u003E\nvoid monitorNotificationWriteCallback(uint8_t* data, uint16_t len, BLECharacteristic* pChar);\u003C\/p\u003E\n\n\u003Cp\u003E\/\/ --- Helper Functions ---\u003Cbr\u003E\nString formatElapsedTime(uint32_t ms) {\u003Cbr\u003E\n    uint32_t hours = ms \/ 3600000;\u003Cbr\u003E\n    uint32_t minutes = (ms % 3600000) \/ 60000;\u003Cbr\u003E\n    uint32_t seconds = (ms % 60000) \/ 1000;\u003Cbr\u003E\n    uint32_t millis = ms % 1000;\u003C\/p\u003E\n    \u003Cbr\u003E\n\u003Cpre\u003E\u003Ccode\u003Echar buffer[20];\nsnprintf(buffer, sizeof(buffer), \u0022%02lu:%02lu:%02lu.%03lu\u0022, \n         hours, minutes, seconds, millis);\nreturn String(buffer);\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E}\u003C\/p\u003E\n\n\u003Cp\u003Evoid processTelemetryData(uint8_t* data, uint16_t len) {\u003Cbr\u003E\n    if (data == NULL || len \u0026lt; 4) return;\u003C\/p\u003E\n    \u003Cbr\u003E\n\u003Cpre\u003E\u003Ccode\u003E\/\/ Extract elapsed time (first 4 bytes, Little-Endian)\nuint32_t elapsedTime = (uint32_t)data[0] | \n                      ((uint32_t)data[1] \u0026lt;\u0026lt; 8) | \n                      ((uint32_t)data[2] \u0026lt;\u0026lt; 16) | \n                      ((uint32_t)data[3] \u0026lt;\u0026lt; 24);\n\nSerial.printf(\u0022[%lu] Elapsed Time: %s\\n\u0022, millis() \/ 1000, formatElapsedTime(elapsedTime).c_str());\n\n\/\/ Optional: Process further channels\nif (len \u0026gt;= 8) {\n    uint32_t currentLapTime = (uint32_t)data[4] | \n                             ((uint32_t)data[5] \u0026lt;\u0026lt; 8) | \n                             ((uint32_t)data[6] \u0026lt;\u0026lt; 16) | \n                             ((uint32_t)data[7] \u0026lt;\u0026lt; 24);\n    Serial.printf(\u0022[%lu] Current Lap Time: %s\\n\u0022, millis() \/ 1000, formatElapsedTime(currentLapTime).c_str());\n}\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E}\u003C\/p\u003E\n\n\u003Cp\u003E\/\/ --- BLE Callbacks ---\u003Cbr\u003E\nclass MyServerCallbacks : public NimBLEServerCallbacks {\u003Cbr\u003E\n    void onConnect(NimBLEServer* pServer, NimBLEConnInfo\u0026amp;
204 connInfo) override {\u003Cbr\u003E\n        isDeviceConnected = true;\u003Cbr\u003E\n        setMatrixColor(0, 255, 0); \u003Cbr\u003E\n        Serial.println(String(millis() \/ 1000) + \u0022 Device Connected\u0022);\u003Cbr\u003E\n    }\u003C\/p\u003E\n    \u003Cbr\u003E\n\u003Cpre\u003E\u003Ccode\u003Evoid onDisconnect(NimBLEServer* pServer, NimBLEConnInfo\u0026amp; connInfo, int reason) override {\n    isDeviceConnected = false;\n    monitorsConfigured = false;\n    setMatrixColor(255, 0, 0);\n    Serial.println(String(millis() \/ 1000) + \u0022 Device Disconnected\u0022);\n    \n    NimBLEDevice::startAdvertising();\n}\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E};\u003C\/p\u003E\n\n\u003Cp\u003Eclass ConfigCallback : public NimBLECharacteristicCallbacks {\u003Cbr\u003E\n    void onWrite(NimBLECharacteristic* pChar, NimBLEConnInfo\u0026amp; connInfo) override {\u003Cbr\u003E\n        std::string value = pChar-\u0026gt;getValue();\u003Cbr\u003E\n        uint16_t len = value.length();\u003Cbr\u003E\n        uint8_t firstByte = (len \u0026gt; 0) ? (uint8_t)value[0] : 0;\u003Cbr\u003E\n        Serial.printf(\u0022Config Write received: %d bytes. First byte: 0x%02X\\n\u0022, len, firstByte);\u003Cbr\u003E\n    }\u003C\/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003Evoid onRead(NimBLECharacteristic* pChar, NimBLEConnInfo\u0026amp; connInfo) override {\n    Serial.println(\u0022Config read by App - triggering configuration...\u0022);\n    configureMonitors();\n}\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E};\u003C\/p\u003E\n\n\u003Cp\u003Eclass NotifyCallback : public NimBLECharacteristicCallbacks {\u003Cbr\u003E\n    void onWrite(NimBLECharacteristic* pChar, NimBLEConnInfo\u0026amp; connInfo) override {\u003Cbr\u003E\n        std::string value = pChar-\u0026gt;getValue();\u003Cbr\u003E\n        if (!value.empty()) {\u003Cbr\u003E\n            uint8_t* data = (uint8_t*)value.data();\u003Cbr\u003E\n            uint16_t len = value.length();\u003Cbr\u003E\n            processTelemetryData(data, len);\u003Cbr\u003E\n            setMatrixColor(0, 255, 255); \/\/ Cyan bei Datenempfang\u003Cbr\u003E\n            Serial.printf(\u0022Notification Received: %d bytes\\n\u0022, len);\u003Cbr\u003E\n        }\u003Cbr\u003E\n    }\u003C\/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003Evoid onRead(NimBLECharacteristic* pChar, NimBLEConnInfo\u0026amp; connInfo) override {\n    Serial.println(String(millis() \/ 1000) + \u0022 App pr\u00fcft Data-Charakteristik!\u0022);\n    uint8_t ready[] = { 0x01 };\n    pChar-\u0026gt;setValue(ready, 1);\n}\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E};\u003C\/p\u003E\n\n\u003Cp\u003EConfigCallback configCB;\u003Cbr\u003E\nNotifyCallback notifyCB;\u003C\/p\u003E\n\n\u003Cp\u003E\/\/ --- \u003Ccode\u003EconfigureMonitors\u003C\/code\u003E Integration according to aollin specification ---\u003Cbr\u003E\nvoid configureMonitors() {\u003Cbr\u003E\n    if (!isDeviceConnected) return;\u003Cbr\u003E\n    Serial.println(String(millis() \/ 1000) + \u0022 Sending monitor configuration to RaceChrono...\u0022);\u003C\/p\u003E\n\n\u003Cpre\u003E\u003Ccode\u003E\/\/ Data structure according to RaceChrono BLE DIY protocol for remote displays:\n\/\/ Byte 0: 0x01 (Message Type: Monitor Configuration)\n\/\/ Byte 1: Update interval (e.g. 2 = 5 Hz \/ every 200ms, 5 = 2 Hz, 10 
204= 1 Hz)\n\/\/ Byte 2: Number of requested data channels\n\/\/ Byte 3+: The desired channel IDs that the display wants to receive\nuint8_t configData[] = {\n    0x01, \/\/ Type: Monitor Configuration\n    2,    \/\/ Update rate: 5 Hz\n    1,    \/\/ Number of channels (reduced to minimum)\n    0x01  \/\/ Channel 1: Elapsed time\n};\n\npConfigCharacteristic-\u0026gt;setValue(configData, sizeof(configData));\n\n\/\/ Use notify() instead of indicate() to avoid issues with missing ACKs\npConfigCharacteristic-\u0026gt;notify(); \n\nmonitorsConfigured = true;\nSerial.println(String(millis() \/ 1000) + \u0022 Monitor configuration successfully transmitted!\u0022);\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E}\u003C\/p\u003E\n\n\u003Cp\u003E\/\/ --- Setup Functions ---\u003Cbr\u003E\nvoid bluetoothStart() {\u003Cbr\u003E\n    Serial.println(String(millis() \/ 1000) + \u0022 Initializing NimBLE...\u0022);\u003Cbr\u003E\n    NimBLEDevice::init(\u0022RC_Matrix_V1\u0022);\u003Cbr\u003E\n    NimBLEDevice::setMTU(517);\u003C\/p\u003E\n    \u003Cbr\u003E\n\u003Cpre\u003E\u003Ccode\u003EpServer = NimBLEDevice::createServer();\nif (pServer == NULL) return;\n\npServer-\u0026gt;setCallbacks(new MyServerCallbacks());\n\n#define serviceUUID \u002200001ff8-0000-1000-8000-00805f9b34fb\u0022\n#define configUUID  \u002200000005-0000-1000-8000-00805f9b34fb\u0022\n#define notifyUUID  \u002200000006-0000-1000-8000-00805f9b34fb\u0022\n\nNimBLEService* pService = pServer-\u0026gt;createService(serviceUUID);\nif (pService == NULL) return;\n\n\/\/ 0x05: Config - INDICATE und WRITE\npConfigCharacteristic = pService-\u0026gt;createCharacteristic(\n    configUUID,\n    NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::INDICATE\n);\npConfigCharacteristic-\u0026gt;setCallbacks(\u0026amp;configCB);\n\n\/\/ 0x06: Data - WRITE und WRITE_NR\npNotifyCharacteristic = pService-\u0026gt;createCharacteristic(\n    notifyUUID,\n    NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::WRITE_NR\n);\npNotifyCharacteristic-\u0026gt;setCallbacks(\u0026amp;notifyCB);\n\n\/\/ NimBLE: Services werden automatisch beim Server-Start gestartet\n\nNimBLEAdvertising* pAdvertising = NimBLEDevice::getAdvertising();\npAdvertising-\u0026gt;addServiceUUID(serviceUUID);\n\nNimBLEDevice::startAdvertising();\nSerial.println(String(millis() \/ 1000) + \u0022 Bluetooth Advertising Started\u0022);\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E}\u003C\/p\u003E\n\n\u003Cp\u003Evoid monitorConfigWriteCallback(uint8_t* data, uint16_t len, BLECharacteristic* pChar) {\u003Cbr\u003E\n    if (data == NULL) return;\u003Cbr\u003E\n    Serial.printf(\u0022Config Received: %d bytes\\n\u0022, len);\u003Cbr\u003E\n}\u003C\/p\u003E\n\n\u003Cp\u003Evoid monitorNotificationWriteCallback(uint8_t* data, uint16_t len, BLECharacteristic* pChar) {\u003Cbr\u003E\n    if (data == NULL) return;\u003C\/p\u003E\n    \u003Cbr\u003E\n\u003Cpre\u003E\u003Ccode\u003EprocessTelemetryData(data, len);
204\n\nsetMatrixColor(0, 255, 255); \/\/ Cyan bei Datenempfang\nSerial.printf(\u0022Notification Received: %d bytes\\n\u0022, len);\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E}\u003C\/p\u003E\n\n\u003Cp\u003Evoid setup() {\u003Cbr\u003E\n    auto cfg = M5.config();\u003Cbr\u003E\n    M5.begin(cfg);\u003Cbr\u003E\n    Serial.begin(115200);\u003C\/p\u003E\n    \u003Cbr\u003E\n\u003Cpre\u003E\u003Ccode\u003Estrip.begin();\nsetMatrixColor(128, 128, 128);\n\ndelay(2000); \nSerial.println(String(millis() \/ 1000) + \u0022 System Ready.\u0022);\n\nbluetoothStart();\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E}\u003C\/p\u003E\n\n\u003Cp\u003Evoid loop() {\u003Cbr\u003E\n    M5.update();\u003C\/p\u003E\n    \u003Cbr\u003E\n\u003Cpre\u003E\u003Ccode\u003Eif (isDeviceConnected) {\n    \/\/ If a device is connected, try to send the configuration every 10 seconds,\n    \/\/ as long as we haven\u0027t received telemetry data yet (monitorsConfigured = true).\n    static unsigned long lastConfigAttempt = 0;\n    if (!monitorsConfigured) {\n        unsigned long now = millis();\n        if (now - lastConfigAttempt \u0026gt; 10000) { \/\/ Increased to 10 seconds\n            lastConfigAttempt = now;\n            Serial.println(String(now \/ 1000) + \u0022 Automatic configuration transmission...\u0022);\n            configureMonitors();\n        }\n    }\n}\ndelay(10);\u003C\/code\u003E\u003Cscript async=\u0022\u0022 crossorigin=\u0022anonymous\u0022 data-hljs-style=\u0022github\u0022 integrity=\u0022sha384-E9ssooeJ4kPel3JD7st0BgS50OLWFEdg4ZOp8lYPy52ctQazOIV37TCvzV8l4cYG\u0022 src=\u0022https:\/\/cdn.jsdelivr.net\/gh\/s9e\/[email protected]\/loader.min.js\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E\n                    if(window.hljsLoader \u0026\u0026 !document.currentScript.parentNode.hasAttribute(\u0027data-s9e-livepreview-onupdate\u0027)) {\n                        window.hljsLoader.highlightBlocks(document.currentScript.parentNode);\n                    }\n                \u003C\/script\u003E\u003C\/pre\u003E\n\u003Cp\u003E}`\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17646","attributes":{"number":1,"createdAt":"2026-09-15T07:28:11+00:00","contentType":"comment","contentHtml":"\u003Cp\u003ECould be useful for temperature monitoring. Changing color\/flashing when reaching the threshold number.\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"12198","attributes":{"number":2,"createdAt":"2021-11-05T10:02:28+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EThis is wonderful! Haven\u0027t had the time to tinker with it yet, but it seems perfect. You need to send me the connector and the box at some point :smile:\u003C\/p\u003E \n\n","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17643","attributes":{"number":1,"createdAt":"2026-09-12T17:04:13+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EHello,\u003Cbr\u003E\n
204I have two Rejsa IR cameras installed on the front tyres and a DIY device getting pressure and temperature from the TPMS.\u003Cbr\u003E\nRaceChrono is configured to get tyre temperature from the DIY device and map it accordingly (front\/rear\/left\/right)\u003Cbr\u003E\nYesterday I used it all together, and I noticed that it seems like on the rendered video, RaceChrono put the rear tpms temperature on the IR tyre gauge.\u003Cbr\u003E\nYou can see it in the video here. \u003Cbr\u003E\n\u003Ca href=\u0022https:\/\/www.youtube.com\/watch?v=GfAgBZbDgZA\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/www.youtube.com\/watch?v=GfAgBZbDgZA\u003C\/a\u003E\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17631","attributes":{"number":1,"createdAt":"2026-09-07T00:47:53+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EHi \u003Ca href=\u0022https:\/\/racechrono.com\/forum\/u\/aol\u0022 class=\u0022UserMention\u0022\u003E@aol\u003C\/a\u003E.  OK so with my workaround to remove the OBD response prefix from the bug report I filed earlier today I was able to proceed and then ran into the next issue.\u003C\/p\u003E\n\n\u003Cp\u003EI am using Claude to break down various multi-byte LID blobs coming back from my ECU.  We\u0027re making very fast progress. The first four blob types are working just fine with mode 0x22 DID response payloads of up to 26 bytes.\u003C\/p\u003E\n\n\u003Cp\u003EHowever, when I moved on to the biggest blob which is 159 bytes I get random behavior from RC.  On the PID definition screen with live data activated, It does show me a large block of rapidly updating bytes for a couple of seconds, then freezes.  after several more seconds there\u0027s another batch up updated, then the freeze\/update\/freeze\/update cycle just keeps going.\u003C\/p\u003E\n\n\u003Cp\u003EI followed a structured debugging process with Claude with simultaneous CAN packet captures to observe. We pulled out all the other OBD PID definitions, then removed \u0026amp; rebuilt this definition, power cycled the phone, redid my BT pairing to OBDLink, etc.\u003C\/p\u003E  \n\n\u003Cp\u003EThe odd thing is that it does work for several transactions, then fails due to NRC 0x13 (\u0022incorrectLengthOrInvalidFormat\u0022)``.  So clearly what I\u0027m attempting is possible it\u0027s just running into some internal limit in RC.\u003C\/p\u003E\n\n\u003Cp\u003EFrom what I\u0027m seeing on the live data screen, the full ISO-TP aggregated frame is being reassembled properly at the driver level and displays in RC.\u003C\/p\u003E\n\n\u003Cp\u003ELong story short, \u003Cstrong\u003EI\u0027m guessing that your working buffer to receive ISO-TP payloads is somewhere between 64 and 100 bytes, and I\u0027m overflowing it.\u003C\/strong\u003E  I\u0027ll upload the relevant part of the Claude dialog to this note, but it wants me to tell you:\u003C\/p\u003E\n\n\u003Cblockquote class=\u0022uncited\u0022\u003E\u003Cdiv\u003E\u003Cp\u003EEither result would be useful, concrete evidence to hand RaceChrono\u0027s developers. And still consistent across all three captures: the occasional correct request (03 22 19 07) does still slip through at a steady \u003Csub\u003E4\u003C\/sub\u003E% rate in every test \u2014 worth mentioning to them too, since \u003Cstrong\u003Ea bug that\u0027s consistently wrong 96% of the time but correct 4% of the time is a stronger clue\u003C\/strong\u003E about the underlying mechanism than an all-or-nothing failure would be.\u003C\/p\u003E\u003C\/div\u003E\u003C\/blockquote\u003E\n\n\u003Cp\u003ESo dunno if this is a bug or an RFE.  If you\u0027re expecting 160 byte ISO-TP payloads to work then it would be a bug. If you know the working buffer is much smaller, then I guess I\u0027m asking for an RFE to handle ISO-TPs of at least 160 bytes.  Perhaps 250 would be more useful.\u003C\/p\u003E\n\n\u003Cp\u003EHere is a link to a PDF of the relevant part of the Claude RC debug session.  LMK if you want pcaps or anything else.  Happy to test out a cbuild, if this is as easy as just recompiling with a bigger buffer for this.\u003C\/p\u003E\n\n\u003Cp\u003E\u003Ca href=\u0022https:\/\/www.dropbox.com\/scl\/fi\/yzopzkw13oslqlcckdwis\/Claude-debug-session-on-RaceChrono-intermittent-failures-with-159-byte-OBD-mode-0x22-payloads.pdf?rlkey=snboqvq4gijtv425pdcbex9vz\u0026amp;st=4u10fkos\u0026amp;dl=0\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/www.dropbox.com\/scl\/fi\/yzopzkw13oslqlcckdwis\/Claude-debug-session-on-RaceChrono-intermittent-failures-with-159-byte-OBD-mode-0x22-payloads.pdf?rlkey=snboqvq4gijtv425pdcbex9vz\u0026amp;st=4u10fkos\u0026amp;dl=0\u003C\/a\u003E\u003C\/p\u003E\n","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17625","attributes":{"number":1,"createdAt":"2026-09-06T21:11:14+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EHi there,\u003Cbr\u003E\n
204I have a dilemma: should I convert the raw CAN bus data on my DIY CAN bus device before sending it to RC, or on the RC side?\u003Cbr\u003E\nWhat are the pros and cons of both approaches?\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17636","attributes":{"number":1,"createdAt":"2026-09-08T08:47:23+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EHi everyone,\u003Cbr\u003E\nlately I\u2019ve been having an issue with video synchronization for videos recorded during a session.\u003Cbr\u003E\nDuring the session, my GoPro automatically starts recording when I press START in RaceChrono, but when I later open the session, RaceChrono says that there is no video available.\u003Cbr\u003E\nUntil recently, the video was automatically detected and linked to the session.\u003Cbr\u003E\nIf I tap on \u201cNo video\u201d, RaceChrono shows that a recording was made, but no video is associated with it, and I have to synchronize the video manually.\u003Cbr\u003E\nHow can I restore the automatic video synchronization?\u003Cbr\u003E\nThanks everyone for your help!\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17606","attributes":{"number":1,"createdAt":"2026-09-03T03:08:32+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EHi\u003C\/p\u003E\n\n\u003Cp\u003EHow has everyone joined their exported videos without losing quality?\u003C\/p\u003E\n\n\u003Cp\u003EI tried CapCut but it compresses it too much.\u003C\/p\u003E\n\n\u003Cp\u003EThanks\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17628","attributes":{"number":1,"createdAt":"2026-09-06T22:27:41+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EHi - mentioned this briefly in a prior post but working on this specific topic today and have a reproducible bug in IOS.  Maybe Android but I don\u0027t run that.\u003C\/p\u003E\n\n\u003Cp\u003ETo be clear - this query is on OBD not CAN.\u003C\/p\u003E\n\n\u003Cp\u003EI am able to use mode $01 queries with standard single byte OBD PIDs just fine over an OBDLink MX+ on the OBD port.  So far so good.\u003C\/p\u003E\n\n\u003Cp\u003EI am in the process of mapping out the deeper two byte UDS DIDs for my engine with Claude\u0027s help.  We have 60+ DIDs mapped so far.\u003C\/p\u003E  \n\n\u003Cp\u003EWhen I turn on \u0022Test with Live Data\u0022 and go into formula screen, I am correctly seeing RC properly decode both single frame (\u0026lt;=8 byte payloads) and multi-frame payloads properly.  However, whenver I use a mode 0x22 request, no RaceChrono formula will actually recover the \u0022raw\u0022 data to operate on despite showing me the real actual data coming in just fine.\u003C\/p\u003E\n\n\u003Cp\u003EHere is an example for a two-byte DID  0x22 10 40 returning a single frame with a one byte payload.\u003C\/p\u003E\n\n\u003Cp\u003E\u003Ca href=\u0022https:\/\/www.dropbox.com\/scl\/fi\/fm34t415svaj21bn17krl\/IMG_6782.PNG?rlkey=ddp9d8wre73zg34998ozvlmzz\u0026amp;st=iu6u0f8s\u0026amp;dl=0\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/www.dropbox.com\/scl\/fi\/fm34t415svaj21bn17krl\/IMG_6782.PNG?rlkey=ddp9d8wre73zg34998ozvlmzz\u0026amp;st=iu6u0f8s\u0026amp;dl=0\u003C\/a\u003E\u003C\/p\u003E\n\n\u003Cp\u003EAnd here is an example for a DID 0x22 40 10 returning a multi-frame ISO-TP reply which amazingly RC properly interprets and passes up the entire blob.\u003C\/p\u003E\n\n\u003Cp\u003E\u003Ca href=\u0022https:\/\/www.dropbox.com\/scl\/fi\/bkcgr8gpp8klyguba65yu\/IMG_6783.PNG?rlkey=dlscx8djkqy5oy48az7a2fp9c\u0026amp;st=vtyz7189\u0026amp;dl=0\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/www.dropbox.com\/scl\/fi\/bkcgr8gpp8klyguba65yu\/IMG_6783.PNG?rlkey=dlscx8djkqy5oy48az7a2fp9c\u0026amp;st=vtyz7189\u0026amp;dl=0\u003C\/a\u003E\u003C\/p\u003E\n\n\u003Cp\u003EBoth scenarios are correctly returning live data that is changing in realtime as expected.\u003C\/p\u003E\n\n\u003Cp\u003EIn both screen shots you will see I have a formula defined but the value is \u00220\u0022 even though clearly the formula result should be nonzero.  I conclude that \u0022raw\u0022 is not working for mode 0x22 queries.\u003C\/p\u003E\n\n\u003Cp\u003EWhen I switch back to any mode 0x01 query the formulas work just fine.\u003C\/p\u003E\n\n\u003Cp\u003EI have attempted both \u0022bytestoUint\u0022 and \u0022bitstoUint\u0022 derivatives.  I have attempted to move the start point sequentially in 2 byte\/16 bit increments from a start position of 0 out to position byte 32 but always returns 0x0000.\u003C\/p\u003E\n\n\u003Cp\u003ESo RC is properly decoding but not passing the result into the \u0022raw\u0022 buffer for the formula.\u
204003C\/p\u003E\n\n\u003Cp\u003EWhat\u0027s crazy is that RC is doing all the heavy lifting of letting me do bespoke UDS queries and handling reassembly of AMPDUs. Perhaps that\u0027s the driver you\u0027re using. \u003Cstrong\u003ENonetheless, the reason we need to fix this ASAP is that I have successfully identified transmission gear and brake pressure over OBD instead of CAN.\u003C\/strong\u003E  Which would obviate the need for users who are unable or uncomfortable doing CAN taps to obtain these two channels which are not normally available on many makes\/models via OBD - as discussed ad nauseum here and on various car-specific fora.\u003C\/p\u003E\n","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17355","attributes":{"number":1,"createdAt":"2026-05-31T10:27:07+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EHello everyone, I share my discovery on braking PIDs for a BMW, M2 f87 engine N55\u003C\/p\u003E \n\n\u003Cp\u003EChannel: Brake Pedal Position (%)\u003C\/p\u003E\n\n\u003Cp\u003EPID: 0x 22 58 B7\u003C\/p\u003E\n\n\u003Cp\u003ESource data: 0x 00 00\u003C\/p\u003E\n\n\u003Cp\u003EUse live data: Enabled (toggle ON)\u003C\/p\u003E\n\n\u003Cp\u003EEquation:\u003Cbr\u003E\n(bytesToUint(raw, 0, 2) - 46848) * 100 \/ 138\u003C\/p\u003E\n\n\u003Cp\u003ESolution preview (with source data 0x0000):\u003C\/p\u003E\n\n\u003Cp\u003ERaw value = 0\u003Cbr\u003E\n(0 - 46848) \u00d7 100 \/ 138 = -33947% (expected at rest before pedal input )\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17623","attributes":{"number":1,"createdAt":"2026-09-06T15:09:01+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EMy old workflow was:\u003C\/p\u003E\n\u003Col style=\u0022list-style-type:decimal\u0022\u003E\u003Cli\u003EImport a GoPro video into RaceChrono.\u003C\/li\u003E\n\u003Cli\u003EUse \u201cMove to shared folder\u201d.\u003C\/li\u003E\n\u003Cli\u003EThe file appears in Internal storage\/DCIM\/RaceChrono.\u003C\/li\u003E\n\u003Cli\u003EManually move the file to SD card\/DCIM\/RaceChrono.\u003C\/li\u003E\n\u003Cli\u003ERaceChrono could still find and use the video.\u003C\/li\u003E\u003C\/ol\u003E\n\n\u003Cp\u003EVideos that I moved manually to the external SD card before updating RaceChrono are still recognized correctly in the current version.\u003Cbr\u003E\nHowever, videos imported with the current version are no longer recognized after I manually move them from internal storage to the external SD card.\u003C\/p\u003E\n\n\u003Cp\u003ESo it seems the newer version handles newly added video links differently.\u003Cbr\u003E\nWould it be possible to restore the old behavior, so videos can still be recognized after being moved to the external SD card?\u003C\/p\u003E\n\n\u003Cp\u003E\u003Cem\u003EThis is important for phones with limited internal storage, because GoPro videos can be very large.\u003C\/em\u003E\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17619","attributes":{"number":1,"createdAt":"2026-09-04T23:18:38+00:00","contentType":"comment","contentHtml":"\u003Cp\u003ERC has \u0022Manifold pressure\u0022 and a generic \u0022Pressure\u0022 channel.  But nothing called \u0022Boost pressure\u0022.\u003C\/p\u003E\n\n\u003Cp\u003EFor all of us running turbos, it would be super helpful to differentiate since Boost is quite different than manifold and they vary independently.\u003C\/p\u003E \n\n\u003Cp\u003EI am solving this historically by just using Manifold Pressure with IDs 1 and 2, with one for actual Manifold and one for actual boost.\u003C\/p\u003E \n\n\u003Cp\u003EThe problem this poses is of course RC creates the column header from the channel name. And when I then open the output file in Circuit Tools or some other race app it shows me the RC headers which do not mean what they say. I\u0027m getting to the point working with other people in those tools on my track data that it\u0027s annoying to constantly have to say - \u0022no that one is boost not manifold\u0022.\u003C\/p\u003E\n\n\u003Cp\u003EA related RFE would be the ability to provide a user defined channel name that propagates into the CSV export. This would be easy enough to add to the channel definition page and you can just store it in the JSON blob along with all the other channel specific info.\u003C\/p\u003E \n\n\u003Cp\u003EWhile the 2nd RFE could also be used to address the Boost Pressure channel name, given the whole world seems to be moving to turbos the absence of this field is probably causing angst for many other users besides myself.\u003C\/p\u003E\n\n\u003Cp\u003EThanks for c
204onsidering.\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17231","attributes":{"number":1,"createdAt":"2026-04-06T12:48:46+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EHi all,\u003C\/p\u003E\n\n\u003Cp\u003EHas anyone decoded the CAN-Bus PIDs for the BMW S1000RR K67 (2019+)? I\u0027m looking to set up datalogging in RaceChrono beyond standard OBD-II \u2014 specifically brake pressure, lean angle, gear position, etc.\u003C\/p\u003E\n\n\u003Cp\u003EI know the K46 PIDs are well documented in the Google Sheets spreadsheet, but those don\u0027t seem to carry over to the K67. Happy to help test and document if someone has a starting point.\u003C\/p\u003E\n\n\u003Cp\u003EThanks!\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"12498","attributes":{"number":2,"createdAt":"2022-05-12T05:37:50+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EInteresting, thank you for the tip. I will take a look at it.\u003C\/p\u003E","renderFailed":false,"mentionedByCount":0}},{"type":"posts","id":"17615","attributes":{"number":1,"createdAt":"2026-09-04T05:35:51+00:00","contentType":"comment","contentHtml":"\u003Cp\u003EI\u0027ve had a lot of questions from folks on here and other Forums about how fast \u003Cem\u003Ereally\u003C\/em\u003E is the CAN bus data. Want to share some findings and also how I started using Claude today to help with RaceChrono stuff.\u003C\/p\u003E\n\n\u003Cp\u003EIn working through my latest CAN and OBD signal additions to my data pipeline with some other community members, it became clear than I\u0027m now logging key channels like brake pressure or TQ with \u003Cstrong\u003Emedian update rate of as little as 4ms!!\u003C\/strong\u003E  And when plotted in Excel the data is so rich that one can see ABS\/TCS pumping effects in fluctuations of both of those channels on timescales of 5-10ms.\u003C\/p\u003E \n\n\u003Cp\u003EFor example - \u003Ca href=\u0022https:\/\/www.dropbox.com\/scl\/fi\/fpxs4zzbt6zle834v5un5\/Chart-of-CAN-Brake-Pressure-Sonoma-T7-4-seconds-684-rows-6ms-interval.png?rlkey=n5w2art6vx8klenx2owszayd1\u0026amp;st=4bhjly1e\u0026amp;dl=0\u0022 rel=\u0022ugc nofollow\u0022\u003Ehere is 4 seconds of approaching Sonoma T7 through the brake zone and passing the apex, raw CSV plotted in Excel\u003C\/a\u003E. This is exactly 4 seconds of real time, during which RaceChrono collected 684 rows of differentiated data (e.g. can see per-signal variation on every indiviual row on timescales of 1-5ms). ABS (or perhaps wheel slip) effects are clearly visible in the chart.\u003C\/p\u003E\n\n\u003Cp\u003EIf you know the track, \u003Cimg src=\u0022https:\/\/www.dropbox.com\/scl\/fi\/9ohrsln2zg784ucj6xpba\/2026-09-03_01-46-53.jpg?rlkey=i6sprft9mxk5qspqvcbtw7oct\u0026amp;st=zkx4d9qp\u0026amp;dl=0\u0022 title=\u0022\u0022 alt=\u0022these 4 seconds correspond roughly to this distance\u0022\u003E.\u003C\/p\u003E\n\n\u003Cp\u003E\u003Ca href=\u0022https:\/\/www.dropbox.com\/scl\/fi\/9ohrsln2zg784ucj6xpba\/2026-09-03_01-46-53.jpg?rlkey=i6sprft9mxk5qspqvcbtw7oct\u0026amp;st=b6metuwv\u0026amp;dl=0\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/www.dropbox.com\/scl\/fi\/9ohrsln2zg784ucj6xpba\/2026-09-03_01-46-53.jpg?rlkey=i6sprft9mxk5qspqvcbtw7oct\u0026amp;st=b6metuwv\u0026amp;dl=0\u003C\/a\u003E\u003C\/p\u003E\n\n\u003Cp\u003EOf course, as noted in other threads on this Forum I am using Circuit Tools (CT) as my primary track day study tool. And RaceChrono exports VBO files at 100ms intervals - which is the same logging rate as the VBox hardware. This rate leaves out a TON of granularity on what\u0027s actually happening. It\u0027s great for a coarse high-level coaching view but not necessarily detailed enough to investigate specific behaviors in particular corners. \u003Cimg src=\u0022https:\/\/www.dropbox.com\/scl\/fi\/rp6cf6htjjdtkozhjgwbt\/2026-09-03_22-13-18.jpg?rlkey=3o3vbt5lj41xmo2954k1nuh1h\u0026amp;st=svfjgpaj\u0026amp;dl=0\u0022 title=\u0022\u0022 alt=\u0022Here is the same corner view for 3 superimposed laps @ 100ms \u0026quot;normal\u0026quot; Vbox update rate\u0022\u003E.\u003C\/p\u003E\n\n\u003Cp\u003E\u003Ca href=\u0022https:\/\/www.dropbox.com\/scl\/fi\/rp6cf6htjjdtkozhjgwbt\/2026-09-03_22-13-18.jpg?rlkey=3o3vbt5lj41xmo2954k1nuh1h\u0026amp;st=lnmx3epr\u0026amp;dl=0\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/www.dropbox.com\/scl\/fi\/rp6cf6htjjdtkozhjgwbt\/2026-09-03_22-13-18.jpg?rlkey=3o3vbt5lj41xmo2954k1nuh1h\u0026amp;st=lnmx3epr\u0026amp;dl=0\u003C\/a\u003E\u003C\/p\u003E\n\n\u003Cp\u003ETotally night and day as compared to the Excel data.  About 45 data points in the CT image for 4.5 seconds vs. over 680 data points in the CSV. So I got to wondering if Circuit Tools can import files with higher temporal resolution. TL;DR the answer is YES!  \u003Cem\u003E(who wants to chart all this stuff in Excel, much less figure out by hand which rows correspond to which laps and corners...)\u003C\/em\u003E\u003C\/p\u003E\n\n\u003Cp\u003ESo I got to wondering - having resisted until very recently doing anything substantial with Claude maybe this was a good way to see what it could do. Signed up for a Claude Pro account and fed it a RC CSVv3 and a companion VBO file and some instructions. Lo and behold - in less than an hour I had it seamlessly reformatting CSVv3 to VBO at arbitrary temporal scales. Started by just doubling the interval from 100ms to 50ms just to see if CT would even load such a file... and it did.\u003C\/p\u003E  \n\n\u003Cp\u003ESo jumped down to 10ms since I knew there was visibly significant change at that timescale, increasing VBO filesize up to 180MB and again it loaded. So just to really push the envelope I had Claude redo the file again at 5ms which increased filesize to 370MB and again CT loaded it.  Not only that but it was able to hold the 5ms, 10ms, 50ms and default RaceChrono 100ms all in memory simultaneously and \u003Cem\u003E(slowly but faster than you would think)\u003C\/em\u003E let me do multicolor overlays of all 4 onto one another on the same plot.\u003C\/p\u003E\n\n\u003Cp\u003ECrazy cool.\u003C\/p\u003E\n\n\u003Cp\u003EHere\u0027s a view in CT showing the \u003Cimg src=\u0022https:\/\/www.dropbox.com\/scl\/fi\/ygtvj2evbs6mzuzej0yfn\/2026-09-03_22-25-54-10ms-vs-100ms.jpg?rlkey=bwepm6bk9exd89a15c2ucwoz1\u0026amp;st=d4pj794o\u0026amp;dl=0\u0022 title=\u0022\u0022 alt=\u0022original RaceChrono export @ 100ms _(in red - note the discrete diamond data points)_ with 10ms data overlaid in blue\u0022\u003E. You can really start to see much more detail at this scale.\u003C\/p\u003E  \n\n\u003Cp\u003E\u003Ca href=\u0022https:\/\/www.dropbox.com\/scl\/fi\/ygtvj2evbs6mzuzej0yfn\/2026-09-03_22-25-54-10ms-vs-100ms.jpg?rlkey=bwepm6bk9exd89a15c2ucwoz1\u0026amp;st=2xxq8q4v\u0026amp;dl=0\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/www.dropbox.com\/scl\/fi\/ygtvj2evbs6mzuzej0yfn\/2026-09-03_22-25-54-10ms-vs-100ms.jpg?rlkey=bwepm6bk9exd89a15c2ucwoz1\u0026amp;st=2xxq8q4v\u0026amp;dl=0\u003C\/a\u003E\u003C\/p\u003E\n\n\u003Cp\u003ETo be clear I\u0027m not asking \u003Ca href=\u0022https:\/\/racechrono.com\/forum\/u\/aol\u0022 class=\u0022UserMention\u0022\u003E@aol\u003C\/a\u003E for a feature. And as mentioned this level of detail cannot be justified on every session, it has to be targeted to addressing specific setup or training issues - likely in particular corners. Just sharing discovery that (1) VBO 100ms interval is not normative and it will ingest and visualize vastly higher resolution data; (2) Claude can reprocess your CSVs into VBOs of arbitrary temporal scale in a matter of minutes.\u003C\/p\u003E\n\n\u003Cp\u003EOne last thing....  just to drive the point home about CAN bus update frequency vs. other sources. \u003Cimg src=\u0022https:\/\/www.dropbox.com\/scl\/fi\/z967dareumwj3eoij269x\/Histogram-of-CAN-Brake-pressure-Sonoma-T7-4-seconds-684-rows-avg-6msec.png?rlkey=afkrplsqxnw1i0ukttw5ni52b\u0026amp;st=uo3h68am\u0026amp;dl=0\u0022 title=\u0022\u0022 alt=\u0022Here is a histogram of the delta-T for the 684 brake pressure readings in the Excel chart above\u
2040022\u003E. Minimum update was 1ms - seriously - and hand verified that the value was in fact changing on that timescale. \u003Cstrong\u003EAverage was 6ms and median was 4ms.\u003C\/strong\u003E Perhaps my Cayman ECU increases update rate on this signal when under load, not sure. But the chart above makes clear the changes are catching real vehicle behavior on miniscule timescales.\u003C\/p\u003E\n\n\u003Cp\u003E\u003Ca href=\u0022https:\/\/www.dropbox.com\/scl\/fi\/z967dareumwj3eoij269x\/Histogram-of-CAN-Brake-pressure-Sonoma-T7-4-seconds-684-rows-avg-6msec.png?rlkey=afkrplsqxnw1i0ukttw5ni52b\u0026amp;st=uo3h68am\u0026amp;dl=0\u0022 rel=\u0022ugc nofollow\u0022\u003Ehttps:\/\/www.dropbox.com\/scl\/fi\/z967dareumwj3eoij269x\/Histogram-of-CAN-Brake-pressure-Sonoma-T7-4-seconds-684-rows-avg-6msec.png?rlkey=afkrplsqxnw1i0ukttw5ni52b\u0026amp;st=uo3h68am\u0026amp;dl=0\u003C\/a\u003E\u003C\/p\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ESo yes CAN bus is staggeringly faster.\u003C\/strong\u003E In part because it\u0027s a broadcast-only system unlike OBD which is request\/response transaction based, and in part because a single CAN message can mux up to 20 (or more!) different pieces of data into a single transmission. I have two OBDLink MX+ capturing different CAN bus and another OBDLink MX+ capturing OBD and RaceChrono is happily grabbing all of it on single millisecond timescales on an iPhone 17.  My per-session CSVv3 output files are regularly pushing 250MB no problem.\u003C\/p\u003E\n\n\u003Cp\u003EReally nice work \u003Ca href=\u0022https:\/\/racechrono.com\/forum\/u\/aol\u0022 class=\u0022UserMention\u0022\u003E@aol\u003C\/a\u003E!\u003C\/p\u003E\n\n\u003Cp\u003E(you really need to add native image support for Forum posts - can\u0027t figure out why these links are breaking)\u003C\/p\u003E\n","renderFailed":false,"mentionedByCount":0}}]}}</script>
204
205
206        
206<script>
207            const data = JSON.parse(document.getElementById('flarum-json-payload').textContent);
208            document.getElementById('flarum-loading').style.display = 'none';
209
210            try {
211                flarum.core.app.load(data);
212                flarum.core.app.bootExtensions(flarum.extensions);
213                flarum.core.app.boot();
214            } catch (e) {
215                var error = document.getElementById('flarum-loading-error');
216                error.innerHTML += document.getElementById('flarum-content').textContent;
217                error.style.display = 'block';
218                throw e;
219            }
220        </script>
220
221
222        
223    </body>
224</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.