From 674b639850d6ef83fa9b132d638bf1604896816e Mon Sep 17 00:00:00 2001 From: Tai Groot Date: Sun, 17 Jul 2022 23:31:58 -0700 Subject: [PATCH] in progress on capture implementation --- adb.go | 5 +++++ capture.go | 31 +++++++++++++++++++++++++++++++ errors.go | 9 +++++++++ 3 files changed, 45 insertions(+) create mode 100644 errors.go diff --git a/adb.go b/adb.go index 884c86b..e712054 100644 --- a/adb.go +++ b/adb.go @@ -14,6 +14,10 @@ const ( Network ) +// Create a Device with Connect() or a slice with Devices() +// +// Device contains the information necessary to connect to and +// communicate with a device type Device struct { SerialNo Serial ConnType Connection @@ -21,6 +25,7 @@ type Device struct { FileHandle string // TODO change this to a discrete type } +// Provides a connection string for Connect() type ConnOptions struct { Address net.IPAddr SerialNo Serial diff --git a/capture.go b/capture.go index 0243b94..e50abb4 100644 --- a/capture.go +++ b/capture.go @@ -2,6 +2,7 @@ package adb import ( "context" + "log" "time" ) @@ -64,6 +65,27 @@ type TapSequence struct { Events []Input } +// ShortenSleep allows you to shorten all the sleep times between tap and swipe events. +// +// Provide a scalar value to divide the sleeps by. Providing `2` will halve all +// sleep durations in the TapSequence. Swipe durations and tap durations are +// unaffected. + +func (t TapSequence) ShortenSleep(scalar int) TapSequence { + seq := []Input{} + for _, s := range t.Events { + switch y := s.(type) { + case SequenceSleep: + y.Duration = y.Duration / time.Duration(scalar) + seq = append(seq, y) + default: + seq = append(seq, s) + } + } + t.Events = seq + return t +} + // GetLength returns the length of all Input events inside of a given TapSequence // // This function is useful for devermining how long a context timeout should @@ -87,5 +109,14 @@ func (d Device) ReplayTapSequence(ctx context.Context, t TapSequence) error { } func (d Device) CaptureSequence(ctx context.Context) (t TapSequence, err error) { + // this command will never finish, and always returns error code 130 if successful + stdout, _, errCode, err := execute(ctx, []string{"shell", "getevent", "-tl"}) + if errCode != 130 { + log.Printf("Expected error code 130, but got \n", errCode) + } + if stdout == "" { + return TapSequence{}, ErrStdoutEmpty + } + return TapSequence{}, nil } diff --git a/errors.go b/errors.go new file mode 100644 index 0000000..79a83bc --- /dev/null +++ b/errors.go @@ -0,0 +1,9 @@ +package adb + +import ( + "errors" +) + +// When an execution should have data but has none, but the exact error is +// indeterminite, this error is returned +var ErrStdoutEmpty = errors.New("stdout expected to contain data but was empty")