13.1.14. Tredje parts arkiv#

IDE skickar OpenMV:s egna kort, firmware, exempel, maskininlärningsmodeller och redaktörsstubbar, men den kan ladda samma typ av innehåll från andra företag också - en tavla som en partner har byggt, firmwaren som körs på den, exempel och modeller anpassade för den, och kodkomplettering för API:erna som firmware lägger till. Dessa kommer som third-party repositories: mappar med innehåll som IDE slår samman med sitt eget och håller sig uppdaterade.

Den här sidan har två målgrupper. Det mesta är för den person som installerar och hanterar ett arkiv som någon annan publicerat. Den sista delen, authoring a repository, är till för säljaren som bygger ett.

13.1.14.1. Tredjepartsförrådssidan#

Allt hanteras från Redigera → Inställningar → OpenMV → Tredjepartsförråd. Tabellen listar varje installerat arkiv och, för varje, dess visningsnamn, dess korta id, oavsett om det är Built-in eller User, den installerade versionen av varje typ av innehåll som den tillhandahåller - firmware, exempel, modeller, stubbar - och URL:en den uppdateras från.

Built-in betyder att förvaret placerades i applikationens egen katalog av en installatör som leverantören skickade, på det sätt som ett drivrutinspaket lägger till filer i ett program. User betyder att du installerade det själv från en URL. Den enda praktiska skillnaden är att du inte kan ta bort ett inbyggt arkiv från IDE – det tas bort genom att avinstallera vad som än står där – så knappen Ta bort är inaktiverad för det.

13.1.14.2. Installera ett förråd#

Installera från URL frågar efter adressen till ett förvars config.json – den lilla manifestfilen som leverantören publicerar – och installerar allt den pekar på. Klistra in webbadressen som leverantören gav dig; IDE laddar ner manifestet, hämtar firmware, exempel, modeller och stubbar som det listar och verifierar varje nedladdning. Installation, borttagning och uppdatering av ett arkiv träder i kraft efter en omstart, så IDE erbjuder sig att starta om när installationen är klar.

En leverantör kan också distribuera ett arkiv som ett installationsprogram som släpper det direkt i programkatalogen, i vilket fall det helt enkelt finns som en Built-in-rad första gången du öppnar sidan – inget att installera.

13.1.14.3. Håller arkiven uppdaterade#

Ett arkiv som har en uppdaterings-URL kontrolleras varje gång IDE startar. När nyare innehåll är tillgängligt berättar IDE vad - listar varje arkiv och de inblandade versionerna - och erbjuder dig att installera det, allt i en enda uppmaning. Check for Updates kör samma kontroll på begäran.

13.1.14.4. Prioritet och åsidosättanden#

Förvar är en ordnad lista, högsta prioritet högst upp, och Flytta upp och Flytta ned ändrar ordningen på den valda. Ordningen spelar bara roll när två källor tillhandahåller same-saken: ett kort med samma USB-identifierare, eller ett exempel, modell eller stubb med samma namn. När det händer vinner den högre posten, och varje förråd vinner över OpenMVs inbyggda innehåll. Detta är avsiktligt – det är hur en leverantör tillhandahåller sin egen firmware för ett kort som delar ett OpenMV-korts USB-identifierare, och ersätter den fasta firmware som IDE annars skulle erbjuda för det, eller ersätter ett lagerexempel med ett som är skrivet för deras hårdvara.

Eftersom en åsidosättning tyst ändrar vad ett välbekant namn gör, döljer sidan aldrig ett. Panelen Åsidosätt varningslistor listar varje åsidosättande som gäller – vilket förvars kort, exempel, modell eller stubb som åsidosätter vilket – och samma lista visas en gång som ett meddelande första gången ett förvar ses. Om en tavla, ett exempel eller en modell inte beter sig som OpenMVs dokumentation beskriver, är denna panel det första stället att titta på.

13.1.14.5. Vad ett förråd ger#

