|
7 | 7 | "io" |
8 | 8 | "net" |
9 | 9 | "strconv" |
| 10 | + "strings" |
10 | 11 | ) |
11 | 12 |
|
12 | 13 | const ( |
@@ -131,17 +132,58 @@ func (c *Client) Version() (string, error) { |
131 | 132 | return reader.DecodeString() |
132 | 133 | } |
133 | 134 |
|
| 135 | +func (c *Client) Devices() (devs []*ADevice, err error) { |
| 136 | + conn, err := net.Dial("tcp", c.Addr) |
| 137 | + if err != nil { |
| 138 | + return nil, err |
| 139 | + } |
| 140 | + defer conn.Close() |
| 141 | + dconn := DebugProxyConn{ |
| 142 | + R: bufio.NewReader(conn), |
| 143 | + W: conn} |
| 144 | + |
| 145 | + writer := ADBEncoder{dconn} |
| 146 | + writer.Encode([]byte("host:devices")) |
| 147 | + reader := ADBDecoder{dconn} |
| 148 | + if err := reader.respCheck(); err != nil { |
| 149 | + return nil, err |
| 150 | + } |
| 151 | + lines, err := reader.DecodeString() |
| 152 | + if err != nil { |
| 153 | + return nil, err |
| 154 | + } |
| 155 | + devs = make([]*ADevice, 0) |
| 156 | + for _, line := range strings.Split(lines, "\n") { |
| 157 | + parts := strings.SplitN(line, "\t", 2) |
| 158 | + if len(parts) != 2 { |
| 159 | + continue |
| 160 | + } |
| 161 | + devs = append(devs, &ADevice{ |
| 162 | + Serial: parts[0], |
| 163 | + Type: parts[1], |
| 164 | + }) |
| 165 | + // devs[parts[0]] = parts[1] |
| 166 | + } |
| 167 | + return |
| 168 | + // regexp.MustCompile(`([\s]+)\t([\w]+)`) |
| 169 | +} |
| 170 | + |
134 | 171 | func (c *Client) DeviceWithSerial(serial string) *ADevice { |
135 | 172 | return &ADevice{ |
136 | 173 | client: c, |
137 | | - serial: serial, |
| 174 | + Serial: serial, |
138 | 175 | } |
139 | 176 | } |
140 | 177 |
|
141 | 178 | // Device |
142 | 179 | type ADevice struct { |
143 | 180 | client *Client |
144 | | - serial string |
| 181 | + Serial string |
| 182 | + Type string |
| 183 | +} |
| 184 | + |
| 185 | +func (ad *ADevice) String() string { |
| 186 | + return ad.Serial + ":" + ad.Type |
145 | 187 | } |
146 | 188 |
|
147 | 189 | func (ad *ADevice) OpenShell(cmd string) (rwc io.ReadWriteCloser, err error) { |
|
0 commit comments