@@ -158,6 +158,14 @@ export function readBoxCode(data: Uint8Array): string {
158158 }
159159 }
160160
161+ // MED 17.1.62 RS3
162+ if ( data . length > ( 0x3E0E78 + 10 ) ) {
163+ const boxCode = readStringSafe ( data , 0x3E0E78 , 10 , 10 ) ;
164+ if ( boxCode ) {
165+ return boxCode ;
166+ }
167+ }
168+
161169 // Bosch MED/EDC: HW part number (10-digit) near CBOOT header
162170 for ( const offset of [ 0x401a , 0x1401a , 0x1C948E ] ) {
163171 if ( data . length > ( offset + 12 ) ) {
@@ -217,6 +225,14 @@ export function readEPK(data: Uint8Array): [string, number] | [] {
217225 }
218226 }
219227
228+ // MED 17.1.62 RS3
229+ if ( data . length > ( 0x3FFE17 + 20 ) ) {
230+ const epk = readStringSafe ( data , 0x3FFE17 , 20 , 20 ) ;
231+ if ( epk ) {
232+ return [ epk , 0x3FFE17 ] ;
233+ }
234+ }
235+
220236 // Bosch MED/EDC: "CB " EPK in CBOOT header, or ECU type string
221237 for ( const region of [ { start : 0x4090 , len : 40 } , { start : 0x14090 , len : 40 } ] ) {
222238 if ( data . length > ( region . start + region . len ) ) {
@@ -245,17 +261,25 @@ export function readEPK(data: Uint8Array): [string, number] | [] {
245261export function readVersion ( data : Uint8Array ) : string {
246262 for ( const offset of CAL_OFFSETS ) {
247263 if ( data . length > ( offset + 0x2000 ) ) {
248- const epk = readStringSafe ( data , offset + 0x80 , 4 , 4 ) ;
249- if ( epk ) {
250- return epk ;
264+ const version = readStringSafe ( data , offset + 0x80 , 4 , 4 ) ;
265+ if ( version ) {
266+ return version ;
251267 }
252268 }
253269 }
254270
255271 if ( CAL_SIZES . includes ( data . length ) ) {
256- const epk = readStringSafe ( data , 0x80 , 4 , 4 ) ;
257- if ( epk ) {
258- return epk ;
272+ const version = readStringSafe ( data , 0x80 , 4 , 4 ) ;
273+ if ( version ) {
274+ return version ;
275+ }
276+ }
277+
278+ // MED 17.1.62 RS3
279+ if ( data . length > ( 0x3E0E85 + 4 ) ) {
280+ const version = readStringSafe ( data , 0x3E0E85 , 4 , 4 ) ;
281+ if ( version ) {
282+ return version ;
259283 }
260284 }
261285}
0 commit comments