Skip to content

Commit

Permalink
bulb: Send PATCH requests for DMS device requests
Browse files Browse the repository at this point in the history
  • Loading branch information
DougLau committed Jun 25, 2024
1 parent cb2ca15 commit c43540c
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 15 deletions.
4 changes: 2 additions & 2 deletions bulb/src/card.rs
Original file line number Diff line number Diff line change
Expand Up @@ -995,7 +995,7 @@ async fn patch_changed_x<C: Card>(cv: &CardView) -> Result<()> {

/// Handle click event for a button owned by the resource
pub async fn handle_click(cv: &CardView, id: String) -> Result<()> {
if cv.view != View::Status {
if cv.view != View::Status && cv.view != View::Request {
return Ok(());
}
match cv.res {
Expand All @@ -1008,7 +1008,7 @@ pub async fn handle_click(cv: &CardView, id: String) -> Result<()> {
/// Handle click event for a button on a card
async fn handle_click_x<C: Card>(cv: &CardView, id: String) -> Result<()> {
let pri = fetch_primary::<C>(&cv.name).await?;
let anc = fetch_ancillary(View::Status, &pri).await?;
let anc = fetch_ancillary(cv.view, &pri).await?;
for action in pri.handle_click(anc, id) {
action.perform().await?;
}
Expand Down
40 changes: 40 additions & 0 deletions bulb/src/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,46 @@ use std::iter::{empty, once};
use std::marker::PhantomData;
use wasm_bindgen::JsValue;

/// Device requests
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[allow(dead_code)]
pub enum DeviceReq {
NoRequest,
QueryConfiguration,
QuerySettings,
SendSettings,
QueryMessage,
QueryStatus,
QueryPixelFailures,
TestPixels,
TestFans,
TestLamps,
BrightnessGood,
BrightnessTooDim,
BrightnessTooBright,
ResetDevice,
ResetStatus,
QueryGpsLocation,
DisableSystem,
CameraFocusStop,
CameraFocusNear,
CameraFocusFar,
CameraFocusManual,
CameraFocusAuto,
CameraIrisStop,
CameraIrisClose,
CameraIrisOpen,
CameraIrisManual,
CameraIrisAuto,
CameraWiperOneShot,
CameraWasher,
CameraPowerOn,
CameraPowerOff,
CameraMenuOpen,
CameraMenuEnter,
CameraMenuCancel,
}

/// Device resource for controller IO
pub trait Device {
/// Get controller
Expand Down
50 changes: 37 additions & 13 deletions bulb/src/dms.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
// GNU General Public License for more details.
//
use crate::card::{html_title_row, AncillaryData, Card, View};
use crate::device::{Device, DeviceAnc};
use crate::device::{Device, DeviceAnc, DeviceReq};
use crate::error::Result;
use crate::fetch::{Action, ContentType, Uri};
use crate::item::{ItemState, ItemStates};
Expand Down Expand Up @@ -961,24 +961,31 @@ impl Dms {
"{title}\
<div class='row'>\
<span>Current Message</span>\
<button id='rq_message' type='button'>Query</button>\
<button id='rq_msg_query' type='button'>Query</button>\
</div>\
<div class='row'>\
<span>Current Status</span>\
<button id='rq_status' type='button'>Query</button>\
<button id='rq_status_query' type='button'>Query</button>\
</div>\
<div class='row'>\
<span>Pixel Errors</span>\
<span>\
<button id='rq_pixel_test' type='button'>Test</button>\
<button id='rq_pixel_query' type='button'>Query</button>\
</span>\
</div>\
<div class='row'>\
<span>Settings</span>\
<span>\
<button id='rq_send_settings' type='button'>Send</button>\
<button id='rq_query_settings' type='button'>Query</button>\
<button id='rq_settings_send' type='button'>Send</button>\
<button id='rq_settings_query' type='button'>Query</button>\
</span>\
</div>\
<div class='row'>\
<span>Configuration</span>\
<span>\
<button id='rq_reset' type='button'>Reset</button>\
<button id='rq_config' type='button'>Query</button>\
<button id='rq_config_reset' type='button'>Reset</button>\
<button id='rq_config_query' type='button'>Query</button>\
</span>\
</div>\
<div class='row'>\
Expand Down Expand Up @@ -1077,6 +1084,17 @@ impl Dms {
_ => Vec::new(),
}
}

/// Create action to handle click on a device request button
fn device_req(&self, req: DeviceReq) -> Vec<Action> {
let uri = Dms::uri_name(&self.name);
let mut fields = Fields::new();
fields.insert_num("device_req", req as u32);
let value = fields.into_value().to_string();
let mut actions = Vec::with_capacity(1);
actions.push(Action::Patch(uri, value.into()));
actions
}
}

impl Device for Dms {
Expand Down Expand Up @@ -1181,12 +1199,18 @@ impl Card for Dms {

/// Handle click event for a button on the card
fn handle_click(&self, anc: DmsAnc, id: String) -> Vec<Action> {
if &id == "mc_send" {
self.send_actions(anc)
} else if &id == "mc_blank" {
self.blank_actions(anc)
} else {
Vec::new()
match id.as_str() {
"mc_send" => self.send_actions(anc),
"mc_blank" => self.blank_actions(anc),
"rq_msg_query" => self.device_req(DeviceReq::QueryMessage),
"rq_status_query" => self.device_req(DeviceReq::QueryStatus),
"rq_pixel_test" => self.device_req(DeviceReq::TestPixels),
"rq_pixel_query" => self.device_req(DeviceReq::QueryPixelFailures),
"rq_settings_send" => self.device_req(DeviceReq::SendSettings),
"rq_settings_query" => self.device_req(DeviceReq::QuerySettings),
"rq_config_reset" => self.device_req(DeviceReq::ResetDevice),
"rq_config_query" => self.device_req(DeviceReq::QueryConfiguration),
_ => Vec::new(),
}
}

Expand Down

0 comments on commit c43540c

Please sign in to comment.