From e53b0a067d6ba48906a973d984167b4844a4741a Mon Sep 17 00:00:00 2001 From: Georg Date: Wed, 17 Jan 2018 21:06:28 +0100 Subject: [PATCH] doxygen update --- Doc/Doxygen/html/Page_14443AReader.html | 175 ----------- Doc/Doxygen/html/Page_Buttons.html | 133 -------- Doc/Doxygen/html/Page_CommandLine.html | 294 ------------------ Doc/Doxygen/html/Page_Configurations.html | 129 -------- Doc/Doxygen/html/Page_GettingStarted.html | 121 ------- Doc/Doxygen/html/Page_LED.html | 117 ------- Doc/Doxygen/html/Page_LEDs.html | 121 ------- Doc/Doxygen/html/Page_Log.html | 120 ------- Doc/Doxygen/html/Page_Settings.html | 108 ------- .../html/Page_UploadingDownloading.html | 99 ------ .../html/_antenna_level_8h_source.html | 2 +- Doc/Doxygen/html/_application_8h_source.html | 2 +- Doc/Doxygen/html/_battery_8h_source.html | 2 +- Doc/Doxygen/html/_button_8h_source.html | 2 +- Doc/Doxygen/html/_buttons_8txt.html | 2 +- .../html/_chameleon-_mini_8h_source.html | 2 +- Doc/Doxygen/html/_codec_8h_source.html | 2 +- Doc/Doxygen/html/_command_line_8h_source.html | 2 +- Doc/Doxygen/html/_command_line_8txt.html | 2 +- Doc/Doxygen/html/_commands_8h_source.html | 2 +- Doc/Doxygen/html/_common_8h_source.html | 2 +- Doc/Doxygen/html/_configuration_8h.html | 2 +- .../html/_configuration_8h_source.html | 2 +- Doc/Doxygen/html/_configurations_8txt.html | 2 +- Doc/Doxygen/html/_crypto1_8h_source.html | 2 +- Doc/Doxygen/html/_getting_started_8txt.html | 2 +- .../html/_i_s_o14443-2_a_8h_source.html | 2 +- .../html/_i_s_o14443-3_a_8h_source.html | 2 +- Doc/Doxygen/html/_l_e_d_8h_source.html | 2 +- Doc/Doxygen/html/_l_e_d_8txt.html | 2 +- Doc/Doxygen/html/_l_e_d_hook_8h_source.html | 2 +- Doc/Doxygen/html/_l_e_ds_8txt.html | 2 +- Doc/Doxygen/html/_l_u_f_a_config_8h.html | 2 +- .../html/_l_u_f_a_config_8h_source.html | 2 +- Doc/Doxygen/html/_l_u_f_a_descriptors_8c.html | 2 +- Doc/Doxygen/html/_l_u_f_a_descriptors_8h.html | 2 +- .../html/_l_u_f_a_descriptors_8h_source.html | 2 +- Doc/Doxygen/html/_log_8h.html | 2 +- Doc/Doxygen/html/_log_8h_source.html | 2 +- Doc/Doxygen/html/_log_8txt.html | 2 +- Doc/Doxygen/html/_main_page_8txt.html | 2 +- Doc/Doxygen/html/_map_8h_source.html | 2 +- Doc/Doxygen/html/_memory_8h_source.html | 2 +- .../html/_mifare_classic_8h_source.html | 2 +- .../html/_mifare_ultralight_8h_source.html | 2 +- Doc/Doxygen/html/_page_14443_a_reader.html | 2 +- Doc/Doxygen/html/_page__buttons.html | 2 +- Doc/Doxygen/html/_page__command_line.html | 2 +- Doc/Doxygen/html/_page__configurations.html | 2 +- Doc/Doxygen/html/_page__getting_started.html | 2 +- Doc/Doxygen/html/_page__l_e_d.html | 2 +- Doc/Doxygen/html/_page__l_e_ds.html | 2 +- Doc/Doxygen/html/_page__log.html | 2 +- Doc/Doxygen/html/_page__settings.html | 2 +- .../html/_page__uploading_downloading.html | 2 +- Doc/Doxygen/html/_random_8h_source.html | 2 +- .../html/_reader14443-2_a_8h_source.html | 2 +- .../html/_reader14443_a_8h_source.html | 2 +- Doc/Doxygen/html/_reader_8txt.html | 2 +- Doc/Doxygen/html/_settings_8h.html | 2 +- Doc/Doxygen/html/_settings_8h_source.html | 2 +- Doc/Doxygen/html/_settings_8txt.html | 2 +- Doc/Doxygen/html/_system_8h_source.html | 2 +- Doc/Doxygen/html/_terminal_8h_source.html | 2 +- .../html/_uploading_downloading_8txt.html | 2 +- Doc/Doxygen/html/_x_modem_8h_source.html | 2 +- Doc/Doxygen/html/annotated.html | 2 +- Doc/Doxygen/html/arrowdown.png | Bin 246 -> 0 bytes Doc/Doxygen/html/arrowright.png | Bin 229 -> 0 bytes Doc/Doxygen/html/classes.html | 2 +- .../dir_5de29d499bb29a41092979d00d22c134.html | 2 +- .../dir_74b6a3b63f61c160c0f14b7a283a4c9b.html | 2 +- .../dir_8465ec698d237f801ae9966d4551fcfa.html | 2 +- .../dir_ddeffaa734f77525428b0dd4068da9cb.html | 2 +- .../dir_f5aab302412c0352d69464400cc5ee44.html | 2 +- Doc/Doxygen/html/files.html | 2 +- Doc/Doxygen/html/functions.html | 2 +- Doc/Doxygen/html/functions_vars.html | 2 +- Doc/Doxygen/html/globals.html | 2 +- Doc/Doxygen/html/globals_defs.html | 2 +- Doc/Doxygen/html/globals_enum.html | 2 +- Doc/Doxygen/html/globals_eval.html | 2 +- Doc/Doxygen/html/globals_func.html | 2 +- Doc/Doxygen/html/globals_vars.html | 2 +- Doc/Doxygen/html/index.html | 2 +- Doc/Doxygen/html/menu.js | 26 ++ Doc/Doxygen/html/menudata.js | 23 ++ Doc/Doxygen/html/pages.html | 2 +- .../struct_configuration_type-members.html | 2 +- .../html/struct_configuration_type.html | 2 +- .../struct_settings_entry_type-members.html | 2 +- .../html/struct_settings_entry_type.html | 2 +- ...descriptor___configuration__t-members.html | 2 +- ...u_s_b___descriptor___configuration__t.html | 2 +- 94 files changed, 129 insertions(+), 1497 deletions(-) delete mode 100644 Doc/Doxygen/html/Page_14443AReader.html delete mode 100644 Doc/Doxygen/html/Page_Buttons.html delete mode 100644 Doc/Doxygen/html/Page_CommandLine.html delete mode 100644 Doc/Doxygen/html/Page_Configurations.html delete mode 100644 Doc/Doxygen/html/Page_GettingStarted.html delete mode 100644 Doc/Doxygen/html/Page_LED.html delete mode 100644 Doc/Doxygen/html/Page_LEDs.html delete mode 100644 Doc/Doxygen/html/Page_Log.html delete mode 100644 Doc/Doxygen/html/Page_Settings.html delete mode 100644 Doc/Doxygen/html/Page_UploadingDownloading.html delete mode 100644 Doc/Doxygen/html/arrowdown.png delete mode 100644 Doc/Doxygen/html/arrowright.png create mode 100644 Doc/Doxygen/html/menu.js create mode 100644 Doc/Doxygen/html/menudata.js diff --git a/Doc/Doxygen/html/Page_14443AReader.html b/Doc/Doxygen/html/Page_14443AReader.html deleted file mode 100644 index 8152b5c..0000000 --- a/Doc/Doxygen/html/Page_14443AReader.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - -Chameleon-Mini: ISO14443A Reader Functionality - - - - - - - - - - -
-
- - - - - - -
-
Chameleon-Mini -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
ISO14443A Reader Functionality
-
-
-

The ChameleonMini is able to act as an ISO 14443A reader. This page describes how to use this configuration (See Configurations) correctly.

-

Supported Commands

-

Using the ISO 14443A reader configuration enables the usage of some commands that are only available within this configuration.

-
Note
Technically, the SEND and SEND_RAW commands are also timeout commands, but they end successfully (either with NO DATA or the response) nearly immediately on every call.
-
-Each of the following commands returns INVALID COMMAND USAGE on a non-reader configuration.
-
Warning
The reader field is only turned on if this is necessary. Some commands deactivate the reader field after they are done, some do not deactivate the reader field after finishing. Please be aware, that the reader field takes a massive amount of energy and thus the voltage of the battery can drop to a critical level fastly. If not mentioned differently, all of the commands below deactivate the reader field after work.
-

SEND <BYTEVALUE>

-

There are two cases what is done, depending on the parameter:

    -
  1. If the parameter is one byte, no parity bits are added, since this must be a short frame command. In this case the seven least significant bits are sent.
  2. -
  3. If the parameter consists of more than one byte, parity bits are added and afterwards the whole sequence is sent.
  4. -
-

After sending, the ChameleonMini waits for an answer and returns either

    -
  • NO DATA if no answer could be detected or
  • -
  • the received data with removed parity bits, a 2-byte big-endian value indicating the bit count and either the string PARITY OK or PARITY ERR indicating whether the parity check failed or not.
  • -
-

In each case, the ChameleonMini code 101:OK WITH TEXT is returned.

-

Examples

-
    -
  • SEND 52 sends the WUPA command
  • -
  • SEND 9320 sends the ANTICOLLISION command
  • -
  • SEND AB2 returns INVALID PARAMETER since the parameter is no byte sequence
  • -
-
Warning
This command does not deactivate the reader field after finishing in order to make it possible to keep up the conversation with the card.
-

SEND <2-BYTEVALUE> <BYTEVALUE>

-

Does the same like the command with only one parameter, but the first parameter indicates the to-be-sent bit count.

-
Warning
If the bit count parameter is neither 7 or a multiple of 8, no parity bits will be appended, but the remaining functionality is the exact same!
-

Examples

-
    -
  • SEND 0007 26 sends the REQA command
  • -
  • SEND 0010 9320 sends the ANTICOLLISION command
  • -
  • SEND 0012 13DE4A sends (on bit-processing-layer) SOC - 1100 1000 0111 1011 01 - EOC. The remaining bits are discarded. Note that the byte sequence is interpreted as little-endian and the bits are sent in reverse-order, just like defined in the ISO. Note also, that no parity bits are added, since 0x12 is neither 7 nor a multiple of 8.
  • -
  • SEND 0300 52 returns INVALID PARAMETER since the second parameter does not contain 768 bits.
  • -
-
Warning
This command does not deactivate the reader field after finishing in order to make it possible to keep up the conversation with the card.
-

SEND_RAW <BYTEVALUE>

-

Sends the given byte sequence. The ChameleonMini assumes that the parameter has the parity bits already appended and thus calculates the bit count itself:

    -
  • If the parameter is one byte, the bit count is set to 7, since this seems to be a short frame.
  • -
  • If the parameter is n bytes long, the ChameleonMini sends floor(n * 16 / 9) bits.
  • -
-

After sending, the ChameleonMini waits for an answer and returns either

    -
  • NO DATA if no answer could be detected or
  • -
  • the raw received data (including parity bits) and a 2-byte big-endian value indicating the bit count
  • -
-

Examples

-
    -
  • SEND_RAW 52 sends the WUPA command.
  • -
  • SEND_RAW 934100 sends the ANTICOLLISION command as the bit sequence SOC - 1100 1001 1 0000 0100 0 - EOC is sent, which is the same as 0x9320 with parity bits.
  • -
  • SEND_RAW AB2 returns INVALID PARAMETER since the parameter is no byte sequence
  • -
-
Warning
This command does not deactivate the reader field after finishing in order to make it possible to keep up the conversation with the card.
-

SEND_RAW <2-BYTEVALUE> <BYTEVALUE>

-

Does the same like the command with only one parameter, but the first parameter indicates the to-be-sent bit count.

-

Examples

-
    -
  • SEND_RAW 0007 26 sends the REQA command
  • -
  • SEND_RAW 0012 934100 sends the ANTICOLLISION command
  • -
  • SEND_RAW 0012 934100AB also sends the ANTICOLLISION command, since remaining bits are discarded
  • -
  • SEND_RAW 0300 52 returns INVALID PARAMETER since the second parameter does not contain 768 bits.
  • -
-
Warning
This command does not deactivate the reader field after finishing in order to make it possible to keep up the conversation with the card.
-

GETUID

-

This is a timeout command. It tries to obtain the UID from a card that is in reader range and returns it.

-

If this command is called within the reader configuration, it either ends up returning 101:OK WITH TEXT and the UID or with a timeout (no matter if on setting/configuration change or on real timeout).

-

DUMP_MFU

-

This is a timeout command. It tries to read the whole content of a MiFare Ultralight card that is in reader range and returns the content.

-

If this command is called within the reader configuration, it either ends up returning 101:OK WITH TEXT and the card content in 4 lines (each line contains 16 bytes) or with a timeout (no matter if on setting/configuration change or on real timeout).

-

IDENTIFY

-

This is a timeout command. Tries to identify the type of a card in reader range and returns the type.

-

If this command is called within the reader configuration, it ends in one of three ways:

    -
  1. Return code 101:OK WITH TEXT, the card type and ATQA value, UID value and SAK value of the highest cascade level.
  2. -
  3. Return code 101:OK WITH TEXT, the information that this card type is unknown to the ChameleonMini ("Unknown card.") and ATQA value, UID value and SAK value of the highest cascade level.
  4. -
  5. Timeout (no matter if on setting/configuration change or on real timeout).
  6. -
-

AUTOCALIBRATE

-

This is a timeout command. Tries to select to a card with every threshold within a range with a specific step size and chooses the best threshold.

-

If this command is called within the reader configuration, it ends in one of the following ways:

    -
  1. Return code 101:OK WITH TEXT and a list of the tested thresholds with a + for every threshold where the select protocol was successful and a - if the select protocol was not successfully finished.
  2. -
  3. Timeout (no matter if on setting/configuration change or on real timeout).
  4. -
-
Note
If no working threshold was found, the threshold is reset to the standard threshold.
-
- - - - diff --git a/Doc/Doxygen/html/Page_Buttons.html b/Doc/Doxygen/html/Page_Buttons.html deleted file mode 100644 index 07ee3b8..0000000 --- a/Doc/Doxygen/html/Page_Buttons.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -Chameleon-Mini: Buttons - - - - - - - - - - -
-
- - - - - - -
-
Chameleon-Mini -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
Buttons
-
-
-

For user interaction, ChameleonMini provides two configurable push buttons, i.e., LBUTTON on the left side and RBUTTON on the right side of Chameleon. Chameleon distinguishes between

    -
  1. a short (< ~1.28 s) press of the button and
  2. -
  3. a long (≥ ~1.28 s) press of the button.
  4. -
-

Thus, there are four different commands for configuring the buttons:

    -
  1. LBUTTON
  2. -
  3. RBUTTON
  4. -
  5. LBUTTON_LONG
  6. -
  7. RBUTTON_LONG
  8. -
