summaryrefslogtreecommitdiff
path: root/apps/system/zmodem/zm_receive.c
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2013-07-14 15:39:26 -0600
committerGregory Nutt <gnutt@nuttx.org>2013-07-14 15:39:26 -0600
commitebc9e1858b5c0d534cbd9fe0e52ceeebecabe241 (patch)
treeba9207f0264d236b31f4ac10ca03daf29eaaab6b /apps/system/zmodem/zm_receive.c
parente74cb48dbf42b5dd3d5754a45883208bb2aa1c21 (diff)
downloadnuttx-ebc9e1858b5c0d534cbd9fe0e52ceeebecabe241.tar.gz
nuttx-ebc9e1858b5c0d534cbd9fe0e52ceeebecabe241.tar.bz2
nuttx-ebc9e1858b5c0d534cbd9fe0e52ceeebecabe241.zip
More Zmodem bug fixes: Too many pkttypes; Use wrong packet buffer
Diffstat (limited to 'apps/system/zmodem/zm_receive.c')
-rw-r--r--apps/system/zmodem/zm_receive.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/apps/system/zmodem/zm_receive.c b/apps/system/zmodem/zm_receive.c
index 537da2c5f..c26d15e02 100644
--- a/apps/system/zmodem/zm_receive.c
+++ b/apps/system/zmodem/zm_receive.c
@@ -319,6 +319,7 @@ static int zmr_zrinit(FAR struct zm_state_s *pzm)
zmdbg("ZMR_STATE %d:->%d Send ZRINIT\n", pzm->state, ZMR_START);
pzm->state = ZMR_START;
+ pzm->flags &= ~ZM_FLAG_OO; /* In case we get here from ZMR_FINISH */
/* Send ZRINIT */
@@ -409,7 +410,7 @@ static int zmr_zsrintdata(FAR struct zm_state_s *pzm)
FAR struct zmr_state_s *pzmr = (FAR struct zmr_state_s *)pzm;
uint8_t by[4];
- zmdbg("PSTATE %d:%d->%d.%d. Received the rest of the ZSINIT packet\n",
+ zmdbg("PSTATE %d:%d->%d:%d. Received the rest of the ZSINIT packet\n",
pzm->pstate, pzm->psubstate, PSTATE_IDLE, PIDLE_ZPAD);
pzm->pstate = PSTATE_IDLE;
@@ -513,6 +514,7 @@ static int zmr_zfile(FAR struct zm_state_s *pzm)
zmdbg("ZMR_STATE %d\n", pzm->state);
pzm->nerrors = 0;
+ pzm->flags &= ~ZM_FLAG_OO; /* In case we get here from ZMR_FINISH */
/* Cache flags (skipping of the initial header type byte) */
@@ -609,7 +611,7 @@ static int zmr_filename(FAR struct zm_state_s *pzm)
int filetype;
int ret;
- zmdbg("PSTATE %d:%d->%d.%d\n",
+ zmdbg("PSTATE %d:%d->%d:%d\n",
pzm->pstate, pzm->psubstate, PSTATE_IDLE, PIDLE_ZPAD);
zmdbg("ZMR_STATE %d\n", pzm->state);
@@ -734,7 +736,7 @@ static int zmr_filedata(FAR struct zm_state_s *pzm)
if (pzm->nerrors > CONFIG_SYSTEM_ZMODEM_MAXERRORS)
{
- zmdbg("PSTATE %d:%d->%d.%d\n",
+ zmdbg("PSTATE %d:%d->%d:%d\n",
pzm->pstate, pzm->psubstate, PSTATE_DATA, PDATA_READ);
/* Revert to the IDLE state and send the cancel string */
@@ -746,7 +748,7 @@ static int zmr_filedata(FAR struct zm_state_s *pzm)
}
else
{
- zmdbg("PSTATE %d:%d->%d.%d\n",
+ zmdbg("PSTATE %d:%d->%d:%d\n",
pzm->pstate, pzm->psubstate, PSTATE_IDLE, PIDLE_ZPAD);
zmdbg("ZMR_STATE %d->%d\n", pzm->state, ZMR_READREADY);
@@ -769,7 +771,7 @@ static int zmr_filedata(FAR struct zm_state_s *pzm)
/* Could not write to the the file. */
zmdbg("ERROR: Write to file failed: %d\n", errorcode);
- zmdbg("PSTATE %d:%d->%d.%d\n",
+ zmdbg("PSTATE %d:%d->%d:%d\n",
pzm->pstate, pzm->psubstate, PSTATE_IDLE, PIDLE_ZPAD);
zmdbg("ZMR_STATE %d->%d\n", pzm->state, ZMR_FINISH);
@@ -781,16 +783,17 @@ static int zmr_filedata(FAR struct zm_state_s *pzm)
return zmr_fileerror(pzmr, ZFERR, (uint32_t)errorcode);
}
- zmdbg("offset: %ld nchars: %d\n", (unsigned long)pzmr->offset, pzm->pktlen);
+ zmdbg("offset: %ld nchars: %d pkttype: %02x\n",
+ (unsigned long)pzmr->offset, pzm->pktlen, pzm->pkttype);
pzmr->offset += pzm->pktlen;
- zmdbg("%ld bytes received\n", (unsigned long)pzmr->offset);
+ zmdbg("Bytes received: %ld\n", (unsigned long)pzmr->offset);
/* If this was the last data subpacket, leave data mode */
- if (pzmr->pkttype == ZCRCE || pzmr->pkttype == ZCRCW)
+ if (pzm->pkttype == ZCRCE || pzm->pkttype == ZCRCW)
{
- zmdbg("PSTATE %d:%d->%d.%d: ZCRCE|ZCRCW\n",
+ zmdbg("PSTATE %d:%d->%d:%d: ZCRCE|ZCRCW\n",
pzm->pstate, pzm->psubstate, PSTATE_IDLE, PIDLE_ZPAD);
zmdbg("ZMR_STATE %d->%d\n", pzm->state, ZMR_READREADY);
@@ -815,7 +818,7 @@ static int zmr_filedata(FAR struct zm_state_s *pzm)
* ZCRCE: End of file, no response
*/
- if (pzmr->pkttype == ZCRCQ || pzmr->pkttype == ZCRCW)
+ if (pzm->pkttype == ZCRCQ || pzm->pkttype == ZCRCW)
{
zmdbg("Send ZACK\n");
@@ -961,7 +964,7 @@ static int zmr_zfin(FAR struct zm_state_s *pzm)
* meaning that we are all done.
*/
- zmdbg("PSTATE %d:%d->%d.%d: Send ZFIN\n",
+ zmdbg("PSTATE %d:%d->%d:%d: Send ZFIN\n",
pzm->pstate, pzm->psubstate, PSTATE_IDLE, PIDLE_ZPAD);
zmdbg("ZMR_STATE %d\n", pzm->state);
@@ -999,6 +1002,8 @@ static int zmr_finto(FAR struct zm_state_s *pzm)
*/
pzmr->ntimeouts++;
+ pzm->flags &= ~ZM_FLAG_OO; /* No longer expect "OO" */
+
zmdbg("ZMR_STATE %d: %d send timeouts\n", pzm->state, pzmr->ntimeouts);
/* And terminate the reception with a timeout error */
@@ -1007,7 +1012,7 @@ static int zmr_finto(FAR struct zm_state_s *pzm)
}
/****************************************************************************
- * Name: zmr_finto
+ * Name: zmr_oo
*
* Description:
* Received "OO" in the ZMR_FINISH state. We are finished!
@@ -1103,6 +1108,7 @@ static int zmr_error(FAR struct zm_state_s *pzm)
pzm->state, pzm->hdrdata[0]);
pzm->flags |= ZM_FLAG_WAIT;
+ pzm->flags &= ~ZM_FLAG_OO; /* In case we get here from ZMR_FINISH */
return OK;
}
@@ -1473,7 +1479,7 @@ static int zmr_fileerror(FAR struct zmr_state_s *pzmr, uint8_t type,
/* Set the state back to IDLE to abort the transfer */
- zmdbg("PSTATE %d:%d->%d.%d\n",
+ zmdbg("PSTATE %d:%d->%d:%d\n",
pzmr->cmn.pstate, pzmr->cmn.psubstate, PSTATE_IDLE, PIDLE_ZPAD);
pzmr->cmn.pstate = PSTATE_IDLE;