De fyra typerna av innehåll visas var och en på sin vanliga plats i IDE, så när ett arkiv väl är installerat finns det inget nytt att lära sig:

  • Boards and firmware. Ett förvars kort beter sig precis som ett OpenMV-kort – det känns igen vid anslutning, dess typ visas i statusfältet och dess firmwareuppdateringar via IDE, inklusive sökvägen Installera den senaste utvecklingsversionen. Se Firmware-uppdateringar och återställning.

  • Examples. Ett arkivs exempel visas i Arkiv → Exempel, sammanslagna i kategoriträdet: ett exempel i en kategori som leverantören heter samma som en OpenMV-kategori sitter bredvid OpenMV-en, och en ny kategori blir en egen undermeny. De filtreras till brädorna de stöder som vilket exempel som helst. Se Skript, exempel och dokumentmappen.

  • Models. Ett förvars modeller visas i Model Zoo, sammanslagna i webbläsarträdet på samma sätt, med leverantörens egna beskrivningar.

  • Stubs. Ett arkiv kan skicka .pyi stubbfiler så att editor erbjuder komplettering, signaturer och dokumentation för de funktioner som dess firmware lägger till – samma komplettering som du får för OpenMVs egna moduler, för en leverantörs anpassade API.

13.1.14.6. Skapa ett arkiv#

Ett arkiv är en mapp som är namngiven efter leverantören, som innehåller ett config.json-manifest och en undermapp för varje typ av innehåll som det tillhandahåller:

acme/
  config.json
  firmware/
    settings.json                 board descriptions
    ACME_CAM1/                    one folder per board, named by boardFirmwareFolder
      firmware.bin
      romfs0.img
  firmware.version
  examples/
    index.csv                     which examples show for which board / sensor
    01-Getting-Started/           numbered category folders, same as OpenMV's
      hello_acme.py
      read_sensor.py
    02-Acme-Widgets/
      spin_widget.py
  examples.version
  models/
    index.csv                     which models show for which board
    acme/                         a group; its index.html + image describe it
      index.html
      image.jpg
      person_detector/            one folder per model
        person_detector.tflite
        person_detector.txt       class labels
  models.version
  stubs/
    acme_hal.pyi                  a module the firmware adds
    csi.pyi                       overrides OpenMV's to add methods
  stubs.version

Mappnamnet är arkivets id: små bokstäver, siffror, - och _, som börjar med en bokstav. Varje delmapp är valfri; skicka bara det du har. Bredvid varje delmapp finns en <part>.version-fil som innehåller en enda versionssträng (1.2.0) som IDE använder för att avgöra när en uppdatering är nyare.

13.1.14.6.1. Manifestet#

config.json namnger förvaret och pekar för varje del på ett nedladdningsbart arkiv:

{
  "name": "acme",
  "displayName": "Acme Robotics",
  "homepage": "https://acme.example",
  "configUrl": "https://acme.example/openmv/config.json",
  "firmware": {
    "release":     { "version": "1.2.0", "url": "https://acme.example/acme-fw-1.2.0.zip", "sha256": "..." },
    "development": { "version": "dev-20260701", "url": "https://acme.example/acme-fw-dev.zip", "sha256": "..." }
  },
  "examples": { "release": { "version": "1.1.0", "url": "https://acme.example/acme-examples-1.1.0.zip", "sha256": "..." } },
  "models":   { "release": { "version": "1.0.0", "url": "https://acme.example/acme-models-1.0.0.zip", "sha256": "..." } },
  "stubs":    { "release": { "version": "1.0.0", "url": "https://acme.example/acme-stubs-1.0.0.zip", "sha256": "..." } }
}

name måste matcha mappnamnet. configUrl är adressen som samma fil finns på; IDE:n hämtar den igen för att söka efter uppdateringar, så utelämna den endast för ett arkiv som aldrig kommer att uppdateras. Varje del har en release-kanal, och fast programvara kan också ha en development-kanal som används av Installera den senaste utvecklingsversionen. Release version värden jämförs som siffror, så ett högre erbjuds som en uppdatering; utvecklingsversioner jämförs endast för förändring. sha256 är valfritt men verifieras när det finns.

Varje url pekar på en .zip (endast zip). Ett arkiv rymmer exakt one top-level folder, och IDE installerar mappens contents som delen – så firmwarearkivet är paketerat så här:

acme-fw-1.2.0.zip
  acme-firmware/           one wrapping folder; its name does not matter
    settings.json
    ACME_CAM1/
      firmware.bin
      romfs0.img

och packar upp till mappen firmware/ som visades tidigare. Exemplen, modellerna och stubbarkiven är förpackade på samma sätt – en omslagsmapp som rymmer det som skulle sitta inuti examples/, models/ eller stubs/. Omslagsmappens namn ignoreras; Det viktiga är att det finns exakt en. Att zippa filerna vid arkivroten utan någon omslagsmapp, eller att slå in dem i mer än en mapp, kommer inte att installeras. Det enklaste sättet att få det rätt är att zippa själva mappen – välj acme-firmware och komprimera den, istället för att välja innehållet.

