Compare commits
3 Commits
7f00e5817d
...
5dc9ec5a08
Author | SHA1 | Date |
---|---|---|
occheung | 5dc9ec5a08 | |
occheung | f1376cab07 | |
occheung | 39969e602c |
|
@ -129,10 +129,15 @@ fn main() -> ! {
|
|||
|
||||
let neighbor_cache = net::iface::NeighborCache::new(&mut store.neighbor_cache[..]);
|
||||
|
||||
let mut routes = net::iface::Routes::new(&mut store.routes_cache[..]);
|
||||
let default_v4_gw = net::wire::Ipv4Address::new(192, 168, 1, 1);
|
||||
routes.add_default_ipv4_route(default_v4_gw).unwrap();
|
||||
|
||||
let mut net_interface = net::iface::EthernetInterfaceBuilder::new(eth_dma)
|
||||
.ethernet_addr(mac_addr)
|
||||
.neighbor_cache(neighbor_cache)
|
||||
.ip_addrs(&mut store.ip_addrs[..])
|
||||
.routes(routes)
|
||||
.finalize();
|
||||
|
||||
/*
|
||||
|
@ -173,9 +178,7 @@ fn main() -> ! {
|
|||
cp.SCB.invalidate_icache();
|
||||
cp.SCB.enable_icache();
|
||||
|
||||
// TODO: Remove this simple test
|
||||
let mut mqtt_mux = MqttMux::new(urukul);
|
||||
info!("{:?}", mqtt_mux.handle_command("Urukul/Control/Channel0/Switch", "on".as_bytes()));
|
||||
|
||||
// Time unit in ms
|
||||
let mut time: u32 = 0;
|
||||
|
@ -220,16 +223,14 @@ fn main() -> ! {
|
|||
}
|
||||
|
||||
let connection = client
|
||||
.poll(|_client, topic, message, _properties| match topic {
|
||||
topic => {
|
||||
info!("On '{:?}', received: {:?}", topic, message);
|
||||
// Why is topic a string while message is a slice?
|
||||
mqtt_mux.handle_command(topic, message).unwrap();
|
||||
},
|
||||
.poll(|_client, topic, message, _properties| {
|
||||
info!("On '{:?}', received: {:?}", topic, message);
|
||||
// Why is topic a string while message is a slice?
|
||||
mqtt_mux.process_mqtt(topic, message);
|
||||
}).is_ok();
|
||||
|
||||
if connection && !has_subscribed && tick {
|
||||
match client.subscribe("Urukul/Control", &[]) {
|
||||
match client.subscribe("Urukul/Control/#", &[]) {
|
||||
Ok(()) => has_subscribed = true,
|
||||
Err(minimq::Error::NotReady) => {},
|
||||
e => warn!("{:?}", e),
|
||||
|
|
|
@ -71,9 +71,9 @@ in
|
|||
(pkgs.python3.withPackages(ps: [ migen ]))
|
||||
pkgs.yosys
|
||||
pkgs.nextpnr
|
||||
pkgs.arachne-pnr
|
||||
pkgs.icestorm
|
||||
pkgs.gdb
|
||||
pkgs.mosquitto
|
||||
openocd
|
||||
rustc
|
||||
cargo
|
||||
|
|
|
@ -70,35 +70,13 @@ impl<SPI, E> MqttMux<SPI> where SPI: Transfer<u8, Error = E> {
|
|||
pub fn process_mqtt(&mut self, topic: &str, message: &[u8]) -> Result<(), Error<E>> {
|
||||
let header = self.parse_topic(topic)
|
||||
.map_err(|_| Error::MqttTopicError)?;
|
||||
info!("{:?}", header);
|
||||
info!("Parsed command topic: {:?}", header);
|
||||
let (_, command) = self.parse_message(header, message)
|
||||
.map_err(|_| Error::MqttCommandError)?;
|
||||
info!("{:?}", command);
|
||||
info!("Parsed comamnd message: {:?}", command);
|
||||
self.execute(command)
|
||||
}
|
||||
/*
|
||||
fn parse_header<'a>(&mut self, topic: &'a str) -> IResult<&'a str, MqttTopic> {
|
||||
preceded(
|
||||
alt((
|
||||
tag("Urukul/Control/"),
|
||||
tag("/Urukul/Control/")
|
||||
)),
|
||||
alt((
|
||||
switch,
|
||||
attenuation,
|
||||
clock,
|
||||
clock_source,
|
||||
clock_frequency,
|
||||
clock_division,
|
||||
singletone,
|
||||
singletone_frequency,
|
||||
singletone_amplitude,
|
||||
singletone_phase,
|
||||
profile
|
||||
))
|
||||
)(topic)
|
||||
}
|
||||
*/
|
||||
|
||||
fn parse_topic<'a>(&mut self, topic: &'a str) -> Result<MqttTopic, Error<E>> {
|
||||
let mut assigned_channel = false;
|
||||
let mut assigned_profile = false;
|
||||
|
@ -423,6 +401,8 @@ fn clock_division_message(message: &[u8]) -> IResult<&[u8], MqttCommand> {
|
|||
}
|
||||
|
||||
// Parser for one-command master clock setup message
|
||||
// Possible improvements: Chop off redundant braces and quotes
|
||||
// Allow optional parameters/permutation of parameters
|
||||
fn clock_message(message: &[u8]) -> IResult<&[u8], MqttCommand> {
|
||||
all_consuming(
|
||||
map(
|
||||
|
@ -533,7 +513,8 @@ fn singletone_phase_message(channel: u8, profile: u8, message: &[u8]) -> IResult
|
|||
|
||||
// Parser for one-command singletone profile Command
|
||||
// Using JSON like command structure
|
||||
// Possible enhancement: further modularize parsing of all separate fields
|
||||
// Possible improvements: Chop off redundant braces and quotes
|
||||
// Allow optional parameters/permutation of parameters
|
||||
fn singletone_message(channel: u8, profile: u8, message: &[u8]) -> IResult<&[u8], MqttCommand> {
|
||||
all_consuming(
|
||||
map(
|
||||
|
@ -592,7 +573,7 @@ fn singletone_message(channel: u8, profile: u8, message: &[u8]) -> IResult<&[u8]
|
|||
)
|
||||
)
|
||||
)),
|
||||
|(freq, ampl, phase): (f64, f64, f64)| MqttCommand::Singletone(channel, profile, freq, ampl, phase)
|
||||
|(freq, ampl, phase): (f64, f64, f64)| MqttCommand::Singletone(channel, profile, freq, phase, ampl)
|
||||
)
|
||||
)(message)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue