Skip to content

Commit

Permalink
up
Browse files Browse the repository at this point in the history
  • Loading branch information
XdoctorwhoZ committed Jul 22, 2024
1 parent e1d138f commit 9345746
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 37 deletions.
46 changes: 37 additions & 9 deletions src/app_dio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ use crate::uart_debug::uart_debug_print;
use crate::{api_dio::PicohaDioAnswer, api_dio::PicohaDioRequest, print_debug_message};
use core::fmt::Write;

use rp2040_hal::gpio::new_pin;
// Message deserialization support
use femtopb::Message;

use rp2040_hal::gpio::DynPinId;
// USB Communications Class Device support
use usbd_serial::SerialPort;

Expand Down Expand Up @@ -37,31 +39,51 @@ pub struct AppDio {
// Decode buffer
decode_buffer: [u8; BUFFER_CAPACITY],

// rp_pins: rp_pico::Pins,
pins_id: [Option<DynPinId>; MAX_PINS],
pins_o: [Option<PinO>; MAX_PINS],
pins_i: [Option<PinI>; MAX_PINS],
}

impl AppDio {
/// Create a new instance of the AppDio
///
pub fn new() -> Self {
pub fn new(pins_id: [Option<DynPinId>; MAX_PINS]) -> Self {
AppDio {
in_buf: [0u8; 64],
in_buf_size: 0,
decode_buffer: [0u8; 64],
// rp_pins: rp_pins,
pins_id: pins_id,
pins_o: [PINO_NONE; MAX_PINS],
pins_i: [PINI_NONE; MAX_PINS],
}
}

// fn set_pin_as_output(&mut self, pin_num: u32) {
// let pin_num = pin_num as usize;
// if pin_num < MAX_PINS {
// self.pins_o[pin_num] = Some(pin.into_push_pull_output().into_dyn_pin());
// }
// }
/// Set a pin as output
///
fn set_pin_as_output(&mut self, pin_num: u32) {
self.pins_id[pin_num as usize]
.map(|dyn_id| unsafe {
let pin = new_pin(dyn_id);
pin.try_into_function::<rp2040_hal::gpio::FunctionSioOutput>()
.and_then(|pin_out| {
self.pins_o[pin_num as usize] = Some(pin_out);
Ok(())
})
// Ignore the error, just a warning
.map_err(|_| {
print_debug_message!(
" * error converting pin {:?} to output",
pin_num
);
})
.ok();
})
// Ignore the error, just a warning
.ok_or_else(|| {
print_debug_message!(" * pin {:?} not available", pin_num);
})
.ok();
}

/// Accumulate new data
///
Expand Down Expand Up @@ -181,11 +203,17 @@ impl AppDio {
Self::send_answer(serial, answer);
}

/// Process a set pin direction request
///
fn process_request_set_pin_direction(
serial: &mut SerialPort<rp2040_hal::usb::UsbBus>,
request: PicohaDioRequest,
) {
print_debug_message!(b" * processing request: SET_PIN_DIRECTION");

// self
// request.pin_num

let mut answer = PicohaDioAnswer::default();
answer.r#type = femtopb::EnumValue::Known(crate::api_dio::AnswerType::Success);
Self::send_answer(serial, answer);
Expand Down
80 changes: 52 additions & 28 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,34 +114,29 @@ unsafe fn main() -> ! {
// .into_push_pull_output()
// .into_pull_type()
// .into_dyn_pin();
let p2 = pins
.gpio3
.into_floating_input()
.into_pull_type()
.into_dyn_pin();

let did = pins.led.into_push_pull_output().into_dyn_pin().id();
let pppppp = new_pin(did);

let mut neerr = pppppp
.try_into_function::<hal::gpio::FunctionSioOutput>()
.ok()
.unwrap();

// let did: rp2040_hal::gpio::DynPinId = pins.led.into_push_pull_output().into_dyn_pin().id();
// let pppppp = new_pin(did);

// let mut neerr = pppppp
// .try_into_function::<hal::gpio::FunctionSioOutput>()
// .ok()
// .unwrap();

// let pppppppppppp = neerr.into_push_pull_output();

neerr.set_high().unwrap();
// neerr.set_high().unwrap();

delay.delay_ms(2000u32);
// delay.delay_ms(2000u32);

let pppppp2 = new_pin(did);
// let pppppp2 = new_pin(did);

let mut neerr2 = pppppp2
.try_into_function::<hal::gpio::FunctionSioInput>()
.ok()
.unwrap();
// let mut neerr2 = pppppp2
// .try_into_function::<hal::gpio::FunctionSioInput>()
// .ok()
// .unwrap();

print_debug_message!("Hello World! {}\r\n", neerr2.is_high().unwrap());
// print_debug_message!("Hello World! {}\r\n", neerr2.is_high().unwrap());

// let dd = p2.reconfigure();

Expand All @@ -155,12 +150,6 @@ unsafe fn main() -> ! {

// pins_array_oooo[0].as_mut().unwrap().set_high().unwrap();

let pins_array: [Pin<
rp2040_hal::gpio::DynPinId,
rp2040_hal::gpio::FunctionSio<rp2040_hal::gpio::SioInput>,
rp2040_hal::gpio::DynPullType,
>; 1] = [p2];

// // configure LED pin for Pio0.
// // let led: Pin<_, FunctionPio0, _> = pins.led.into_function();
// let p0: Pin<_, FunctionPio0, _> = pins.gpio0.into_function();
Expand Down Expand Up @@ -214,7 +203,42 @@ unsafe fn main() -> ! {

// --------------------------------------------------------------
//
let mut app = AppDio::new();
let pins_id = [
// Some(pins.gpio0.into_dyn_pin().id()),
// Some(pins.gpio1.into_dyn_pin().id()),
None, // 0 debug uart
None, // 1 debug uart
Some(pins.gpio2.into_dyn_pin().id()),
Some(pins.gpio3.into_dyn_pin().id()),
Some(pins.gpio4.into_dyn_pin().id()),
Some(pins.gpio5.into_dyn_pin().id()),
Some(pins.gpio6.into_dyn_pin().id()),
Some(pins.gpio7.into_dyn_pin().id()),
Some(pins.gpio8.into_dyn_pin().id()),
Some(pins.gpio9.into_dyn_pin().id()),
Some(pins.gpio10.into_dyn_pin().id()),
Some(pins.gpio11.into_dyn_pin().id()),
Some(pins.gpio12.into_dyn_pin().id()),
Some(pins.gpio13.into_dyn_pin().id()),
Some(pins.gpio14.into_dyn_pin().id()),
Some(pins.gpio15.into_dyn_pin().id()),
Some(pins.gpio16.into_dyn_pin().id()),
Some(pins.gpio17.into_dyn_pin().id()),
Some(pins.gpio18.into_dyn_pin().id()),
Some(pins.gpio19.into_dyn_pin().id()),
Some(pins.gpio20.into_dyn_pin().id()),
Some(pins.gpio21.into_dyn_pin().id()),
Some(pins.gpio22.into_dyn_pin().id()),
None, // 23
None, // 24
Some(pins.led.into_dyn_pin().id()), // 25 led
None, // 26
None, // 27
Some(pins.gpio28.into_dyn_pin().id()),
None,
];

let mut app = AppDio::new(pins_id);
loop {
// Check for new data
if usb_dev.poll(&mut [&mut serial]) {
Expand Down

0 comments on commit 9345746

Please sign in to comment.