{"record":{"id":"f3e688191a275615","repo":"embassy-rs/embassy","slug":"invalid-adc-channel-side","errorCode":null,"errorMessage":"Invalid ADC channel side: {}","messagePattern":"Invalid ADC channel side: (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"embassy-nxp/build.rs","lineNumber":278,"sourceCode":"            #cfg\n            #ident\n        }\n    });\n\n    quote! {\n        embassy_hal_internal::peripherals_definition!(#(#defs),*);\n        embassy_hal_internal::peripherals_struct!(#(#peripherals),*);\n    }\n}\n\nfn impl_adc(impls: &mut Vec<TokenStream>, peripheral: &Peripheral) {\n    for signal in peripheral.signals.iter() {\n        let (ch_num, ch_side) = signal.name.rsplit_once(\"_\").unwrap();\n        let ch_num = ch_num.strip_prefix(\"CH\").unwrap().parse::<u8>().unwrap();\n        let ch_side = match ch_side {\n            \"A\" => format_ident!(\"SideA\"),\n            \"B\" => format_ident!(\"SideB\"),\n            side => panic!(\"Invalid ADC channel side: {}\", side),\n        };\n\n        assert_eq!(signal.pins.len(), 1);\n        let pin = format_ident!(\"{}\", signal.pins[0].pin);\n        let ch_num = Literal::u8_unsuffixed(ch_num);\n\n        impls.push(quote! {\n            impl_adc_pin!(#pin, #ch_num, crate::adc::ChannelSide::#ch_side);\n        })\n    }\n}\n\nfn impl_gpio_pin(impls: &mut Vec<TokenStream>, peripheral: &Peripheral) {\n    let instance = peripheral.name.strip_prefix(\"GPIO\").unwrap();\n    let bank = format_ident!(\"Gpio{}\", instance);\n    // let pin =\n\n    for signal in peripheral.signals.iter() {","sourceCodeStart":260,"sourceCodeEnd":296,"githubUrl":"https://github.com/embassy-rs/embassy/blob/463a07b963419a1bfe61d5d597c44acb810afb8b/embassy-nxp/build.rs#L260-L296","documentation":"The build script generates ADC peripheral implementations by parsing signal names of the form `CH<n>_<side>` where side must be `A` or `B`. If a signal name in the chip metadata ends in a suffix other than A/B after the last underscore, the parser cannot map it to the SideA/SideB enum and panics. This guards against malformed or unexpected signal naming in the metadata.","triggerScenarios":"Building embassy-nxp for a chip whose metadata defines an ADC signal whose name, when split on the last `_`, yields a side token other than `\"A\"` or `\"B\"` (e.g. `CH0_DIFF`, `CH1_SE`).","commonSituations":"Using a chip feature with incomplete/renamed ADC signal metadata; version skew between embassy-nxp and the metadata crate after a signal-naming change upstream.","solutions":["Update embassy-nxp and metadata dependencies to versions whose ADC signal names match the `CHn_A`/`CHn_B` convention.","Check the release notes/changelog for ADC signal renames and pin your embassy-nxp version to a known-good release.","Report the offending signal name (from the panic message) upstream if the chip is officially supported."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"// Build-time panic; guard by using a known-good release.\n[dependencies]\nembassy-nxp = { version = \"=0.1.0\", features = [\"mimxrt1062\"] } // pinned release with valid ADC metadata","preventionTips":["Match embassy-nxp version to a release whose ADC signal metadata matches the CHn_A/CHn_B convention.","Avoid mixing git and crates.io versions of embassy-nxp/imxrt metadata crates.","Search the repo for the offending signal name before choosing a chip feature."],"tags":["embedded","build-script","codegen","adc","nxp","panic"],"backgroundTag":"invalid-enum-value","analyzedSha":"463a07b963419a1bfe61d5d597c44acb810afb8b","analyzedAt":"2026-09-10T13:38:26.660Z","contentChangedAt":"2026-09-10T13:38:26.660Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}