asic_rs/data/device/
mod.rs1use serde::{Deserialize, Serialize};
2use strum::Display;
3
4pub mod models;
5pub use models::MinerModel;
6#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize, Display)]
7pub enum MinerFirmware {
8 #[serde(rename = "Stock")]
9 Stock,
10 #[serde(rename = "BraiinsOS")]
11 BraiinsOS,
12 #[serde(rename = "VNish")]
13 VNish,
14 #[serde(rename = "ePIC")]
15 EPic,
16 #[serde(rename = "HiveOS")]
17 HiveOS,
18 #[serde(rename = "LuxOS")]
19 LuxOS,
20 #[serde(rename = "Marathon")]
21 Marathon,
22 #[serde(rename = "MSKMiner")]
23 MSKMiner,
24}
25
26#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize, Display)]
27pub enum MinerMake {
28 #[serde(rename = "AntMiner")]
29 AntMiner,
30 #[serde(rename = "WhatsMiner")]
31 WhatsMiner,
32 #[serde(rename = "AvalonMiner")]
33 AvalonMiner,
34 #[serde(rename = "ePIC")]
35 EPic,
36 #[serde(rename = "Braiins")]
37 Braiins,
38 #[serde(rename = "BitAxe")]
39 BitAxe,
40}
41
42#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize, Display)]
43pub enum HashAlgorithm {
44 #[serde(rename = "SHA256")]
45 SHA256,
46 #[serde(rename = "Scrypt")]
47 Scrypt,
48 #[serde(rename = "X11")]
49 X11,
50 #[serde(rename = "Blake2S256")]
51 Blake2S256,
52 #[serde(rename = "Kadena")]
53 Kadena,
54}
55
56#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize)]
57pub struct DeviceInfo {
58 pub make: MinerMake,
59 pub model: MinerModel,
60 pub hardware: MinerHardware,
61 pub firmware: MinerFirmware,
62 pub algo: HashAlgorithm,
63}
64
65impl DeviceInfo {
66 pub(crate) fn new(
67 make: MinerMake,
68 model: MinerModel,
69 firmware: MinerFirmware,
70 algo: HashAlgorithm,
71 ) -> Self {
72 Self {
73 make,
74 hardware: MinerHardware::from(&model),
75 model,
76 firmware,
77 algo,
78 }
79 }
80}
81
82#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize)]
83pub struct MinerHardware {
84 pub chips: Option<u16>,
85 pub fans: Option<u8>,
86 pub boards: Option<u8>,
87}
88
89impl From<&MinerModel> for MinerHardware {
90 fn from(model: &MinerModel) -> Self {
91 match model {
92 MinerModel::AntMiner(model_name) => Self::from(model_name),
93 MinerModel::WhatsMiner(model_name) => Self::from(model_name),
94 MinerModel::Braiins(model_name) => Self::from(model_name),
95 MinerModel::BitAxe(model_name) => Self::from(model_name),
96 MinerModel::EPic(model_name) => Self::from(model_name),
97 MinerModel::AvalonMiner(model_name) => Self::from(model_name),
98 }
99 }
100}