-

Each of these commands can be used in the getting ("?"), setting ("=") and suggesting ("=?") version.

-

Supported Configurations

-

The following table describes all currently implemented options for the button configuration.

- - - - - - - - - - - - - - - - - - - - - - - - -
Configuration name Description
NONE No function, the button is disabled
UID_RANDOM Sets a random UID for the current card slot.
UID_LEFT_INCREMENT Increments the UID for the current card slot. The UID is interpreted as little-endian.
UID_RIGHT_INCREMENTIncrements the UID for the current card slot. The UID is interpreted as big-endian.
UID_LEFT_DECREMENT Decrements the UID for the current card slot. The UID is interpreted as little-endian.
UID_RIGHT_DECREMENTDecrements the UID for the current card slot. The UID is interpreted as big-endian.
CYCLE_SETTINGS Cycles through the slots/settings. If the configuration of a slot is set to NONE, this slot is skipped. When the last slot is reached, the next button press selects the first slot, again.
STORE_MEM Stores the current setting into the permanent Flash memory. Equivalent to the STORE command.
RECALL_MEM Recalls a setting from the permanent Flash memory. Equivalent to the RECALL command.
TOGGLE_FIELD Activates the reader field if it was deactivated, deactivates the reader field if it was activated.
STORE_LOG Writes the current log from SRAM to FRAM and clears the SRAM log. Equivalent to the STORE_LOG command.
-

Note the UID commands have no effect when the slot is configured as reader.

-
- - - - diff --git a/Doc/Doxygen/html/Page_CommandLine.html b/Doc/Doxygen/html/Page_CommandLine.html deleted file mode 100644 index c5547f0..0000000 --- a/Doc/Doxygen/html/Page_CommandLine.html +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - -Chameleon-Mini: The Chameleon Command Structure - - - - - - - - - - -
-
- - - - - - -
-
Chameleon-Mini -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
The Chameleon Command Structure
-
-
-

After plugging in a USB cable, the ChameleonMini enumerates as a virtual serial interface. The settings of the serial interface, e.g. baudrate, stop and parity bits, are ignored by the Chameleon. For a high level of compatibility towards both humans and computers, Chameleon can be set up and controlled by means of a text-based command line interface, which can be accessed by using simple terminal software like hyper-terminal or teraterm. The command line is optimized to cooperate with script languages such as Python or TCL.

-

Chameleon Command Structure

-

For communicating with the Chameleon via USB, there exist four different syntax types:

    -
  • <COMMAND>=<VALUE> sets a parameter of the Chameleon ('set')
  • -
  • <COMMAND>=? lists all possible values for the parameter ('suggest')
  • -
  • <COMMAND>? returns the current value of a parameter ('get')
  • -
  • <COMMAND> Executes a function with an optional response ('execute')
  • -
-

For example, CONFIG=? lists the available types of virtualized cards and other options to configure a slot, while CONFIG=MF_CLASSIC_1K sets the current slot to Mifare Classic 1k emulation. In consequence, CONFIG? will return MF_CLASSIC_1K. Examples for commands executing a function are CLEAR, RESET or UPLOAD.

-

The responses of Chameleon indicate whether an action was successful or whether (and why) an error occurred. Examples: In case of an invalid command, the Chameleon replies with 200:UNKNOWN COMMAND. In case of a known command, but a wrong syntax, the Chameleon replies with 201:INVALID COMMAND USAGE.

-

Note: Each command has to be followed by a carriage return (CR, 0D hexadecimal). The backspace (08 hexadecimal) and escape (1B hexadecimal) keys are supported. All other control characters of the ASCII character set are ignored. The Chameleon commands are not case-sensitive. There is no echo of entered characters by the Chameleon, thus remember to switch on the 'local echo' in your terminal program.

-

Responses

-

Subsequent to any command sent, the Chameleon responds with a status number and a corresponding status message, separated by a colon and terminated with a carriage return and line feed (CR+LF, 0D+0A hexadecimal). Status numbers are of a three-digit decimal format with the first digit showing the severity of the answer. Status numbers beginning with a '1' denote an informational item and those beginning with a '2' denote an error.

- - - - - - - - - - - - - - - - - - - - -
Response Description
100:OK The command has been successfully executed
101:OK WITH TEXT The command has been successfully executed and this response is appended with an additional line of information, terminated with CR+LF
110:WAITING FOR XMODEM The Chameleon is waiting for an XMODEM connection to be established
120:FALSE The request is answered with false
121:TRUE The request is answered with true
200:UNKNOWN COMMAND This command is unknown to the Chameleon
201:INVALID COMMAND USAGE This action is not supported by this command
202:INVALID PARAMETER The format or value of the given parameter value is invalid
203:TIMEOUT The timeout of the currently active command has expired
-

Chameleon Command Set

-

The current firmware supports the following global commands.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Command Description
CHARGING? Returns if the battery is currently being charged (TRUE) or not (FALSE)
HELP Returns a comma-separated list of all commands supported by the current firmware
RESET Reboots the Chameleon, i.e., power down and subsequent power-up. Note: A reset usually requires a new Terminal session.
RSSI? Returns the voltage measured at the antenna of the Chameleon, e.g., to detect the presence of an RF field or compare the field strength of different RFID readers.
SYSTICK? Returns the system tick value in ms. Note: An overflow occurs every 65,536 ms.
UPGRADE Sets the Chameleon into firmware upgrade mode (DFU). This command can be used instead of holding the RBUTTON while power-on to trigger the bootloader.
VERSION? Requests version information of the current firmware
Button CommandsSee also Buttons
RBUTTON=? Returns a comma-separated list of supported actions for pressing the right button shortly.
RBUTTON? Returns the currently set action for pressing the right button shortly. DEFAULT: SETTING_CHANGE
RBUTTON=<NAME> Sets the action for pressing the right button shortly.
LBUTTON=? Returns a comma-separated list of supported actions for pressing the left button shortly.
LBUTTON? Returns the currently set action for pressing the left button shortly. DEFAULT: RECALL_MEM
LBUTTON=<NAME> Sets the action for pressing the left button shortly.
RBUTTON_LONG=? Returns a comma-separated list of supported actions for pressing the right button a long time.
RBUTTON_LONG? Returns the currently set action for pressing the right button a long time. DEFAULT: SETTING_CHANGE
RBUTTON_LONG=<NAME> Sets the action for pressing the right button a long time.
LBUTTON_LONG=? Returns a comma-separated list of supported actions for pressing the left button a long time.
LBUTTON_LONG? Returns the currently set action for pressing the left button a long time. DEFAULT: RECALL_MEM
LBUTTON_LONG=<NAME> Sets the action for pressing the left button a long time.
LED Commands See also LED functionality
LEDGREEN=? Returns a comma-separated list of supported events for illuminating the green LED
LEDGREEN? Returns the currently set event for lighting the green LED
LEDGREEN=<NAME> Sets the event for which the green LED is lit. DEFAULT: POWERED
LEDRED=? Returns a comma-separated list of supported events for illuminating the red LED
LEDRED? Returns the currently set event for lighting the red LED
LEDRED=<NAME> Sets the event for which the green LED is lit. DEFAULT: SETTING_CHANGE
Log Commands See also Log functionality
LOGMODE=? Returns a comma-separated list of supported log modes
LOGMODE? Returns the current state of the log mode
LOGMODE=<NAME> Sets the current log mode. DEFAULT = OFF
LOGMEM? Returns the remaining free space for logging data to the SRAM (max. 2048 byte)
LOGDOWNLOAD Waits for an XModem connection and then downloads the binary log - including any log data in FRAM.
LOGCLEAR Clears the log memory (SRAM and FRAM)
LOGSTORE Writes the current log from SRAM to FRAM and clears the SRAM log.
Warning
If the FRAM is full, currently no error message is shown. If calling LOGMEM? after executing this command returns any other value than the maximum SRAM log size, there was not sufficient space in the FRAM and nothing has been done.
-
-

ChameleonMini provides eight 'slots' that can be configured to store different virtualized cards, or as active NFC reader, or as completely passive device for sniffing purposes. Each slot stores its configuration and, if applicable, card content. To select a particular slot, use the following command (or configure a button accordingly):

- - - - - - -
Command Description
SETTING? Returns the currently activated slot
SETTING=<NUMBER> Sets the active slot, where <NUMBER> is a number between 1 and 8 (see Settings)
-

The following commands have an effect on the currently selected slot only:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Command Description
CONFIG=? Returns a comma-separated list of all supported configurations
CONFIG? Returns the configuration of the current slot
CONFIG=<NAME> Sets the configuration of the surrent slot to <NAME> (See Configurations)
UIDSIZE? Returns the UID size of the currently selected card type in Byte
UID? Returns the UID of a card in the current slot
UID=<UID> Sets a new UID, passed in hexadecimal notation.
READONLY? Returns the current state of the read-only mode
READONLY=[0;1] Activates (1) or deactivates (0) the read-only mode (Any writing to the memory is silently ignored)
MEMSIZE? Returns the memory size occupied by the current configuration in Byte
UPLOAD Waits for an XModem connection in order to upload a new virtualized card into the currently selected slot, with a size up to the current memory size
DOWNLOAD Waits for an XModem connection in order to download a virtualized card with the current memory size
CLEAR Clears the content of the current slot
STORE Stores the content of the current slot from FRAM into the Flash memory
RECALL Recalls/restores the content of the current slot from the Flash memory into the FRAM
TIMEOUT=? Returns the possible number range for timeouts. See also Timeout commands.
TIMEOUT=<NUMBER> Sets the timeout for the current slot in multiples of 128 ms. If set to zero, there is no timeout. See also Timeout commands.
TIMEOUT? Returns the timeout for the current slot. See also Timeout commands.
Reader CommandsUsing these commands only makes sense, if the slot is configured as reader. See also ISO14443A Reader Functionality
SEND <BYTEVALUE> Adds parity bits, sends the given byte string <BYTEVALUE>, and returns the cards answer
SEND_RAW <BYTEVALUE>Does NOT add parity bits, sends the given byte string <BYTEVALUE> and returns the cards answer
GETUID Obtains the UID of a card that is in the range of the antenna and returns it. This command is a Timeout command.
DUMP_MFU Reads the whole content of a Mifare Ultralight card that is in the range of the antenna and returns it. This command is a Timeout command.
IDENTIFY Identifies the type of a card in the range of the antenna and returns it. This command is a Timeout command.
THRESHOLD=? Returns the possible number range for the reader threshold.
THRESHOLD=<NUMBER> Globally sets the reader threshold. The <NUMBER> influences the reader function and range. Setting a wrong value may result in malfunctioning of the reader. DEFAULT: 400
THRESHOLD? Returns the current reader threshold.
AUTOCALIBRATE Automatically finds a good threshold for communicating with the card that currently is on top of the Chameleon. This command is a Timeout command.
FIELD? Returns whether (1) or not (0) the reader field is active.
FIELD=[0;1] Enables/disables the reader field.
-

Timeout Commands

-

Some commands start a process with an unpredictable termination time. In these cases, ChameleonMini waits with its response, until the result of this process is obtained. In order to prevent an infinite waiting time, an individual timeout value can be set for each slot, in multiples of roughly 100 ms up to 60,000 ms. When a timeout occurs or if a respective command is aborted by means of a setting change, the return code 203:TIMEOUT is sent and a command-specific shutdown function is called, which terminates the timeout process gracefully.

-
Warning
Any terminal input is completely ignored during the waiting period.
-
-When setting the timeout to zero, there is no timeout and thus a process may continue forever. Such a process can only be terminated by changing the setting, if a button is configured accordingly, or by restarting the ChameleonMini (power off, power on).
-

Accessing the command-line using a terminal software

-

In order to have quick access to the Chameleon's command-line without using any complicated software, we suggest using the TeraTerm terminal emulation software available for windows based operating systems.

-

Connecting and setting up

-

For establishing a connection to the Chameleon's command line, select File -> New Connection, choose the virtual serial port of the Chameleon and hit the "OK" button. TeraTerm now tries to open the serial port and should succeed without any error.

-

For easier use of the command-line using a terminal software the local-echo functionality should be activated, to be able to see what is typed into the chameleon. When using TeraTerm, this can be achieved by selecting Setup -> Terminal and check "Local Echo".

-

Uploading and Downloading dump files

-

In some configurations of the Chameleon, it is necessary to upload a card dump before it can be accessed by a reader. For doing so, the relatively simple and widely known XMODEM protocol is used.

-

To upload a dump file using TeraTerm, follow these steps.

    -
  1. Enter UPLOAD and wait for the 110:WAITING FOR XMODEM response
  2. -
  3. Select File -> Transfer -> XMODEM -> Send
  4. -
  5. In the dialog choose the binary dumpfile to be uploaded and make sure the option "Checksum" is checked in the lower left corner
  6. -
  7. Hitting the "Open" button will start the transfer. If no error is given to the user, the file has been uploaded sucessfully.
  8. -
-

To download the Chameleon's memory again, follow the instructions above except for using DOWNLOAD instead of UPLOAD and the Receive function of TeraTerm

-

Note that there is a 10 second timeout after entering UPLOAD respectively DOWNLOAD after which the standard command-line is activated again. So try again if the timeout is already over when the XMODEM transfer is about to start.

-
- - - - diff --git a/Doc/Doxygen/html/Page_Configurations.html b/Doc/Doxygen/html/Page_Configurations.html deleted file mode 100644 index ac93e9b..0000000 --- a/Doc/Doxygen/html/Page_Configurations.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - -Chameleon-Mini: Configurations - - - - - - - - - - -
-
- - - - - - -
-
Chameleon-Mini -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
Configurations
-
-
-

Each setting of the Chameleon-Mini has an active configuration, which defines the behavior of the Chameleon-Mini. A detailed description of what defines a configuration can be found at ConfigurationType.

-

Supported Codecs

-

A Configuration basically is defined by the codec it uses and by the application functions that use this codec. Currently there are two different codecs implemented:

    -
  1. The ISO14443A codec for emulation.
  2. -
  3. The ISO14443A codec for the reader function.
  4. -
-

Supported Configurations

-

The following table shows which configurations are available currently.

- - - - - - - - - - - - - - - - - - -
Configuration name Codec Description
NONE None No functionality, Chameleon-Mini does nothing, the current setting is skipped when cycling through the settings
MF_ULTRALIGHT ISO14443A emulation Emulates a MiFare Ultralight card
MF_CLASSIC_1K ISO14443A emulation Emulates a MiFare Classic 1k card
MF_CLASSIC_4K ISO14443A emulation Emulates a MiFare Classic 4k card
MF_CLASSIC_1K_7B ISO14443A emulation Emulates a MiFare Classic 1k card with 7-byte UID.
MF_CLASSIC_4K_7B ISO14443A emulation Emulates a MiFare Classic 4k card with 7-byte UID.
ISO14443A_SNIFF ISO14443A emulation Currently incomplete. Sniffs ISO14443A communication between a reader and a card.
ISO14443A_READER ISO14443A reader The Chameleon-Mini works as a reader and can process different procedures in order to obtain a cards UID etc.
-

