import { ChipFamily, CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP8266, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32H4, CHIP_FAMILY_ESP32H21, CHIP_FAMILY_ESP32P4, CHIP_FAMILY_ESP32S31 } from "../const"; import { toByteArray } from "../util"; interface LoadedStub { text: string; data: string; text_start: number; entry: number; data_start: number; } export interface Stub { text: number[]; data: number[]; text_start: number; entry: number; data_start: number; } export const getStubCode = async ( chipFamily: ChipFamily, chipRevision?: number | null, ): Promise => { let stubcode!: LoadedStub; // Chips without stub support yet if ( chipFamily == CHIP_FAMILY_ESP32H4 || chipFamily == CHIP_FAMILY_ESP32H21 ) { return null; } if (chipFamily == CHIP_FAMILY_ESP32) { stubcode = await import("./esp32.json"); } else if (chipFamily == CHIP_FAMILY_ESP32S2) { stubcode = await import("./esp32s2.json"); } else if (chipFamily == CHIP_FAMILY_ESP32S3) { stubcode = await import("./esp32s3.json"); } else if (chipFamily == CHIP_FAMILY_ESP8266) { stubcode = await import("./esp8266.json"); } else if (chipFamily == CHIP_FAMILY_ESP32C2) { stubcode = await import("./esp32c2.json"); } else if (chipFamily == CHIP_FAMILY_ESP32C3) { stubcode = await import("./esp32c3.json"); } else if (chipFamily == CHIP_FAMILY_ESP32C5) { stubcode = await import("./esp32c5.json"); } else if (chipFamily == CHIP_FAMILY_ESP32C6) { stubcode = await import("./esp32c6.json"); } else if (chipFamily == CHIP_FAMILY_ESP32C61) { stubcode = await import("./esp32c61.json"); } else if (chipFamily == CHIP_FAMILY_ESP32H2) { stubcode = await import("./esp32h2.json"); } else if (chipFamily == CHIP_FAMILY_ESP32P4) { // ESP32-P4: Use esp32p4r3.json for Rev. 300+, esp32p4.json for older revisions if (chipRevision !== null && chipRevision !== undefined && chipRevision >= 300) { stubcode = await import("./esp32p4r3.json"); } else { stubcode = await import("./esp32p4.json"); } } else if (chipFamily == CHIP_FAMILY_ESP32S31) { stubcode = await import("./esp32s31.json"); } else { // Unknown chip family - no stub available return null; } // Base64 decode the text and data return { ...stubcode, text: toByteArray(atob(stubcode.text)), data: toByteArray(atob(stubcode.data)), }; };