File: hid_battery_util.cc

package info (click to toggle)
chromium 120.0.6099.224-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,112,112 kB
  • sloc: cpp: 32,907,025; ansic: 8,148,123; javascript: 3,679,536; python: 2,031,248; asm: 959,718; java: 804,675; xml: 617,256; sh: 111,417; objc: 100,835; perl: 88,443; cs: 53,032; makefile: 29,579; fortran: 24,137; php: 21,162; tcl: 21,147; sql: 20,809; ruby: 17,735; pascal: 12,864; yacc: 8,045; lisp: 3,388; lex: 1,323; ada: 727; awk: 329; jsp: 267; csh: 117; exp: 43; sed: 37
file content (59 lines) | stat: -rw-r--r-- 1,840 bytes parent folder | download | duplicates (5)
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
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/power/hid_battery_util.h"

#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "third_party/re2/src/re2/re2.h"

namespace ash {

namespace {

// HID device's battery sysfs entry path looks like
// /sys/class/power_supply/hid-{AA:BB:CC:DD:EE:FF|AAAA:BBBB:CCCC.DDDD}-battery.
constexpr char kHIDBatteryPrefix[] = "/sys/class/power_supply/hid-";
constexpr char kHIDBatterySuffix[] = "-battery";
constexpr size_t kPrefixLen = std::size(kHIDBatteryPrefix) - 1;
constexpr size_t kPrefixAndSuffixLen =
    (std::size(kHIDBatteryPrefix) - 1) + (std::size(kHIDBatterySuffix) - 1);

// Regex to check for valid bluetooth addresses.
constexpr char kBluetoothAddressRegex[] =
    "^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$";

}  // namespace

bool IsHIDBattery(const std::string& path) {
  if (!base::StartsWith(path, kHIDBatteryPrefix,
                        base::CompareCase::INSENSITIVE_ASCII) ||
      !base::EndsWith(path, kHIDBatterySuffix,
                      base::CompareCase::INSENSITIVE_ASCII)) {
    return false;
  }

  return path.size() > kPrefixAndSuffixLen;
}

std::string ExtractHIDBatteryIdentifier(const std::string& path) {
  if (path.size() <= kPrefixAndSuffixLen)
    return std::string();

  size_t id_len = path.size() - kPrefixAndSuffixLen;
  return path.substr(kPrefixLen, id_len);
}

std::string ExtractBluetoothAddressFromHIDBatteryPath(const std::string& path) {
  if (!IsHIDBattery(path))
    return std::string();

  std::string identifier = ExtractHIDBatteryIdentifier(path);
  if (!RE2::FullMatch(identifier, kBluetoothAddressRegex))
    return std::string();

  return base::ToLowerASCII(identifier);
}

}  // namespace ash