diff --git a/stk500v2/main.cpp b/stk500v2/main.cpp index dd56170..c40c950 100644 --- a/stk500v2/main.cpp +++ b/stk500v2/main.cpp @@ -104,6 +104,13 @@ static inline bool isReadFuseIsp(const Message &msg) return false; } +static inline bool isReadLockIsp(const Message &msg) +{ + if (msg.size == 6 && msg.body[0] == CMD_READ_LOCK_ISP) + return true; + return false; +} + static inline bool isLeaveProgmodeIsp(const Message &msg) { if (msg.size == 3 && msg.body[0] == CMD_LEAVE_PROGMODE_ISP) @@ -210,6 +217,16 @@ static inline void formatReadFuseIspAnswer(Message &msg) msg.checksum = calcChecksum(msg); } +static inline void formatReadLockIspAnswer(Message &msg) +{ + msg.size = 4; + msg.body[2] = boot_lock_fuse_bits_get(GET_LOCK_BITS); + msg.body[1] = STATUS_CMD_OK; + msg.body[3] = STATUS_CMD_OK; + + msg.checksum = calcChecksum(msg); +} + static inline void formatLeaveProgmodeIspAnswer(Message &msg) { msg.size = 2; @@ -241,6 +258,8 @@ static inline void handleMessage(Message &msg) formatReadSignatureIspAnswer(msg); else if (isReadFuseIsp(msg)) formatReadFuseIspAnswer(msg); + else if (isReadLockIsp(msg)) + formatReadLockIspAnswer(msg); else if (isLeaveProgmodeIsp(msg)) formatLeaveProgmodeIspAnswer(msg); else