Esempio n. 1
0
    /*=====================================================================
     | 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;
            }
        }
    }
Esempio n. 2
0
    /*=====================================================================
     | 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();
        }
    }
Esempio n. 3
0
    /*=====================================================================
     | 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;
            }
        }
    }