Configuration Changing procedure

-

When the configuration is changed, no matter whether by command line or during a setting change, the following steps are done:

    -
  1. The codec deinitialization function of the currently active configuration is called.
  2. -
  3. Possibly pending timeout commands are aborted.
  4. -
  5. The configuration struct (ConfigurationType) for the currently active configuration is overwritten with the new configuration struct.
  6. -
  7. The codec initialization function of the new configuration is called.
  8. -
  9. The application initialization function of the new configuration is called.
  10. -
-
- - - - diff --git a/Doc/Doxygen/html/Page_GettingStarted.html b/Doc/Doxygen/html/Page_GettingStarted.html deleted file mode 100644 index 1911b43..0000000 --- a/Doc/Doxygen/html/Page_GettingStarted.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -Chameleon-Mini: Getting Started - - - - - - - - - - -
-
- - - - - - -
-
Chameleon-Mini -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
Getting Started
-
-
-

Finally, you hold your brand-new ChameleonMini RevG in your hands! What to do now?! In the factory, a test firmware including a USB bootloader has been programmed into the microcontroller of the Chameleon. This page describes the next steps in order to upload the current firmware, as developed in this project, via the USB bootloader.

-

Step 1: Trigger the USB Bootloader

-

The bootloader can be executed in two different ways:

    -
  1. Make sure the Chameleon is switched off (power switch on the side is in the position OFF). Now, hold down the right button (RBUTTON) and keep it pressed while connecting the Chameleon to a PC via a USB cable.
  2. -
  3. OR: Plug your Chameleon via USB to a PC and use your favorite terminal application to connect with the test firmware of the ChameleonMini. Type upgrade and hit Enter.
  4. -
-

In either way, the ChameleonMini now jumps to the bootloader and waits patiently for a firmware upgrade.

-

Step 2: Upgrade the Firmware

-

Once the ChameleonMini is in the bootloader, you can flash a new firmware, i.e., the files Chameleon-Mini.hex and the Chameleon-Mini.eep, into the microcontroller. The source code directory contains these files precompiled but you can of course also compile the code yourself. Create a new folder and copy the two files into it. The following depends on your operating system:

-

Upgrade Procedure for Linux Users

-

In order to upgrade the firmware under Linux you first have to install avrdude, e.g. under Ubuntu with the command sudo apt-get install avra avrdude. Then change to the directory where you have saved the hex and eep files and run sudo avrdude -c flip2 -p ATXMega128A4U -B 60 -P usb -U application:w:Chameleon-Mini.hex:i -U eeprom:w:Chameleon-Mini.eep:i.

-

You also can use sudo make program in the source code directory, which basically does the same.

-

After running this command you need to restart your Chameleon, e.g. by reattaching the Chameleon to the PC.

-
Note
If you are using Ubuntu 14.04, avrdude may not support flip2. In this case, you can run add-apt-repository ppa:pmjdebruijn/avrdude-release, then apt-get update and finally apt-get install avrdude to upgrade to a version of avrdude that supports flip2.
-

Optionally copy Drivers/98-ChameleonMini.rules to /etc/udev/rules.d/, to allow non-root users to open the chameleon serial port at /dev/chameleon. sudo cp (Path to Chameleon Repo)/Drivers/98-ChameleonMini.rules /etc/udev/rules.d/ Remember to restart the udev daemon, or reboot to activate the rule. 'sudo udevadm control –reload'

-

Upgrade Procedure for Mac OS Users

-

When running Homebrew you can install avrdude with brew install avrdude. After this, change to the directory where you have saved the hex and eep files and run sudo avrdude -c flip2 -p ATXMega128A4U -B 60 -P usb -U application:w:Chameleon-Mini.hex:i -U eeprom:w:Chameleon-Mini.eep:i.

-

Upgrade Procedure for Windows Users

-

For upgrading the firmware under Windows please

    -
  1. download https://sourceforge.net/projects/dfu-programmer/files/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip/download and extract to an arbitrary directory. Make sure to use the DFU programmer Version 0.7.2!
  2. -
  3. Go to the extraction directory and then open the folder dfu-prog-usb-1.2.2. Install the atmel_usb_dfu.inf driver (right click -> install).
  4. -
  5. Copy dfu-programmer.exe from the extraction directory to the directory where you have saved the hex and eep files.
  6. -
  7. Save the ChameleonFirmwareUpgrade.bat in the same directory as the hex and eep files.
  8. -
  9. Run the ChameleonFirmwareUpgrade.bat as Administrator (right click -> run as Administrator) and wait for the firmware upgrade to terminate. Upon success, the green LED of the ChameleonMini should light up.
  10. -
-

Finally, install the driver for Chameleon: Download both ChameleonDriver.inf and ChameleonDriver.cat from the Drivers directory and install the INF file (right click -> install).

Note
If you have problems with the driver installation, try the instructions in sections 6.2.1 and 6.2.2 from this Atmel document.
-

Now, Chameleon should appear in the Windows device manager and you should be able to open a terminal program such as TeraTerm and connect to the Chameleon-Mini via the COM port shown in the device manager. On Mac or Linux you can use screen (screen /dev/tty.usbmodem1421, please replace your device path with the appropriate one) to communicate with your Chameleon. Further information about how to "talk" to the Chameleon can be found here: The Chameleon Command Structure.

-
- - - - diff --git a/Doc/Doxygen/html/Page_LED.html b/Doc/Doxygen/html/Page_LED.html deleted file mode 100644 index 3584e29..0000000 --- a/Doc/Doxygen/html/Page_LED.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -Chameleon-Mini: LED functionality - - - - - - - - - - -
-
- - - - - - -
-
Chameleon-Mini -
-
-
- - - - - -
-
- - -
- -
- -
-
-
-
LED functionality
-
-
-

The Chameleon-Mini has two fully configurable LEDs: one red LED and one green LED. The configuration is done with the commands LEDRED and LEDGREEN, which both can be called as the getting ("?"), setting ("=") and suggesting ("=?") version.

-

The following table shows which LED functions are currently available.

- - - - - - - - - - - - - - - - - - - - - - - - -
Function name Description
NONE No function, the LED is deactivated.
POWERED The LED lights up if the Chameleon-Mini is powered, regardless whether powered by USB or by battery.
TERMINAL_CONN The LED is turned on when the Chameleon-Mini is connected via USB and is turned off when no USB connection is established.
TERMINAL_RXTX The according LED blinks shortly when sending or receiving data via the USB interface.
SETTING_CHANGE The LED blinks one time if the new setting is setting 1, two times for setting 2, ..., eight times for setting 8.
MEMORY_STORED The LED flashes everytime when a setting is stored to the permanent flash. This is currently the case when calling the command STORE, the button event STORE_MEM occurs or the setting is changed.
MEMORY_CHANGED The LED turns on when the FRAM is changed and is turned off when the currently active setting is written to the permanent flash. Thus, this function indicates when the current setting is changed.
CODEC_RX The LED flashes when the currently active codec (e.g. ISO14443A emulation) receives data. Note that this is implemented on codec layer and the flashing is triggered before the received data are interpreted by the application.
CODEC_TX The LED flashes when the currently active codec sends data. This function also is implemented on codec layer.
FIELD_DETECTED The LED is turned on if and only if a reader field is detected, which is recognized by the RSSI module (when the RSSI value hits a hardcoded threshold, it is assumed that there is a reader field). It is irrelevant whether the field comes from another reader or from the Chameleon-Mini itself.
LOGMEM_FULL Lights up the LED, if the SRAM log memory is full.
-
- - - - diff --git a/Doc/Doxygen/html/Page_LEDs.html b/Doc/Doxygen/html/Page_LEDs.html deleted file mode 100644 index 8785cfa..0000000 --- a/Doc/Doxygen/html/Page_LEDs.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -Chameleon-Mini: LED functionality - - - - - - - - - - -
-
- - - - - - -
-
Chameleon-Mini -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
LED functionality
-
-
-

For giving user feedback, ChameleonMini provides two LEDs that can be configured to indicate various conditions, events, or internal state changes of ChameleonMini: a red LED and a green LED. Their individual configuration is controlled with the commands LEDRED and LEDGREEN, which can be called in the getting ("?"), setting ("=") and suggesting ("=?") variants.

-

The following table shows the currently supported LED functions.

- - - - - - - - - - - - - - - - - - - - - - - - -
Condition/Event Description
NONE Nothing happens, the LED remains dark.
POWERED The LED lights up, if the ChameleonMini is powered by USB or by battery.
TERMINAL_CONN The LED is turned on when the ChameleonMini is connected via USB and is turned off when no USB connection is established.
TERMINAL_RXTX The LED blinks shortly when sending or receiving data via the USB interface.
SETTING_CHANGE The LED blinks one time if the new setting is setting 1, two times for setting 2, ..., eight times for setting 8.
MEMORY_STORED The LED flashes everytime when a setting is stored to the permanent flash. This is currently the case when calling the command STORE, the button event STORE_MEM occurs or the setting is changed.
MEMORY_CHANGED The LED turns on when the content of the FRAM has been modified and is turned off when the currently active setting is written to the permanent Flash memory. Thus, this function indicates when the current content has been changed.
CODEC_RX The LED flashes when the currently active codec (e.g. ISO14443A emulation) receives data via the RFID interface. Note that this is implemented on the codec layer and the flashing is triggered before the received data is interpreted by the application.
CODEC_TX The LED flashes when the currently active codec sends data via the RFID interface. This function is also implemented on the codec layer.
FIELD_DETECTED The LED is turned on, if a reader field is detected via the RSSI module (when the RSSI value hits a hardcoded threshold, it is assumed that there is a reader field). It is irrelevant whether the field comes from another reader or from the ChameleonMini itself.
LOGMEM_FULL Lights up the LED, if the SRAM log memory is full.
-
- - - - diff --git a/Doc/Doxygen/html/Page_Log.html b/Doc/Doxygen/html/Page_Log.html deleted file mode 100644 index 766b381..0000000 --- a/Doc/Doxygen/html/Page_Log.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -Chameleon-Mini: Log functionality - - - - - - - - - - -
-
- - - - - - -
-
Chameleon-Mini -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
Log functionality
-
-
-

The ChameleonMini provides a configurable log functionality. This page describes how to use it.

-

Log Entry Format

-

The log entries use a TLV (Type Length Value)-like format:

- - - - - - - - - - -
Name Size Description
Entry type 1 byte See LogEntryEnum
Data length 1 byte This is the length of the appended data.
Timestamp 2 bytes This is the current systick value.
Data Data length bytes It is also possible that no data is appended, then the Data length field is zero.
-

Entry Types

-

See LogEntryEnum.

-

Log Modes

-

Currently there exist three log modes:

    -
  • OFF, which means that nothing is logged.
  • -
  • LIVE, which means that log events are written directly to the terminal (untested).
  • -
  • MEMORY, where the log events are written to SRAM.
  • -
-
Note
If there is not enough log memory, the log mode is automatically set to OFF.
-
Warning
Since the MEMORY log mode writes to SRAM, the log memory is cleared by power off or restarting the Chameleon.
-

Related Commands, Button event and LED functions

-

There are various commands to configure the log functionality. See Page Command Line. Equivalently to the LOGSTORE command, the buttons are configurable to STORE_LOG, which does the same. Also, there exists a LOGMEM_FULL function for the LEDs, which lights up the LED if the SRAM log memory is full. See also the Pages Buttons and LED functionality. The 'chamlog' Python script in the project (Software folder) automatizes the process of downloading the binary log data, e.g., sending the following command under Windows with a ChameleonMini connected on port COM6 results in downloading the binary log file, clearing the log memory, and setting the log mode to MEMORY: chamlog -p COM6 -c -m MEMORY -v. Repeatedly executing this command always outputs the recently logged commands in user-readable form. Make sure that no other program, e.g., terminal software, is blocking the serial port.

-
- - - - diff --git a/Doc/Doxygen/html/Page_Settings.html b/Doc/Doxygen/html/Page_Settings.html deleted file mode 100644 index 960823a..0000000 --- a/Doc/Doxygen/html/Page_Settings.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -Chameleon-Mini: Settings - - - - - - - - - - -
-
- - - - - - -
-
Chameleon-Mini -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
Settings
-
-
-

The ChameleonMini can act in different ways, the behavior is defined by configurations. But also, the ChameleonMini has slots, which are a layer above the configurations. With the slots, it is possible to switch between different configurations and respective content, e.g., a card dump together with the configuration as Mifare Classic 1k card.

-

Properties

-

A slot is defined by settings: SettingsEntryType.

-

Slot Changing Procedure

-

When the current slot is changed, the following procedure is applied:

    -
  1. Break potentially pending timeout commands.
  2. -
  3. Store the memory of the setting to the Flash.
  4. -
  5. Set the slot number of the currently active slot to the number of the new slot.
  6. -
  7. Set the slot pointer of the currently active slot to the pointer of the new slot.
  8. -
  9. Since the slot also contains the configuration, apply the configuration changing procedure with the new configuration for the new slot.
  10. -
  11. Log the slot change.
  12. -
  13. Recall the new content of the slot from the permanent Flash.
  14. -
  15. Signalize the slot change with an LED, if an LED is configured to SETTING_CHANGE.
  16. -
-
- - - - diff --git a/Doc/Doxygen/html/Page_UploadingDownloading.html b/Doc/Doxygen/html/Page_UploadingDownloading.html deleted file mode 100644 index a68c00f..0000000 --- a/Doc/Doxygen/html/Page_UploadingDownloading.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - -Chameleon-Mini: Uploading and Downloading Memory dumps - - - - - - - - - - -
-
- - - - - - -
-
Chameleon-Mini -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
Uploading and Downloading Memory dumps
-
-
-

In order to be able to emulate different cards, one can upload or download the content used for the emulation.

-

The layout of the memory dump depends on the chosen configuration and is usually the same as the memory layout of the currently chosen card emulation. The size of the memory dump also depends on the currently chosen configuration and can be requested with a specific command on the command-line.

-

In order to upload or download a memory dump, the user has to send the corresponding command on the command-line first and the Chameleon responds with a status message indicating that it is waiting for an X-MODEM connection. Depending on whether upload or download is chosen, the Chameleon then waits for 10 seconds to initiate an X-MODEM receive or send connection.

-

When waiting for a receiving X-MODEM connection, the X-MODEM NAK byte is sent upto 20 times with a delay of 500ms in order to establish a standard 128 byte frame-size X-MODEM connection with the simple checksum scheme. Within this time, the user has to get his X-MODEM client ready and choose the binary file to be uploaded into the memory.

-

In case of waiting for an X-MODEM send connection to establish, a wait time of 10 seconds is performed to receive the X-MODEM NAK byte. Within this time, the user has to start the X-MODEM receiver and set it to the standard 128 byte frame using the simple checksum scheme in order to receive the binary memory dump.

