summaryrefslogtreecommitdiffstats
path: root/src/commands.rs
blob: d84d9cdb4d478f9ada53ac05d1fee937401841a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
use num_enum::TryFromPrimitive;
use num_enum::IntoPrimitive;
use tokio::io::*;
use tokio::net::TcpStream;

use super::enums::LatencyMode;

/// Commands

pub enum Command {
  GetInfo,
  CreateScanner {
    scan_id: u32,
  },
  RemoveScanner {
    scan_id: u32,
  },
  CreateConnectionChannel {
    conn_id: u32,
    bd_addr: String,
    latency_mode: LatencyMode,
    auto_disconnect_time: i16,
  },
  RemoveConnectionChannel {
    conn_id: u32,
  },
  ForceDisconnect {
    bd_addr: String,
  },
  ChangeModeParameters {
    conn_id: u32,
    latency_mode: LatencyMode,
    auto_disconnect_time: i16,
  },
  Ping {
    ping_id: u32,
  },
  GetButtonInfo {
    bd_addr: String,
  },
  CreateScanWizard {
    scan_wizard_id: u32,
  },
  CancelScanWizard {
    scan_wizard_id: u32,
  },
  DeleteButton {
    bd_addr: String,
  },
  CreateBatteryStatusListener {
    listener_id: u32,
    bd_addr: String,
  },
  RemoveBatteryStatusListener {
    listener_id: u32,
  },
}

impl Command {
  pub fn opcode(&self) -> u8 {
    match self {
        Self::GetInfo{..} => 0,
        Self::CreateScanner{..} => 1,
        Self::RemoveScanner{..} => 2,
        Self::CreateConnectionChannel{..} => 3,
        Self::RemoveConnectionChannel{..} => 4,
        Self::ForceDisconnect{..} => 5,
        Self::ChangeModeParameters{..} => 6,
        Self::Ping{..} => 7,
        Self::GetButtonInfo{..} => 8,
        Self::CreateScanWizard{..} => 9,
        Self::CancelScanWizard{..} => 10,
        Self::DeleteButton{..} => 11,
        Self::CreateBatteryStatusListener{..} => 12,
        Self::RemoveBatteryStatusListener{..} => 13,
    }
  }
  pub fn write_command(&self, writer: &mut TcpStream) -> Result<()> {
    match self {
      Self::GetInfo{..} => 0,
      Self::CreateScanner{..} => 1,
      Self::RemoveScanner{..} => 2,
      Self::CreateConnectionChannel{..} => 3,
      Self::RemoveConnectionChannel{..} => 4,
      Self::ForceDisconnect{..} => 5,
      Self::ChangeModeParameters{..} => 6,
      Self::Ping{..} => 7,
      Self::GetButtonInfo{..} => 8,
      Self::CreateScanWizard{..} => 9,
      Self::CancelScanWizard{..} => 10,
      Self::DeleteButton{..} => 11,
      Self::CreateBatteryStatusListener{..} => 12,
      Self::RemoveBatteryStatusListener{..} => 13,
    };

    Ok(())
  }
}