aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavid.jc.anderson2007-04-23 20:35:30 +0000
committerdavid.jc.anderson2007-04-23 20:35:30 +0000
commit9b025da7a606b18e53f6fb8db9fc9c080c2fc80a (patch)
tree3b83c62ce237c12a09f1d18c8e39ae9474c974d1
parent91d45d6cb59559457f94aeb19507923be13c07aa (diff)
Refactor the initial SAM-BA handshake into the SAM-BA layer.
-rw-r--r--lowlevel.c11
-rw-r--r--main_fwexec.c1
-rw-r--r--main_fwflash.c1
-rw-r--r--samba.c17
-rw-r--r--samba.h2
5 files changed, 21 insertions, 11 deletions
diff --git a/lowlevel.c b/lowlevel.c
index 8596c7d..3aa324e 100644
--- a/lowlevel.c
+++ b/lowlevel.c
@@ -90,7 +90,6 @@ nxt_error_t nxt_find(nxt_t *nxt)
nxt_error_t
nxt_open(nxt_t *nxt)
{
- char buf[2];
int ret;
nxt->hdl = usb_open(nxt->dev);
@@ -109,16 +108,6 @@ nxt_open(nxt_t *nxt)
return NXT_IN_USE;
}
- /* NXT handshake */
- nxt_send_str(nxt, "N#");
- nxt_recv_buf(nxt, buf, 2);
- if (memcmp(buf, "\n\r", 2) != 0)
- {
- usb_release_interface(nxt->hdl, 1);
- usb_close(nxt->hdl);
- return NXT_HANDSHAKE_FAILED;
- }
-
return NXT_OK;
}
diff --git a/main_fwexec.c b/main_fwexec.c
index cabb030..db584f9 100644
--- a/main_fwexec.c
+++ b/main_fwexec.c
@@ -108,6 +108,7 @@ int main(int argc, char *argv[])
}
NXT_HANDLE_ERR(nxt_open(nxt), NULL, "Error while connecting to NXT");
+ NXT_HANDLE_ERR(nxt_handshake(nxt), NULL, "Error during initial handshake");
printf("NXT device in reset mode located and opened.\n"
"Uploading firmware...\n");
diff --git a/main_fwflash.c b/main_fwflash.c
index 0c98483..ef2d588 100644
--- a/main_fwflash.c
+++ b/main_fwflash.c
@@ -84,6 +84,7 @@ int main(int argc, char *argv[])
}
NXT_HANDLE_ERR(nxt_open(nxt), NULL, "Error while connecting to NXT");
+ NXT_HANDLE_ERR(nxt_handshake(nxt), NULL, "Error during initial handshake");
printf("NXT device in reset mode located and opened.\n"
"Starting firmware flash procedure now...\n");
diff --git a/samba.c b/samba.c
index ff3e037..88b2c9f 100644
--- a/samba.c
+++ b/samba.c
@@ -56,6 +56,23 @@ nxt_write_common(nxt_t *nxt, char type, nxt_addr_t addr, nxt_word_t w)
nxt_error_t
+nxt_handshake(nxt_t *nxt)
+{
+ char buf[2];
+
+ nxt_send_str(nxt, "N#");
+ nxt_recv_buf(nxt, buf, 2);
+ if (memcmp(buf, "\n\r", 2) != 0)
+ {
+ nxt_close(nxt);
+ return NXT_HANDSHAKE_FAILED;
+ }
+
+ return NXT_OK;
+}
+
+
+nxt_error_t
nxt_write_byte(nxt_t *nxt, nxt_addr_t addr, nxt_byte_t b)
{
return nxt_write_common(nxt, 'O', addr, b);
diff --git a/samba.h b/samba.h
index 6471b5b..e0592ac 100644
--- a/samba.h
+++ b/samba.h
@@ -31,6 +31,8 @@ typedef uint32_t nxt_word_t;
typedef uint16_t nxt_hword_t;
typedef unsigned char nxt_byte_t;
+nxt_error_t nxt_handshake(nxt_t *nxt);
+
nxt_error_t nxt_write_byte(nxt_t *nxt, nxt_addr_t addr, nxt_byte_t b);
nxt_error_t nxt_write_hword(nxt_t *nxt, nxt_addr_t addr, nxt_hword_t hw);
nxt_error_t nxt_write_word(nxt_t *nxt, nxt_addr_t addr, nxt_word_t w);