summaryrefslogtreecommitdiff
path: root/scripts/newbitmaps/make_bmp_from_components.py
blob: ad4c3d4ef69d85037bcf522112c36745711320e5 (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
#!/usr/bin/python2.6
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Call on a directory with components_XXX_XXX files, to create
# bitmaps with the appropriate names and contents.

import sys
import glob
import os
import re
import tempfile


if len(sys.argv) < 2:
  print "usage: %s autotest/../hardware_Components/" % sys.argv[0]
  sys.exit(1)


def MakeBmp(hwid, geom, bmp, directory):
  """ Create the bitmap for this file. """
  tmpdir = tempfile.mkdtemp()
  tmpfile = os.path.join(tmpdir, "hwid.txt")
  tmpbmpname = os.path.join(tmpdir, "hwid.bmp")
  f = open(tmpfile, "w")
  f.write(hwid)
  f.close()

  # Call bitmap making tools.
  txt_to_bmp = ("~/trunk/src/platform/vboot_reference/"
                "scripts/newbitmaps/strings/text_to_bmp")
  imagedir = os.path.join(
    "~/trunk/src/platform/vboot_reference/scripts/newbitmaps/images",  geom)
  yamlfile = os.path.join(imagedir, "unknown.yaml")
  newyamlfile = os.path.join(imagedir, "hwid.yaml")
  outputbmp = os.path.join(directory, bmp)

  os.system("%s %s > /dev/null" % (txt_to_bmp, tmpfile))
  os.system("cat %s | sed 's#hwid_unknown.bmp#%s#' > %s" % (
            yamlfile, tmpbmpname, newyamlfile))
  os.system("pushd %s >/dev/null; bmpblk_utility -c %s %s; popd >/dev/null" % (
            imagedir, newyamlfile, outputbmp))
  os.system("rm -rf %s" % tmpdir)

def ProcessDir(directory):
  """ Find all the components file in this dir. """
  # Regex to find the values we want.
  re_bmp = re.compile(r'\'data_bitmap_fv\': \[\'(?P<bmp>.*)\'\],')
  re_hwid = re.compile(r'\'part_id_hwqual\': \[\'(?P<hwid>.*)\'\],')
  re_geom = re.compile(r'\'data_display_geometry\': \[\'(?P<geom>.*)\'\],')

  # Find the components files.
  files = glob.glob(os.path.join(directory, "data_*/components_*"))
  for file in files:
    # Scan for the values.
    f = open(file, "r")
    bmp = None
    hwid = None
    geom = None
    for line in f.readlines():
      m = re_bmp.search(line)
      if m:
        bmp = m.group('bmp')

      m = re_hwid.search(line)
      if m:
        hwid = m.group('hwid')

      m = re_geom.search(line)
      if m:
        geom = m.group('geom')
    f.close()
    if not ( bmp and hwid and geom):
      print "Corrupt HWID configuration"
      sys.exit(1)
    print "HWID: %s, %s, %s" % (hwid, geom, bmp)
    MakeBmp(hwid, geom, bmp, directory)

def main():
  directory = os.path.abspath(sys.argv[1])
  print "Generating HWID bmp based on %s" % directory
  ProcessDir(directory)

if __name__ == '__main__':
  main()