Skip to content

Commit 98863c2

Browse files
committed
add get-serialno
1 parent 65dedf1 commit 98863c2

File tree

3 files changed

+116
-67
lines changed

3 files changed

+116
-67
lines changed

adb.go

Lines changed: 13 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -118,75 +118,11 @@ func (conn *AdbConnection) readString() (string, error) {
118118
return conn.readN(length)
119119
}
120120

121-
type AdbClient struct {
122-
Addr string
123-
}
124-
125-
func NewAdbClient() *AdbClient {
126-
return &AdbClient{
127-
Addr: defaultHost + ":" + strconv.Itoa(defaultPort),
128-
}
129-
}
130-
131-
var DefaultAdbClient = &AdbClient{
132-
Addr: "127.0.0.1:5037",
133-
}
134-
135-
func (c *AdbClient) newConnection() (conn *AdbConnection, err error) {
136-
netConn, err := net.Dial("tcp", c.Addr)
137-
if err != nil {
138-
return nil, err
139-
}
140-
return &AdbConnection{netConn}, nil
141-
}
142-
143-
// Version return 4 size string
144-
func (c *AdbClient) Version() (string, error) {
145-
ver, err := c.rawVersion()
146-
if err == nil {
147-
return ver, nil
148-
}
149-
exec.Command(adbPath(), "start-server").Run()
150-
return c.rawVersion()
151-
}
152-
153-
func (c *AdbClient) Watch() (C chan string, err error) {
154-
C = make(chan string, 0)
155-
defer close(C)
156-
// c.Version()
157-
conn, err := c.newConnection()
158-
if err != nil {
159-
return
160-
}
161-
conn.WritePacket("host:watchers")
162-
return
163-
}
164-
165-
// Version returns adb server version
166-
func (c *AdbClient) rawVersion() (string, error) {
167-
conn, err := c.newConnection()
168-
if err != nil {
169-
return "", err
170-
}
171-
defer conn.Close()
172-
if err := conn.WritePacket("host:version"); err != nil {
173-
return "", err
174-
}
175-
return conn.readString()
176-
}
177-
178121
type AdbDevice struct {
179122
*AdbClient
180123
Serial string
181124
}
182125

183-
func (c *AdbClient) DeviceWithSerial(serial string) *AdbDevice {
184-
return &AdbDevice{
185-
AdbClient: c,
186-
Serial: serial,
187-
}
188-
}
189-
190126
func (c *AdbDevice) OpenShell(cmd string) (rw io.ReadWriteCloser, err error) {
191127
conn, err := c.newConnection()
192128
if err != nil {
@@ -218,3 +154,16 @@ func (c *AdbDevice) RunCommand(args ...string) (exitCode int, err error) {
218154
_, err = io.Copy(os.Stdout, reader)
219155
return
220156
}
157+
158+
func (c *AdbDevice) SerialNo() (string, error) {
159+
conn, err := c.newConnection()
160+
if err != nil {
161+
return "", err
162+
}
163+
164+
err = conn.WritePacket("host-serial:" + c.Serial + ":get-serialno")
165+
if err != nil {
166+
return "", err
167+
}
168+
return conn.readString()
169+
}

client.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package main
2+
3+
import (
4+
"net"
5+
"os/exec"
6+
"strconv"
7+
"strings"
8+
)
9+
10+
type AdbClient struct {
11+
Addr string
12+
}
13+
14+
func NewAdbClient() *AdbClient {
15+
return &AdbClient{
16+
Addr: defaultHost + ":" + strconv.Itoa(defaultPort),
17+
}
18+
}
19+
20+
var DefaultAdbClient = &AdbClient{
21+
Addr: "127.0.0.1:5037",
22+
}
23+
24+
func (c *AdbClient) newConnection() (conn *AdbConnection, err error) {
25+
netConn, err := net.Dial("tcp", c.Addr)
26+
if err != nil {
27+
return nil, err
28+
}
29+
return &AdbConnection{netConn}, nil
30+
}
31+
32+
// Version return 4 size string
33+
func (c *AdbClient) Version() (string, error) {
34+
ver, err := c.rawVersion()
35+
if err == nil {
36+
return ver, nil
37+
}
38+
exec.Command(adbPath(), "start-server").Run()
39+
return c.rawVersion()
40+
}
41+
42+
func (c *AdbClient) Watch() (C chan string, err error) {
43+
C = make(chan string, 0)
44+
// c.Version()
45+
conn, err := c.newConnection()
46+
if err != nil {
47+
return
48+
}
49+
conn.WritePacket("host:track-devices")
50+
go func() {
51+
defer close(C)
52+
for {
53+
line, err := conn.readString()
54+
if err != nil {
55+
break
56+
}
57+
line = strings.TrimSpace(line)
58+
if line != "" {
59+
C <- line
60+
}
61+
}
62+
}()
63+
return
64+
}
65+
66+
// Version returns adb server version
67+
func (c *AdbClient) rawVersion() (string, error) {
68+
conn, err := c.newConnection()
69+
if err != nil {
70+
return "", err
71+
}
72+
defer conn.Close()
73+
if err := conn.WritePacket("host:version"); err != nil {
74+
return "", err
75+
}
76+
return conn.readString()
77+
}
78+
79+
func (c *AdbClient) DeviceWithSerial(serial string) *AdbDevice {
80+
return &AdbDevice{
81+
AdbClient: c,
82+
Serial: serial,
83+
}
84+
}

main.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,24 @@ func main() {
375375
return runCommand("python", args...)
376376
},
377377
},
378+
{
379+
Name: "get-serialno",
380+
Usage: "print serial-number",
381+
Action: func(ctx *cli.Context) error {
382+
serial, err := chooseOne()
383+
if err != nil {
384+
return err
385+
}
386+
client := NewAdbClient()
387+
device := client.DeviceWithSerial(serial)
388+
realSerial, err := device.SerialNo()
389+
if err != nil {
390+
return err
391+
}
392+
println(realSerial)
393+
return nil
394+
},
395+
},
378396
{
379397
Name: "healthcheck",
380398
Usage: "check device health status",
@@ -392,15 +410,13 @@ func main() {
392410
Name: "watch",
393411
Usage: "show newest state when device state change",
394412
Action: func(ctx *cli.Context) error {
395-
log.Println("Not implemented yet.")
396-
return nil
397413
client := NewAdbClient()
398414
eventC, err := client.Watch()
399415
if err != nil {
400416
return err
401417
}
402418
for ev := range eventC {
403-
log.Println(ev)
419+
println(ev)
404420
}
405421
return nil
406422
},

0 commit comments

Comments
 (0)