13.1.14.6.2. Brädor, exempel, modeller och stubbar#

firmware/settings.json använder samma kortbeskrivningsformat som den fasta programvaran som IDE levererar; lägg till en boards-post för var och en av dina anslagstavlor. Några regler är specifika för tredjepartskort: boardFirmwareFolder måste vara unikt (det används ännu inte av OpenMV eller någon annan leverantör, eftersom det döper mappen som dina binärer bor i), varje kort måste ha sina egna firmware_version (detta är vad som driver uppmaningen om uppdatering vid anslutning), och ett kort kan ställa in boardFirmwareFolderAlias till boardFirmwareFolderAlias-kortets namn på det fasta kortet i hennes mv-kort. exempel och modeller – utrymningsluckan för ett kort som är firmwarekompatibelt med ett OpenMV-kort. Återanvändning av OpenMV bootloader identifierare förväntas (de bär de signerade Windows-drivrutinerna); en appidentifierare som kolliderar med ett inbyggt kort åsidosätter det kortet, vilket panelen Åsidosätt varningar rapporterar.

Exempel finns i numrerade kategorimappar som OpenMV:s (01-Getting-Started); en kategori som du namnger på samma sätt som en OpenMV interfolierar in i den, och ett nytt namn blir en egen menydel. En modell är en mapp som innehåller dess .tflite och en matchande .txt av klassetiketter, grupperade under en mapp vars index.html (och en valfri bild) är beskrivningen som visas bredvid den i Model Zoo. examples/index.csv och models/index.csv är samma kort- och sensorfilterfiler som OpenMV:s egna exempel och modeller använder, matchade mot ditt exempel och modellvägar, och bestäm vilken av dina som visar för vilken bräda. Stubbar är vanliga .pyi-filer; IDE lämnar sin mapp till språkservern så att de löser sig tillsammans med OpenMV, och en stubb namngiven efter en befintlig modul (csi.pyi) åsidosätter den modulens komplettering.

13.1.14.6.3. Publicering och uppdatering#

För att publicera, värd config.json och arkiven den refererar till på stabila webbadresser och ge användarna config.json-URL:n att installera från. Överallt som serverar vanliga filer över HTTPS fungerar - en webbserver, ett objektlager eller en kodvärd. För att skicka en uppdatering, ladda upp nya arkiv, bump de påverkade version-värdena i den värdbaserade config.json, och nästa gång varje användares IDE lanseras erbjuder den uppdateringen. Användare som installerade arkivet via ett installationsprogram får istället uppdateringar på samma sätt, så länge som den installerade config.json har en configUrl.

13.1.14.6.4. Hosting på GitHub#

GitHub är en bekväm värd, och IDE hämtar från den på samma sätt som den hämtar sina egna resurser. Det finns två delar att placera: manifestet och arkivet.

Behåll config.json i ett arkiv och ge användarna dess raw-URL – adressen som filen serveras på direkt, inte GitHub-sidan som visar den. Raw-knappen på filen visar det; den har formen

https://raw.githubusercontent.com/<user>/<repo>/<branch>/config.json

Den råa URL:en är vad en användare klistrar in i Installera från URL, och vad du lägger i manifestets egen configUrl så att IDE:n hämtar den igen för att söka efter uppdateringar. Att peka på en gren (main) innebär att trycka på en ny commit publicerar ändringen; att peka den mot en tagg fäster användare till en fast version istället.

Värd .zip-arkiven som release assets snarare än att begå dem – utgåvor är byggda för binära nedladdningar, så ett firmwarepaket med flera megabyte hör dit, inte i förvarets historia. Bifoga varje arkiv till en GitHub-version och använd dess nedladdnings-URL, som har formen

https://github.com/<user>/<repo>/releases/download/<tag>/acme-fw-1.2.0.zip

i manifestets url-fält, var och en med arkivets sha256. Att skicka en uppdatering är då: bifoga de nya arkiven till en utgåva, redigera config.json för att peka på dem och stöta på versionerna, och commit. IDE tar upp ändringen vid nästa lansering (råfilen serveras genom en cache som uppdateras inom några minuter efter push).