/*===================================================================== | MAIN PROGRAM ====================================================================*/ public static void Main(string[] args) { int port; int handle; int result; AardvarkApi.AardvarkExt aaExt = new AardvarkApi.AardvarkExt(); if (args.Length != 1) { Console.WriteLine("usage: aamonitor PORT"); return; } // Parse the port argument try { port = Convert.ToInt32(args[0]); } catch (Exception) { Console.WriteLine("Error: invalid port"); return; } // Open the device handle = AardvarkApi.aa_open_ext(port, ref aaExt); if (handle <= 0) { Console.WriteLine("Unable to open Aardvark device on port {0}", port); Console.WriteLine("error: {0}", AardvarkApi.aa_status_string(handle)); return; } Console.WriteLine("Opened Aardvark; features = 0x{0:x2}", aaExt.features); // Disable the I2C bus pullup resistors (2.2k resistors). // This command is only effective on v2.0 hardware or greater. // The pullup resistors on the v1.02 hardware are enabled by default. AardvarkApi.aa_i2c_pullup(handle, AardvarkApi.AA_I2C_PULLUP_NONE); // Disable the Aardvark adapter's power pins. // This command is only effective on v2.0 hardware or greater. // The power pins on the v1.02 hardware are not enabled by default. AardvarkApi.aa_target_power(handle, AardvarkApi.AA_TARGET_POWER_NONE); // Enable the monitor result = AardvarkApi.aa_i2c_monitor_enable(handle); if (result < 0) { Console.WriteLine("error: {0}", AardvarkApi.aa_status_string(result)); return; } Console.WriteLine("Enabled I2C monitor."); // Dump the data to the console dump(handle); // Disable the monitor and close the device AardvarkApi.aa_i2c_monitor_disable(handle); AardvarkApi.aa_close(handle); }
/*===================================================================== | MAIN PROGRAM ====================================================================*/ public static void Main(string[] args) { int port = -1; byte val; int handle; AardvarkApi.AardvarkExt aaExt = new AardvarkApi.AardvarkExt(); if (args.Length != 1) { Console.WriteLine("usage: aagpio PORT"); return; } try { port = Convert.ToInt32(args[0]); } catch (Exception) { Console.WriteLine("Error: invalid port number"); } // Open the device handle = AardvarkApi.aa_open_ext(port, ref aaExt); if (handle <= 0) { Console.WriteLine("Unable to open Aardvark device on port {0}", port); Console.WriteLine("error: {0}", AardvarkApi.aa_status_string(handle)); return; } Console.WriteLine("Opened Aardvark adapter"); // Configure the Aardvark adapter so all pins // are now controlled by the GPIO subsystem AardvarkApi.aa_configure(handle, AardvarkConfig.AA_CONFIG_GPIO_ONLY); // Turn off the external I2C line pullups AardvarkApi.aa_i2c_pullup(handle, AardvarkApi.AA_I2C_PULLUP_NONE); // Make sure the charge has dissipated on those lines AardvarkApi.aa_gpio_set(handle, 0x00); AardvarkApi.aa_gpio_direction(handle, 0xff); // By default all GPIO pins are inputs. Writing 1 to the // bit position corresponding to the appropriate line will // configure that line as an output AardvarkApi.aa_gpio_direction(handle, (byte)(AardvarkGpioBits.AA_GPIO_SS | AardvarkGpioBits.AA_GPIO_SCL)); // By default all GPIO outputs are logic low. Writing a 1 // to the appropriate bit position will force that line // high provided it is configured as an output. If it is // not configured as an output the line state will be // cached such that if the direction later changed, the // latest output value for the line will be enforced. AardvarkApi.aa_gpio_set(handle, (byte)AardvarkGpioBits.AA_GPIO_SCL); Console.WriteLine("Setting SCL to logic low"); // The get method will return the line states of all inputs. // If a line is not configured as an input the value of // that particular bit position in the mask will be 0. val = (byte)AardvarkApi.aa_gpio_get(handle); // Check the state of SCK if ((val & (byte)AardvarkGpioBits.AA_GPIO_SCK) != 0) Console.WriteLine("Read the SCK line as logic high"); else Console.WriteLine("Read the SCK line as logic low"); // Optionally we can set passive pullups on certain lines. // This can prevent input lines from floating. The pullup // configuration is only valid for lines configured as inputs. // If the line is not currently input the requested pullup // state will take effect only if the line is later changed // to be an input line. AardvarkApi.aa_gpio_pullup(handle, (byte)(AardvarkGpioBits.AA_GPIO_MISO | AardvarkGpioBits.AA_GPIO_MOSI)); // Now reading the MISO line should give a logic high, // provided there is nothing attached to the Aardvark // adapter that is driving the pin low. val = (byte)AardvarkApi.aa_gpio_get(handle); if ((val & (byte)AardvarkGpioBits.AA_GPIO_MISO) != 0) Console.WriteLine( "Read the MISO line as logic high (passive pullup)"); else Console.WriteLine( "Read the MISO line as logic low (is pin driven low?)"); // Now do a 1000 gets from the GPIO to test performance for (int i = 0; i < 1000; ++i) AardvarkApi.aa_gpio_get(handle); int oldval, newval; // Demonstrate use of aa_gpio_change AardvarkApi.aa_gpio_direction(handle, 0x00); oldval = AardvarkApi.aa_gpio_get(handle); Console.WriteLine("Calling aa_gpio_change for 2 seconds..."); newval = AardvarkApi.aa_gpio_change(handle, 2000); if (newval != oldval) Console.WriteLine(" GPIO inputs changed.\n"); else Console.WriteLine(" GPIO inputs did not change.\n"); // Turn on the I2C line pullups since we are done AardvarkApi.aa_i2c_pullup(handle, AardvarkApi.AA_I2C_PULLUP_BOTH); // Configure the Aardvark adapter back to SPI/I2C mode. AardvarkApi.aa_configure(handle, AardvarkConfig.AA_CONFIG_SPI_I2C); // Close the device AardvarkApi.aa_close(handle); }