You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2016/05/09 15:36:54 UTC
[2/2] incubator-mynewt-newt git commit: connserial;
verify messages with CRC.
connserial; verify messages with CRC.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/commit/3960627b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/tree/3960627b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/diff/3960627b
Branch: refs/heads/develop
Commit: 3960627ba85ca68198445d38126376edc35d8ace
Parents: 51d5ad1
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Fri May 6 13:55:17 2016 -0700
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Mon May 9 08:30:46 2016 -0700
----------------------------------------------------------------------
newtmgr/transport/conn.go | 8 ++++++++
newtmgr/transport/connserial.go | 15 ++++++++++++++-
2 files changed, 22 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/3960627b/newtmgr/transport/conn.go
----------------------------------------------------------------------
diff --git a/newtmgr/transport/conn.go b/newtmgr/transport/conn.go
index b7935ff..a774b38 100644
--- a/newtmgr/transport/conn.go
+++ b/newtmgr/transport/conn.go
@@ -59,6 +59,14 @@ func (pkt *Packet) GetBytes() []byte {
return pkt.buffer.Bytes()
}
+func (pkt *Packet) TrimEnd(count int) {
+
+ if pkt.buffer.Len() < count {
+ count = pkt.buffer.Len()
+ }
+ pkt.buffer.Truncate(pkt.buffer.Len() - count)
+}
+
func NewConn(cp config.NewtmgrConnProfile) (Conn, error) {
// Based on ConnProfile, instantiate the right type of conn object, that
// implements the conn interface.
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/3960627b/newtmgr/transport/connserial.go
----------------------------------------------------------------------
diff --git a/newtmgr/transport/connserial.go b/newtmgr/transport/connserial.go
index 5e90f80..b221e77 100644
--- a/newtmgr/transport/connserial.go
+++ b/newtmgr/transport/connserial.go
@@ -26,6 +26,7 @@ import (
"fmt"
log "github.com/Sirupsen/logrus"
+ "github.com/joaojeronimo/go-crc16"
"github.com/tarm/serial"
"mynewt.apache.org/newt/newtmgr/config"
@@ -106,6 +107,14 @@ func (cs *ConnSerial) ReadPacket() (*Packet, error) {
full := cs.currentPacket.AddBytes(data)
if full {
+ if crc16.Crc16(cs.currentPacket.GetBytes()) != 0 {
+ return nil, util.NewNewtError("CRC error")
+ }
+
+ /*
+ * Trim away the 2 bytes of CRC
+ */
+ cs.currentPacket.TrimEnd(2)
pkt := cs.currentPacket
cs.currentPacket = nil
return pkt, nil
@@ -122,10 +131,14 @@ func (cs *ConnSerial) writeData(bytes []byte) {
func (cs *ConnSerial) WritePacket(pkt *Packet) error {
data := pkt.GetBytes()
- dLen := uint16(len(data))
pktData := make([]byte, 2)
+ crc := crc16.Crc16(data)
+ binary.BigEndian.PutUint16(pktData, crc)
+ data = append(data, pktData...)
+
+ dLen := uint16(len(data))
binary.BigEndian.PutUint16(pktData, dLen)
pktData = append(pktData, data...)