blob: bae24c8fa46477cb4255f5258626308e415d0ec8 [file] [log] [blame]
Vladimir Serbinenko3129f792014-10-15 21:51:47 +02001package main
2
3import (
4 "io"
5 "io/ioutil"
6 "log"
7 "os"
8 "os/exec"
9 "strings"
10)
11
Vladimir Serbinenko39e25ec2015-05-29 20:49:09 +020012func TryRunAndSave(output string, name string, arg []string) error {
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020013 cmd := exec.Command(name, arg...)
14
15 f, err := os.Create(output)
16 if err != nil {
17 log.Fatal(err)
18 }
19
20 cmd.Stdout = f
21 cmd.Stderr = f
22
23 err = cmd.Start()
24 if err != nil {
Vladimir Serbinenko39e25ec2015-05-29 20:49:09 +020025 return err
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020026 }
27 cmd.Wait()
Vladimir Serbinenko39e25ec2015-05-29 20:49:09 +020028 return nil
29}
30
31func RunAndSave(output string, name string, arg ...string) {
32 err := TryRunAndSave(output, name, arg)
33 if err == nil {
34 return
35 }
36 idx := strings.LastIndex(name, "/")
37 relname := name
38 if idx >= 0 {
39 relname = name[idx+1:]
40 }
41 relname = "./" + relname
42 err = TryRunAndSave(output, relname, arg)
43 if err != nil {
44 log.Fatal(err)
45 }
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020046}
47
48func MakeLogs(outDir string) {
49 os.MkdirAll(outDir, 0700)
50 RunAndSave(outDir+"/lspci.log", "lspci", "-nnvvvxxxx")
51 RunAndSave(outDir+"/dmidecode.log", "dmidecode")
52 RunAndSave(outDir+"/acpidump.log", "acpidump")
53 /* FIXME:XX */
54 RunAndSave(outDir+"/inteltool.log", "../inteltool/inteltool", "-a")
Vladimir Serbinenko6286e352015-10-10 23:17:03 +020055 RunAndSave(outDir+"/ectool.log", "../ectool/ectool")
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020056
57 SysDir := "/sys/class/sound/card0/"
58 files, _ := ioutil.ReadDir(SysDir)
59 for _, f := range files {
60 if (strings.HasPrefix(f.Name(), "hw") || strings.HasPrefix(f.Name(), "hdaudio")) && f.IsDir() {
61 in, err := os.Open(SysDir + f.Name() + "/init_pin_configs")
62 defer in.Close()
63 if err != nil {
64 log.Fatal(err)
65 }
66 out, err := os.Create(outDir + "/pin_" + strings.Replace(f.Name(), "hdaudio", "hw", -1))
67 if err != nil {
68 log.Fatal(err)
69 }
70 defer out.Close()
71 io.Copy(out, in)
72 }
73 }
74
75 ProcDir := "/proc/asound/card0/"
76 files, _ = ioutil.ReadDir(ProcDir)
77 for _, f := range files {
78 if strings.HasPrefix(f.Name(), "codec#") && !f.IsDir() {
79 in, err := os.Open(ProcDir + f.Name())
80 defer in.Close()
81 if err != nil {
82 log.Fatal(err)
83 }
84 out, err := os.Create(outDir + "/" + f.Name())
85 if err != nil {
86 log.Fatal(err)
87 }
88 defer out.Close()
89 io.Copy(out, in)
90 }
91 }
92
93 for _, fname := range []string{"cpuinfo", "ioports"} {
94 in, err := os.Open("/proc/" + fname)
95 defer in.Close()
96 if err != nil {
97 log.Fatal(err)
98 }
99 out, err := os.Create(outDir + "/" + fname + ".log")
100 if err != nil {
101 log.Fatal(err)
102 }
103 defer out.Close()
104 io.Copy(out, in)
105 }
Vladimir Serbinenko91195c62015-05-29 23:53:37 +0200106
107 out, err := os.Create(outDir + "/input_bustypes.log")
108 if err != nil {
109 log.Fatal(err)
110 }
111 defer out.Close()
112
113 ClassInputDir := "/sys/class/input/"
114 files, _ = ioutil.ReadDir(ClassInputDir)
115 for _, f := range files {
116 if strings.HasPrefix(f.Name(), "input") && !f.Mode().IsRegular() { /* Allow both dirs and symlinks. */
117 in, err := os.Open(ClassInputDir + f.Name() + "/id/bustype")
118 defer in.Close()
119 if err != nil {
120 log.Fatal(err)
121 }
122 io.Copy(out, in)
123 }
124 }
Vladimir Serbinenko3129f792014-10-15 21:51:47 +0200125}