firmware extension checks implemented
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/schollz/progressbar/v3"
|
"github.com/schollz/progressbar/v3"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -104,9 +105,9 @@ func (m *modem) writeUpdate(fwfile string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("flash stamp: % X", binary.LittleEndian.Uint32(answer[2:6]))
|
log.Debugf("flash stamp: % X", binary.LittleEndian.Uint32(answer[2:6]))
|
||||||
flashId := binary.LittleEndian.Uint16(answer[0:2])
|
flashId := binary.LittleEndian.Uint16(answer[0:2])
|
||||||
log.Infof("flash id: % X", flashId)
|
log.Debugf("flash id: % X", flashId)
|
||||||
if flashId != 0xa41f && flashId != 0x5b1f && flashId != 0xda1f {
|
if flashId != 0xa41f && flashId != 0x5b1f && flashId != 0xda1f {
|
||||||
_, _ = m.write("\033", true) // send ESC to cancel the update
|
_, _ = m.write("\033", true) // send ESC to cancel the update
|
||||||
return errors.New("wrong flash id")
|
return errors.New("wrong flash id")
|
||||||
@@ -173,6 +174,47 @@ func (m *modem) writeUpdate(fwfile string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *modem) checkFirmwareFits(fwfile string) error {
|
||||||
|
answer, err := m.write("ver ##\r")
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Error while reading the modem version: %s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
re := regexp.MustCompile(`\w#1`)
|
||||||
|
version := strings.ReplaceAll(string(re.Find(answer)), "#1", "")
|
||||||
|
type modemtype struct {
|
||||||
|
ext, modem string
|
||||||
|
}
|
||||||
|
var extensions = map[string]modemtype{
|
||||||
|
"A": {".pt2", "PTC-II"},
|
||||||
|
"B": {".pro", "PTC-IIpro"},
|
||||||
|
"C": {".pte", "PTC-IIe"},
|
||||||
|
"D": {".pex", "PTC-IIex"},
|
||||||
|
"E": {".ptu", "PTC-IIusb"},
|
||||||
|
"F": {".ptn", "PTC-IInet"},
|
||||||
|
"H": {".dr7", "DR-7800"},
|
||||||
|
"I": {".dr7", "DR-7400"},
|
||||||
|
"K": {".pr7", "DR-7000"},
|
||||||
|
"L": {".p3u", "PTC-IIIusb"},
|
||||||
|
"T": {".ptx", "PTC-IIItrx"},
|
||||||
|
}
|
||||||
|
|
||||||
|
modem, exists := extensions[version]
|
||||||
|
if exists {
|
||||||
|
if modem.ext == path.Ext(fwfile) {
|
||||||
|
log.Infof("Firmware %s matches detected modem type %s.", fwfile, modem.modem)
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
log.Fatalf("Firmware %s does NOT match detected modem type %s.", fwfile, modem.modem)
|
||||||
|
return errors.New("Firmware and modem type do not match")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Fatal("Cannot detect modem type.")
|
||||||
|
return errors.New("Cannot detect modem type")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func Update(serport string, baudrate int, fwfile string) error {
|
func Update(serport string, baudrate int, fwfile string) error {
|
||||||
m, err := initmodem(serport, baudrate)
|
m, err := initmodem(serport, baudrate)
|
||||||
defer m.port.Close()
|
defer m.port.Close()
|
||||||
@@ -190,6 +232,9 @@ func Update(serport string, baudrate int, fwfile string) error {
|
|||||||
if m.setDateTime() != nil {
|
if m.setDateTime() != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if m.checkFirmwareFits(fwfile) != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if m.writeUpdate(fwfile) != nil {
|
if m.writeUpdate(fwfile) != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user