mirror of
https://github.com/xmrig/xmrig.git
synced 2024-10-30 04:57:39 +00:00
Added mining on battery setting
This commit is contained in:
parent
5bc89fdc8b
commit
299b180b28
10 changed files with 95 additions and 18 deletions
|
@ -54,6 +54,8 @@ public:
|
||||||
|
|
||||||
static inline const char *userAgent() { return m_userAgent; }
|
static inline const char *userAgent() { return m_userAgent; }
|
||||||
|
|
||||||
|
static bool isOnBatteryPower();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static char *createUserAgent();
|
static char *createUserAgent();
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
|
||||||
#include "base/kernel/Platform.h"
|
#include "base/kernel/Platform.h"
|
||||||
|
@ -107,3 +108,18 @@ void xmrig::Platform::setThreadPriority(int priority)
|
||||||
setpriority(PRIO_PROCESS, 0, prio);
|
setpriority(PRIO_PROCESS, 0, prio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool xmrig::Platform::isOnBatteryPower()
|
||||||
|
{
|
||||||
|
for (int i = 0; i <= 1; ++i) {
|
||||||
|
char buf[64];
|
||||||
|
snprintf(buf, 64, "/sys/class/power_supply/BAT%d/status", i);
|
||||||
|
std::ifstream f(buf);
|
||||||
|
if (f.is_open()) {
|
||||||
|
std::string status;
|
||||||
|
f >> status;
|
||||||
|
return (status == "Discharging");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
|
||||||
#include "base/kernel/Platform.h"
|
#include "base/kernel/Platform.h"
|
||||||
|
@ -146,3 +147,19 @@ void xmrig::Platform::setThreadPriority(int priority)
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool xmrig::Platform::isOnBatteryPower()
|
||||||
|
{
|
||||||
|
for (int i = 0; i <= 1; ++i) {
|
||||||
|
char buf[64];
|
||||||
|
snprintf(buf, 64, "/sys/class/power_supply/BAT%d/status", i);
|
||||||
|
std::ifstream f(buf);
|
||||||
|
if (f.is_open()) {
|
||||||
|
std::string status;
|
||||||
|
f >> status;
|
||||||
|
return (status == "Discharging");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -157,3 +157,12 @@ void xmrig::Platform::setThreadPriority(int priority)
|
||||||
SetThreadPriority(GetCurrentThread(), prio);
|
SetThreadPriority(GetCurrentThread(), prio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool xmrig::Platform::isOnBatteryPower()
|
||||||
|
{
|
||||||
|
SYSTEM_POWER_STATUS st;
|
||||||
|
if (GetSystemPowerStatus(&st)) {
|
||||||
|
return (st.ACLineStatus == 0);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -67,6 +67,7 @@ const char *BaseConfig::kTitle = "title";
|
||||||
const char *BaseConfig::kUserAgent = "user-agent";
|
const char *BaseConfig::kUserAgent = "user-agent";
|
||||||
const char *BaseConfig::kVerbose = "verbose";
|
const char *BaseConfig::kVerbose = "verbose";
|
||||||
const char *BaseConfig::kWatch = "watch";
|
const char *BaseConfig::kWatch = "watch";
|
||||||
|
const char *BaseConfig::kMineOnBattery = "mine-on-battery";
|
||||||
|
|
||||||
|
|
||||||
#ifdef XMRIG_FEATURE_TLS
|
#ifdef XMRIG_FEATURE_TLS
|
||||||
|
@ -90,6 +91,7 @@ bool xmrig::BaseConfig::read(const IJsonReader &reader, const char *fileName)
|
||||||
m_dryRun = reader.getBool(kDryRun, m_dryRun);
|
m_dryRun = reader.getBool(kDryRun, m_dryRun);
|
||||||
m_syslog = reader.getBool(kSyslog, m_syslog);
|
m_syslog = reader.getBool(kSyslog, m_syslog);
|
||||||
m_watch = reader.getBool(kWatch, m_watch);
|
m_watch = reader.getBool(kWatch, m_watch);
|
||||||
|
m_mineOnBattery = reader.getBool(kMineOnBattery, m_mineOnBattery);
|
||||||
m_logFile = reader.getString(kLogFile);
|
m_logFile = reader.getString(kLogFile);
|
||||||
m_userAgent = reader.getString(kUserAgent);
|
m_userAgent = reader.getString(kUserAgent);
|
||||||
m_printTime = std::min(reader.getUint(kPrintTime, m_printTime), 3600U);
|
m_printTime = std::min(reader.getUint(kPrintTime, m_printTime), 3600U);
|
||||||
|
|
|
@ -61,6 +61,7 @@ public:
|
||||||
static const char *kUserAgent;
|
static const char *kUserAgent;
|
||||||
static const char *kVerbose;
|
static const char *kVerbose;
|
||||||
static const char *kWatch;
|
static const char *kWatch;
|
||||||
|
static const char* kMineOnBattery;
|
||||||
|
|
||||||
# ifdef XMRIG_FEATURE_TLS
|
# ifdef XMRIG_FEATURE_TLS
|
||||||
static const char *kTls;
|
static const char *kTls;
|
||||||
|
@ -80,6 +81,7 @@ public:
|
||||||
inline const String &apiWorkerId() const { return m_apiWorkerId; }
|
inline const String &apiWorkerId() const { return m_apiWorkerId; }
|
||||||
inline const Title &title() const { return m_title; }
|
inline const Title &title() const { return m_title; }
|
||||||
inline uint32_t printTime() const { return m_printTime; }
|
inline uint32_t printTime() const { return m_printTime; }
|
||||||
|
inline bool mineOnBattery() const { return m_mineOnBattery; }
|
||||||
|
|
||||||
# ifdef XMRIG_FEATURE_TLS
|
# ifdef XMRIG_FEATURE_TLS
|
||||||
inline const TlsConfig &tls() const { return m_tls; }
|
inline const TlsConfig &tls() const { return m_tls; }
|
||||||
|
@ -101,6 +103,7 @@ protected:
|
||||||
bool m_syslog = false;
|
bool m_syslog = false;
|
||||||
bool m_upgrade = false;
|
bool m_upgrade = false;
|
||||||
bool m_watch = true;
|
bool m_watch = true;
|
||||||
|
bool m_mineOnBattery = true;
|
||||||
Http m_http;
|
Http m_http;
|
||||||
Pools m_pools;
|
Pools m_pools;
|
||||||
String m_apiId;
|
String m_apiId;
|
||||||
|
|
|
@ -91,5 +91,6 @@
|
||||||
},
|
},
|
||||||
"user-agent": null,
|
"user-agent": null,
|
||||||
"verbose": 0,
|
"verbose": 0,
|
||||||
"watch": true
|
"watch": true,
|
||||||
|
"mine-on-battery": true
|
||||||
}
|
}
|
||||||
|
|
|
@ -287,6 +287,7 @@ public:
|
||||||
bool active = false;
|
bool active = false;
|
||||||
bool enabled = true;
|
bool enabled = true;
|
||||||
bool reset = true;
|
bool reset = true;
|
||||||
|
bool battery_power = false;
|
||||||
Controller *controller;
|
Controller *controller;
|
||||||
Job job;
|
Job job;
|
||||||
mutable std::map<Algorithm::Id, double> maxHashrate;
|
mutable std::map<Algorithm::Id, double> maxHashrate;
|
||||||
|
@ -429,14 +430,24 @@ void xmrig::Miner::setEnabled(bool enabled)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (d_ptr->battery_power && enabled) {
|
||||||
|
LOG_INFO(YELLOW_BOLD("Can't resume while on battery power"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
d_ptr->enabled = enabled;
|
d_ptr->enabled = enabled;
|
||||||
|
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
LOG_INFO(GREEN_BOLD("resumed"));
|
LOG_INFO(GREEN_BOLD("resumed"));
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (d_ptr->battery_power) {
|
||||||
|
LOG_INFO(YELLOW_BOLD("paused"));
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
LOG_INFO(YELLOW_BOLD("paused") ", press " MAGENTA_BG_BOLD(" r ") " to resume");
|
LOG_INFO(YELLOW_BOLD("paused") ", press " MAGENTA_BG_BOLD(" r ") " to resume");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!d_ptr->active) {
|
if (!d_ptr->active) {
|
||||||
return;
|
return;
|
||||||
|
@ -538,6 +549,20 @@ void xmrig::Miner::onTimer(const Timer *)
|
||||||
}
|
}
|
||||||
|
|
||||||
d_ptr->ticks++;
|
d_ptr->ticks++;
|
||||||
|
|
||||||
|
if (!d_ptr->controller->config()->mineOnBattery()) {
|
||||||
|
const bool battery_power = xmrig::Platform::isOnBatteryPower();
|
||||||
|
if (battery_power && d_ptr->enabled) {
|
||||||
|
LOG_INFO(YELLOW_BOLD("On battery power"));
|
||||||
|
d_ptr->battery_power = true;
|
||||||
|
setEnabled(false);
|
||||||
|
}
|
||||||
|
else if (!battery_power && !d_ptr->enabled && d_ptr->battery_power) {
|
||||||
|
LOG_INFO(GREEN_BOLD("On AC power"));
|
||||||
|
d_ptr->battery_power = false;
|
||||||
|
setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -252,4 +252,5 @@ void xmrig::Config::getJSON(rapidjson::Document &doc) const
|
||||||
doc.AddMember(StringRef(kUserAgent), m_userAgent.toJSON(), allocator);
|
doc.AddMember(StringRef(kUserAgent), m_userAgent.toJSON(), allocator);
|
||||||
doc.AddMember(StringRef(kVerbose), Log::verbose(), allocator);
|
doc.AddMember(StringRef(kVerbose), Log::verbose(), allocator);
|
||||||
doc.AddMember(StringRef(kWatch), m_watch, allocator);
|
doc.AddMember(StringRef(kWatch), m_watch, allocator);
|
||||||
|
doc.AddMember(StringRef(kMineOnBattery), m_mineOnBattery, allocator);
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,7 +109,8 @@ R"===(
|
||||||
"retry-pause": 5,
|
"retry-pause": 5,
|
||||||
"syslog": false,
|
"syslog": false,
|
||||||
"user-agent": null,
|
"user-agent": null,
|
||||||
"watch": true
|
"watch": true,
|
||||||
|
"mine-on-battery": true
|
||||||
}
|
}
|
||||||
)===";
|
)===";
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue