-
Notifications
You must be signed in to change notification settings - Fork 145
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Motivations
- Would you like to implement this feature? maybe
While working on my PR for esp-idf-hal esp-rs/esp-idf-hal#548 I noticed that I am unable to create a const for the used rmt_symbol_word_t wrapper.
This is unfortunate, because I would have to use lazy_static instead or leave them in the respective functions as local variables:
fn byte_to_symbols(byte: u8) -> impl IntoIterator<Item = Symbol> {
let ws2812_zero = Symbol::new_with(
RMT_LED_STRIP_RESOLUTION_HZ,
PinState::High,
Duration::from_micros(300),
PinState::Low,
Duration::from_micros(900),
)
.unwrap();
let ws2812_one = Symbol::new_with(
RMT_LED_STRIP_RESOLUTION_HZ,
PinState::High,
Duration::from_micros(900),
PinState::Low,
Duration::from_micros(300),
)
.unwrap();
(0..8)
.map(|i| 0x80 >> i)
.map(move |bitmask| (byte & bitmask) != 0)
.map(move |is_one| if is_one { ws2812_one } else { ws2812_zero })
}It is a relatively minor inconvenience, but given that the generated code like this one
#[inline]
pub fn set_level0(&mut self, val: u16) {
unsafe {
let val: u16 = ::core::mem::transmute(val);
self._bitfield_1.set(15usize, 1u8, val as u64)
}
}could be a const function, I am making this issue in the hopes that this can be achieved by simply setting a flag when generating the bindings.
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request