Improve errors
This commit is contained in:
parent
6e4c7f0eaa
commit
4b21608884
|
@ -3,7 +3,6 @@ package fastboot
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
|
|
||||||
"github.com/google/gousb"
|
"github.com/google/gousb"
|
||||||
)
|
)
|
||||||
|
@ -23,9 +22,11 @@ var Status = struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var Error = struct {
|
var Error = struct {
|
||||||
VarNotFound error
|
VarNotFound error
|
||||||
|
DeviceNotFound error
|
||||||
}{
|
}{
|
||||||
VarNotFound: errors.New("Variable not found"),
|
VarNotFound: errors.New("variable not found"),
|
||||||
|
DeviceNotFound: gousb.ErrorNotFound,
|
||||||
}
|
}
|
||||||
|
|
||||||
type FastbootDevice struct {
|
type FastbootDevice struct {
|
||||||
|
@ -53,7 +54,6 @@ func FindDevices(ctx *gousb.Context) ([]FastbootDevice, error) {
|
||||||
for _, dev := range devs {
|
for _, dev := range devs {
|
||||||
serial, err := dev.SerialNumber()
|
serial, err := dev.SerialNumber()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error retriving serial number for device: %v", err)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fastbootDevices = append(fastbootDevices, FastbootDevice{Serial: serial, Device: dev})
|
fastbootDevices = append(fastbootDevices, FastbootDevice{Serial: serial, Device: dev})
|
||||||
|
@ -82,7 +82,6 @@ func FindDevice(ctx *gousb.Context, serial string) (FastbootDevice, error) {
|
||||||
for _, dev := range devs {
|
for _, dev := range devs {
|
||||||
serialNumber, err := dev.SerialNumber()
|
serialNumber, err := dev.SerialNumber()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error retriving serial number for device: %v", err)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if serial != serialNumber {
|
if serial != serialNumber {
|
||||||
|
@ -91,7 +90,7 @@ func FindDevice(ctx *gousb.Context, serial string) (FastbootDevice, error) {
|
||||||
return FastbootDevice{Serial: serial, Device: dev}, nil
|
return FastbootDevice{Serial: serial, Device: dev}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return fastbootDevice, fmt.Errorf("Devide with serial %s not found", serial)
|
return fastbootDevice, Error.DeviceNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *FastbootDevice) Send(data []byte) error {
|
func (d *FastbootDevice) Send(data []byte) error {
|
||||||
|
@ -139,7 +138,7 @@ func (d *FastbootDevice) Recv() (FastbootResponseStatus, []byte, error) {
|
||||||
|
|
||||||
var data []byte
|
var data []byte
|
||||||
buf := make([]byte, inEndpoint.Desc.MaxPacketSize)
|
buf := make([]byte, inEndpoint.Desc.MaxPacketSize)
|
||||||
n, err := inEndpoint.Read(buf)
|
n, _ := inEndpoint.Read(buf)
|
||||||
data = append(data, buf[:n]...)
|
data = append(data, buf[:n]...)
|
||||||
var status FastbootResponseStatus
|
var status FastbootResponseStatus
|
||||||
switch string(data[:4]) {
|
switch string(data[:4]) {
|
||||||
|
@ -168,7 +167,7 @@ func (d *FastbootDevice) GerVar(variable string) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *FastbootDevice) BootImage(data []byte) error {
|
func (d *FastbootDevice) BootImage(data []byte) error {
|
||||||
err := d.download(data)
|
err := d.Download(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -181,7 +180,28 @@ func (d *FastbootDevice) BootImage(data []byte) error {
|
||||||
status, data, err := d.Recv()
|
status, data, err := d.Recv()
|
||||||
switch {
|
switch {
|
||||||
case status != Status.OKAY:
|
case status != Status.OKAY:
|
||||||
return fmt.Errorf("Failed to boot image: %s %s", status, data)
|
return fmt.Errorf("failed to boot image: %s %s", status, data)
|
||||||
|
case err != nil:
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *FastbootDevice) Flash(partition string, data []byte) error {
|
||||||
|
err := d.Download(data)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = d.Send([]byte(fmt.Sprintf("flash:%s", partition)))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
status, data, err := d.Recv()
|
||||||
|
switch {
|
||||||
|
case status != Status.OKAY:
|
||||||
|
return fmt.Errorf("failed to flash image: %s %s", status, data)
|
||||||
case err != nil:
|
case err != nil:
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -189,7 +209,7 @@ func (d *FastbootDevice) BootImage(data []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *FastbootDevice) download(data []byte) error {
|
func (d *FastbootDevice) Download(data []byte) error {
|
||||||
data_size := len(data)
|
data_size := len(data)
|
||||||
err := d.Send([]byte(fmt.Sprintf("download:%08x", data_size)))
|
err := d.Send([]byte(fmt.Sprintf("download:%08x", data_size)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -199,7 +219,7 @@ func (d *FastbootDevice) download(data []byte) error {
|
||||||
status, _, err := d.Recv()
|
status, _, err := d.Recv()
|
||||||
switch {
|
switch {
|
||||||
case status != Status.DATA:
|
case status != Status.DATA:
|
||||||
return fmt.Errorf("Failed to start data phase: %s", status)
|
return fmt.Errorf("failed to start data phase: %s", status)
|
||||||
case err != nil:
|
case err != nil:
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -219,7 +239,7 @@ func (d *FastbootDevice) download(data []byte) error {
|
||||||
status, data, err = d.Recv()
|
status, data, err = d.Recv()
|
||||||
switch {
|
switch {
|
||||||
case status != Status.OKAY:
|
case status != Status.OKAY:
|
||||||
return fmt.Errorf("Failed to finish data phase: %s %s", status, data)
|
return fmt.Errorf("failed to finish data phase: %s %s", status, data)
|
||||||
case err != nil:
|
case err != nil:
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue