================================================
GreatFET Classes
================================================

The new *GreatFET Communications Protocol* uses a simple Class/Verb scheme to organize protocol-independent commands. **Classes** organize groups of related functions, while **verbs** provide the functions themselves. This very much parallels the organization of GoodFET commands.

Examples of *classes*:

    - SPI functionality
    - FaceDancer ("GreatDancer") functionality
    - Debug utilities
    - GPIO

Examples of *verbs*:

    - Configure the SPI bus to set e.g. polarity
    - Read a USB1 status register (for consumption by the FaceDancer host)
    - Return the contents of the device's debug ring
    - Set a particular pin to a given value

Each class is identified by a unique **32-bit integer**. Each verb is identified by a *separately-namespaced* **32-bit integer**. To add a class to GreatFET, first reserve its number in the Class Registry below.



Class Registry
~~~~~~~~~~~~~~

.. list-table ::
  :header-rows: 1
  :widths: 1 1 2

  * - Class Number
    - Class Name
    - Description 
  * - 0x0 
    - core
    - core device identification functionality
  * - 0x1
    - firmware
    - verbs for working with/updating device firmware
  * - 0x10
    - debug
    - debug utilities
  * - 0x11
    - selftest
    - utilities for self-testing libgreat-based boards
  * - 0x100   
    - example  
    - example verbs meant to illustrate the comms protocol
  * - 0x101   
    - spi_flash  
    - verbs for programming SPI flashes
  * - 0x102   
    - heartbeat  
    - control the GreatFET's idle/"heartbeat" LED 
  * - 0x103   
    - gpio  
    - raw control over the GreatFET's GPIO pins
  * - 0x104   
    - greatdancer  
    - remote control over the GreatFET's USB1 port in device mode, for e.g. FaceDancer 
  * - 0x105   
    - usbhost  
    - remote control over the GreatFET's USB port in host mode, for e.g. FaceDancer
  * - 0x106   
    - glitchkit  c
    - control over the GlitchKit API, and control over simple triggers
  * - 0x107   
    - glitchkit_usb  
    - control over functionality intended to help with timing USB fault injection
  * - 0x108   
    - i2c  
    - communication as an I2C controller
  * - 0x109   
    - spi  
    - communication as SPI controller
  * - 0x10A   
    - leds 
    - control over a given board's LEDs
  * - 0x10B   
    - jtag  
    - functions for debugging over JTAG
  * - 0x10C   
    - jtag_msp430  
    - MSP430 specific JTAG functions
  * - 0x10D   
    - logic_analyzer  
    - allows one to use the GreatFET's SGPIO interface as a logic analyzer
  * - 0x10E   
    - sdir  
    - Functionality for Software Defined Infrared
  * - 0x10F   
    - usbproxy  
    - Firmware functionality supporting USBProxy
  * - 0x110   
    - pattern_generator  
    - allows one to use the GreatFET's SGPIO interface as a pattern generator
  * - 0x111   
    - adc  
    - analog to digital converter functionality
  * - 0x112   
    - uart  
    - functionality for talking 'serial'
  * - 0x113   
    - usb_analysis  
    - functionality for USB analysis e.g. with Rhododendron
  * - 0x114   
    - swra124  
    - debugging/programming for TI cc111x, cc243x, and cc251x
  * - 0x115   
    - loadables  
    - API for loading and running small firmware extensions
  * - 0x116   
    - clock_gen  
    - clock generation / control
  * - 0x117   
    - benchmarking  
    - measurement of GreatFET communications and functions
  * - 0x118   
    - can  
    - functionality for communication over CAN

