asic_rs/data/device/
mod.rs

1use 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}