Geschrieben December 23, 2019 at 07:3223. Dez 2019 Hallo zusammen, ich stolpere gerade darüber, dass bei dem OLED Bricklet (version 1.1, sorry) die Methode write_line() als Parameter den Typ String verlangt. https://www.tinkerforge.com/en/doc/Software/Bricklets/OLED128x64_Bricklet_Rust.html#Oled128x64Bricklet::write_line Bytes in einem String sind in Rust immer utf8 konform. Das verhindert mir leider auf alle Zeichen der OLED Zeichentabelle zuzugreifen. https://doc.rust-lang.org/std/string/struct.String.html Im Quelltext des Bricklets finde ich weitere Zeichen: https://github.com/Tinkerforge/oled-128x64-bricklet/blob/master/software/src/font.inc Könnt ihr vielleicht eine weitere Methode bereitstellen, die als Parameter einen &[u8] Vector bekommt? Die ließe sich mit jedem String durch ein .as_bytes() verwenden und ungültige UTF8 Sequencen könnten ebenfalls dargestellt werden. Gruss Tim
Geschrieben January 13, 2020 at 10:1113. Jan 2020 Moin, Das ist leider etwas ungünstig dokumentiert, aber die Rust-Bindings mappen die ersten 256 UTF-8 Codepoints auf auf die möglichen Werte eines Bytes um. In den Bindings sieht das so aus: fn try_to_le_byte_vec(s: String, max_len: usize) -> Result<Vec<u8>, BrickletError> { if s.chars().any(|c| c as u32 > 255) { return Err(BrickletError::InvalidParameter); } let bytes: Vec<u8> = s.chars().map(|c| c as u8).collect(); if bytes.len() > max_len { Err(BrickletError::InvalidParameter) } else { let mut result = vec![0u8; max_len]; result[0..bytes.len()].copy_from_slice(&bytes); Ok(result) } } Das heißt du solltest das Characterset mit \u{01} bis \u{FF} benutzen können. Edit: Brainfart, \u{00} terminiert den String (aus Bricklet-API-Sicht), \u{01} ist das erste sinnvolle Zeichen.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.