21
21
NoCandidate ,
22
22
NoVersionAvailable ,
23
23
)
24
- from typedefs import FirmwareFormat , Platform , PlatformType , Vehicle
24
+ from typedefs import FirmwareFormat , FlightController , Platform , PlatformType , Vehicle
25
25
26
26
# TODO: This should be not necessary
27
27
# Disable SSL verification
@@ -123,21 +123,21 @@ def _find_version_item(self, **args: str) -> List[Dict[str, Any]]:
123
123
# Make sure that the item matches all args value
124
124
for item in self ._manifest ["firmware" ]:
125
125
for key , value in args .items ():
126
- real_key = key .replace ("_" , "-" )
127
- if real_key not in item or item [real_key ] != value :
126
+ real_key = key .replace ("_" , "-" ). lower ()
127
+ if real_key not in item or item [real_key ]. lower () != value . lower () :
128
128
break
129
129
else :
130
130
found_version_item .append (item )
131
131
132
132
return found_version_item
133
133
134
134
@temporary_cache (timeout_seconds = 3600 )
135
- def get_available_versions (self , vehicle : Vehicle , platform : Platform ) -> List [str ]:
135
+ def get_available_versions (self , vehicle : Vehicle , board : FlightController ) -> List [str ]:
136
136
"""Get available firmware versions for the specific plataform and vehicle
137
137
138
138
Args:
139
139
vehicle (Vehicle): Desired vehicle.
140
- platform (Platform ): Desired platform .
140
+ board (FlightController ): Desired Flight Controller .
141
141
142
142
Returns:
143
143
List[str]: List of available versions that match the specific desired configuration.
@@ -147,16 +147,18 @@ def get_available_versions(self, vehicle: Vehicle, platform: Platform) -> List[s
147
147
if not self ._manifest_is_valid ():
148
148
raise InvalidManifest ("Manifest file is invalid. Cannot use it to find available versions." )
149
149
150
- items = self ._find_version_item (vehicletype = vehicle .value , platform = platform .value )
150
+ platform = board .platform .value if board .platform != Platform .GenericSerial else board .name
151
+ platform_type = board .platform .type if board .platform != Platform .GenericSerial else PlatformType .Serial
152
+ items = self ._find_version_item (vehicletype = vehicle .value , platform = platform )
151
153
152
154
for item in items :
153
- if item ["format" ] == FirmwareDownloader ._supported_firmware_formats [platform . type ]:
155
+ if item ["format" ] == FirmwareDownloader ._supported_firmware_formats [platform_type ]:
154
156
available_versions .append (item ["mav-firmware-version-type" ])
155
157
156
158
return available_versions
157
159
158
160
@temporary_cache (timeout_seconds = 3600 )
159
- def get_download_url (self , vehicle : Vehicle , platform : Platform , version : str = "" ) -> str :
161
+ def get_download_url (self , vehicle : Vehicle , board : FlightController , version : str = "" ) -> str :
160
162
"""Find a specific firmware URL from manifest that matches the arguments.
161
163
162
164
Args:
@@ -168,16 +170,16 @@ def get_download_url(self, vehicle: Vehicle, platform: Platform, version: str =
168
170
Returns:
169
171
str: URL of valid firmware.
170
172
"""
171
- versions = self .get_available_versions (vehicle , platform )
172
- logger .debug (f"Got following versions for { vehicle } running { platform } : { versions } " )
173
+ versions = self .get_available_versions (vehicle , board )
174
+ logger .debug (f"Got following versions for { vehicle } running { board } : { versions } " )
173
175
174
176
if not versions :
175
- raise NoVersionAvailable (f"Could not find available firmware versions for { platform } /{ vehicle } ." )
177
+ raise NoVersionAvailable (f"Could not find available firmware versions for { board } /{ vehicle } ." )
176
178
177
179
if version and version not in versions :
178
- raise NoVersionAvailable (f"Version { version } was not found for { platform } /{ vehicle } ." )
180
+ raise NoVersionAvailable (f"Version { version } was not found for { board } /{ vehicle } ." )
179
181
180
- firmware_format = FirmwareDownloader ._supported_firmware_formats [platform .type ]
182
+ firmware_format = FirmwareDownloader ._supported_firmware_formats [board . platform .type ]
181
183
182
184
# Autodetect the latest supported version.
183
185
# For .apj firmwares (e.g. Pixhawk), we use the latest STABLE version while for the others (e.g. SITL and
@@ -192,21 +194,22 @@ def get_download_url(self, vehicle: Vehicle, platform: Platform, version: str =
192
194
if not newest_version or Version (newest_version ) < Version (semver_version ):
193
195
newest_version = semver_version
194
196
if not newest_version :
195
- raise NoVersionAvailable (f"No firmware versions found for { platform } /{ vehicle } ." )
197
+ raise NoVersionAvailable (f"No firmware versions found for { board } /{ vehicle } ." )
196
198
version = f"STABLE-{ newest_version } "
197
199
else :
198
200
version = "BETA"
199
201
200
202
items = self ._find_version_item (
201
203
vehicletype = vehicle .value ,
202
- platform = platform .value ,
204
+ platform = board . platform .value if board . platform == Platform . SITL else board . name ,
203
205
mav_firmware_version_type = version ,
204
206
format = firmware_format ,
205
207
)
206
208
207
209
if len (items ) == 0 :
210
+ logger .error (f"Could not find any firmware for { vehicle = } , { board = } , { version = } , { firmware_format = } " )
208
211
raise NoCandidate (
209
- f"Found no candidate for configuration: { vehicle = } , { platform = } , { version = } , { firmware_format = } "
212
+ f"Found no candidate for configuration: { vehicle = } , { board = } , { version = } , { firmware_format = } "
210
213
)
211
214
212
215
if len (items ) != 1 :
@@ -216,7 +219,7 @@ def get_download_url(self, vehicle: Vehicle, platform: Platform, version: str =
216
219
logger .debug (f"Downloading following firmware: { item } " )
217
220
return str (item ["url" ])
218
221
219
- def download (self , vehicle : Vehicle , platform : Platform , version : str = "" ) -> pathlib .Path :
222
+ def download (self , vehicle : Vehicle , board : FlightController , version : str = "" ) -> pathlib .Path :
220
223
"""Download a specific firmware that matches the arguments.
221
224
222
225
Args:
@@ -228,5 +231,5 @@ def download(self, vehicle: Vehicle, platform: Platform, version: str = "") -> p
228
231
Returns:
229
232
pathlib.Path: Temporary path for the firmware file.
230
233
"""
231
- url = self .get_download_url (vehicle , platform , version )
234
+ url = self .get_download_url (vehicle , board , version )
232
235
return FirmwareDownloader ._download (url )
0 commit comments