first few communication steps work
diff --git a/sam3s_example/simtrace/phone.c b/sam3s_example/simtrace/phone.c
index b08e894..e1dc32a 100644
--- a/sam3s_example/simtrace/phone.c
+++ b/sam3s_example/simtrace/phone.c
@@ -122,6 +122,8 @@
static uint32_t state;
extern uint8_t rcvdChar;
+extern volatile uint8_t timeout_occured;
+
/*-----------------------------------------------------------------------------
* Interrupt routines
*-----------------------------------------------------------------------------*/
@@ -272,6 +274,7 @@
}
*/
+ Timer_Init();
}
void send_ATR(uint8_t *ATR, uint8_t status, uint32_t transferred, uint32_t remaining)
@@ -287,7 +290,7 @@
void sendResponse( uint8_t *pArg, uint8_t status, uint32_t transferred, uint32_t remaining)
{
int i;
- TRACE_INFO("sendResponse, stat: %X, transf: %x, remain: %x", status, transferred, remaining);
+ TRACE_INFO("sendResp, stat: %X, trnsf: %x, rem: %x\n\r", status, transferred, remaining);
TRACE_INFO("Resp: %x %x %x .. %x", pArg[0], pArg[1], pArg[2], pArg[transferred-1]);
for ( i = 0; i < transferred; i++ ) {
@@ -307,18 +310,31 @@
printf(" rr ");
/* DATA_IN for host side is data_out for simtrace side */
/* FIXME: Performancewise sending a USB packet for every byte is a disaster */
- PR("b:%x %x %x %x %x.\n\r", buf.buf[0], buf.buf[1],buf.buf[2], buf.buf[3], buf.buf[4]);
- USBD_Write( DATAIN, buf.buf, BUFLEN, 0, 0 );
+ ret = USBD_Write( DATAIN, buf.buf, BUFLEN, 0, 0 );
//USBD_Write( DATAIN, msg, BUFLEN, 0, 0 );
+ PR("b:%x %x %x %x %x.\n\r", buf.buf[0], buf.buf[1],buf.buf[2], buf.buf[3], buf.buf[4]);
rcvdChar = 0;
-
- if ((ret = USBD_Read(DATAOUT, pBuffer, MAX_MSG_LEN, (TransferCallback)&sendResponse, pBuffer)) == USBD_STATUS_SUCCESS) {
- TRACE_INFO("Reading started sucessfully (wait_resp)");
- state = WAIT_CMD_PC;
- } else {
- TRACE_INFO("USB Error: %X", ret);
- }
+ } else if (timeout_occured && buf.idx != 0) {
+ printf(" to ");
+ ret = USBD_Write( DATAIN, buf.buf, buf.idx, 0, 0 );
+ timeout_occured = 0;
+ buf.idx = 0;
+ rcvdChar = 0;
+ PR("b:%x %x %x %x %x.\n\r", buf.buf[0], buf.buf[1],buf.buf[2], buf.buf[3], buf.buf[4]);
+ } else {
+ printf(".");
+ return;
+ }
+ if ((ret = USBD_Read(DATAOUT, pBuffer, MAX_MSG_LEN,
+ (TransferCallback)&sendResponse, pBuffer)) == USBD_STATUS_SUCCESS) {
+ TRACE_INFO("wait_rsp\n\r");
+// state = WAIT_CMD_PC;
+ buf.idx = 0;
+ TC0_Counter_Reset();
+ } else {
+ TRACE_INFO("USB Err: %X", ret);
+ return;
}
}
@@ -343,7 +359,6 @@
// FIXME: remove:
// uint8_t ATR[] = {0x3B, 0x9A, 0x94, 0x00, 0x92, 0x02, 0x75, 0x93, 0x11, 0x00, 0x01, 0x02, 0x02, 0x19};
// send_ATR(ATR, (sizeof(ATR)/sizeof(ATR[0])));
-
switch (state) {
case RST_RCVD:
USBD_Write( INT, &msg, 1, 0, 0 );
@@ -357,9 +372,13 @@
}
break;
case WAIT_CMD_PHONE:
+// FIXME: TC0_Counter_Reset();
wait_for_response(pBuffer);
break;
+ case NONE:
+ break;
default:
+// TRACE_INFO(":(");
break;
}