Skip to content

Commit 3df5b5a

Browse files
authored
feat: init device with optional serial, port, mjpeg port (#14)
* feat: init device with optional serial, port, mjpeg port * fix: solve some feedbacks
1 parent 07f4517 commit 3df5b5a

File tree

3 files changed

+85
-3
lines changed

3 files changed

+85
-3
lines changed

Diff for: device.go

+62-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ import (
66
giDevice "github.com/electricbubble/gidevice"
77
)
88

9+
const (
10+
defaultPort = 8100
11+
defaultMjpegPort = 9100
12+
)
13+
914
type Device struct {
1015
deviceID int
1116
serialNumber string
@@ -15,6 +20,61 @@ type Device struct {
1520
d giDevice.Device
1621
}
1722

23+
type DeviceOption func(d *Device)
24+
25+
func WithSerialNumber(serialNumber string) DeviceOption {
26+
return func(d *Device) {
27+
d.serialNumber = serialNumber
28+
}
29+
}
30+
31+
func WithPort(port int) DeviceOption {
32+
return func(d *Device) {
33+
d.Port = port
34+
}
35+
}
36+
37+
func WithMjpegPort(port int) DeviceOption {
38+
return func(d *Device) {
39+
d.MjpegPort = port
40+
}
41+
}
42+
43+
func NewDevice(options ...DeviceOption) (device *Device, err error) {
44+
var usbmux giDevice.Usbmux
45+
if usbmux, err = giDevice.NewUsbmux(); err != nil {
46+
return nil, fmt.Errorf("init usbmux failed: %v", err)
47+
}
48+
49+
var deviceList []giDevice.Device
50+
if deviceList, err = usbmux.Devices(); err != nil {
51+
return nil, fmt.Errorf("get attached devices failed: %v", err)
52+
}
53+
54+
device = &Device{
55+
Port: defaultPort,
56+
MjpegPort: defaultMjpegPort,
57+
}
58+
for _, option := range options {
59+
option(device)
60+
}
61+
62+
serialNumber := device.serialNumber
63+
for _, d := range deviceList {
64+
// find device by serial number if specified
65+
if serialNumber != "" && d.Properties().SerialNumber != serialNumber {
66+
continue
67+
}
68+
69+
device.deviceID = d.Properties().DeviceID
70+
device.serialNumber = d.Properties().SerialNumber
71+
device.d = d
72+
return device, nil
73+
}
74+
75+
return nil, fmt.Errorf("device %s not found", device.serialNumber)
76+
}
77+
1878
func DeviceList() (devices []Device, err error) {
1979
var usbmux giDevice.Usbmux
2080
if usbmux, err = giDevice.NewUsbmux(); err != nil {
@@ -31,8 +91,8 @@ func DeviceList() (devices []Device, err error) {
3191
for i := range devices {
3292
devices[i].deviceID = deviceList[i].Properties().DeviceID
3393
devices[i].serialNumber = deviceList[i].Properties().SerialNumber
34-
devices[i].Port = 8100
35-
devices[i].MjpegPort = 9100
94+
devices[i].Port = defaultPort
95+
devices[i].MjpegPort = defaultMjpegPort
3696
devices[i].d = deviceList[i]
3797
}
3898

Diff for: driver.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
// NewDriver creates new remote client, this will also start a new session.
2121
func NewDriver(capabilities Capabilities, urlPrefix string, mjpegPort ...int) (driver WebDriver, err error) {
2222
if len(mjpegPort) == 0 {
23-
mjpegPort = []int{9100}
23+
mjpegPort = []int{defaultMjpegPort}
2424
}
2525
wd := new(remoteWD)
2626
if wd.urlPrefix, err = url.Parse(urlPrefix); err != nil {

Diff for: driver_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,28 @@ func TestViaUSB(t *testing.T) {
4141
}
4242
}
4343

44+
func TestNewDevice(t *testing.T) {
45+
device, _ := NewDevice()
46+
if device != nil {
47+
t.Log(device)
48+
}
49+
50+
device, _ = NewDevice(WithSerialNumber("xxxx"))
51+
if device != nil {
52+
t.Log(device)
53+
}
54+
55+
device, _ = NewDevice(WithPort(8700), WithMjpegPort(8800))
56+
if device != nil {
57+
t.Log(device)
58+
}
59+
60+
device, _ = NewDevice(WithSerialNumber("xxxx"), WithPort(8700), WithMjpegPort(8800))
61+
if device != nil {
62+
t.Log(device)
63+
}
64+
}
65+
4466
func TestNewDriver(t *testing.T) {
4567
var err error
4668
driver, err = NewDriver(nil, urlPrefix)

0 commit comments

Comments
 (0)