Firmware checks, nearly ready to push firmware to device
This commit is contained in:
@@ -4,7 +4,7 @@ import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/go-playground/log/v7"
|
||||
"hash/crc32"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
@@ -18,8 +18,8 @@ func FwExists(path string) bool {
|
||||
return !errors.Is(err, os.ErrNotExist)
|
||||
}
|
||||
|
||||
func ChkHeader(fwfile string) bool {
|
||||
fmt.Println("checking ", fwfile)
|
||||
func ChkHeader(fwfile string) error {
|
||||
log.Info("checking ", fwfile)
|
||||
// SCS has two different file layouts, one for the "Dragons", the other for any older modem
|
||||
var offset uint32
|
||||
if path.Ext(fwfile) == ".dr7" {
|
||||
@@ -29,32 +29,30 @@ func ChkHeader(fwfile string) bool {
|
||||
}
|
||||
r, err := os.Open(fwfile)
|
||||
if err != nil {
|
||||
return false
|
||||
return err
|
||||
}
|
||||
defer r.Close()
|
||||
|
||||
var header [2]byte
|
||||
_, err = io.ReadFull(r, header[:])
|
||||
if err != nil {
|
||||
return false
|
||||
return err
|
||||
}
|
||||
|
||||
if offset == 0 {
|
||||
if header != [2]byte{0x50, 0x34} {
|
||||
fmt.Println("ERROR: wrong firmware header")
|
||||
//return false
|
||||
return errors.New("ERROR: wrong firmware header")
|
||||
}
|
||||
} else {
|
||||
if header != [2]byte{0x60, 0xea} {
|
||||
fmt.Println("ERROR: wrong firmware header")
|
||||
//return false
|
||||
return errors.New("ERROR: wrong firmware header")
|
||||
}
|
||||
}
|
||||
|
||||
r.Close()
|
||||
firmware, err := ioutil.ReadFile(fwfile)
|
||||
if err != nil {
|
||||
fmt.Println("ERROR: ReadFile operation failed")
|
||||
return errors.New("ERROR: ReadFile operation failed")
|
||||
}
|
||||
|
||||
var size uint32
|
||||
@@ -68,10 +66,9 @@ func ChkHeader(fwfile string) bool {
|
||||
binary.LittleEndian.PutUint32(a, crc32.ChecksumIEEE(firmware[offset:offset+size]))
|
||||
//if bytes.Equal(a, firmware[4+size:8+size]) { // PTC-3
|
||||
if bytes.Equal(a, firmware[offset+size:offset+size+4]) {
|
||||
fmt.Println("CRC checksum ok!")
|
||||
log.Info("CRC checksum ok!")
|
||||
} else {
|
||||
fmt.Println("CRC checksum NOT ok!")
|
||||
return false
|
||||
return errors.New("CRC checksum NOT ok!")
|
||||
}
|
||||
return true
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user