/*===================================================================== | FUNCTIONS | ====================================================================*/ static void dump(int handle, int timeout_ms) { int transNum = 0; int result; byte[] dataIn = new byte[BUFFER_SIZE]; Console.WriteLine("Watching slave SPI data..."); // Wait for data on bus result = AardvarkApi.aa_async_poll(handle, timeout_ms); if (result != AardvarkApi.AA_ASYNC_SPI) { Console.WriteLine("No data available."); return; } Console.WriteLine(); // Loop until aa_spi_slave_read times out for (;;) { int numRead; // Read the SPI message. // This function has an internal timeout (see datasheet). // To use a variable timeout the function aa_async_poll could // be used for subsequent messages. numRead = AardvarkApi.aa_spi_slave_read( handle, unchecked ((ushort)BUFFER_SIZE), dataIn); if (numRead < 0 && numRead != (int)AardvarkStatus.AA_SPI_SLAVE_TIMEOUT) { Console.WriteLine("error: {0}", AardvarkApi.aa_status_string(numRead)); return; } else if (numRead == 0 || numRead == (int)AardvarkStatus.AA_SPI_SLAVE_TIMEOUT) { Console.WriteLine("No more data available from SPI master."); return; } else { int i; // Dump the data to the screen Console.WriteLine("*** Transaction #{0:d2}", transNum); Console.Write("Data read from device:"); for (i = 0; i < numRead; ++i) { if ((i & 0x0f) == 0) { Console.Write("\n{0:x4}: ", i); } Console.Write("{0:x2} ", dataIn[i] & 0xff); if (((i + 1) & 0x07) == 0) { Console.Write(" "); } } Console.WriteLine(); Console.WriteLine(); ++transNum; } } }
/*===================================================================== | FUNCTIONS | ====================================================================*/ static void dump(int handle) { int result; ushort last_data1 = 0; ushort last_data0 = 0; ushort[] data = new ushort[BUFFER_SIZE]; // Wait for data on the bus Console.WriteLine("Waiting {0} ms for first transaction...", INITIAL_TIMEOUT); result = AardvarkApi.aa_async_poll(handle, INITIAL_TIMEOUT); if (result == AardvarkApi.AA_ASYNC_NO_DATA) { Console.WriteLine(" no data pending."); return; } Console.WriteLine(" data received."); // Loop until aa_async_poll times out for (;;) { // Read the next monitor transaction. // This function has an internal timeout (see datasheet), though // since we have already checked for data using aa_async_poll, // the timeout should never be exercised. int num_bytes = AardvarkApi.aa_i2c_monitor_read( handle, (ushort)BUFFER_SIZE, data); int i; if (num_bytes < 0) { Console.WriteLine("error: {0}", AardvarkApi.aa_status_string(num_bytes)); return; } for (i = 0; i < num_bytes; ++i) { // Check for start condition if (data[i] == AardvarkApi.AA_I2C_MONITOR_CMD_START) { DateTime now = DateTime.Now; Console.Write("\n{0:ddd MMM dd HH:mm:ss yyyy} - [S] ", now); } // Check for stop condition else if (data[i] == AardvarkApi.AA_I2C_MONITOR_CMD_STOP) { Console.WriteLine("[P]"); } else { int nack = (data[i] & AardvarkApi.AA_I2C_MONITOR_NACK); // 7-bit addresses if (last_data0 == (int)AardvarkApi.AA_I2C_MONITOR_CMD_START && ((data[i] & 0xf8) != 0xf0 || nack != 0)) { Console.Write("<{0:x2}:{1}>{2} ", (data[i] & 0xff) >> 1, (data[i] & 0x01) != 0 ? 'r' : 'w', nack != 0 ? "*" : ""); } // 10-bit addresses // See Philips specification for more details. else if (last_data1 == (int)AardvarkApi.AA_I2C_MONITOR_CMD_START && (last_data0 & 0xf8) == 0xf0) { Console.Write( "<{0:x3}:{1}>{2} ", ((last_data0 << 7) & 0x300) | (data[i] & 0xff), (last_data0 & 0x01) != 0 ? 'r' : 'w', nack != 0 ? "*" : ""); } // Normal data else if (last_data0 != (int)AardvarkApi.AA_I2C_MONITOR_CMD_START) { Console.Write("{0:x2}{1} ", data[i] & 0xff, nack != 0 ? "*" : ""); } } last_data1 = last_data0; last_data0 = data[i]; } Console.WriteLine("\nWaiting {0} ms for subsequent transaction...", INTERVAL_TIMEOUT); result = AardvarkApi.aa_async_poll(handle, INTERVAL_TIMEOUT); if (result == AardvarkApi.AA_ASYNC_NO_DATA) { Console.WriteLine(" no more data pending."); break; } Console.WriteLine(" data received."); Console.WriteLine(); } }
/*===================================================================== | FUNCTIONS | ====================================================================*/ static void dump(int handle, int timeout_ms) { int result; byte addr = 0; int transNum = 0; byte[] dataIn = new byte[BUFFER_SIZE]; Console.WriteLine("Watching slave I2C data..."); // Wait for data on bus result = AardvarkApi.aa_async_poll(handle, timeout_ms); if (result == AardvarkApi.AA_ASYNC_NO_DATA) { Console.WriteLine("No data available."); return; } Console.WriteLine(); // Loop until aa_async_poll times out for (;;) { // Read the I2C message. // This function has an internal timeout (see datasheet), though // since we have already checked for data using aa_async_poll, // the timeout should never be exercised. if (result == AardvarkApi.AA_ASYNC_I2C_READ) { // Get data written by master int numBytes = AardvarkApi.aa_i2c_slave_read( handle, ref addr, unchecked ((ushort)BUFFER_SIZE), dataIn); int i; if (numBytes < 0) { Console.WriteLine("error: {0}", AardvarkApi.aa_status_string(numBytes)); return; } // Dump the data to the screen Console.WriteLine("*** Transaction #{0:d2}", transNum); Console.Write("Data read from master:"); for (i = 0; i < numBytes; ++i) { if ((i & 0x0f) == 0) { Console.Write("\n{0:x4}: ", i); } Console.Write("{0:x2} ", dataIn[i] & 0xff); if (((i + 1) & 0x07) == 0) { Console.Write(" "); } } Console.WriteLine(); Console.WriteLine(); } else if (result == AardvarkApi.AA_ASYNC_I2C_WRITE) { // Get number of bytes written to master int numBytes = AardvarkApi.aa_i2c_slave_write_stats(handle); if (numBytes < 0) { Console.WriteLine("error: {0}", AardvarkApi.aa_status_string(numBytes)); return; } // Print status information to the screen Console.WriteLine("*** Transaction #{0:d2}", transNum); Console.WriteLine("Number of bytes written to master: {0:d4}", numBytes); Console.WriteLine(); } else { Console.WriteLine("error: non-I2C asynchronous message is " + "pending"); return; } ++transNum; // Use aa_async_poll to wait for the next transaction result = AardvarkApi.aa_async_poll(handle, INTERVAL_TIMEOUT); if (result == AardvarkApi.AA_ASYNC_NO_DATA) { Console.WriteLine("No more data available from I2C master."); break; } } }