Listing 1 A Simple TinyCLR application

using System;
using System.Threading;
using Microsoft.SPOT;

namespace Onward
{
    public class HelloWorld
    {
        public HelloWorld() {}

        public void CountdownToExcitement()
        {
            // basic debug output example
            Debug.Print("Ready...");
            for (int i = 10; i > 0; i--)
            {
                Thread.Sleep(1000);
                Debug.Print(i.ToString());
            }
            Debug.Print("Hello World!");

            // throw an exception
            throw new Exception("Oops, I broke!");
        }
	public static void Main()
        {
            // create a HelloWorld instance
            HelloWorld hello = new HelloWorld();

            try
            {
                // call a method of the instance
                hello.CountdownToExcitement();
            }
            catch (Exception ex)
            {
                // dump useful debug info
                Debug.Print("STACK");
                Debug.DumpStack();

                Debug.Print("HEAP");
                Debug.DumpHeap();
            }
        }
    }
}

Listing 2 Using the InputPort

using Microsoft.SPOT.Hardware;
...
public bool ReadGPIO39()
{
    InputPort input = new InputPort(
        Cpu.Pin.GPIO39,             // Use GPIO39 for digital input
        true,                       // enable glitch filtering
        Port.ResistorMode.PullUp    // enable the internal pull-up
        );

    // returns true for high, false for low state
    return input.Read();
}

Listing 3 Using the OutputPort

using Microsoft.SPOT.Hardware;
...
public void SetGPIO38(bool state)
{
    OutputPort output = new OutputPort(
        Cpu.Pin.GPIO38, // use GPIO38 for digital output
        false           // set the inital state to low
        );

    // set the pin state - true for high, false for low
    output.Write(state);
}

Listing 4 Using the TristatePort

using Microsoft.SPOT.Hardware;
...
private TristatePort tristate = new TristatePort(
    Cpu.Pin.GPIO37,             // use GPIO37 for digital I/O
    false,                      // set initial state to low
    true,                       // turn on glitch filtering
    Port.ResistorMode.Disabled  // disable internal pull up/down
    );


public bool GPIO37State
{
    set
    {
        // make sure it's not high-Z
        GPIO37HighZ(false);
	// set the state
        tristate.Write(value);
    }
    get
    {
        // make sure it's not high-Z
        GPIO37HighZ(false);

        // get the state
        return tristate.Read();
    }
}

public void GPIO37HighZ(bool state)
{
    if(state)
    {
        // make high-Z
        if(tristate.Active)
            tristate.Active = false;

        return;
    }

    // reconnect
    if(! tristate.Active)
        tristate.Active = true;
}

Listing 5 Using the InterruptPort

using Microsoft.SPOT.Hardware;
...
InterruptPort intPort;

public void SetupInterrupt()
{
    intPort = new InterruptPort(
        Cpu.Pin.GPIO39,                     // use GPIO39 for interrupts
        true,                               // enable glitch filtering
        Port.ResistorMode.PullUp,           // enable the internal pull-up
        Port.InterruptMode.InterruptEdgeLow // trigger when the line goes
       // low
        );
    intPort.OnInterrupt += new GPIOInterruptEventHandler(
	intPort_OnInterrupt);
}

void intPort_OnInterrupt(Cpu.Pin port, bool state, TimeSpan time)
{
    // do work
}