update to try with powerwall

This commit is contained in:
Hartmut Seichter 2022-12-12 23:18:34 +01:00
parent 9114729c96
commit 008d3af930
2 changed files with 68 additions and 50 deletions

View file

@ -48,7 +48,7 @@ fn main() {
.add_startup_system(offaxis_camera_setup) .add_startup_system(offaxis_camera_setup)
.add_startup_system(setup_tracker) .add_startup_system(setup_tracker)
.add_system(update_tracker) // .add_system(update_tracker)
.add_plugin(CameraProjectionPlugin::<OffAxisProjection>::default()) .add_plugin(CameraProjectionPlugin::<OffAxisProjection>::default())
.add_system(simulate_viewer) .add_system(simulate_viewer)

View file

@ -1,39 +1,42 @@
use bevy::prelude::*; use bevy::prelude::*;
extern crate vrpn;
extern crate bytes; extern crate bytes;
extern crate vrpn;
use bytes::{Bytes, BytesMut};
use std::{
io::{Read,self},
net::{SocketAddr, TcpStream},
};
// extern crate tokio;
use bytes::Bytes;
use std::net::{SocketAddr, TcpStream};
use vrpn::{ use vrpn::{
codec::peek_u32,
constants::MAGIC_DATA, constants::MAGIC_DATA,
cookie::check_ver_nonfile_compatible, cookie::check_ver_nonfile_compatible,
handler::{HandlerCode, TypedHandler}, message::MessageSize,
sync_io::{read_cookie, write_cookie, EndpointSyncTcp}, sync_io::{read_cookie, write_cookie},
tracker::PoseReport, CookieData, Message, Result, SequencedGenericMessage, Unbuffer,
CookieData, Message, Result, TypeDispatcher, Unbuffer,
}; };
#[derive(Component)] #[derive(Component)]
pub struct Tracker { pub struct Tracker {
endpoint: EndpointSyncTcp, stream: TcpStream, // endpoint: EndpointSyncTcp,
dispatcher: TypeDispatcher // dispatcher: TypeDispatcher
// stream: ConnectionIpStream, // stream: ConnectionIpStream,
// connection: Arc<ConnectionIp> // connection: Arc<ConnectionIp>
} }
#[derive(Debug)] // #[derive(Debug)]
struct TrackerHandler {} // struct TrackerHandler {}
impl TypedHandler for TrackerHandler { // impl TypedHandler for TrackerHandler {
type Item = PoseReport; // type Item = PoseReport;
fn handle_typed(&mut self, msg: &Message<PoseReport>) -> Result<HandlerCode> { // fn handle_typed(&mut self, msg: &Message<PoseReport>) -> Result<HandlerCode> {
info!("{:?}\n {:?}", msg.header, msg.body); // info!("{:?}\n {:?}", msg.header, msg.body);
Ok(HandlerCode::ContinueProcessing) // Ok(HandlerCode::ContinueProcessing)
} // }
} // }
impl Tracker { impl Tracker {
pub fn from_info(server_ip: &str, port: u16) -> Self { pub fn from_info(server_ip: &str, port: u16) -> Self {
@ -50,51 +53,66 @@ impl Tracker {
// let ping_client = ping::Client::new(sender, Arc::clone(&connection)) // let ping_client = ping::Client::new(sender, Arc::clone(&connection))
// .expect("should be able to create ping client"); // .expect("should be able to create ping client");
let addr: SocketAddr = format!("{}:{}", server_ip.to_string(), port)
.parse()
.unwrap();
let addr: SocketAddr = "127.0.0.1:3883".parse().unwrap();
let mut stream = TcpStream::connect(addr).unwrap(); let mut stream = TcpStream::connect(addr).unwrap();
stream.set_nodelay(true).unwrap(); stream.set_nodelay(true).unwrap();
// We first write our cookie, then read and check the server's cookie, before the loop. // We first write our cookie, then read and check the server's cookie, before the loop.
write_cookie(&mut stream, CookieData::from(MAGIC_DATA)).unwrap(); write_cookie(&mut stream, CookieData::from(MAGIC_DATA)).unwrap();
let cookie_buf = read_cookie(&mut stream).unwrap(); let cookie_buf = read_cookie(&mut stream).unwrap();
let mut cookie_buf = Bytes::from(&cookie_buf[..]);
// let mut cookie_buf = Bytes::from(&cookie_buf[..]);
// CookieData::unbuffer_ref(&mut cookie_buf) // CookieData::unbuffer_ref(&mut cookie_buf)
// .and_then(|msg| check_ver_nonfile_compatible(msg.version))?; // .and_then(|msg| check_ver_nonfile_compatible(msg.version)).unwrap();
let mut endpoint = EndpointSyncTcp::new(stream); Tracker { stream }
let mut dispatcher = TypeDispatcher::new();
let _ = dispatcher.add_typed_handler(Box::new(TrackerHandler {}), None).unwrap();
Tracker {
endpoint,
dispatcher
} }
} pub fn update(&mut self) -> vrpn::Result<()> {
fn update(&self) {
self.endpoint.poll_endpoint(&mut self.dispatcher).unwrap();
}
} let mut buf = BytesMut::new();
pub fn setup_tracker(mut commands: Commands) // Read the message header and padding
{ buf.resize(24, 0);
commands.spawn(Tracker::from_info("127.0.0.1",3883)); self.stream.read_exact(buf.as_mut())?;
} // Peek the size field, to compute the MessageSize.
let total_len = peek_u32(&buf.clone().freeze())?.unwrap();
let size = MessageSize::from_length_field(total_len);
pub fn update_tracker(mut query:Query<&mut Tracker>) // Read the body of the message
{ let mut body_buf = BytesMut::new();
for mut tracker in query.iter_mut() { body_buf.resize(size.padded_body_size(), 0);
self.stream.read_exact(body_buf.as_mut())?;
// tracker.update(); // Combine the body with the header
buf.extend_from_slice(&body_buf[..]);
let mut buf = buf.freeze();
// tracker.connection.poll_endpoints(); // Unbuffer the message.
// tracker let unbuffered = SequencedGenericMessage::unbuffer_ref(&mut buf)?;
eprintln!("{:?}", Message::from(unbuffered));
Ok(())
} }
} }
pub fn setup_tracker(mut commands: Commands) {
// commands.spawn(Tracker::from_info("127.0.0.1", 3883));
}
// pub fn update_tracker(mut query:Query<&mut Tracker>)
// {
// for mut tracker in query.iter_mut() {
// // tracker.update();
// // tracker.connection.poll_endpoints();
// // tracker
// }
// }