mirror of
https://github.com/agessaman/MeshCore.git
synced 2026-07-21 00:21:05 +00:00
Refine Mesh America catalog metadata
This commit is contained in:
@@ -22,7 +22,6 @@ $Catalogs = @(
|
||||
)
|
||||
|
||||
$RoleDefinitions = [ordered]@{
|
||||
companionSerial = [ordered]@{ name = 'Companion Serial' }
|
||||
companionWifi = [ordered]@{ name = 'Companion WiFi' }
|
||||
repeaterBridgeEspnow = [ordered]@{ name = 'Repeater Bridge ESP-NOW' }
|
||||
repeaterBridgeRs232 = [ordered]@{ name = 'Repeater Bridge RS232' }
|
||||
@@ -45,7 +44,7 @@ $RolePatterns = @(
|
||||
@{ Suffix = 'companion_radio_usb'; Role = 'companionUsb'; Title = 'Companion USB'; SubTitle = $null },
|
||||
@{ Suffix = 'companion_usb'; Role = 'companionUsb'; Title = 'Companion USB'; SubTitle = $null },
|
||||
@{ Suffix = 'comp_radio_usb'; Role = 'companionUsb'; Title = 'Companion USB'; SubTitle = $null },
|
||||
@{ Suffix = 'companion_radio_serial'; Role = 'companionSerial'; Title = 'Companion Serial'; SubTitle = $null },
|
||||
@{ Suffix = 'companion_radio_serial'; Role = 'companionUsb'; Title = 'Companion USB'; SubTitle = 'Serial' },
|
||||
@{ Suffix = 'companion_radio_wifi'; Role = 'companionWifi'; Title = 'Companion WiFi'; SubTitle = $null },
|
||||
@{ Suffix = 'repeater_bridge_rs232_serial1'; Role = 'repeaterBridgeRs232'; Title = 'Repeater Bridge RS232'; SubTitle = 'Serial 1' },
|
||||
@{ Suffix = 'repeater_bridge_rs232_serial2'; Role = 'repeaterBridgeRs232'; Title = 'Repeater Bridge RS232'; SubTitle = 'Serial 2' },
|
||||
@@ -63,9 +62,85 @@ $RolePatterns = @(
|
||||
@{ Suffix = 'sensor'; Role = 'sensor'; Title = 'Sensor'; SubTitle = $null }
|
||||
)
|
||||
|
||||
$MakerDefinitions = [ordered]@{
|
||||
elecrow = [ordered]@{ name = 'Elecrow' }
|
||||
ebyte = [ordered]@{ name = 'Ebyte' }
|
||||
'gat-iot' = [ordered]@{ name = 'GAT-IoT' }
|
||||
generic = [ordered]@{ name = 'Generic' }
|
||||
heltec = [ordered]@{ name = 'Heltec' }
|
||||
Ikoka = [ordered]@{ name = 'Ikoka' }
|
||||
keepteen = [ordered]@{ name = 'Keepteen' }
|
||||
lilygo = [ordered]@{ name = 'LilyGo' }
|
||||
m5stack = [ordered]@{ name = 'M5Stack' }
|
||||
meshadventurer = [ordered]@{ name = 'Meshadventurer' }
|
||||
meshimi = [ordered]@{ name = 'Meshimi' }
|
||||
meshtiny = [ordered]@{ name = 'Meshtiny' }
|
||||
minewsemi = [ordered]@{ name = 'Minewsemi' }
|
||||
muziworks = [ordered]@{ name = 'Muzi Works' }
|
||||
nibble = [ordered]@{ name = 'Nibble' }
|
||||
promicro = [ordered]@{ name = 'ProMicro' }
|
||||
rak = [ordered]@{ name = 'RAK Wireless' }
|
||||
raspberry = [ordered]@{ name = 'Raspberry Pi' }
|
||||
seeed = [ordered]@{ name = 'Seeed Studio' }
|
||||
tenstar = [ordered]@{ name = 'Tenstar' }
|
||||
tinyrelay = [ordered]@{ name = 'Tiny Relay' }
|
||||
uniteng = [ordered]@{ name = 'UnitEng' }
|
||||
why2025 = [ordered]@{ name = 'WHY2025' }
|
||||
}
|
||||
|
||||
$DeviceMakerOverrides = @{
|
||||
'KeepteenLT1' = 'keepteen'
|
||||
'M5Stack_Unit_C6L' = 'm5stack'
|
||||
'Mesh_pocket' = 'heltec'
|
||||
'Meshimi' = 'meshimi'
|
||||
'Meshtiny' = 'meshtiny'
|
||||
'Minewsemi_me25ls01' = 'minewsemi'
|
||||
'Nano_G2_Ultra' = 'uniteng'
|
||||
'nibble_screen_connect' = 'nibble'
|
||||
'PicoW' = 'raspberry'
|
||||
'ProMicro' = 'promicro'
|
||||
'R1Neo' = 'muziworks'
|
||||
'SenseCapIndicator-ESPNow' = 'seeed'
|
||||
'SenseCap_Solar' = 'seeed'
|
||||
'T_Beam_S3_Supreme_SX1262' = 'lilygo'
|
||||
't1000e' = 'seeed'
|
||||
'Tiny_Relay' = 'tinyrelay'
|
||||
'waveshare_rp2040_lora' = 'raspberry'
|
||||
'WHY2025_badge' = 'why2025'
|
||||
'wio-e5' = 'seeed'
|
||||
'wio-e5-mini' = 'seeed'
|
||||
'wio_wm1110' = 'seeed'
|
||||
'WioTrackerL1' = 'seeed'
|
||||
'WioTrackerL1Eink' = 'seeed'
|
||||
}
|
||||
|
||||
$DeviceMakerPatterns = @(
|
||||
@{ Prefix = 'Ebyte_'; Maker = 'ebyte' },
|
||||
@{ Prefix = 'GAT562_'; Maker = 'gat-iot' },
|
||||
@{ Prefix = 'Generic_'; Maker = 'generic' },
|
||||
@{ Prefix = 'Heltec_'; Maker = 'heltec' },
|
||||
@{ Prefix = 'heltec_'; Maker = 'heltec' },
|
||||
@{ Prefix = 'ikoka_'; Maker = 'Ikoka' },
|
||||
@{ Prefix = 'LilyGo_'; Maker = 'lilygo' },
|
||||
@{ Prefix = 'Meshadventurer_'; Maker = 'meshadventurer' },
|
||||
@{ Prefix = 'RAK_'; Maker = 'rak' },
|
||||
@{ Prefix = 'Station_'; Maker = 'uniteng' },
|
||||
@{ Prefix = 'Tbeam_'; Maker = 'lilygo' },
|
||||
@{ Prefix = 'Tenstar_'; Maker = 'tenstar' },
|
||||
@{ Prefix = 'ThinkNode_'; Maker = 'elecrow' },
|
||||
@{ Prefix = 'Xiao_'; Maker = 'seeed' }
|
||||
)
|
||||
|
||||
$DeviceNameOverrides = @{
|
||||
'Ebyte_EoRa-S3' = 'Ebyte EoRa-S3'
|
||||
'GAT562_30S_Mesh_Kit' = 'GAT-IoT GAT562 30s'
|
||||
'GAT562_Mesh_EVB_Pro' = 'GAT-IoT GAT562 EVB Pro'
|
||||
'GAT562_Mesh_Tracker_Pro' = 'GAT-IoT GAT562 Tracker'
|
||||
'GAT562_Mesh_Watch13' = 'GAT-IoT GAT562 Watch13'
|
||||
'Generic_E22_sx1262' = 'Generic E22 SX1262'
|
||||
'Generic_E22_sx1268' = 'Generic E22 SX1268'
|
||||
'Generic_ESPNOW' = 'Generic ESP-NOW'
|
||||
'Heltec_ct62' = 'Heltec CT62'
|
||||
'Heltec_E213' = 'Heltec Vision Master E213'
|
||||
'Heltec_E290' = 'Heltec Vision Master E290'
|
||||
'Heltec_mesh_solar' = 'Heltec MeshSolar / MeshTower'
|
||||
@@ -73,7 +148,7 @@ $DeviceNameOverrides = @{
|
||||
'Heltec_t1' = 'Heltec Mesh Node T1'
|
||||
'Heltec_t114' = 'Heltec T114'
|
||||
'Heltec_t114_without_display' = 'Heltec T114'
|
||||
'Heltec_T190' = 'Heltec T114'
|
||||
'Heltec_T190' = 'Heltec Vision Master T190'
|
||||
'heltec_tracker_v2' = 'Heltec Wireless Tracker v2'
|
||||
'heltec_v4' = 'Heltec v4'
|
||||
'heltec_v4_3' = 'Heltec v4'
|
||||
@@ -84,24 +159,41 @@ $DeviceNameOverrides = @{
|
||||
'ikoka_nano_nrf_22dbm' = 'Ikoka Nano'
|
||||
'ikoka_nano_nrf_30dbm' = 'Ikoka Nano'
|
||||
'ikoka_nano_nrf_33dbm' = 'Ikoka Nano'
|
||||
'ikoka_handheld_nrf_e22_30dbm' = 'Ikoka Handheld nRF E22 30 dBm'
|
||||
'ikoka_handheld_nrf_e22_30dbm_096' = 'Ikoka Handheld nRF E22 30 dBm 0.96'
|
||||
'ikoka_handheld_nrf_e22_30dbm_096_rotated' = 'Ikoka Handheld nRF E22 30 dBm 0.96 Rotated'
|
||||
'ikoka_stick_nrf_22dbm' = 'Ikoka Stick'
|
||||
'ikoka_stick_nrf_30dbm' = 'Ikoka Stick'
|
||||
'ikoka_stick_nrf_33dbm' = 'Ikoka Stick'
|
||||
'KeepteenLT1' = 'Keepteen LT1'
|
||||
'LilyGo_T_Impulse_Plus' = 'LilyGo T-Impulse Plus nRF52840'
|
||||
'LilyGo_T3S3_sx1262' = 'LilyGo T3 S3 (SX126x)'
|
||||
'LilyGo_T3S3_sx1276' = 'LilyGo T3 S3 (SX127x)'
|
||||
'LilyGo_TBeam_1W' = 'LilyGo T-Beam (SX1262)'
|
||||
'LilyGo_TDeck' = 'LilyGo T-Deck'
|
||||
'LilyGo_T-Echo-Lite' = 'LilyGo T-Echo Lite'
|
||||
'LilyGo_T-Echo-Lite_non_shell' = 'LilyGo T-Echo Lite'
|
||||
'LilyGo_TETH_Elite_sx1262' = 'LilyGo T-ETH Elite (SX1262)'
|
||||
'LilyGo_TLora_V2_1_1_6' = 'LilyGo LoRa32 V2.1_1.6'
|
||||
'LilyGo_Tlora_C6' = 'LilyGo T-LoRa C6'
|
||||
'M5Stack_Unit_C6L' = 'M5Stack Unit C6L'
|
||||
'Meshadventurer_sx1262' = 'Meshadventurer SX1262'
|
||||
'Meshadventurer_sx1268' = 'Meshadventurer SX1268'
|
||||
'Meshimi' = 'Meshimi'
|
||||
'Meshtiny' = 'Meshtiny'
|
||||
'Mesh_pocket' = 'Heltec MeshPocket'
|
||||
'Minewsemi_me25ls01' = 'Minewsemi ME25LS01'
|
||||
'Nano_G2_Ultra' = 'UnitEng Nano G2 Ultra'
|
||||
'nibble_screen_connect' = 'Nibble Screen Connect'
|
||||
'PicoW' = 'Raspberry Pi Pico W'
|
||||
'ProMicro' = 'ProMicro nrf52 (faketec)'
|
||||
'R1Neo' = 'Muzi Works R1 Neo'
|
||||
'RAK_11310' = 'RAK 11310'
|
||||
'RAK_3112' = 'RAK WisBlock 3112'
|
||||
'RAK_3401' = 'RAK WisMesh 1W Booster (3401 + 13302)'
|
||||
'RAK_3x72' = 'RAK 3x72'
|
||||
'RAK_4631' = 'RAK WisBlock / WisMesh (RAK 4631)'
|
||||
'SenseCapIndicator-ESPNow' = 'Seeed Studio SenseCAP Indicator ESP-NOW'
|
||||
'SenseCap_Solar' = 'Seeed Studio SenseCAP Solar'
|
||||
'Station_G2' = 'UnitEng Station G2'
|
||||
'Station_G3_ESP32' = 'UnitEng/BQ Voyage Station G3'
|
||||
@@ -109,23 +201,31 @@ $DeviceNameOverrides = @{
|
||||
't1000e' = 'Seeed Studio SenseCAP T1000-E'
|
||||
'Tbeam_SX1262' = 'LilyGo T-Beam (SX1262)'
|
||||
'Tbeam_SX1276' = 'LilyGo T-Beam 1.2 (SX1276)'
|
||||
'Tenstar_C3_sx1262' = 'Tenstar C3 SX1262'
|
||||
'Tenstar_C3_sx1268' = 'Tenstar C3 SX1268'
|
||||
'ThinkNode_M1' = 'Elecrow ThinkNode M1'
|
||||
'ThinkNode_M2' = 'Elecrow ThinkNode M2'
|
||||
'ThinkNode_M3' = 'Elecrow ThinkNode M3'
|
||||
'ThinkNode_M5' = 'Elecrow ThinkNode M5'
|
||||
'ThinkNode_M6' = 'Elecrow ThinkNode M6'
|
||||
'Tiny_Relay' = 'Tiny Relay'
|
||||
'waveshare_rp2040_lora' = 'RPI Pico 2040 + WaveShare SX1262'
|
||||
'WHY2025_badge' = 'WHY2025 Badge'
|
||||
'wio_wm1110' = 'Seeed Studio Wio WM1110'
|
||||
'wio-e5' = 'Seeed Studio Wio-E5'
|
||||
'wio-e5-mini' = 'Seeed Studio Wio-E5 mini'
|
||||
'WioTrackerL1' = 'Seeed Studio Wio Tracker L1 Pro'
|
||||
'WioTrackerL1Eink' = 'Seeed Studio Wio Tracker L1 EINK'
|
||||
'Xiao_C3' = 'Seeed Studio Xiao C3'
|
||||
'Xiao_C6' = 'Seeed Studio Xiao C6'
|
||||
'Xiao_nrf52' = 'Seeed Studio Xiao nRF52 WIO'
|
||||
'Xiao_rp2040' = 'Seeed Studio Xiao RP2040'
|
||||
'Xiao_S3' = 'Seeed Studio Xiao S3 WIO'
|
||||
'Xiao_S3_WIO' = 'Seeed Studio Xiao S3 WIO'
|
||||
}
|
||||
|
||||
$DeviceSubTitleOverrides = @{
|
||||
'Heltec_t114_without_display' = 'Without display'
|
||||
'Heltec_T190' = 'T190'
|
||||
'heltec_v4_3' = 'v4.3'
|
||||
'heltec_v4_tft' = 'TFT'
|
||||
'heltec_v4_expansionkit' = 'Expansion Kit'
|
||||
@@ -151,6 +251,22 @@ function ConvertTo-DeviceName {
|
||||
return $name.Trim()
|
||||
}
|
||||
|
||||
function Get-DeviceMakerKey {
|
||||
param([string]$DeviceKey)
|
||||
|
||||
if ($DeviceMakerOverrides.ContainsKey($DeviceKey)) {
|
||||
return $DeviceMakerOverrides[$DeviceKey]
|
||||
}
|
||||
|
||||
foreach ($pattern in $DeviceMakerPatterns) {
|
||||
if ($DeviceKey.StartsWith($pattern.Prefix, [StringComparison]::OrdinalIgnoreCase)) {
|
||||
return $pattern.Maker
|
||||
}
|
||||
}
|
||||
|
||||
return 'generic'
|
||||
}
|
||||
|
||||
function Join-SubTitle {
|
||||
param(
|
||||
[string]$DeviceKey,
|
||||
@@ -299,6 +415,7 @@ function New-Catalog {
|
||||
[pscustomobject]@{
|
||||
File = $file
|
||||
DeviceKey = $roleInfo.DeviceKey
|
||||
MakerKey = Get-DeviceMakerKey $roleInfo.DeviceKey
|
||||
DeviceName = $roleInfo.DeviceName
|
||||
Role = $roleInfo.Role
|
||||
Title = $roleInfo.Title
|
||||
@@ -309,6 +426,11 @@ function New-Catalog {
|
||||
$devices = New-Object System.Collections.ArrayList
|
||||
foreach ($deviceGroup in @($parsedFiles | Group-Object DeviceName | Sort-Object Name)) {
|
||||
$deviceFiles = @($deviceGroup.Group | ForEach-Object { $_.File })
|
||||
$deviceMakerKeys = @($deviceGroup.Group | ForEach-Object { $_.MakerKey } | Sort-Object -Unique)
|
||||
if ($deviceMakerKeys.Count -ne 1) {
|
||||
throw "Device '$($deviceGroup.Name)' maps to multiple makers: $($deviceMakerKeys -join ', ')"
|
||||
}
|
||||
|
||||
$deviceType = Get-DeviceType $deviceFiles
|
||||
$firmware = New-Object System.Collections.ArrayList
|
||||
|
||||
@@ -348,19 +470,24 @@ function New-Catalog {
|
||||
}
|
||||
|
||||
[void]$devices.Add([ordered]@{
|
||||
maker = 'keymindCascade'
|
||||
class = 'keymindCascade'
|
||||
maker = $deviceMakerKeys[0]
|
||||
name = $deviceGroup.Group[0].DeviceName
|
||||
type = $deviceType
|
||||
firmware = @($firmware)
|
||||
})
|
||||
}
|
||||
|
||||
$makerMap = [ordered]@{}
|
||||
foreach ($makerKey in @($devices | ForEach-Object { $_['maker'] } | Sort-Object -Unique)) {
|
||||
if (-not $MakerDefinitions.Contains($makerKey)) {
|
||||
throw "No maker definition for '$makerKey'"
|
||||
}
|
||||
$makerMap[$makerKey] = $MakerDefinitions[$makerKey]
|
||||
}
|
||||
|
||||
return [ordered]@{
|
||||
description = $Definition.Description
|
||||
maker = [ordered]@{
|
||||
keymindCascade = [ordered]@{ name = 'Keymind Cascade' }
|
||||
}
|
||||
maker = $makerMap
|
||||
role = $RoleDefinitions
|
||||
device = @($devices)
|
||||
}
|
||||
@@ -370,7 +497,7 @@ New-Item -ItemType Directory -Force -Path $OutputDir | Out-Null
|
||||
|
||||
foreach ($catalogDef in $Catalogs) {
|
||||
$catalog = New-Catalog $catalogDef
|
||||
$json = $catalog | ConvertTo-Json -Depth 100
|
||||
[System.IO.File]::WriteAllText($catalogDef.Output, $json + [Environment]::NewLine, [System.Text.UTF8Encoding]::new($false))
|
||||
$json = ($catalog | ConvertTo-Json -Depth 100) -replace "`r`n", "`n"
|
||||
[System.IO.File]::WriteAllText($catalogDef.Output, $json + "`n", [System.Text.UTF8Encoding]::new($false))
|
||||
Write-Output ("Wrote {0}" -f $catalogDef.Output)
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user