-
- - - - diff --git a/Doc/Doxygen/html/_antenna_level_8h_source.html b/Doc/Doxygen/html/_antenna_level_8h_source.html index fb7c863..cf2e680 100644 --- a/Doc/Doxygen/html/_antenna_level_8h_source.html +++ b/Doc/Doxygen/html/_antenna_level_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * AntennaLevel.h
3  *
4  * Created on: 24.11.2013
5  * Author: skuser
6  */
7 
8 #ifndef ANTENNALEVEL_H_
9 #define ANTENNALEVEL_H_
10 
11 #include "Common.h"
12 
13 #define ANTENNA_LEVEL_R1 47E3
14 #define ANTENNA_LEVEL_R2 1E3
15 #define ANTENNA_LEVEL_VREF 1.0
16 #define ANTENNA_LEVEL_RES 4096
17 #define ANTENNA_LEVEL_OFFSET 190 /* LSB */
18 
19 #define ANTENNA_LEVEL_MILLIVOLT 1E3
20 #define ANTENNA_LEVEL_FACTOR (ANTENNA_LEVEL_VREF * (ANTENNA_LEVEL_R1 + ANTENNA_LEVEL_R2) / (ANTENNA_LEVEL_RES * ANTENNA_LEVEL_R2) )
21 #define ANTENNA_LEVEL_SCALE ((uint32_t) 1<<16)
22 #define ANTENNA_LEVEL_NUMERATOR ((uint32_t) (ANTENNA_LEVEL_MILLIVOLT * ANTENNA_LEVEL_FACTOR * ANTENNA_LEVEL_SCALE + .5))
23 #define ANTENNA_LEVEL_DENOMINATOR (ANTENNA_LEVEL_SCALE)
24 
25 static inline
26 void AntennaLevelInit(void)
27 {
28  ADCA.CTRLA = ADC_ENABLE_bm;
29  ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc;
30  ADCA.REFCTRL = ADC_REFSEL_INT1V_gc | ADC_BANDGAP_bm;
31  ADCA.PRESCALER = ADC_PRESCALER_DIV32_gc;
32  ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
33  ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN1_gc;
34 
35 }
36 
37 static inline
38 uint16_t AntennaLevelGet(void)
39 {
40  ADCA.CH0.CTRL |= ADC_CH_START_bm;
41  while( !(ADCA.CH0.INTFLAGS & ADC_CH_CHIF_bm) );
42 
43  ADCA.CH0.INTFLAGS = ADC_CH_CHIF_bm;
44 
45  int16_t Result = ADCA.CH0RES - ANTENNA_LEVEL_OFFSET;
46  if (Result < 0) Result = 0;
47 
48  return (uint16_t) (((uint32_t) Result * ANTENNA_LEVEL_NUMERATOR) / ANTENNA_LEVEL_DENOMINATOR);
49 }
50 
51 void AntennaLevelTick(void);
52 void AntennaLevelResetMaxRssi(void);
53 
54 #endif /* ANTENNALEVEL_H_ */
diff --git a/Doc/Doxygen/html/_application_8h_source.html b/Doc/Doxygen/html/_application_8h_source.html index 63b9895..5661556 100644 --- a/Doc/Doxygen/html/_application_8h_source.html +++ b/Doc/Doxygen/html/_application_8h_source.html @@ -78,7 +78,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_battery_8h_source.html b/Doc/Doxygen/html/_battery_8h_source.html index ce09dcf..38b4d57 100644 --- a/Doc/Doxygen/html/_battery_8h_source.html +++ b/Doc/Doxygen/html/_battery_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * Battery.h
3  *
4  * Created on: 20.08.2014
5  * Author: sk
6  */
7 
8 #ifndef BATTERY_H_
9 #define BATTERY_H_
10 
11 #include "Common.h"
12 
13 #define BATTERY_PORT PORTD
14 #define BATTERY_STAT_PIN PIN0_bm
15 #define BATTERY_STAT_PINCTRL PIN0CTRL
16 #define BATTERY_PORT_MASK (BATTERY_STAT_PIN)
17 
18 INLINE void BatteryInit(void) {
19  BATTERY_PORT.DIRCLR = BATTERY_PORT_MASK;
20  BATTERY_PORT.BATTERY_STAT_PINCTRL = PORT_OPC_PULLUP_gc;
21 }
22 
23 INLINE bool BatteryIsCharging(void) {
24  if (!(BATTERY_PORT.IN & BATTERY_STAT_PIN)) {
25  return true;
26  } else {
27  return false;
28  }
29 }
30 
31 #endif /* BATTERY_H_ */
diff --git a/Doc/Doxygen/html/_button_8h_source.html b/Doc/Doxygen/html/_button_8h_source.html index 3c4a665..5a2bc85 100644 --- a/Doc/Doxygen/html/_button_8h_source.html +++ b/Doc/Doxygen/html/_button_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * Button.h
3  *
4  * Created on: 13.05.2013
5  * Author: skuser
6  */
7 
8 #ifndef BUTTON_H_
9 #define BUTTON_H_
10 
11 #include "Common.h"
12 
13 typedef enum {
14  BUTTON_R_PRESS_SHORT = 0,
15  BUTTON_R_PRESS_LONG,
16  BUTTON_L_PRESS_SHORT,
17  BUTTON_L_PRESS_LONG,
18 
19  /* Must be last element */
20  BUTTON_TYPE_COUNT
21 } ButtonTypeEnum;
22 
23 typedef enum {
24  BUTTON_ACTION_NONE,
25  BUTTON_ACTION_UID_RANDOM,
26  BUTTON_ACTION_UID_LEFT_INCREMENT,
27  BUTTON_ACTION_UID_RIGHT_INCREMENT,
28  BUTTON_ACTION_UID_LEFT_DECREMENT,
29  BUTTON_ACTION_UID_RIGHT_DECREMENT,
30  BUTTON_ACTION_CYCLE_SETTINGS,
31  BUTTON_ACTION_STORE_MEM,
32  BUTTON_ACTION_RECALL_MEM,
33  BUTTON_ACTION_TOGGLE_FIELD,
34  BUTTON_ACTION_STORE_LOG,
35 
36  /* This has to be last element */
37  BUTTON_ACTION_COUNT
38 } ButtonActionEnum;
39 
40 void ButtonInit(void);
41 void ButtonTick(void);
42 
43 void ButtonGetActionList(char* List, uint16_t BufferSize);
44 void ButtonSetActionById(ButtonTypeEnum Type, ButtonActionEnum Action);
45 void ButtonGetActionByName(ButtonTypeEnum Type, char* Action, uint16_t BufferSize);
46 bool ButtonSetActionByName(ButtonTypeEnum Type, const char* Action);
47 
48 #endif /* BUTTON_H_ */
diff --git a/Doc/Doxygen/html/_buttons_8txt.html b/Doc/Doxygen/html/_buttons_8txt.html index a03c9c3..853671f 100644 --- a/Doc/Doxygen/html/_buttons_8txt.html +++ b/Doc/Doxygen/html/_buttons_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_chameleon-_mini_8h_source.html b/Doc/Doxygen/html/_chameleon-_mini_8h_source.html index e61f2e0..761462d 100644 --- a/Doc/Doxygen/html/_chameleon-_mini_8h_source.html +++ b/Doc/Doxygen/html/_chameleon-_mini_8h_source.html @@ -72,7 +72,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_codec_8h_source.html b/Doc/Doxygen/html/_codec_8h_source.html index dc15ff1..cfcbc8e 100644 --- a/Doc/Doxygen/html/_codec_8h_source.html +++ b/Doc/Doxygen/html/_codec_8h_source.html @@ -72,7 +72,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_command_line_8h_source.html b/Doc/Doxygen/html/_command_line_8h_source.html index 6ed33a0..f19cc6a 100644 --- a/Doc/Doxygen/html/_command_line_8h_source.html +++ b/Doc/Doxygen/html/_command_line_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * CommandLine.h
3  *
4  * Created on: 04.05.2013
5  * Author: skuser
6  */
7 
8 #ifndef COMMANDLINE_H_
9 #define COMMANDLINE_H_
10 
11 #include "Terminal.h"
12 #include "Commands.h"
13 
14 void CommandLineInit(void);
15 bool CommandLineProcessByte(uint8_t Byte);
16 void CommandLineTick(void);
17 
18 void CommandLineAppendData(void const * const Buffer, uint16_t Bytes);
19 
20 /* Functions for timeout commands */
21 void CommandLinePendingTaskFinished(CommandStatusIdType ReturnStatusID, char const * const OutMessage); // must be called, when the intended task is finished
22 extern void (*CommandLinePendingTaskTimeout) (void); // gets called on timeout to end the pending task
23 void CommandLinePendingTaskBreak(void); // this manually triggers a timeout
24 
25 #endif /* COMMANDLINE_H_ */
diff --git a/Doc/Doxygen/html/_command_line_8txt.html b/Doc/Doxygen/html/_command_line_8txt.html index 27e78de..f4c4aee 100644 --- a/Doc/Doxygen/html/_command_line_8txt.html +++ b/Doc/Doxygen/html/_command_line_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_commands_8h_source.html b/Doc/Doxygen/html/_commands_8h_source.html index 990c90f..87432c4 100644 --- a/Doc/Doxygen/html/_commands_8h_source.html +++ b/Doc/Doxygen/html/_commands_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 
2 
3 #ifndef COMMANDS_H_
4 #define COMMANDS_H_
5 
6 #include "../Common.h"
7 
8 #define MAX_COMMAND_LENGTH 16
9 #define MAX_STATUS_LENGTH 32
10 
11 
12 #define COMMAND_INFO_OK_ID 100
13 #define COMMAND_INFO_OK "OK"
14 #define COMMAND_INFO_OK_WITH_TEXT_ID 101
15 #define COMMAND_INFO_OK_WITH_TEXT "OK WITH TEXT"
16 #define COMMAND_INFO_XMODEM_WAIT_ID 110
17 #define COMMAND_INFO_XMODEM_WAIT "WAITING FOR XMODEM"
18 #define COMMAND_INFO_FALSE_ID 120
19 #define COMMAND_INFO_FALSE "FALSE"
20 #define COMMAND_INFO_TRUE_ID 121
21 #define COMMAND_INFO_TRUE "TRUE"
22 #define COMMAND_ERR_UNKNOWN_CMD_ID 200
23 #define COMMAND_ERR_UNKNOWN_CMD "UNKNOWN COMMAND"
24 #define COMMAND_ERR_INVALID_USAGE_ID 201
25 #define COMMAND_ERR_INVALID_USAGE "INVALID COMMAND USAGE"
26 #define COMMAND_ERR_INVALID_PARAM_ID 202
27 #define COMMAND_ERR_INVALID_PARAM "INVALID PARAMETER"
28 #define COMMAND_ERR_TIMEOUT_ID 203
29 #define COMMAND_ERR_TIMEOUT "TIMEOUT"
30 #define TIMEOUT_COMMAND 255 // this is just for the CommandLine module to know that this is a timeout command
31 
32 
33 #define COMMAND_CHAR_TRUE '1'
34 #define COMMAND_CHAR_FALSE '0'
35 #define COMMAND_CHAR_SUGGEST '?' /* <CMD>=? for help */
36 
37 #define COMMAND_UID_BUFSIZE 32
38 
39 #define COMMAND_IS_SUGGEST_STRING(x) ( ((x)[0] == COMMAND_CHAR_SUGGEST) && ((x)[1] == '\0') )
40 
41 typedef uint8_t CommandStatusIdType;
42 typedef const char CommandStatusMessageType[MAX_STATUS_LENGTH];
43 
44 typedef CommandStatusIdType (*CommandExecFuncType) (char* OutMessage);
45 typedef CommandStatusIdType (*CommandExecParamFuncType) (char* OutMessage, const char* InParams);
46 typedef CommandStatusIdType (*CommandSetFuncType) (char* OutMessage, const char* InParam);
47 typedef CommandStatusIdType (*CommandGetFuncType) (char* OutParam);
48 
49 typedef struct {
50  char Command[MAX_COMMAND_LENGTH];
51  CommandExecFuncType ExecFunc;
52  CommandExecParamFuncType ExecParamFunc;
53  CommandSetFuncType SetFunc;
54  CommandGetFuncType GetFunc;
55 } CommandEntryType;
56 
57 #define COMMAND_VERSION "VERSION"
58 CommandStatusIdType CommandGetVersion(char* OutParam);
59 
60 #define COMMAND_CONFIG "CONFIG"
61 CommandStatusIdType CommandGetConfig(char* OutParam);
62 CommandStatusIdType CommandSetConfig(char* OutMessage, const char* InParam);
63 
64 #define COMMAND_UID "UID"
65 #define COMMAND_UID_RANDOM "RANDOM"
66 CommandStatusIdType CommandGetUid(char* OutParam);
67 CommandStatusIdType CommandSetUid(char* OutMessage, const char* InParam);
68 
69 #define COMMAND_READONLY "READONLY"
70 CommandStatusIdType CommandGetReadOnly(char* OutParam);
71 CommandStatusIdType CommandSetReadOnly(char* OutMessage, const char* InParam);
72 
73 #define COMMAND_UPLOAD "UPLOAD"
74 CommandStatusIdType CommandExecUpload(char* OutMessage);
75 
76 #define COMMAND_DOWNLOAD "DOWNLOAD"
77 CommandStatusIdType CommandExecDownload(char* OutMessage);
78 
79 #define COMMAND_RESET "RESET"
80 CommandStatusIdType CommandExecReset(char* OutMessage);
81 
82 #define COMMAND_UPGRADE "UPGRADE"
83 CommandStatusIdType CommandExecUpgrade(char* OutMessage);
84 
85 #define COMMAND_MEMSIZE "MEMSIZE"
86 CommandStatusIdType CommandGetMemSize(char* OutParam);
87 
88 #define COMMAND_UIDSIZE "UIDSIZE"
89 CommandStatusIdType CommandGetUidSize(char* OutParam);
90 
91 #define COMMAND_RBUTTON "RBUTTON"
92 CommandStatusIdType CommandGetRButton(char* OutParam);
93 CommandStatusIdType CommandSetRButton(char* OutMessage, const char* InParam);
94 
95 #define COMMAND_RBUTTON_LONG "RBUTTON_LONG"
96 CommandStatusIdType CommandGetRButtonLong(char* OutParam);
97 CommandStatusIdType CommandSetRButtonLong(char* OutMessage, const char* InParam);
98 
99 #define COMMAND_LBUTTON "LBUTTON"
100 CommandStatusIdType CommandGetLButton(char* OutParam);
101 CommandStatusIdType CommandSetLButton(char* OutMessage, const char* InParam);
102 
103 #define COMMAND_LBUTTON_LONG "LBUTTON_LONG"
104 CommandStatusIdType CommandGetLButtonLong(char* OutParam);
105 CommandStatusIdType CommandSetLButtonLong(char* OutMessage, const char* InParam);
106 
107 
108 #define COMMAND_LEDGREEN "LEDGREEN"
109 CommandStatusIdType CommandGetLedGreen(char* OutParam);
110 CommandStatusIdType CommandSetLedGreen(char* OutMessage, const char* InParam);
111 
112 #define COMMAND_LEDRED "LEDRED"
113 CommandStatusIdType CommandGetLedRed(char* OutParam);
114 CommandStatusIdType CommandSetLedRed(char* OutMessage, const char* InParam);
115 
116 #define COMMAND_LOGMODE "LOGMODE"
117 CommandStatusIdType CommandGetLogMode(char* OutParam);
118 CommandStatusIdType CommandSetLogMode(char* OutMessage, const char* InParam);
119 
120 #define COMMAND_LOGMEM "LOGMEM"
121 CommandStatusIdType CommandGetLogMem(char* OutParam);
122 
123 #define COMMAND_LOGDOWNLOAD "LOGDOWNLOAD"
124 CommandStatusIdType CommandExecLogDownload(char* OutMessage);
125 
126 #define COMMAND_STORELOG "LOGSTORE"
127 CommandStatusIdType CommandExecStoreLog(char* OutMessage);
128 
129 #define COMMAND_LOGCLEAR "LOGCLEAR"
130 CommandStatusIdType CommandExecLogClear(char* OutMessage);
131 
132 #define COMMAND_SETTING "SETTING"
133 CommandStatusIdType CommandGetSetting(char* OutParam);
134 CommandStatusIdType CommandSetSetting(char* OutMessage, const char* InParam);
135 
136 #define COMMAND_CLEAR "CLEAR"
137 CommandStatusIdType CommandExecClear(char* OutMessage);
138 
139 #define COMMAND_STORE "STORE"
140 CommandStatusIdType CommandExecStore(char* OutMessage);
141 
142 #define COMMAND_RECALL "RECALL"
143 CommandStatusIdType CommandExecRecall(char* OutMessage);
144 
145 #define COMMAND_CHARGING "CHARGING"
146 CommandStatusIdType CommandGetCharging(char* OutParam);
147 
148 #define COMMAND_HELP "HELP"
149 CommandStatusIdType CommandExecHelp(char* OutMessage);
150 
151 #define COMMAND_RSSI "RSSI"
152 CommandStatusIdType CommandGetRssi(char* OutParam);
153 
154 #define COMMAND_SYSTICK "SYSTICK"
155 CommandStatusIdType CommandGetSysTick(char* OutParam);
156 
157 #define COMMAND_SEND_RAW "SEND_RAW"
158 CommandStatusIdType CommandExecParamSendRaw(char* OutMessage, const char* InParams);
159 
160 #define COMMAND_SEND "SEND"
161 CommandStatusIdType CommandExecParamSend(char* OutMessage, const char* InParams);
162 
163 #define COMMAND_GETUID "GETUID"
164 CommandStatusIdType CommandExecGetUid(char* OutMessage);
165 
166 #define COMMAND_DUMP_MFU "DUMP_MFU"
167 CommandStatusIdType CommandExecDumpMFU(char* OutMessage);
168 
169 #define COMMAND_IDENTIFY_CARD "IDENTIFY"
170 CommandStatusIdType CommandExecIdentifyCard(char* OutMessage);
171 
172 #define COMMAND_TIMEOUT "TIMEOUT"
173 CommandStatusIdType CommandGetTimeout(char* OutMessage);
174 CommandStatusIdType CommandSetTimeout(char* OutMessage, const char* InParam);
175 
176 #define COMMAND_THRESHOLD "THRESHOLD"
177 CommandStatusIdType CommandGetThreshold(char* OutParam);
178 CommandStatusIdType CommandSetThreshold(char* OutMessage, const char* InParam);
179 
180 #define COMMAND_AUTOCALIBRATE "AUTOCALIBRATE"
181 CommandStatusIdType CommandExecAutocalibrate(char* OutMessage);
182 
183 #define COMMAND_FIELD "FIELD"
184 CommandStatusIdType CommandSetField(char* OutMessage, const char* InParam);
185 CommandStatusIdType CommandGetField(char* OutMessage);
186 
187 #define COMMAND_LIST_END ""
188 /* Defines the end of command list. This is no actual command */
189 
190 #endif /* COMMANDS_H_ */
diff --git a/Doc/Doxygen/html/_common_8h_source.html b/Doc/Doxygen/html/_common_8h_source.html index 576f554..256980f 100644 --- a/Doc/Doxygen/html/_common_8h_source.html +++ b/Doc/Doxygen/html/_common_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * Common.h
3  *
4  * Created on: 20.03.2013
5  * Author: skuser
6  */
7 
8 #ifndef COMMON_H_
9 #define COMMON_H_
10 
11 #include <stdio.h>
12 #include <stdbool.h>
13 #include <util/parity.h>
14 #include <util/delay.h>
15 #include <avr/pgmspace.h>
16 #include <avr/io.h>
17 
18 #define ODD_PARITY(Value) OddParityBit(Value)//(parity_even_bit(Value) ? 0 : 1)
19 
20 #define INLINE \
21  static inline __attribute__((always_inline))
22 
23 #define ARRAY_COUNT(x) \
24  (sizeof(x) / sizeof(x[0]))
25 
26 #define NIBBLE_TO_HEXCHAR(x) ( (x) < 0x0A ? (x) + '0' : (x) + 'A' - 0x0A )
27 #define HEXCHAR_TO_NIBBLE(x) ( (x) < 'A' ? (x) - '0' : (x) - 'A' + 0x0A )
28 #define VALID_HEXCHAR(x) ( ( (x) >= '0' && (x) <= '9' ) || ( (x) >= 'A' && (x) <= 'F' ) )
29 #define MIN(x,y) ( (x) < (y) ? (x) : (y) )
30 #define MAX(x,y) ( (x) > (y) ? (x) : (y) )
31 #define SYSTICK_DIFF(since) ((uint16_t) (SystemGetSysTick() - since))
32 #define SYSTICK_DIFF_100MS(since) (SYSTICK_DIFF(since) / 100)
33 
34 #define BITS_PER_BYTE 8
35 
36 uint16_t BufferToHexString(char* HexOut, uint16_t MaxChars, const void* Buffer, uint16_t ByteCount);
37 uint16_t HexStringToBuffer(void* Buffer, uint16_t MaxBytes, const char* HexIn);
38 
39 INLINE uint8_t BitReverseByte(uint8_t Byte)
40 {
41  extern const uint8_t PROGMEM BitReverseByteTable[];
42 
43  return pgm_read_byte(&BitReverseByteTable[Byte]);
44 }
45 
46 INLINE uint8_t OddParityBit(uint8_t Byte)
47 {
48  extern const uint8_t PROGMEM OddParityByteTable[];
49 
50  return pgm_read_byte(&OddParityByteTable[Byte]);
51 }
52 
53 INLINE uint8_t StringLength(const char* Str, uint8_t MaxLen)
54 {
55  uint8_t StrLen = 0;
56 
57  while(MaxLen > 0) {
58  if (*Str++ == '\0')
59  break;
60 
61  MaxLen--;
62  StrLen++;
63  }
64 
65  return StrLen;
66 }
67 
68 #endif /* COMMON_H_ */
diff --git a/Doc/Doxygen/html/_configuration_8h.html b/Doc/Doxygen/html/_configuration_8h.html index 7213cda..7c28061 100644 --- a/Doc/Doxygen/html/_configuration_8h.html +++ b/Doc/Doxygen/html/_configuration_8h.html @@ -81,7 +81,7 @@ Classes diff --git a/Doc/Doxygen/html/_configuration_8h_source.html b/Doc/Doxygen/html/_configuration_8h_source.html index 62a17ce..b2f3324 100644 --- a/Doc/Doxygen/html/_configuration_8h_source.html +++ b/Doc/Doxygen/html/_configuration_8h_source.html @@ -73,7 +73,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_configurations_8txt.html b/Doc/Doxygen/html/_configurations_8txt.html index 9ad4121..28c6797 100644 --- a/Doc/Doxygen/html/_configurations_8txt.html +++ b/Doc/Doxygen/html/_configurations_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_crypto1_8h_source.html b/Doc/Doxygen/html/_crypto1_8h_source.html index 16d92f2..bc6e784 100644 --- a/Doc/Doxygen/html/_crypto1_8h_source.html +++ b/Doc/Doxygen/html/_crypto1_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 #ifndef CRYPTO1_H
2 #define CRYPTO1_H
3 
4 #include <stdint.h>
5 #include <stdbool.h>
6 
7 void Crypto1GetState(uint8_t* pEven, uint8_t* pOdd);
8 
9 /* Gets the current keystream-bit, without shifting the internal LFSR */
10 uint8_t Crypto1FilterOutput(void);
11 
12 /* Set up Crypto1 cipher using the given Key, Uid and CardNonce. Also encrypts
13  * the CardNonce in-place while in non-linear mode. */
14 void Crypto1Setup(uint8_t Key[6], uint8_t Uid[4], uint8_t CardNonce[4]);
15 /* Same for nested auth. CardNonce[4]..[7] will contain the parity bits after return */
16 void Crypto1SetupNested(uint8_t Key[6], uint8_t Uid[4], uint8_t CardNonce[8], bool Decrypt);
17 
18 /* Load the decrypted ReaderNonce into the Crypto1 state LFSR */
19 void Crypto1Auth(uint8_t EncryptedReaderNonce[4]);
20 
21 /* Generate 8 Bits of key stream */
22 uint8_t Crypto1Byte(void);
23 
24 /* Encrypt/Decrypt array */
25 void Crypto1ByteArray(uint8_t* Buffer, uint8_t Count);
26 void Crypto1ByteArrayWithParity(uint8_t* Buffer, uint8_t Count);
27 
28 /* Generate 4 Bits of key stream */
29 uint8_t Crypto1Nibble(void);
30 
31 /* Execute 'ClockCount' cycles on the PRNG state 'State' */
32 void Crypto1PRNG(uint8_t State[4], uint8_t ClockCount);
33 
34 /* Encrypts buffer with consideration of parity bits */
35 void Crypto1EncryptWithParity(uint8_t * Buffer, uint8_t BitCount);
36 
37 /* Encrypts buffer with LFSR feedback within reader nonce and considers parity bits */
38 void Crypto1ReaderAuthWithParity(uint8_t PlainReaderAnswerWithParityBits[9]);
39 
40 #endif //CRYPTO1_H
diff --git a/Doc/Doxygen/html/_getting_started_8txt.html b/Doc/Doxygen/html/_getting_started_8txt.html index d6e2b3e..2808d55 100644 --- a/Doc/Doxygen/html/_getting_started_8txt.html +++ b/Doc/Doxygen/html/_getting_started_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_i_s_o14443-2_a_8h_source.html b/Doc/Doxygen/html/_i_s_o14443-2_a_8h_source.html index 8caa098..1388a14 100644 --- a/Doc/Doxygen/html/_i_s_o14443-2_a_8h_source.html +++ b/Doc/Doxygen/html/_i_s_o14443-2_a_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * ISO14443-2A.h
3  *
4  * Created on: 18.02.2013
5  * Author: skuser
6  */
7 
8 #ifndef ISO14443_2A_H_
9 #define ISO14443_2A_H_
10 
11 #include "Codec.h"
12 
13 #define ISO14443A_APP_NO_RESPONSE 0x0000
14 #define ISO14443A_APP_CUSTOM_PARITY 0x1000
15 
16 #define ISO14443A_BUFFER_PARITY_OFFSET (CODEC_BUFFER_SIZE/2)
17 
18 /* Codec Interface */
19 void ISO14443ACodecInit(void);
20 void ISO14443ACodecDeInit(void);
21 void ISO14443ACodecTask(void);
22 
23 
24 
25 #endif
diff --git a/Doc/Doxygen/html/_i_s_o14443-3_a_8h_source.html b/Doc/Doxygen/html/_i_s_o14443-3_a_8h_source.html index a33dc48..3f5d9e0 100644 --- a/Doc/Doxygen/html/_i_s_o14443-3_a_8h_source.html +++ b/Doc/Doxygen/html/_i_s_o14443-3_a_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * ISO14443-2A.h
3  *
4  * Created on: 19.03.2013
5  * Author: skuser
6  */
7 
8 #ifndef ISO14443_3A_H_
9 #define ISO14443_3A_H_
10 
11 #include "../Common.h"
12 #include <string.h>
13 
14 #define ISO14443A_UID_SIZE_SINGLE 4 /* bytes */
15 #define ISO14443A_UID_SIZE_DOUBLE 7
16 #define ISO14443A_UID_SIZE_TRIPLE 10
17 
18 #define ISO14443A_CMD_REQA 0x26
19 #define ISO14443A_CMD_WUPA 0x52
20 #define ISO14443A_CMD_SELECT_CL1 0x93
21 #define ISO14443A_CMD_SELECT_CL2 0x95
22 #define ISO14443A_CMD_SELECT_CL3 0x97
23 #define ISO14443A_CMD_HLTA 0x50
24 
25 #define ISO14443A_NVB_AC_START 0x20
26 #define ISO14443A_NVB_AC_END 0x70
27 
28 #define ISO14443A_CL_UID_OFFSET 0
29 #define ISO14443A_CL_UID_SIZE 4
30 #define ISO14443A_CL_BCC_OFFSET 4
31 #define ISO14443A_CL_BCC_SIZE 1 /* Byte */
32 #define ISO14443A_CL_FRAME_SIZE ((ISO14443A_CL_UID_SIZE + ISO14443A_CL_BCC_SIZE) * 8) /* UID[N...N+3] || BCCN */
33 #define ISO14443A_SAK_INCOMPLETE 0x04
34 #define ISO14443A_SAK_COMPLETE_COMPLIANT 0x20
35 #define ISO14443A_SAK_COMPLETE_NOT_COMPLIANT 0x00
36 
37 #define ISO14443A_ATQA_FRAME_SIZE (2 * 8) /* Bit */
38 #define ISO14443A_SAK_FRAME_SIZE (3 * 8) /* Bit */
39 
40 #define ISO14443A_UID0_RANDOM 0x08
41 #define ISO14443A_UID0_CT 0x88
42 
43 #define ISO14443A_CRCA_SIZE 2
44 
45 #define ISO14443A_CALC_BCC(ByteBuffer) \
46  ( ByteBuffer[0] ^ ByteBuffer[1] ^ ByteBuffer[2] ^ ByteBuffer[3] )
47 
48 void ISO14443AAppendCRCA(void* Buffer, uint16_t ByteCount);
49 bool ISO14443ACheckCRCA(const void* Buffer, uint16_t ByteCount);
50 
51 INLINE bool ISO14443ASelect(void* Buffer, uint16_t* BitCount, uint8_t* UidCL, uint8_t SAKValue);
52 INLINE bool ISO14443AWakeUp(void* Buffer, uint16_t* BitCount, uint16_t ATQAValue, bool FromHalt);
53 
54 INLINE
55 bool ISO14443ASelect(void* Buffer, uint16_t* BitCount, uint8_t* UidCL, uint8_t SAKValue)
56 {
57  uint8_t* DataPtr = (uint8_t*) Buffer;
58  uint8_t NVB = DataPtr[1];
59  //uint8_t CollisionByteCount = (NVB >> 4) & 0x0F;
60  //uint8_t CollisionBitCount = (NVB >> 0) & 0x0F;
61 
62  switch (NVB) {
63  case ISO14443A_NVB_AC_START:
64  /* Start of anticollision procedure.
65  * Send whole UID CLn + BCC */
66  DataPtr[0] = UidCL[0];
67  DataPtr[1] = UidCL[1];
68  DataPtr[2] = UidCL[2];
69  DataPtr[3] = UidCL[3];
70  DataPtr[4] = ISO14443A_CALC_BCC(DataPtr);
71 
72  *BitCount = ISO14443A_CL_FRAME_SIZE;
73 
74  return false;
75 
76  case ISO14443A_NVB_AC_END:
77  /* End of anticollision procedure.
78  * Send SAK CLn if we are selected. */
79  if ( (DataPtr[2] == UidCL[0]) &&
80  (DataPtr[3] == UidCL[1]) &&
81  (DataPtr[4] == UidCL[2]) &&
82  (DataPtr[5] == UidCL[3]) ) {
83 
84  DataPtr[0] = SAKValue;
85  ISO14443AAppendCRCA(Buffer, 1);
86 
87  *BitCount = ISO14443A_SAK_FRAME_SIZE;
88  return true;
89  } else {
90  /* We have not been selected. Don't send anything. */
91  *BitCount = 0;
92  return false;
93  }
94  default:
95  {
96  uint8_t CollisionByteCount = ((NVB >> 4) & 0x0f) - 2;
97  uint8_t CollisionBitCount = (NVB >> 0) & 0x0f;
98  uint8_t mask = 0xFF >> (8 - CollisionBitCount);
99  // Since the UidCL does not contain the BCC, we have to distinguish here
100  if (
101  ((CollisionByteCount == 5 || (CollisionByteCount == 4 && CollisionBitCount > 0)) && memcmp(UidCL, &DataPtr[2], 4) == 0 && (ISO14443A_CALC_BCC(UidCL) & mask) == (DataPtr[6] & mask))
102  ||
103  (CollisionByteCount == 4 && CollisionBitCount == 0 && memcmp(UidCL, &DataPtr[2], 4) == 0)
104  ||
105  (CollisionByteCount < 4 && memcmp(UidCL, &DataPtr[2], CollisionByteCount) == 0 && (UidCL[CollisionByteCount] & mask) == (DataPtr[CollisionByteCount + 2] & mask))
106  )
107  {
108  DataPtr[0] = UidCL[0];
109  DataPtr[1] = UidCL[1];
110  DataPtr[2] = UidCL[2];
111  DataPtr[3] = UidCL[3];
112  DataPtr[4] = ISO14443A_CALC_BCC(DataPtr);
113 
114  *BitCount = ISO14443A_CL_FRAME_SIZE;
115  } else {
116  *BitCount = 0;
117  }
118  return false;
119  }
120  /* TODO: No anticollision supported */
121  *BitCount = 0;
122  return false;
123  }
124 }
125 
126 INLINE
127 bool ISO14443AWakeUp(void* Buffer, uint16_t* BitCount, uint16_t ATQAValue, bool FromHalt)
128 {
129  uint8_t* DataPtr = (uint8_t*) Buffer;
130 
131  if ( ((! FromHalt) && (DataPtr[0] == ISO14443A_CMD_REQA)) ||
132  (DataPtr[0] == ISO14443A_CMD_WUPA) ){
133  DataPtr[0] = (ATQAValue >> 0) & 0x00FF;
134  DataPtr[1] = (ATQAValue >> 8) & 0x00FF;
135 
136  *BitCount = ISO14443A_ATQA_FRAME_SIZE;
137 
138  return true;
139  } else {
140  *BitCount = 0;
141 
142  return false;
143  }
144 }
145 
146 #endif
diff --git a/Doc/Doxygen/html/_l_e_d_8h_source.html b/Doc/Doxygen/html/_l_e_d_8h_source.html index 84021ce..eb89707 100644 --- a/Doc/Doxygen/html/_l_e_d_8h_source.html +++ b/Doc/Doxygen/html/_l_e_d_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * LED.h
3  *
4  * Created on: 10.02.2013
5  * Author: skuser
6  */
7 
8 #ifndef LED_H
9 #define LED_H
10 
11 #include <avr/io.h>
12 #include "Common.h"
13 
14 #define LED_PORT PORTA
15 #define LED_GREEN PIN4_bm
16 #define LED_RED PIN3_bm
17 #define LED_MASK (LED_GREEN | LED_RED)
18 
19 typedef enum LEDFunctionEnum {
20  LED_NO_FUNC = 0, /* Don't light up the LED */
21  LED_POWERED, /* Light up the LED whenever the Chameleon is powered */
22 
23  LED_TERMINAL_CONN, /* A Terminal/USB connection has been established */
24  LED_TERMINAL_RXTX, /* There is traffic on the terminal */
25 
26  LED_SETTING_CHANGE, /* Outputs a blink code that shows the current setting */
27 
28  LED_MEMORY_STORED, /* Blink once when memory has been stored to flash */
29  LED_MEMORY_CHANGED, /* Switch LED on when card memory has changed compared to flash */
30 
31  LED_FIELD_DETECTED, /* Shows LED while a reader field is being detected or turned on by the chameleon itself */
32 
33  LED_CODEC_RX, /* Blink LED when receiving codec data */
34  LED_CODEC_TX, /* Blink LED when transmitting codec data */
35 
36  LED_LOG_MEM_FULL, /* Light up if log memory is full. */
37 
38  //TODO: LED_APP_SELECTED, /* Show LED while the correct UID has been selected and the application is active */
39  /* Has to be last element */
40  LED_FUNC_COUNT
41 } LEDHookEnum;
42 
43 typedef enum LEDActionEnum {
44  LED_NO_ACTION = 0x00,
45  LED_OFF = 0x10,
46  LED_ON = 0x11,
47  LED_TOGGLE = 0x12,
48  LED_PULSE = 0x13,
49  LED_BLINK = 0x20,
50  LED_BLINK_1X = 0x20,
51  LED_BLINK_2X, /* Have to be sequentially ordered */
52  LED_BLINK_3X,
53  LED_BLINK_4X,
54  LED_BLINK_5X,
55  LED_BLINK_6X,
56  LED_BLINK_7X,
57  LED_BLINK_8X,
58 } LEDActionEnum;
59 
60 
61 
62 void LEDInit(void);
63 void LEDTick(void);
64 
65 void LEDGetFuncList(char* List, uint16_t BufferSize);
66 void LEDSetFuncById(uint8_t Mask, LEDHookEnum Func);
67 void LEDGetFuncByName(uint8_t Mask, char* Function, uint16_t BufferSize);
68 bool LEDSetFuncByName(uint8_t Mask, const char* Function);
69 
70 #endif /* LED_H */
diff --git a/Doc/Doxygen/html/_l_e_d_8txt.html b/Doc/Doxygen/html/_l_e_d_8txt.html index 97c8396..116a796 100644 --- a/Doc/Doxygen/html/_l_e_d_8txt.html +++ b/Doc/Doxygen/html/_l_e_d_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_l_e_d_hook_8h_source.html b/Doc/Doxygen/html/_l_e_d_hook_8h_source.html index e8da0af..edc9398 100644 --- a/Doc/Doxygen/html/_l_e_d_hook_8h_source.html +++ b/Doc/Doxygen/html/_l_e_d_hook_8h_source.html @@ -70,7 +70,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_l_e_ds_8txt.html b/Doc/Doxygen/html/_l_e_ds_8txt.html index a6c9c43..d99635b 100644 --- a/Doc/Doxygen/html/_l_e_ds_8txt.html +++ b/Doc/Doxygen/html/_l_e_ds_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_l_u_f_a_config_8h.html b/Doc/Doxygen/html/_l_u_f_a_config_8h.html index d77c440..64b5296 100644 --- a/Doc/Doxygen/html/_l_u_f_a_config_8h.html +++ b/Doc/Doxygen/html/_l_u_f_a_config_8h.html @@ -78,7 +78,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_l_u_f_a_config_8h_source.html b/Doc/Doxygen/html/_l_u_f_a_config_8h_source.html index f780dc6..6762736 100644 --- a/Doc/Doxygen/html/_l_u_f_a_config_8h_source.html +++ b/Doc/Doxygen/html/_l_u_f_a_config_8h_source.html @@ -69,7 +69,7 @@ $(function() { Go to the documentation of this file.
1 /*
2  LUFA Library
3  Copyright (C) Dean Camera, 2012.
4 
5  dean [at] fourwalledcubicle [dot] com
6  www.lufa-lib.org
7 */
8 
9 /*
10  Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
11 
12  Permission to use, copy, modify, distribute, and sell this
13  software and its documentation for any purpose is hereby granted
14  without fee, provided that the above copyright notice appear in
15  all copies and that both that the copyright notice and this
16  permission notice and warranty disclaimer appear in supporting
17  documentation, and that the name of the author not be used in
18  advertising or publicity pertaining to distribution of the
19  software without specific, written prior permission.
20 
21  The author disclaim all warranties with regard to this
22  software, including all implied warranties of merchantability
23  and fitness. In no event shall the author be liable for any
24  special, indirect or consequential damages or any damages
25  whatsoever resulting from loss of use, data or profits, whether
26  in an action of contract, negligence or other tortious action,
27  arising out of or in connection with the use or performance of
28  this software.
29 */
30 
42 #ifndef _LUFA_CONFIG_H_
43 #define _LUFA_CONFIG_H_
44 
45  /* Non-USB Related Configuration Tokens: */
46 // #define DISABLE_TERMINAL_CODES
47 
48  /* USB Class Driver Related Tokens: */
49 // #define HID_HOST_BOOT_PROTOCOL_ONLY
50 // #define HID_STATETABLE_STACK_DEPTH {Insert Value Here}
51 // #define HID_USAGE_STACK_DEPTH {Insert Value Here}
52 // #define HID_MAX_COLLECTIONS {Insert Value Here}
53 // #define HID_MAX_REPORTITEMS {Insert Value Here}
54 // #define HID_MAX_REPORT_IDS {Insert Value Here}
55 // #define NO_CLASS_DRIVER_AUTOFLUSH
56 
57  /* General USB Driver Related Tokens: */
58  #define USE_STATIC_OPTIONS \
59  (USB_OPT_BUSEVENT_PRIMED | USB_DEVICE_OPT_FULLSPEED | /*USB_OPT_PLLCLKSRC*/ USB_OPT_RC32MCLKSRC)
60  #define USB_DEVICE_ONLY
61 // #define USB_STREAM_TIMEOUT_MS {Insert Value Here}
62 // #define NO_LIMITED_CONTROLLER_CONNECT
63 // #define NO_SOF_EVENTS
64 
65  /* USB Device Mode Driver Related Tokens: */
66 // #define USE_RAM_DESCRIPTORS
67  #define USE_FLASH_DESCRIPTORS
68 // #define USE_EEPROM_DESCRIPTORS
69 // #define NO_INTERNAL_SERIAL
70  #define FIXED_CONTROL_ENDPOINT_SIZE 8
71 // #define DEVICE_STATE_AS_GPIOR {Insert Value Here}
72  #define FIXED_NUM_CONFIGURATIONS 1
73 // #define CONTROL_ONLY_DEVICE
74  #define MAX_ENDPOINT_INDEX 5
75 // #define NO_DEVICE_REMOTE_WAKEUP
76 // #define NO_DEVICE_SELF_POWER
77 
78 #endif
diff --git a/Doc/Doxygen/html/_l_u_f_a_descriptors_8c.html b/Doc/Doxygen/html/_l_u_f_a_descriptors_8c.html index 8e28502..c3d0873 100644 --- a/Doc/Doxygen/html/_l_u_f_a_descriptors_8c.html +++ b/Doc/Doxygen/html/_l_u_f_a_descriptors_8c.html @@ -207,7 +207,7 @@ Variables diff --git a/Doc/Doxygen/html/_l_u_f_a_descriptors_8h.html b/Doc/Doxygen/html/_l_u_f_a_descriptors_8h.html index 9cca40b..f551717 100644 --- a/Doc/Doxygen/html/_l_u_f_a_descriptors_8h.html +++ b/Doc/Doxygen/html/_l_u_f_a_descriptors_8h.html @@ -215,7 +215,7 @@ Functions diff --git a/Doc/Doxygen/html/_l_u_f_a_descriptors_8h_source.html b/Doc/Doxygen/html/_l_u_f_a_descriptors_8h_source.html index 7f20828..d653292 100644 --- a/Doc/Doxygen/html/_l_u_f_a_descriptors_8h_source.html +++ b/Doc/Doxygen/html/_l_u_f_a_descriptors_8h_source.html @@ -71,7 +71,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_log_8h.html b/Doc/Doxygen/html/_log_8h.html index 7da5bef..182fe4e 100644 --- a/Doc/Doxygen/html/_log_8h.html +++ b/Doc/Doxygen/html/_log_8h.html @@ -181,7 +181,7 @@ Enumerations diff --git a/Doc/Doxygen/html/_log_8h_source.html b/Doc/Doxygen/html/_log_8h_source.html index 325a595..d899e4b 100644 --- a/Doc/Doxygen/html/_log_8h_source.html +++ b/Doc/Doxygen/html/_log_8h_source.html @@ -95,7 +95,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_log_8txt.html b/Doc/Doxygen/html/_log_8txt.html index 2b5cef1..a067ec5 100644 --- a/Doc/Doxygen/html/_log_8txt.html +++ b/Doc/Doxygen/html/_log_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_main_page_8txt.html b/Doc/Doxygen/html/_main_page_8txt.html index cbf26b0..95e0ab0 100644 --- a/Doc/Doxygen/html/_main_page_8txt.html +++ b/Doc/Doxygen/html/_main_page_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_map_8h_source.html b/Doc/Doxygen/html/_map_8h_source.html index 5388d36..f661ed3 100644 --- a/Doc/Doxygen/html/_map_8h_source.html +++ b/Doc/Doxygen/html/_map_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * Map.h
3  *
4  * Created on: 07.12.2014
5  * Author: sk
6  */
7 
8 #ifndef MAP_H_
9 #define MAP_H_
10 
11 #include <stdint.h>
12 #include <stdbool.h>
13 #include <avr/pgmspace.h>
14 
15 #define MAP_TEXT_BUF_SIZE 32
16 #define MAP_MAX_TEXT_SIZE (MAP_TEXT_BUF_SIZE - 1)
17 
18 typedef uint8_t MapIdType;
19 typedef const char* MapTextPtrType;
20 
21 const typedef struct {
22  MapIdType Id;
23  const char Text[MAP_TEXT_BUF_SIZE];
24 } MapEntryType;
25 
26 bool MapIdToText(const MapEntryType* MapPtr, uint8_t MapSize, MapIdType Id, char* Text, uint16_t MaxBufferSize);
27 bool MapTextToId(const MapEntryType* MapPtr, uint8_t MapSize, MapTextPtrType Text, MapIdType* IdPtr);
28 void MapToString(const MapEntryType* MapPtr, uint8_t MapSize, char* String, uint16_t MaxBufferSize);
29 
30 #endif /* MAP_H_ */
diff --git a/Doc/Doxygen/html/_memory_8h_source.html b/Doc/Doxygen/html/_memory_8h_source.html index 5e0d9a9..462b713 100644 --- a/Doc/Doxygen/html/_memory_8h_source.html +++ b/Doc/Doxygen/html/_memory_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * Flash.h
3  *
4  * Created on: 20.03.2013
5  * Author: skuser
6  */
7 
8 #ifndef MEMORY_H_
9 #define MEMORY_H_
10 
11 #define MEMORY_SIZE (FLASH_DATA_SIZE) /* From makefile */
12 #define MEMORY_INIT_VALUE 0x00
13 #define MEMORY_SIZE_PER_SETTING 8192
14 
15 #ifndef __ASSEMBLER__
16 #include "Common.h"
17 
18 void MemoryInit(void);
19 void MemoryReadBlock(void* Buffer, uint16_t Address, uint16_t ByteCount);
20 void MemoryWriteBlock(const void* Buffer, uint16_t Address, uint16_t ByteCount);
21 void MemoryClear(void);
22 
23 
24 void MemoryRecall(void);
25 void MemoryStore(void);
26 
27 /* For use with XModem */
28 bool MemoryUploadBlock(void* Buffer, uint32_t BlockAddress, uint16_t ByteCount);
29 bool MemoryDownloadBlock(void* Buffer, uint32_t BlockAddress, uint16_t ByteCount);
30 
31 /* EEPROM functions */
32 uint16_t WriteEEPBlock(uint16_t Address, const void *SrcPtr, uint16_t ByteCount);
33 uint16_t ReadEEPBlock(uint16_t Address, void *DestPtr, uint16_t ByteCount);
34 
35 #endif /* __ASSEMBLER__ */
36 
37 #endif /* MEMORY_H_ */
diff --git a/Doc/Doxygen/html/_mifare_classic_8h_source.html b/Doc/Doxygen/html/_mifare_classic_8h_source.html index b917c08..2f272de 100644 --- a/Doc/Doxygen/html/_mifare_classic_8h_source.html +++ b/Doc/Doxygen/html/_mifare_classic_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * MifareClassic.h
3  *
4  * Created on: 13.05.2013
5  * Author: skuser
6  */
7 
8 #ifndef MIFARECLASSIC_H_
9 #define MIFARECLASSIC_H_
10 
11 #include "Application.h"
12 #include "ISO14443-3A.h"
13 
14 #define MIFARE_CLASSIC_UID_SIZE ISO14443A_UID_SIZE_SINGLE
15 #define MIFARE_CLASSIC_1K_MEM_SIZE 1024
16 #define MIFARE_CLASSIC_4K_MEM_SIZE 4096
17 
18 void MifareClassicAppInit1K(void);
19 void MifareClassicAppInit1K7B(void);
20 void MifareClassicAppInit4K(void);
21 void MifareClassicAppReset(void);
22 void MifareClassicAppTask(void);
23 
24 uint16_t MifareClassicAppProcess(uint8_t* Buffer, uint16_t BitCount);
25 
26 void MifareClassicGetUid(ConfigurationUidType Uid);
27 void MifareClassicSetUid(ConfigurationUidType Uid);
28 
29 
30 #endif /* MIFARECLASSIC_H_ */
diff --git a/Doc/Doxygen/html/_mifare_ultralight_8h_source.html b/Doc/Doxygen/html/_mifare_ultralight_8h_source.html index c7655a2..de87b40 100644 --- a/Doc/Doxygen/html/_mifare_ultralight_8h_source.html +++ b/Doc/Doxygen/html/_mifare_ultralight_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * MifareUltralight.h
3  *
4  * Created on: 20.03.2013
5  * Author: skuser
6  */
7 
8 #ifndef MIFAREULTRALIGHT_H_
9 #define MIFAREULTRALIGHT_H_
10 
11 #include "Application.h"
12 #include "ISO14443-3A.h"
13 
14 #define MIFARE_ULTRALIGHT_UID_SIZE ISO14443A_UID_SIZE_DOUBLE
15 #define MIFARE_ULTRALIGHT_PAGE_SIZE 4
16 #define MIFARE_ULTRALIGHT_PAGES 16
17 #define MIFARE_ULTRALIGHT_EV11_PAGES 20
18 #define MIFARE_ULTRALIGHT_EV12_PAGES 41
19 #define MIFARE_ULTRALIGHT_MEM_SIZE (MIFARE_ULTRALIGHT_PAGES * MIFARE_ULTRALIGHT_PAGE_SIZE)
20 #define MIFARE_ULTRALIGHT_EV11_MEM_SIZE (MIFARE_ULTRALIGHT_EV11_PAGES * MIFARE_ULTRALIGHT_PAGE_SIZE)
21 #define MIFARE_ULTRALIGHT_EV12_MEM_SIZE (MIFARE_ULTRALIGHT_EV12_PAGES * MIFARE_ULTRALIGHT_PAGE_SIZE)
22 
23 void MifareUltralightAppInit(void);
24 void MifareUltralightEV11AppInit(void);
25 void MifareUltralightEV12AppInit(void);
26 void MifareUltralightAppReset(void);
27 void MifareUltralightAppTask(void);
28 
29 uint16_t MifareUltralightAppProcess(uint8_t* Buffer, uint16_t BitCount);
30 
31 void MifareUltralightGetUid(ConfigurationUidType Uid);
32 void MifareUltralightSetUid(ConfigurationUidType Uid);
33 
34 
35 
36 #endif /* MIFAREULTRALIGHT_H_ */
diff --git a/Doc/Doxygen/html/_page_14443_a_reader.html b/Doc/Doxygen/html/_page_14443_a_reader.html index 3cb84e6..53637d8 100644 --- a/Doc/Doxygen/html/_page_14443_a_reader.html +++ b/Doc/Doxygen/html/_page_14443_a_reader.html @@ -150,7 +150,7 @@ Each of the following commands returns INVALID COMMAND USAGE on a n diff --git a/Doc/Doxygen/html/_page__buttons.html b/Doc/Doxygen/html/_page__buttons.html index 6679675..d426e87 100644 --- a/Doc/Doxygen/html/_page__buttons.html +++ b/Doc/Doxygen/html/_page__buttons.html @@ -108,7 +108,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_page__command_line.html b/Doc/Doxygen/html/_page__command_line.html index d1dfa6c..f056095 100644 --- a/Doc/Doxygen/html/_page__command_line.html +++ b/Doc/Doxygen/html/_page__command_line.html @@ -270,7 +270,7 @@ When setting the timeout to zero, there is no timeout and thus a process may con diff --git a/Doc/Doxygen/html/_page__configurations.html b/Doc/Doxygen/html/_page__configurations.html index 55f921c..de77bb7 100644 --- a/Doc/Doxygen/html/_page__configurations.html +++ b/Doc/Doxygen/html/_page__configurations.html @@ -104,7 +104,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_page__getting_started.html b/Doc/Doxygen/html/_page__getting_started.html index 1759cfe..f5205da 100644 --- a/Doc/Doxygen/html/_page__getting_started.html +++ b/Doc/Doxygen/html/_page__getting_started.html @@ -96,7 +96,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_page__l_e_d.html b/Doc/Doxygen/html/_page__l_e_d.html index 6ed25e4..1976aa1 100644 --- a/Doc/Doxygen/html/_page__l_e_d.html +++ b/Doc/Doxygen/html/_page__l_e_d.html @@ -92,7 +92,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_page__l_e_ds.html b/Doc/Doxygen/html/_page__l_e_ds.html index 9f476e9..8313091 100644 --- a/Doc/Doxygen/html/_page__l_e_ds.html +++ b/Doc/Doxygen/html/_page__l_e_ds.html @@ -96,7 +96,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_page__log.html b/Doc/Doxygen/html/_page__log.html index 2423668..6d8ea57 100644 --- a/Doc/Doxygen/html/_page__log.html +++ b/Doc/Doxygen/html/_page__log.html @@ -95,7 +95,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_page__settings.html b/Doc/Doxygen/html/_page__settings.html index fca5b83..b8c8ccb 100644 --- a/Doc/Doxygen/html/_page__settings.html +++ b/Doc/Doxygen/html/_page__settings.html @@ -83,7 +83,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_page__uploading_downloading.html b/Doc/Doxygen/html/_page__uploading_downloading.html index 9a72625..ed3122f 100644 --- a/Doc/Doxygen/html/_page__uploading_downloading.html +++ b/Doc/Doxygen/html/_page__uploading_downloading.html @@ -74,7 +74,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_random_8h_source.html b/Doc/Doxygen/html/_random_8h_source.html index 2e9aa54..2a1a662 100644 --- a/Doc/Doxygen/html/_random_8h_source.html +++ b/Doc/Doxygen/html/_random_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * Random.h
3  *
4  * Created on: 22.03.2013
5  * Author: skuser
6  */
7 
8 #ifndef RANDOM_H_
9 #define RANDOM_H_
10 
11 #include "Common.h"
12 
13 void RandomInit(void);
14 uint8_t RandomGetByte(void);
15 void RandomGetBuffer(void* Buffer, uint8_t ByteCount);
16 void RandomTick(void);
17 
18 #endif /* RANDOM_H_ */
diff --git a/Doc/Doxygen/html/_reader14443-2_a_8h_source.html b/Doc/Doxygen/html/_reader14443-2_a_8h_source.html index 48df12f..36d8b7e 100644 --- a/Doc/Doxygen/html/_reader14443-2_a_8h_source.html +++ b/Doc/Doxygen/html/_reader14443-2_a_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * Reader14443-2A.h
3  *
4  * Created on: 26.08.2014
5  * Author: sk
6  */
7 
8 #ifndef READER14443_2A_H_
9 #define READER14443_2A_H_
10 
11 #include "Codec.h"
12 #include "Terminal/CommandLine.h"
13 
14 /* Codec Interface */
15 void Reader14443ACodecInit(void);
16 void Reader14443ACodecDeInit(void);
17 void Reader14443ACodecTask(void);
18 
19 /* Application Interface */
20 void Reader14443ACodecStart(void);
21 void Reader14443ACodecReset(void);
22 
23 #endif /* READER14443_2A_H_ */
diff --git a/Doc/Doxygen/html/_reader14443_a_8h_source.html b/Doc/Doxygen/html/_reader14443_a_8h_source.html index aa3df38..8becd68 100644 --- a/Doc/Doxygen/html/_reader14443_a_8h_source.html +++ b/Doc/Doxygen/html/_reader14443_a_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 #ifndef READER14443A_H
2 #define READER14443A_H
3 
4 #include "Application.h"
5 #include "Codec/Codec.h"
6 
7 #define CRC_INIT 0x6363
8 
9 uint8_t ReaderSendBuffer[CODEC_BUFFER_SIZE];
10 uint16_t ReaderSendBitCount;
11 
12 void Reader14443AAppInit(void);
13 void Reader14443AAppReset(void);
14 void Reader14443AAppTask(void);
15 void Reader14443AAppTick(void);
16 void Reader14443AAppTimeout(void);
17 
18 uint16_t Reader14443AAppProcess(uint8_t* Buffer, uint16_t BitCount);
19 
20 uint16_t addParityBits(uint8_t * Buffer, uint16_t bits);
21 uint16_t removeParityBits(uint8_t * Buffer, uint16_t BitCount);
22 uint16_t removeSOC(uint8_t * Buffer, uint16_t BitCount);
23 bool checkParityBits(uint8_t * Buffer, uint16_t BitCount);
24 uint16_t ISO14443_CRCA(uint8_t * Buffer, uint8_t ByteCount);
25 
26 typedef enum {
27  Reader14443_Do_Nothing,
28  Reader14443_Send,
29  Reader14443_Send_Raw,
30  Reader14443_Get_UID,
31  Reader14443_Autocalibrate,
32  Reader14443_Read_MF_Ultralight,
33  Reader14443_Identify
34 } Reader14443Command;
35 
36 
37 #endif //READER14443A_H
diff --git a/Doc/Doxygen/html/_reader_8txt.html b/Doc/Doxygen/html/_reader_8txt.html index 886ce76..503a4a1 100644 --- a/Doc/Doxygen/html/_reader_8txt.html +++ b/Doc/Doxygen/html/_reader_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_settings_8h.html b/Doc/Doxygen/html/_settings_8h.html index c4af6a0..758d69f 100644 --- a/Doc/Doxygen/html/_settings_8h.html +++ b/Doc/Doxygen/html/_settings_8h.html @@ -84,7 +84,7 @@ Classes diff --git a/Doc/Doxygen/html/_settings_8h_source.html b/Doc/Doxygen/html/_settings_8h_source.html index e17bc15..37157ff 100644 --- a/Doc/Doxygen/html/_settings_8h_source.html +++ b/Doc/Doxygen/html/_settings_8h_source.html @@ -77,7 +77,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_settings_8txt.html b/Doc/Doxygen/html/_settings_8txt.html index 81c72af..c1475fc 100644 --- a/Doc/Doxygen/html/_settings_8txt.html +++ b/Doc/Doxygen/html/_settings_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_system_8h_source.html b/Doc/Doxygen/html/_system_8h_source.html index 0c488fa..7809790 100644 --- a/Doc/Doxygen/html/_system_8h_source.html +++ b/Doc/Doxygen/html/_system_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * System.h
3  *
4  * Created on: 10.02.2013
5  * Author: skuser
6  */
7 
8 #ifndef SYSTEM_H
9 #define SYSTEM_H
10 
11 #include <avr/io.h>
12 #include <avr/pgmspace.h>
13 #include <avr/interrupt.h>
14 #include <stddef.h>
15 #include <stdbool.h>
16 #include "Common.h"
17 
18 #define F_RTC 1000
19 #define SYSTEM_MILLISECONDS_TO_RTC_CYCLES(x) \
20  ( (uint16_t) ( (double) F_RTC * x / 1E3 + 0.5) )
21 
22 #define SYSTEM_TICK_WIDTH 7 /* Bits */
23 #define SYSTEM_TICK_PERIOD (1<<7)
24 #define SYSTEM_TICK_MS (SYSTEM_TICK_PERIOD)
25 #define SYSTEM_TICK_FREQ (1000 / SYSTEM_TICK_PERIOD)
26 
27 #define SYSTEM_SMODE_PSAVE SLEEP_SMODE_PSAVE_gc
28 #define SYSTEM_SMODE_IDLE SLEEP_SMODE_IDLE_gc
29 
30 /* Use GPIORE and GPIORF as global tick register */
31 #define SYSTEM_TICK_REGISTER (*((volatile uint16_t*) &GPIORE))
32 
33 void SystemInit(void);
34 void SystemReset(void);
35 void SystemEnterBootloader(void);
36 void SystemStartUSBClock(void);
37 void SystemStopUSBClock(void);
38 void SystemInterruptInit(void);
39 INLINE bool SystemTick100ms(void);
40 
41 INLINE bool SystemTick100ms(void)
42 {
43  if (RTC.INTFLAGS & RTC_COMPIF_bm) {
44  while(RTC.STATUS & RTC_SYNCBUSY_bm)
45  ;
46 
47  RTC.INTFLAGS = RTC_COMPIF_bm;
48  return true;
49  }
50 
51  return false;
52 }
53 
54 INLINE void SystemTickClearFlag(void)
55 {
56  while(RTC.STATUS & RTC_SYNCBUSY_bm)
57  ;
58 
59  RTC.INTFLAGS = RTC_COMPIF_bm;
60 }
61 
62 INLINE uint16_t SystemGetSysTick(void) {
63  return SYSTEM_TICK_REGISTER | RTC.CNT;
64 }
65 
66 #endif /* SYSTEM_H */
diff --git a/Doc/Doxygen/html/_terminal_8h_source.html b/Doc/Doxygen/html/_terminal_8h_source.html index b73ba63..0197697 100644 --- a/Doc/Doxygen/html/_terminal_8h_source.html +++ b/Doc/Doxygen/html/_terminal_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * CommandLine.h
3  *
4  * Created on: 10.02.2013
5  * Author: skuser
6  */
7 
8 #ifndef TERMINAL_H_
9 #define TERMINAL_H_
10 
11 #include "../Common.h"
12 #include "../LUFA/Drivers/USB/USB.h"
13 #include "XModem.h"
14 #include "CommandLine.h"
15 
16 #define TERMINAL_VBUS_PORT PORTD
17 #define TERMINAL_VBUS_MASK PIN5_bm
18 
19 #define TERMINAL_BUFFER_SIZE 512
20 
21 typedef enum {
22  TERMINAL_UNINITIALIZED,
23  TERMINAL_INITIALIZING,
24  TERMINAL_INITIALIZED,
25  TERMINAL_UNITIALIZING
26 } TerminalStateEnum;
27 
28 extern uint8_t TerminalBuffer[TERMINAL_BUFFER_SIZE];
29 extern USB_ClassInfo_CDC_Device_t TerminalHandle;
30 extern TerminalStateEnum TerminalState;
31 
32 void TerminalInit(void);
33 void TerminalTask(void);
34 void TerminalTick(void);
35 
36 /*void TerminalSendHex(void* Buffer, uint16_t ByteCount);*/
37 INLINE void TerminalSendByte(uint8_t Byte);
38 void TerminalSendBlock(const void* Buffer, uint16_t ByteCount);
39 
40 INLINE void TerminalSendChar(char c);
41 void TerminalSendString(const char* s);
42 void TerminalSendStringP(const char* s);
43 
44 void EVENT_USB_Device_Connect(void);
45 void EVENT_USB_Device_Disconnect(void);
46 void EVENT_USB_Device_ConfigurationChanged(void);
47 void EVENT_USB_Device_ControlRequest(void);
48 
49 INLINE void TerminalSendChar(char c) { CDC_Device_SendByte(&TerminalHandle, c); }
50 INLINE void TerminalSendByte(uint8_t Byte) { CDC_Device_SendByte(&TerminalHandle, Byte); }
51 
52 #endif /* TERMINAL_H_ */
diff --git a/Doc/Doxygen/html/_uploading_downloading_8txt.html b/Doc/Doxygen/html/_uploading_downloading_8txt.html index 2c41d90..b272b6a 100644 --- a/Doc/Doxygen/html/_uploading_downloading_8txt.html +++ b/Doc/Doxygen/html/_uploading_downloading_8txt.html @@ -65,7 +65,7 @@ $(function() { diff --git a/Doc/Doxygen/html/_x_modem_8h_source.html b/Doc/Doxygen/html/_x_modem_8h_source.html index 5581a6f..2a6c588 100644 --- a/Doc/Doxygen/html/_x_modem_8h_source.html +++ b/Doc/Doxygen/html/_x_modem_8h_source.html @@ -69,7 +69,7 @@ $(function() {
1 /*
2  * TerminalXModem.h
3  *
4  * Created on: 22.03.2013
5  * Author: skuser
6  */
7 
8 #ifndef XMODEM_H_
9 #define XMODEM_H_
10 
11 #include "../Common.h"
12 
13 typedef bool (*XModemCallbackType) (void* ByteBuffer, uint32_t BlockAddress, uint16_t ByteCount);
14 
15 void XModemReceive(XModemCallbackType CallbackFunc);
16 void XModemSend(XModemCallbackType CallbackFunc);
17 
18 bool XModemProcessByte(uint8_t Byte);
19 void XModemTick(void);
20 
21 #endif /* TERMINALXMODEM_H_ */
diff --git a/Doc/Doxygen/html/annotated.html b/Doc/Doxygen/html/annotated.html index 41987d1..49eca2c 100644 --- a/Doc/Doxygen/html/annotated.html +++ b/Doc/Doxygen/html/annotated.html @@ -72,7 +72,7 @@ $(function() { diff --git a/Doc/Doxygen/html/arrowdown.png b/Doc/Doxygen/html/arrowdown.png deleted file mode 100644 index 0b63f6d38c4b9ec907b820192ebe9724ed6eca22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq`MKr;B4q1>@Vhihj(F z5=TGEFKK_k5wqa?1D?=ahXjEurkR(76J85s@NhOUGq5u>9t}5-mE%lWepi;Uqf71m z{OS2=-_EA&i>$w5!uw}d@(=FzhI$T(E!{^y{WLCPvfUHg-?n_KaEwzcCzmLr=l*V6 zC-&_#>zx*^v);jxy=5y`_=dB74rP`7XD?ned3^snGwa;g6OSU_JYHVoTgx1KM+Mx1^?q-;~e(vK>ne<2)xN=7sOn7cwv~FnGH9xvX@VfwtS3% zB5wQ>Z?G+OS$!q@2%m^mr`yT^?;Fjw9AOU2uWshOY7y*F@$rm7Z&F@S(dVw}PkZ<8 zo20^d;Cu*UR{+<7Z+jxv_>138F?;of@zV#T4N{wew`}wmUFy`JvG744^GnTH+L4S$ zIyf(_IvsTKf?Ze%3&+Xgj$BKPSIjL>1m`TxZqju)v0V3#%4eP=&P&l5sl5BW3v|Em k$>cEAIRBLX?^wVdmdKI;Vst0IVihlK=n! diff --git a/Doc/Doxygen/html/classes.html b/Doc/Doxygen/html/classes.html index 68f8f14..7fa512f 100644 --- a/Doc/Doxygen/html/classes.html +++ b/Doc/Doxygen/html/classes.html @@ -76,7 +76,7 @@ $(function() { diff --git a/Doc/Doxygen/html/dir_5de29d499bb29a41092979d00d22c134.html b/Doc/Doxygen/html/dir_5de29d499bb29a41092979d00d22c134.html index 51f3226..7d47be0 100644 --- a/Doc/Doxygen/html/dir_5de29d499bb29a41092979d00d22c134.html +++ b/Doc/Doxygen/html/dir_5de29d499bb29a41092979d00d22c134.html @@ -69,7 +69,7 @@ $(function() { diff --git a/Doc/Doxygen/html/dir_74b6a3b63f61c160c0f14b7a283a4c9b.html b/Doc/Doxygen/html/dir_74b6a3b63f61c160c0f14b7a283a4c9b.html index eff8cc6..9e7057a 100644 --- a/Doc/Doxygen/html/dir_74b6a3b63f61c160c0f14b7a283a4c9b.html +++ b/Doc/Doxygen/html/dir_74b6a3b63f61c160c0f14b7a283a4c9b.html @@ -73,7 +73,7 @@ Directories diff --git a/Doc/Doxygen/html/dir_8465ec698d237f801ae9966d4551fcfa.html b/Doc/Doxygen/html/dir_8465ec698d237f801ae9966d4551fcfa.html index 8f2179b..07a5076 100644 --- a/Doc/Doxygen/html/dir_8465ec698d237f801ae9966d4551fcfa.html +++ b/Doc/Doxygen/html/dir_8465ec698d237f801ae9966d4551fcfa.html @@ -89,7 +89,7 @@ Files diff --git a/Doc/Doxygen/html/dir_ddeffaa734f77525428b0dd4068da9cb.html b/Doc/Doxygen/html/dir_ddeffaa734f77525428b0dd4068da9cb.html index 294bded..9c3c6b1 100644 --- a/Doc/Doxygen/html/dir_ddeffaa734f77525428b0dd4068da9cb.html +++ b/Doc/Doxygen/html/dir_ddeffaa734f77525428b0dd4068da9cb.html @@ -69,7 +69,7 @@ $(function() { diff --git a/Doc/Doxygen/html/dir_f5aab302412c0352d69464400cc5ee44.html b/Doc/Doxygen/html/dir_f5aab302412c0352d69464400cc5ee44.html index 4137dfb..26c9e5c 100644 --- a/Doc/Doxygen/html/dir_f5aab302412c0352d69464400cc5ee44.html +++ b/Doc/Doxygen/html/dir_f5aab302412c0352d69464400cc5ee44.html @@ -69,7 +69,7 @@ $(function() { diff --git a/Doc/Doxygen/html/files.html b/Doc/Doxygen/html/files.html index df17c10..55e67fe 100644 --- a/Doc/Doxygen/html/files.html +++ b/Doc/Doxygen/html/files.html @@ -99,7 +99,7 @@ $(function() { diff --git a/Doc/Doxygen/html/functions.html b/Doc/Doxygen/html/functions.html index 74852b0..b095711 100644 --- a/Doc/Doxygen/html/functions.html +++ b/Doc/Doxygen/html/functions.html @@ -117,7 +117,7 @@ $(function() { diff --git a/Doc/Doxygen/html/functions_vars.html b/Doc/Doxygen/html/functions_vars.html index bb3c26e..3143f9d 100644 --- a/Doc/Doxygen/html/functions_vars.html +++ b/Doc/Doxygen/html/functions_vars.html @@ -117,7 +117,7 @@ $(function() { diff --git a/Doc/Doxygen/html/globals.html b/Doc/Doxygen/html/globals.html index 6786d93..e7390b5 100644 --- a/Doc/Doxygen/html/globals.html +++ b/Doc/Doxygen/html/globals.html @@ -193,7 +193,7 @@ $(function() { diff --git a/Doc/Doxygen/html/globals_defs.html b/Doc/Doxygen/html/globals_defs.html index 0d71f96..5a6de24 100644 --- a/Doc/Doxygen/html/globals_defs.html +++ b/Doc/Doxygen/html/globals_defs.html @@ -78,7 +78,7 @@ $(function() { diff --git a/Doc/Doxygen/html/globals_enum.html b/Doc/Doxygen/html/globals_enum.html index 89643a6..31acbf0 100644 --- a/Doc/Doxygen/html/globals_enum.html +++ b/Doc/Doxygen/html/globals_enum.html @@ -66,7 +66,7 @@ $(function() { diff --git a/Doc/Doxygen/html/globals_eval.html b/Doc/Doxygen/html/globals_eval.html index 3f07241..9821a6b 100644 --- a/Doc/Doxygen/html/globals_eval.html +++ b/Doc/Doxygen/html/globals_eval.html @@ -138,7 +138,7 @@ $(function() { diff --git a/Doc/Doxygen/html/globals_func.html b/Doc/Doxygen/html/globals_func.html index a06d29d..df6ba38 100644 --- a/Doc/Doxygen/html/globals_func.html +++ b/Doc/Doxygen/html/globals_func.html @@ -67,7 +67,7 @@ $(function() { diff --git a/Doc/Doxygen/html/globals_vars.html b/Doc/Doxygen/html/globals_vars.html index a4c5e63..1f6f816 100644 --- a/Doc/Doxygen/html/globals_vars.html +++ b/Doc/Doxygen/html/globals_vars.html @@ -78,7 +78,7 @@ $(function() { diff --git a/Doc/Doxygen/html/index.html b/Doc/Doxygen/html/index.html index 868f775..84c4085 100644 --- a/Doc/Doxygen/html/index.html +++ b/Doc/Doxygen/html/index.html @@ -80,7 +80,7 @@ $(function() { diff --git a/Doc/Doxygen/html/menu.js b/Doc/Doxygen/html/menu.js new file mode 100644 index 0000000..97db4c2 --- /dev/null +++ b/Doc/Doxygen/html/menu.js @@ -0,0 +1,26 @@ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} diff --git a/Doc/Doxygen/html/menudata.js b/Doc/Doxygen/html/menudata.js new file mode 100644 index 0000000..5bb4701 --- /dev/null +++ b/Doc/Doxygen/html/menudata.js @@ -0,0 +1,23 @@ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"c",url:"globals.html#index_c"}, +{text:"d",url:"globals.html#index_d"}, +{text:"l",url:"globals.html#index_l"}, +{text:"m",url:"globals.html#index_m"}, +{text:"p",url:"globals.html#index_p"}]}, +{text:"Functions",url:"globals_func.html"}, +{text:"Variables",url:"globals_vars.html"}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Enumerator",url:"globals_eval.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/Doc/Doxygen/html/pages.html b/Doc/Doxygen/html/pages.html index 1a56a99..924e63a 100644 --- a/Doc/Doxygen/html/pages.html +++ b/Doc/Doxygen/html/pages.html @@ -70,7 +70,7 @@ $(function() { diff --git a/Doc/Doxygen/html/struct_configuration_type-members.html b/Doc/Doxygen/html/struct_configuration_type-members.html index 216df6a..e0d0ed6 100644 --- a/Doc/Doxygen/html/struct_configuration_type-members.html +++ b/Doc/Doxygen/html/struct_configuration_type-members.html @@ -81,7 +81,7 @@ $(function() { diff --git a/Doc/Doxygen/html/struct_configuration_type.html b/Doc/Doxygen/html/struct_configuration_type.html index e01e0e8..ab315a9 100644 --- a/Doc/Doxygen/html/struct_configuration_type.html +++ b/Doc/Doxygen/html/struct_configuration_type.html @@ -324,7 +324,7 @@ Public Attributes diff --git a/Doc/Doxygen/html/struct_settings_entry_type-members.html b/Doc/Doxygen/html/struct_settings_entry_type-members.html index f2bcecb..5ffe032 100644 --- a/Doc/Doxygen/html/struct_settings_entry_type-members.html +++ b/Doc/Doxygen/html/struct_settings_entry_type-members.html @@ -73,7 +73,7 @@ $(function() { diff --git a/Doc/Doxygen/html/struct_settings_entry_type.html b/Doc/Doxygen/html/struct_settings_entry_type.html index c0f8025..98fca90 100644 --- a/Doc/Doxygen/html/struct_settings_entry_type.html +++ b/Doc/Doxygen/html/struct_settings_entry_type.html @@ -97,7 +97,7 @@ uint16_t  diff --git a/Doc/Doxygen/html/struct_u_s_b___descriptor___configuration__t-members.html b/Doc/Doxygen/html/struct_u_s_b___descriptor___configuration__t-members.html index 3f8f176..4dabb3c 100644 --- a/Doc/Doxygen/html/struct_u_s_b___descriptor___configuration__t-members.html +++ b/Doc/Doxygen/html/struct_u_s_b___descriptor___configuration__t-members.html @@ -68,7 +68,7 @@ $(function() { diff --git a/Doc/Doxygen/html/struct_u_s_b___descriptor___configuration__t.html b/Doc/Doxygen/html/struct_u_s_b___descriptor___configuration__t.html index 17a0976..fede905 100644 --- a/Doc/Doxygen/html/struct_u_s_b___descriptor___configuration__t.html +++ b/Doc/Doxygen/html/struct_u_s_b___descriptor___configuration__t.html @@ -71,7 +71,7 @@ $(function() {