@@ -29,11 +29,26 @@ const FUNC_BY_NUMBER = {
2929export type OTAUpdate = {
3030 allModuleFunctions : ModuleDependency [ 'f' ] [ ] ;
3131 allModuleIndices : Array < number > ;
32- systemFile : Buffer ;
32+ systemFiles : Buffer [ ] ;
3333 allUpdateFiles : Array < string > ;
34+ currentModulesFiles : string [ ] ;
3435} ;
3536
3637let FirmwareSettings : FirmwareSetting [ ] = [ ] ;
38+
39+ const findSettingForFirmwareModule = (
40+ platformID : number ,
41+ dependency : FirmwareModule ,
42+ ) : FirmwareSetting | undefined => {
43+ return FirmwareSettings . find (
44+ ( { prefixInfo } : { prefixInfo : FirmwarePrefixInfo } ) : boolean =>
45+ prefixInfo . platformID === platformID &&
46+ prefixInfo . moduleVersion === dependency . version &&
47+ dependency . func != null &&
48+ prefixInfo . moduleFunction === NUMBER_BY_FUNCTION [ dependency . func ] &&
49+ prefixInfo . moduleIndex === parseInt ( dependency . name , 10 ) ,
50+ ) ;
51+ } ;
3752class FirmwareManager {
3853 private static binariesDirectory : string ;
3954
@@ -45,6 +60,28 @@ class FirmwareManager {
4560 ) as FirmwareSetting [ ] ;
4661 }
4762
63+ static getCurrentModules (
64+ systemInformation : SystemInformation ,
65+ ) : FirmwareSetting [ ] {
66+ // Fix 204 version deps. 204 doesn't exist so map it to 207
67+ systemInformation . m . forEach ( ( moduleDependency : ModuleDependency ) => {
68+ moduleDependency . d . forEach ( ( subDependency : ModuleSubDependency ) => {
69+ if ( subDependency . v === 204 ) {
70+ subDependency . v = 207 ;
71+ }
72+ } ) ;
73+ } ) ;
74+
75+ return systemInformation . m
76+ . map ( ( moduleDependency : ModuleDependency ) =>
77+ findSettingForFirmwareModule (
78+ systemInformation . p ,
79+ new FirmwareModule ( moduleDependency ) ,
80+ ) ,
81+ )
82+ . filter ( filterFalsyValues ) ;
83+ }
84+
4885 static async getMissingModules (
4986 systemInformation : SystemInformation ,
5087 ) : Promise < FirmwareSetting [ ] | null | undefined > {
@@ -98,7 +135,10 @@ class FirmwareManager {
98135
99136 return {
100137 ...result ,
101- systemFile : systemFiles [ 0 ] ,
138+ systemFiles,
139+ currentModulesFiles : FirmwareManager . getCurrentModules (
140+ systemInformation ,
141+ ) . map ( ( setting : FirmwareSetting ) => setting . filename ) ,
102142 } ;
103143 }
104144
@@ -136,23 +176,11 @@ class FirmwareManager {
136176 }
137177
138178 const iter = 0 ;
139- const findSettingForFirmwareModule = (
140- dependency : FirmwareModule ,
141- ) : FirmwareSetting | undefined => {
142- return FirmwareSettings . find (
143- ( { prefixInfo } : { prefixInfo : FirmwarePrefixInfo } ) : boolean =>
144- prefixInfo . platformID === platformID &&
145- prefixInfo . moduleVersion === dependency . version &&
146- dependency . func != null &&
147- prefixInfo . moduleFunction === NUMBER_BY_FUNCTION [ dependency . func ] &&
148- prefixInfo . moduleIndex === parseInt ( dependency . name , 10 ) ,
149- ) ;
150- } ;
151179
152180 const addRealDependencies = (
153181 dependency : FirmwareModule ,
154182 ) : FirmwareModule | null => {
155- const setting = findSettingForFirmwareModule ( dependency ) ;
183+ const setting = findSettingForFirmwareModule ( platformID , dependency ) ;
156184 if ( ! setting ) {
157185 logger . error ( {
158186 msg : 'Cannot find firmware for module' ,
@@ -225,7 +253,7 @@ class FirmwareManager {
225253 return a . name . localeCompare ( b . name ) ;
226254 } )
227255 . map ( ( dep : FirmwareModule ) : FirmwareSetting | undefined => {
228- const setting = findSettingForFirmwareModule ( dep ) ;
256+ const setting = findSettingForFirmwareModule ( platformID , dep ) ;
229257
230258 if ( ! setting ) {
231259 logger . error ( { dep, platformID } , 'Missing firmware setting' ) ;
0 commit comments