diff --git a/BMLite_example/Makefile b/BMLite_example/Makefile index 9f17c40..9e5b93e 100644 --- a/BMLite_example/Makefile +++ b/BMLite_example/Makefile @@ -53,8 +53,7 @@ PATH_INC += inc C_INC = $(addprefix -I,$(PATH_INC)) -# Include HCP -include $(HCP_PATH)/hcp.mk +# Include HAL driver include $(RPIHAL_PATH)/raspberry.mk # Object files and search paths diff --git a/BMLite_example/inc/bep_host_if.h b/BMLite_example/inc/bep_host_if.h index b05033d..c71c4d5 100644 --- a/BMLite_example/inc/bep_host_if.h +++ b/BMLite_example/inc/bep_host_if.h @@ -25,7 +25,9 @@ #include #include #include "fpc_bep_types.h" -#include "fpc_com_chain.h" +// #include "fpc_com_chain.h" + +#include "hcp_tiny.h" #define REMOVE_ID_ALL_TEMPLATES 0U @@ -36,7 +38,7 @@ * @param[in] timeout Timeout in ms * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_capture(fpc_com_chain_t *chain, uint16_t timeout); +fpc_bep_result_t bep_capture(HCP_comm_t *chain, uint16_t timeout); /** * @brief Sends HCP commands for enrolling a finger in Bio MCU @@ -44,7 +46,7 @@ fpc_bep_result_t bep_capture(fpc_com_chain_t *chain, uint16_t timeout); * @param[in] chain HCP com chain * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_enroll_finger(fpc_com_chain_t *chain); +fpc_bep_result_t bep_enroll_finger(HCP_comm_t *chain); /** * @brief Sends HCP commands for identifying a finger in Bio MCU @@ -54,7 +56,7 @@ fpc_bep_result_t bep_enroll_finger(fpc_com_chain_t *chain); * @param[out] match True if match * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_identify_finger(fpc_com_chain_t *chain, uint16_t *template_id, bool *match); +fpc_bep_result_t bep_identify_finger(HCP_comm_t *chain, uint32_t timeout, uint16_t *template_id, bool *match); /** @@ -64,7 +66,7 @@ fpc_bep_result_t bep_identify_finger(fpc_com_chain_t *chain, uint16_t *template_ * @param[in] template_id Template id to save * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_save_template(fpc_com_chain_t *chain, uint16_t template_id); +fpc_bep_result_t bep_save_template(HCP_comm_t *chain, uint16_t template_id); /** * @brief Remove template(s) stored @@ -73,7 +75,7 @@ fpc_bep_result_t bep_save_template(fpc_com_chain_t *chain, uint16_t template_id) * @param[in] template_id template id to remove, if =REMOVE_ID_ALL_TEMPLATES removes all templates * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_delete_template(fpc_com_chain_t *chain, uint16_t template_id); +fpc_bep_result_t bep_delete_template(HCP_comm_t *chain, uint16_t template_id); /** * @brief Gets all template ids from Bio MCU @@ -84,7 +86,7 @@ fpc_bep_result_t bep_delete_template(fpc_com_chain_t *chain, uint16_t template_i * @param[in] nof_templates This should be acquired using bio_get_template_count * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_get_template_ids(fpc_com_chain_t *chain, uint16_t *template_ids, +fpc_bep_result_t bep_get_template_ids(HCP_comm_t *chain, uint16_t *template_ids, uint32_t nof_templates); /** @@ -94,7 +96,7 @@ fpc_bep_result_t bep_get_template_ids(fpc_com_chain_t *chain, uint16_t *template * @param[out] template_count * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_get_template_count(fpc_com_chain_t *chain, uint32_t *template_count); +fpc_bep_result_t bep_get_template_count(HCP_comm_t *chain, uint32_t *template_count); /** @@ -103,7 +105,7 @@ fpc_bep_result_t bep_get_template_count(fpc_com_chain_t *chain, uint32_t *templa * @param[in] chain HCP com chain * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_image_extract(fpc_com_chain_t *chain); +fpc_bep_result_t bep_image_extract(HCP_comm_t *chain); /** * @brief Sends HCP commands for getting the image size of a previously capture image in Bio MCU @@ -111,7 +113,7 @@ fpc_bep_result_t bep_image_extract(fpc_com_chain_t *chain); * @param[in] chain HCP com chain * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_image_get_size(fpc_com_chain_t *chain, uint32_t *size); +fpc_bep_result_t bep_image_get_size(HCP_comm_t *chain, uint32_t *size); /** * @brief Sends HCP commands for getting the image data of a previously capture image in Bio MCU @@ -119,7 +121,7 @@ fpc_bep_result_t bep_image_get_size(fpc_com_chain_t *chain, uint32_t *size); * @param[in] chain HCP com chain * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_image_get(fpc_com_chain_t *chain, uint8_t *data, uint32_t size); +fpc_bep_result_t bep_image_get(HCP_comm_t *chain, uint8_t *data, uint32_t size); /** * @brief Sends HCP commands for fetching the version of the Bio MCU FW @@ -129,7 +131,7 @@ fpc_bep_result_t bep_image_get(fpc_com_chain_t *chain, uint8_t *data, uint32_t s * @param[out] len Length of version string buffer * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_version(fpc_com_chain_t *chain, char *version, int len); +fpc_bep_result_t bep_version(HCP_comm_t *chain, char *version, int len); /** * @brief Sends HCP commands for resetting the Bio MCU @@ -137,7 +139,7 @@ fpc_bep_result_t bep_version(fpc_com_chain_t *chain, char *version, int len); * @param[in] chain HCP com chain * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_reset(fpc_com_chain_t *chain); +fpc_bep_result_t bep_reset(HCP_comm_t *chain); /** * @brief Sends HCP commands for calibrating the sensor in the Bio MCU @@ -145,7 +147,7 @@ fpc_bep_result_t bep_reset(fpc_com_chain_t *chain); * @param[in] chain HCP com chain * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_sensor_calibrate(fpc_com_chain_t *chain); +fpc_bep_result_t bep_sensor_calibrate(HCP_comm_t *chain); /** * @brief Sends HCP commands for removing the sensor calibration in the Bio MCU @@ -153,7 +155,7 @@ fpc_bep_result_t bep_sensor_calibrate(fpc_com_chain_t *chain); * @param[in] chain HCP com chain * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_sensor_calibrate_remove(fpc_com_chain_t *chain); +fpc_bep_result_t bep_sensor_calibrate_remove(HCP_comm_t *chain); /** * @brief Sends HCP commands for setting the sensor in sleep and waiting for finger in the Bio MCU @@ -162,7 +164,7 @@ fpc_bep_result_t bep_sensor_calibrate_remove(fpc_com_chain_t *chain); * @param[in] timeout Timeout in ms * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_sensor_wait_for_finger(fpc_com_chain_t *chain, uint16_t timeout); +fpc_bep_result_t bep_sensor_wait_for_finger(HCP_comm_t *chain, uint16_t timeout); /** * @brief Sends HCP commands that returns when finger is not on the sensor in the Bio MCU @@ -171,6 +173,6 @@ fpc_bep_result_t bep_sensor_wait_for_finger(fpc_com_chain_t *chain, uint16_t tim * @param[in] timeout Timeout in ms * @return ::fpc_bep_result_t */ -fpc_bep_result_t bep_sensor_wait_finger_not_present(fpc_com_chain_t *chain, uint16_t timeout); +fpc_bep_result_t bep_sensor_wait_finger_not_present(HCP_comm_t *chain, uint16_t timeout); #endif /* BEP_HOST_IF_H */ diff --git a/BMLite_example/inc/com_app_cleartext.h b/BMLite_example/inc/com_app_cleartext.h deleted file mode 100644 index 0c9a972..0000000 --- a/BMLite_example/inc/com_app_cleartext.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2020 Fingerprint Cards AB - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file com_app_cleartext.h - * @brief TODO - */ - -#ifndef COM_APP_CLEARTEXT_H -#define COM_APP_CLEARTEXT_H - -#include "fpc_com_chain.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * Sends a packet over the physical link in blocking mode. - * - * @param packet Packet to transmit. - * @param chain The transmit chain to use. - * @return ::fpc_com_result_t - */ -fpc_com_result_t com_app_clr_transmit(fpc_com_chain_t *chain); - -/** - * Receives a packet from the physical link. - * - * @param packet Packet to populate. - * @param chain The transmit chain to use. - * @return ::fpc_com_result_t - */ -fpc_com_result_t com_app_clr_receive(fpc_com_chain_t *chain); - -/** - * @brief Returns the overhead of the layer. - * @return Overhead size in bytes. - */ -uint16_t com_app_clr_get_overhead(uint16_t *offset); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* COM_APP_CLEARTEXT_H */ diff --git a/BMLite_example/inc/com_common.h b/BMLite_example/inc/com_common.h deleted file mode 100644 index c8c4d9a..0000000 --- a/BMLite_example/inc/com_common.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2020 Fingerprint Cards AB - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * 04/14/2020: Added SPI interfcae support - */ - - -#ifndef COM_COMMON_H -#define COM_COMMON_H - -/** - * @file com_common.h - * @brief Communication common interface. - */ - -#include -#include - -#include "fpc_bep_types.h" -#include "fpc_hcp_common.h" -#include "fpc_com_chain.h" - -typedef enum { - COM_INTERFACE = 0, - SPI_INTERFACE -} interface_t; - -/** - * @brief Allocates or assigns memory for arguments during HCP packet reassembly. - - * @param[in] cmd HCP command. - * @param[in] arg HCP argument. - * @param[in] size size of allocation. - * @param[out] free_data Should data be freed by caller. - * @param[in] context User defined context pointer. - * - * @return Pointer to allocation or NULL if allocation failed. - */ -void *argument_allocator(fpc_hcp_cmd_t cmd, fpc_hcp_arg_t arg, uint16_t size, bool *free_data, - void *context); - -/** - * @brief Frees memory for arguments during HCP packet destruction. - * - * @param[in] cmd HCP Command. - * @param[in] arg_data Argument data. - * @param[in] context User defined context pointer. - */ -void argument_free(fpc_hcp_cmd_t cmd, fpc_hcp_arg_data_t *arg_data, void *context); - -/** - * @brief Prints packet information to the log. - * - * @param[in] packet Packet to print. - * @param[in] msg Optional message to print. Set NULL if not needed. - */ -void print_packet(fpc_hcp_packet_t *packet, const char *msg); - -/** - * @brief Initialize the chain used during communication with the host. - * - * @param[in, out] chain The chain structure to populate. - * @param[in] buffer The buffer to use during communication. - * @param[in] size An array of two sizes, one for the TX buffer size and one for the RX. - * @param[in] context Application context. - * @param[in] spi_enabled Use SPI instead of COM. - */ -void init_com_chain(fpc_com_chain_t *chain, uint8_t *buffer, uint16_t size[2], void *context, interface_t iface); - -/** - * @brief Convert a COM result from HCP to a BEP result. - * - * @param[in] result COM result to convert. - * @return ::fpc_bep_result_t - */ -fpc_bep_result_t com_to_bep_result(fpc_com_result_t result); - -/** - * @brief Allocate and add data to an argument. - * - * @param[in, out] cmd Command to add argument to. - * @param[in] arg Argument to add. - * @param[in] data Data to copy to allocated memory. - * @param[in] size Size of data. - * @return ::fpc_bep_result_t - */ -fpc_bep_result_t arg_add(fpc_hcp_packet_t *cmd, fpc_hcp_arg_t arg, const void *data, uint16_t size); - -#endif /* COM_COMMON_H */ diff --git a/hcp/inc/fpc_hcp_common.h b/BMLite_example/inc/fpc_hcp_common.h similarity index 100% rename from hcp/inc/fpc_hcp_common.h rename to BMLite_example/inc/fpc_hcp_common.h diff --git a/BMLite_example/inc/hcp_tiny.h b/BMLite_example/inc/hcp_tiny.h new file mode 100644 index 0000000..c1a4b6a --- /dev/null +++ b/BMLite_example/inc/hcp_tiny.h @@ -0,0 +1,39 @@ +#ifndef HCP_H +#define HCP_H + +#include "fpc_bep_types.h" +#include "fpc_hcp_common.h" + +/** MTU for HCP physical layer */ +#define MTU 256 + +/** Communication acknowledge definition */ +#define FPC_BEP_ACK 0x7f01ff7f + + +typedef struct { + /** Send data to BM-Lite */ + fpc_bep_result_t (*write) (uint16_t, const uint8_t *, uint32_t, void *); + /** Receive data from BM-Lite */ + fpc_bep_result_t (*read)(uint16_t, uint8_t *, uint32_t, void *); + /** Receive timeout (msec). Applys ONLY to receiving packet from BM-Lite on physical layer */ + uint32_t phy_rx_timeout; + /** Data buffer for application layer */ + uint8_t *data_buffer; + /** Size of data buffer */ + uint32_t data_size_max; + /** Current size of incoming or outcoming command packet */ + uint32_t data_size; + /** Buffer of MTU size for transport layer */ + uint8_t *txrx_buffer; +} HCP_comm_t; + +fpc_bep_result_t send_command_args2(HCP_comm_t *chain, fpc_hcp_cmd_t command_id, + fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, + fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length); + +fpc_bep_result_t receive_result_args2(HCP_comm_t *chain, + fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, + fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length); + +#endif \ No newline at end of file diff --git a/BMLite_example/inc/platform.h b/BMLite_example/inc/platform.h index bcb1470..ff38a56 100644 --- a/BMLite_example/inc/platform.h +++ b/BMLite_example/inc/platform.h @@ -25,6 +25,14 @@ #include #include +#include "fpc_bep_types.h" + +typedef enum { + COM_INTERFACE = 0, + SPI_INTERFACE +} interface_t; + + /** * @brief Initializes COM Physical layer. * @@ -41,9 +49,9 @@ bool platform_com_init(char *port, int baudrate, int timeout); * @param[in] data Data buffer to send. * @param[in] timeout Timeout in ms. Use 0 for infinity. * - * @return ::fpc_com_result_t + * @return ::fpc_bep_result_t */ -fpc_com_result_t platform_com_send(uint16_t size, const uint8_t *data, uint32_t timeout, +fpc_bep_result_t platform_com_send(uint16_t size, const uint8_t *data, uint32_t timeout, void *session); /** @@ -53,9 +61,9 @@ fpc_com_result_t platform_com_send(uint16_t size, const uint8_t *data, uint32_t * @param[in, out] data Data buffer to fill. * @param[in] timeout Timeout in ms. Use 0 for infinity. * - * @return ::fpc_com_result_t + * @return ::fpc_bep_result_t */ -fpc_com_result_t platform_com_receive(uint16_t size, uint8_t *data, uint32_t timeout, +fpc_bep_result_t platform_com_receive(uint16_t size, uint8_t *data, uint32_t timeout, void *session); /** @@ -72,9 +80,9 @@ bool platform_spi_init(uint32_t speed_hz); * @param[in] data Data buffer to send. * @param[in] timeout Timeout in ms. Use 0 for infinity. * - * @return ::fpc_com_result_t + * @return ::fpc_bep_result_t */ -fpc_com_result_t platform_spi_send(uint16_t size, const uint8_t *data, uint32_t timeout, +fpc_bep_result_t platform_spi_send(uint16_t size, const uint8_t *data, uint32_t timeout, void *session); /** @@ -84,9 +92,9 @@ fpc_com_result_t platform_spi_send(uint16_t size, const uint8_t *data, uint32_t * @param[in, out] data Data buffer to fill. * @param[in] timeout Timeout in ms. Use 0 for infinity. * - * @return ::fpc_com_result_t + * @return ::fpc_bep_result_t */ -fpc_com_result_t platform_spi_receive(uint16_t size, uint8_t *data, uint32_t timeout, +fpc_bep_result_t platform_spi_receive(uint16_t size, uint8_t *data, uint32_t timeout, void *session); /** diff --git a/BMLite_example/src/bep_host_if.c b/BMLite_example/src/bep_host_if.c index 58dc4ae..cddc610 100644 --- a/BMLite_example/src/bep_host_if.c +++ b/BMLite_example/src/bep_host_if.c @@ -23,14 +23,10 @@ #include #include -#include "fpc_bep_types.h" -#include "fpc_hcp_common.h" -#include "fpc_com_result.h" -#include "fpc_hcp.h" #include "platform.h" -#include "com_common.h" - +#include "fpc_hcp_common.h" #include "bep_host_if.h" +#include "hcp_tiny.h" /** Returns the number of elements in an array. */ #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) @@ -49,15 +45,6 @@ static const uint8_t MAX_CAPTURE_ATTEMPTS = 15U; static const uint16_t CAPTURE_TIMEOUT = 3000; -fpc_bep_result_t send_command_args2(fpc_com_chain_t *chain, fpc_hcp_cmd_t command_id, - fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, - fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length); - -fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain, - fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, - fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length); - - #if 0 /** * @brief Helper function for sending HCP commands @@ -72,13 +59,13 @@ fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain, * @param arg_data2_length second data length of argument data * @return ::fpc_bep_result_t */ -static fpc_bep_result_t send_command_args2(fpc_com_chain_t *chain, fpc_hcp_cmd_t command_id, +static fpc_bep_result_t send_command_args2(HCP_comm_t *chain, fpc_hcp_cmd_t command_id, fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length) { fpc_hcp_packet_t command; fpc_bep_result_t bep_result; - fpc_com_result_t com_result; + fpc_bep_result_t com_result; fpc_hcp_arg_data_t args_tx[10] = {{ 0 }}; memset(&command, 0x0, sizeof(command)); @@ -117,12 +104,12 @@ exit: #endif -static fpc_bep_result_t send_command_no_args(fpc_com_chain_t *chain, fpc_hcp_cmd_t command_id) +static fpc_bep_result_t send_command_no_args(HCP_comm_t *chain, fpc_hcp_cmd_t command_id) { return send_command_args2(chain, command_id, ARG_NONE, NULL, 0, ARG_NONE, NULL, 0); } -static fpc_bep_result_t send_command(fpc_com_chain_t *chain, fpc_hcp_cmd_t command_id, +static fpc_bep_result_t send_command(HCP_comm_t *chain, fpc_hcp_cmd_t command_id, fpc_hcp_arg_t arg_key, void *arg_data, uint16_t arg_data_length) { return send_command_args2(chain, command_id, arg_key, arg_data, arg_data_length, @@ -142,7 +129,7 @@ static fpc_bep_result_t send_command(fpc_com_chain_t *chain, fpc_hcp_cmd_t comma * @param arg_data2_length second argument * @return ::fpc_bep_result_t */ -static fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain, +static fpc_bep_result_t receive_result_args2(HCP_comm_t *chain, fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length) { @@ -156,7 +143,7 @@ static fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain, response.num_args = ARRAY_SIZE(args_rx); do { - fpc_com_result_t com_result = fpc_hcp_receive(&response, chain); + fpc_bep_result_t com_result = fpc_hcp_receive(&response, chain); bep_result = com_to_bep_result(com_result); } while (bep_result == FPC_BEP_RESULT_TIMEOUT); @@ -206,19 +193,19 @@ exit: } #endif -static fpc_bep_result_t receive_result_no_args(fpc_com_chain_t *chain) +static fpc_bep_result_t receive_result_no_args(HCP_comm_t *chain) { return receive_result_args2(chain, ARG_NONE, NULL, 0, ARG_NONE, NULL, 0); } -static fpc_bep_result_t receive_result_args1(fpc_com_chain_t *chain, +static fpc_bep_result_t receive_result_args1(HCP_comm_t *chain, fpc_hcp_arg_t arg_key, void *arg_data, uint16_t arg_data_length) { return receive_result_args2(chain, arg_key, arg_data, arg_data_length, ARG_NONE, NULL, 0); } -fpc_bep_result_t bep_capture(fpc_com_chain_t *chain, uint16_t timeout) +fpc_bep_result_t bep_capture(HCP_comm_t *chain, uint16_t timeout) { fpc_bep_result_t bep_result; @@ -234,7 +221,7 @@ fpc_bep_result_t bep_capture(fpc_com_chain_t *chain, uint16_t timeout) return receive_result_no_args(chain); } -fpc_bep_result_t bep_enroll_finger(fpc_com_chain_t *chain) +fpc_bep_result_t bep_enroll_finger(HCP_comm_t *chain) { uint32_t samples_remaining = 0; fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK; @@ -315,13 +302,16 @@ exit: return (!enroll_done) ? FPC_BEP_RESULT_GENERAL_ERROR : bep_result; } -fpc_bep_result_t bep_identify_finger(fpc_com_chain_t *chain, uint16_t *template_id, bool *match) +fpc_bep_result_t bep_identify_finger(HCP_comm_t *chain, uint32_t timeout, uint16_t *template_id, bool *match) { fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK; *match = false; - bep_result = bep_capture(chain, CAPTURE_TIMEOUT); + uint32_t prev_timeout = chain->phy_rx_timeout; + chain->phy_rx_timeout = timeout; + bep_result = bep_capture(chain, timeout); + chain->phy_rx_timeout = prev_timeout; if (bep_result != FPC_BEP_RESULT_OK) { log_error("Capture failed result=%d\n", bep_result); return bep_result; @@ -351,7 +341,7 @@ fpc_bep_result_t bep_identify_finger(fpc_com_chain_t *chain, uint16_t *template_ return bep_result; } -fpc_bep_result_t bep_save_template(fpc_com_chain_t *chain, uint16_t template_id) +fpc_bep_result_t bep_save_template(HCP_comm_t *chain, uint16_t template_id) { fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK; @@ -365,7 +355,7 @@ fpc_bep_result_t bep_save_template(fpc_com_chain_t *chain, uint16_t template_id) return receive_result_no_args(chain); } -fpc_bep_result_t bep_delete_template(fpc_com_chain_t *chain, uint16_t template_id) +fpc_bep_result_t bep_delete_template(HCP_comm_t *chain, uint16_t template_id) { fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK; @@ -384,7 +374,7 @@ fpc_bep_result_t bep_delete_template(fpc_com_chain_t *chain, uint16_t template_i return receive_result_no_args(chain); } -fpc_bep_result_t bep_get_template_count(fpc_com_chain_t *chain, uint32_t *template_count) +fpc_bep_result_t bep_get_template_count(HCP_comm_t *chain, uint32_t *template_count) { fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK; @@ -403,7 +393,7 @@ fpc_bep_result_t bep_get_template_count(fpc_com_chain_t *chain, uint32_t *templa return bep_result; } -fpc_bep_result_t bep_get_template_ids(fpc_com_chain_t *chain, uint16_t *template_ids, +fpc_bep_result_t bep_get_template_ids(HCP_comm_t *chain, uint16_t *template_ids, uint32_t nof_templates) { fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK; @@ -424,7 +414,7 @@ fpc_bep_result_t bep_get_template_ids(fpc_com_chain_t *chain, uint16_t *template return bep_result; } -fpc_bep_result_t bep_image_extract(fpc_com_chain_t *chain) +fpc_bep_result_t bep_image_extract(HCP_comm_t *chain) { fpc_bep_result_t bep_result; @@ -437,7 +427,7 @@ fpc_bep_result_t bep_image_extract(fpc_com_chain_t *chain) return receive_result_no_args(chain); } -fpc_bep_result_t bep_image_get_size(fpc_com_chain_t *chain, uint32_t *size) +fpc_bep_result_t bep_image_get_size(HCP_comm_t *chain, uint32_t *size) { fpc_bep_result_t bep_result; @@ -452,7 +442,7 @@ fpc_bep_result_t bep_image_get_size(fpc_com_chain_t *chain, uint32_t *size) return receive_result_args1(chain, ARG_SIZE, size, sizeof(size)); } -fpc_bep_result_t bep_image_get(fpc_com_chain_t *chain, uint8_t *data, uint32_t size) +fpc_bep_result_t bep_image_get(HCP_comm_t *chain, uint8_t *data, uint32_t size) { fpc_bep_result_t bep_result; @@ -465,7 +455,7 @@ fpc_bep_result_t bep_image_get(fpc_com_chain_t *chain, uint8_t *data, uint32_t s return receive_result_args1(chain, ARG_DATA, data, size); } -fpc_bep_result_t bep_version(fpc_com_chain_t *chain, char *version, int len) +fpc_bep_result_t bep_version(HCP_comm_t *chain, char *version, int len) { fpc_bep_result_t bep_result; @@ -478,7 +468,7 @@ fpc_bep_result_t bep_version(fpc_com_chain_t *chain, char *version, int len) return receive_result_args1(chain, ARG_VERSION, version, len); } -fpc_bep_result_t bep_reset(fpc_com_chain_t *chain) +fpc_bep_result_t bep_reset(HCP_comm_t *chain) { fpc_bep_result_t bep_result; @@ -491,7 +481,7 @@ fpc_bep_result_t bep_reset(fpc_com_chain_t *chain) return receive_result_no_args(chain); } -fpc_bep_result_t bep_sensor_calibrate(fpc_com_chain_t *chain) +fpc_bep_result_t bep_sensor_calibrate(HCP_comm_t *chain) { fpc_bep_result_t bep_result; @@ -504,7 +494,7 @@ fpc_bep_result_t bep_sensor_calibrate(fpc_com_chain_t *chain) return receive_result_no_args(chain); } -fpc_bep_result_t bep_sensor_calibrate_remove(fpc_com_chain_t *chain) +fpc_bep_result_t bep_sensor_calibrate_remove(HCP_comm_t *chain) { fpc_bep_result_t bep_result; @@ -517,7 +507,7 @@ fpc_bep_result_t bep_sensor_calibrate_remove(fpc_com_chain_t *chain) return receive_result_no_args(chain); } -fpc_bep_result_t bep_sensor_wait_for_finger(fpc_com_chain_t *chain, uint16_t timeout) +fpc_bep_result_t bep_sensor_wait_for_finger(HCP_comm_t *chain, uint16_t timeout) { fpc_bep_result_t bep_result; @@ -531,7 +521,7 @@ fpc_bep_result_t bep_sensor_wait_for_finger(fpc_com_chain_t *chain, uint16_t tim return receive_result_no_args(chain); } -fpc_bep_result_t bep_sensor_wait_finger_not_present(fpc_com_chain_t *chain, uint16_t timeout) +fpc_bep_result_t bep_sensor_wait_finger_not_present(HCP_comm_t *chain, uint16_t timeout) { fpc_bep_result_t bep_result; diff --git a/BMLite_example/src/com_app_cleartext.c b/BMLite_example/src/com_app_cleartext.c deleted file mode 100644 index 41a5d6d..0000000 --- a/BMLite_example/src/com_app_cleartext.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2020 Fingerprint Cards AB - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file com_app_cleartext.c - * @brief TODO - */ - -#include -#include - -#include "com_app_cleartext.h" -#include "fpc_hcp.h" - -fpc_com_result_t com_app_clr_transmit(fpc_com_chain_t *chain) -{ - fpc_com_packet_tsp_t tsp_packet = { 0 }; - uint16_t tsp_offset; - uint16_t link_offset; - - /* Get offsets */ - chain->link_overhead_get(&link_offset); - chain->tsp_overhead_get(&tsp_offset); - - /* Create header */ - tsp_packet.data = chain->phy_mtu_buffer[FPC_COM_CHAIN_TX] + link_offset + tsp_offset; - tsp_packet.size = chain->app_packet_size[FPC_COM_CHAIN_TX]; - tsp_packet.seq_len = chain->private_vars.hcp_seq_len; - tsp_packet.seq_nr = chain->private_vars.hcp_seq_nr; - - return chain->tsp_tx(&tsp_packet, chain); -} - -fpc_com_result_t com_app_clr_receive(fpc_com_chain_t *chain) -{ - fpc_com_result_t result; - fpc_com_packet_tsp_t tsp_packet = { 0 }; - - result = chain->tsp_rx(&tsp_packet, chain); - - chain->app_packet_size[FPC_COM_CHAIN_RX] = tsp_packet.size; - - return result; -} - -uint16_t com_app_clr_get_overhead(uint16_t *offset) -{ - if (offset) { - *offset = 0; - } - - return 0; -} diff --git a/BMLite_example/src/com_common.c b/BMLite_example/src/com_common.c deleted file mode 100644 index 7e61a1d..0000000 --- a/BMLite_example/src/com_common.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2020 Fingerprint Cards AB - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * 04/14/2020: Added SPI interfcae support - */ - -/** - * @file com_common.c - * @brief TODO - */ - -#include -#include -#include - -#include "fpc_com_transport.h" -#include "fpc_com_link.h" -#include "fpc_hcp.h" -#include "fpc_crc.h" - -#include "platform.h" -#include "com_app_cleartext.h" -#include "com_common.h" - -#define UNUSED(x) (void)(x) - -__attribute__((weak)) void *argument_allocator(fpc_hcp_cmd_t cmd, fpc_hcp_arg_t arg, uint16_t size, - bool *free_data, void *context) -{ - void *pointer = NULL; - - UNUSED(cmd); - UNUSED(arg); - UNUSED(context); - - /* Default behavior */ - pointer = malloc(size); - - if (free_data != NULL) { - *free_data = true; - } - - return pointer; -} - -__attribute__((weak)) void argument_free(fpc_hcp_cmd_t cmd, fpc_hcp_arg_data_t *arg_data, - void *context) -{ - UNUSED(cmd); - UNUSED(context); - - if (arg_data->free_data) { - free(arg_data->data); - arg_data->data = NULL; - } -} - -__attribute__((weak)) void print_packet(fpc_hcp_packet_t *packet, const char* msg) -{ -#if (FPC_LOG_INCLUDE == 1) - if (!packet) { - fpc_log_app_var(FPC_LOG_LEVEL_INFO, "Invalid argument"); - return; - } - - fpc_log_app_var(FPC_LOG_LEVEL_DEBUG, "%sPacket cmd id=0x%04X", msg != NULL ? msg : "", - packet->id); - - for (int i = 0; i < packet->num_args; ++i) { - if (packet->arguments[i].arg != ARG_NONE) { - fpc_log_app_var(FPC_LOG_LEVEL_DEBUG, "\tArg[%02d]: key=0x%04X, size=%d free=%d", i, - packet->arguments[i].arg, packet->arguments[i].size, - packet->arguments[i].free_data); - } - } -#else - UNUSED(packet); - UNUSED(msg); -#endif -} - -__attribute__((weak)) void init_com_chain(fpc_com_chain_t *chain, uint8_t *buffer, uint16_t size[2], - void *context, interface_t iface) -{ - chain->initialized = true; - - /* CRC */ - chain->crc_calc = fpc_crc; - - /* HCP */ - chain->app_tx = com_app_clr_transmit; - chain->app_rx = com_app_clr_receive; - chain->app_overhead_get = com_app_clr_get_overhead; - chain->argument_allocator = argument_allocator; - chain->argument_free = argument_free; - chain->app_packet_size[FPC_COM_CHAIN_TX] = 0; - chain->app_packet_size[FPC_COM_CHAIN_RX] = 0; - chain->app_mtu_buffer[FPC_COM_CHAIN_TX] = NULL; - chain->app_mtu_buffer[FPC_COM_CHAIN_RX] = NULL; - chain->app_mtu_size[FPC_COM_CHAIN_TX] = 0; - chain->app_mtu_size[FPC_COM_CHAIN_RX] = 0; - - /* Transport */ - chain->tsp_tx = fpc_com_transport_transmit; - chain->tsp_rx = fpc_com_transport_receive; - chain->tsp_overhead_get = fpc_com_transport_get_overhead; - - /* Link */ - chain->link_overhead_get = fpc_com_link_get_overhead; - - /* Phy */ - switch (iface) - { - case SPI_INTERFACE: - chain->phy_tx = platform_spi_send; - chain->phy_rx = platform_spi_receive; - break; - case COM_INTERFACE: - chain->phy_tx = platform_com_send; - chain->phy_rx = platform_com_receive; - break; - default: - break; - } - - chain->phy_mtu_size[FPC_COM_CHAIN_TX] = size[FPC_COM_CHAIN_TX]; - chain->phy_mtu_size[FPC_COM_CHAIN_RX] = size[FPC_COM_CHAIN_RX]; - chain->phy_mtu_buffer[FPC_COM_CHAIN_TX] = buffer; - chain->phy_mtu_buffer[FPC_COM_CHAIN_RX] = buffer + size[FPC_COM_CHAIN_TX]; - chain->phy_timeout_tx = 2000; - chain->phy_timeout_rx = 2000; - - chain->session = NULL; - chain->context = context; -} - -fpc_bep_result_t com_to_bep_result(fpc_com_result_t result) -{ - fpc_bep_result_t bep_result; - switch (result) { - case FPC_COM_RESULT_OK : - bep_result = FPC_BEP_RESULT_OK; - break; - case FPC_COM_RESULT_NO_MEMORY: - bep_result = FPC_BEP_RESULT_NO_MEMORY; - break; - case FPC_COM_RESULT_INVALID_ARGUMENT: - bep_result = FPC_BEP_RESULT_INVALID_ARGUMENT; - break; - case FPC_COM_RESULT_NOT_IMPLEMENTED: - bep_result = FPC_BEP_RESULT_NOT_IMPLEMENTED; - break; - case FPC_COM_RESULT_IO_ERROR: - bep_result = FPC_BEP_RESULT_IO_ERROR; - break; - case FPC_COM_RESULT_TIMEOUT: - bep_result = FPC_BEP_RESULT_TIMEOUT; - break; - default: - bep_result = FPC_BEP_RESULT_GENERAL_ERROR; - break; - } - return bep_result; -} - -fpc_bep_result_t arg_add(fpc_hcp_packet_t *cmd, fpc_hcp_arg_t arg, const void *data, uint16_t size) -{ - fpc_bep_result_t result = FPC_BEP_RESULT_OK; - uint32_t *pointer; - - if (cmd == NULL || data == NULL || size == 0) { - result = FPC_BEP_RESULT_INVALID_ARGUMENT; - goto exit; - } - - pointer = malloc(size); - if (pointer == NULL) { - result = FPC_BEP_RESULT_NO_MEMORY; - goto exit; - } - - memcpy(pointer, data, size); - if (fpc_hcp_arg_add(cmd, arg, size, true, pointer) == false) { - free(pointer); - result = FPC_BEP_RESULT_NO_RESOURCE; - } - -exit: - return result; -} diff --git a/BMLite_example/src/hcp_new.c b/BMLite_example/src/hcp_new.c deleted file mode 100644 index 536b824..0000000 --- a/BMLite_example/src/hcp_new.c +++ /dev/null @@ -1,365 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "bep_host_if.h" -#include "com_common.h" -#include "platform.h" -#include "fpc_crc.h" - -#include "fpc_hcp_common.h" - -#define DEBUG(...) printf(__VA_ARGS__) - -#define MTU 256 -#define DATA_BUFFER_SIZE 102400 - -typedef struct { - fpc_com_result_t (*write) (uint16_t, const uint8_t *, uint32_t, void *); - fpc_com_result_t (*read)(uint16_t, uint8_t *, uint32_t, void *); -} Comm_Funcs; - -static uint32_t fpc_com_ack = FPC_COM_ACK; - -static uint8_t hcp_txrx_buffer[MTU]; -static uint8_t hcp_data_buffer[DATA_BUFFER_SIZE]; -//static uint16_t data_size = 0; - -static Comm_Funcs serial = { - .read = platform_spi_receive, - .write = platform_spi_send -}; - -typedef struct { - uint8_t *data_buffer; - uint8_t *txrx_buffer; - uint16_t data_size; -} _HCP_buffers_t; - -_HCP_buffers_t HCP_buf = { - .data_buffer = hcp_data_buffer, - .txrx_buffer = hcp_txrx_buffer, - .data_size = 0 -}; - -static fpc_com_result_t _rx_application(Comm_Funcs *serial, _HCP_buffers_t * HCP_buf); -static fpc_com_result_t _rx_link(Comm_Funcs *serial, uint8_t **rx_buf, uint16_t *len); -static fpc_com_result_t _tx_application(Comm_Funcs *serial, _HCP_buffers_t * HCP_buf); -static fpc_com_result_t _tx_link(Comm_Funcs *serial); - -fpc_bep_result_t hcp_init_pkt(_HCP_buffers_t * HCP_buf, uint16_t cmd); -fpc_bep_result_t hcp_add_arg(_HCP_buffers_t * HCP_buf, uint16_t arg, uint8_t* data, uint16_t size); -fpc_bep_result_t hcp_get_arg(_HCP_buffers_t * HCP_buf, uint16_t arg_type, uint16_t *size, uint8_t **payload); - -fpc_bep_result_t send_command_args2(fpc_com_chain_t *chain, fpc_hcp_cmd_t command_id, - fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, - fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length); - -fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain, - fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, - fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length); - -typedef struct { - uint16_t cmd; - uint16_t args_nr; - uint8_t args[]; -} _HCP_cmd_t; - -typedef struct { - uint16_t arg; - uint16_t size; - uint8_t pld[]; -} _CMD_arg_t; - -typedef struct { - uint16_t lnk_chn; - uint16_t lnk_size; - uint16_t t_size; - uint16_t t_seq_nr; - uint16_t t_seq_len; - _HCP_cmd_t t_pld; -} _HPC_pkt_t; - -fpc_bep_result_t hcp_init_pkt(_HCP_buffers_t * HCP_buf, uint16_t cmd) -{ - _HCP_cmd_t *out = (_HCP_cmd_t *)HCP_buf->data_buffer; - // _CMD_arg_t *args = (_CMD_arg_t *)&out->args; - out->cmd = cmd; - out->args_nr = 0; - HCP_buf->data_size = 4; - return FPC_COM_RESULT_OK; -} - -fpc_bep_result_t hcp_add_arg(_HCP_buffers_t * HCP_buf, uint16_t arg, uint8_t* data, uint16_t size) -{ - if(HCP_buf->data_size + 4 + size > DATA_BUFFER_SIZE) { - return FPC_BEP_RESULT_NO_MEMORY; - } - - ((_HCP_cmd_t *)HCP_buf->data_buffer)->args_nr++; - _CMD_arg_t *args = args = (_CMD_arg_t *)(&HCP_buf->data_buffer[HCP_buf->data_size]); - args->arg = arg; - args->size = size; - memcpy(&args->pld, data, size); - HCP_buf->data_size += 4 + size; - return FPC_COM_RESULT_OK; -} - -fpc_bep_result_t hcp_get_arg(_HCP_buffers_t * HCP_buf, uint16_t arg_type, uint16_t *size, uint8_t **payload) -{ - uint16_t i = 0; - uint8_t *buffer = HCP_buf->data_buffer; - uint16_t args_nr = ((_HCP_cmd_t *)(buffer))->args_nr; - uint8_t *pdata = (uint8_t *)&((_HCP_cmd_t *)(buffer))->args; - while (i < args_nr && (pdata - buffer) <= HCP_buf->data_size) { - _CMD_arg_t *parg = (_CMD_arg_t *)pdata; - if(parg->arg == arg_type) { - *size = parg->size; - *payload = parg->pld; - return FPC_BEP_RESULT_OK; - } else { - i++; - pdata += 4 + parg->size; - } - } - return FPC_BEP_RESULT_INVALID_ARGUMENT; -} - - -static fpc_com_result_t _rx_application(Comm_Funcs *serial, _HCP_buffers_t * HCP_buf) -{ - fpc_com_result_t status = FPC_COM_RESULT_OK; - fpc_com_result_t com_result = FPC_COM_RESULT_OK; - uint16_t seq_nr = 0; - uint16_t seq_len = 1; - uint16_t len; - uint8_t *p = HCP_buf->data_buffer; - uint8_t *rx_buf; - uint16_t buf_len = 0; - - while(seq_nr < seq_len && !status) { - status = _rx_link(serial, &rx_buf, &len); - - if (!status) { - len -= 4; - seq_nr = *(uint16_t *)(rx_buf + 2); - seq_len = *(uint16_t *)(rx_buf + 4); - if(buf_len + len < DATA_BUFFER_SIZE) { - memcpy(p, rx_buf + 6, len); - p += len; - buf_len += len; - } else { - com_result = FPC_COM_RESULT_NO_MEMORY; - } - if (seq_len > 1) - DEBUG("S: Seqence %d of %d\n", seq_nr, seq_len); - } else { - DEBUG("S: Receiving chunk error %d\n", status); - return status; - } - } - HCP_buf->data_size = buf_len; - return com_result; -} - -static fpc_com_result_t _rx_link(Comm_Funcs *serial, uint8_t **rx_buf, uint16_t *len) -{ - // Get size, msg and CRC - uint16_t result = serial->read(4, HCP_buf.txrx_buffer, 2000, NULL); - _HPC_pkt_t *pkt = (_HPC_pkt_t *)HCP_buf.txrx_buffer; - - *len = 0; - *rx_buf = NULL; - - if (result) { - // DEBUG("Timed out waiting for response.\n"); - return result; - } - - uint16_t size = pkt->lnk_size; - - // Check if size plus header and crc is larger than max package size. - if (MTU < size + 8) { - DEBUG("S: Invalid size %d, larger than MTU %d.\n", size, MTU); - return 1; - } - - serial->read(size + 4, HCP_buf.txrx_buffer + 4, 100, NULL); - // Print received data to log - DEBUG("SRX: Received %d bytes\n", size + 4); - DEBUG("SRX: Received data:"); - - for (int i=0; iwrite(4, (uint8_t *)&fpc_com_ack, 0, NULL); - - return 0; -} - -static fpc_com_result_t _tx_application(Comm_Funcs *serial, _HCP_buffers_t * HCP_buf) -{ - uint16_t seq_nr = 1; - fpc_com_result_t status = FPC_COM_RESULT_OK; - uint16_t data_left = HCP_buf->data_size; - uint8_t *p = HCP_buf->data_buffer; - - _HPC_pkt_t *pkt = (_HPC_pkt_t *)HCP_buf->txrx_buffer; - - // Application MTU size is PHY MTU - (Transport and Link overhead) - uint16_t app_mtu = MTU - 6 - 8; - - // Calculate sequence length - uint16_t seq_len = (data_left / app_mtu) + 1; - - pkt->lnk_chn = 0; - pkt->t_seq_len = seq_len; - - for (seq_nr = 1; seq_nr <= seq_len && !status; seq_nr++) { - pkt->t_seq_nr = seq_nr; - if (data_left < app_mtu) { - pkt->t_size = data_left; - memcpy(HCP_buf->txrx_buffer + 10, p, data_left); - pkt->lnk_size = data_left + 6; - } else { - pkt->t_size = app_mtu; - memcpy(HCP_buf->txrx_buffer + 10, p, app_mtu); - pkt->lnk_size = app_mtu + 6; - p += app_mtu; - } - - status = _tx_link(serial); - } - - return status; -} - -fpc_com_result_t _tx_link(Comm_Funcs *serial) -{ - fpc_com_result_t result; - - _HPC_pkt_t *pkt = (_HPC_pkt_t *)HCP_buf.txrx_buffer; - - uint32_t crc_calc = fpc_crc(0, &pkt->t_size, pkt->lnk_size); - *(uint32_t *)(HCP_buf.txrx_buffer + 4 + pkt->lnk_size) = crc_calc; - uint16_t size = pkt->lnk_size + 8; - - result = serial->write(size, HCP_buf.txrx_buffer, 0, NULL); - if(result) { - DEBUG("S: Sending error\n"); - return result; - } - - // Print sent data to log - DEBUG("STX: Sent %d bytes\n", size); - DEBUG("STX: Sent data: "); - - for (int i=0; i < size; i++) { - DEBUG(" 0x%02X", HCP_buf.txrx_buffer[i]); - } - DEBUG("\n"); - - // Wait for ACK - uint32_t ack; - result = serial->read(4, (uint8_t *)&ack, 100, NULL); - if (result == FPC_COM_RESULT_TIMEOUT) { - DEBUG("S: ASK timeout\n"); - return FPC_COM_RESULT_OK; - } - - if(ack != fpc_com_ack) { - return FPC_COM_RESULT_IO_ERROR; - } - - return FPC_COM_RESULT_OK; -} - -fpc_bep_result_t send_command_args2(fpc_com_chain_t *chain, fpc_hcp_cmd_t command_id, - fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, - fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length) -{ - fpc_bep_result_t bep_result; - fpc_com_result_t com_result; - hcp_init_pkt(&HCP_buf, command_id); - - if(arg_key1 != ARG_NONE) { - bep_result = hcp_add_arg(&HCP_buf, arg_key1, arg_data1, arg_data1_length); - if(bep_result) { - return bep_result; - } - } - - if(arg_key2 != ARG_NONE) { - bep_result = hcp_add_arg(&HCP_buf, arg_key2, arg_data2, arg_data2_length); - if(bep_result) { - return bep_result; - } - } - - com_result = _tx_application(&serial, &HCP_buf); - bep_result = com_to_bep_result(com_result); - - if (bep_result != FPC_BEP_RESULT_OK) { - DEBUG("%s:%u ERROR %d\n", __func__, __LINE__, bep_result); - } - - return bep_result; -} - -fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain, - fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, - fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length) -{ - fpc_bep_result_t bep_result; - fpc_com_result_t com_result; - uint16_t size; - uint8_t *pld; - - - com_result = _rx_application(&serial, &HCP_buf); - if(com_result) { - DEBUG("S: Receive err: %d\n", com_result); - return com_to_bep_result(com_result); - } - - if (arg_key1 != ARG_NONE) { - bep_result = hcp_get_arg(&HCP_buf, arg_key1, &size, &pld); - if(bep_result == FPC_BEP_RESULT_OK) { - memcpy(arg_data1, pld, arg_data1_length); - } else { - DEBUG("Arg1 0x%04X not found\n", arg_key1); - return FPC_BEP_RESULT_INVALID_ARGUMENT; - } - } - - if (arg_key2 != ARG_NONE) { - bep_result = hcp_get_arg(&HCP_buf, arg_key2, &size, &pld); - if(bep_result == FPC_BEP_RESULT_OK) { - memcpy(arg_data2, pld, arg_data2_length); - } else { - DEBUG("Arg2 0x%04X not found\n", arg_key2); - //return FPC_BEP_RESULT_INVALID_ARGUMENT; - } - } - - return FPC_BEP_RESULT_OK; - -} - diff --git a/BMLite_example/src/hcp_tiny.c b/BMLite_example/src/hcp_tiny.c new file mode 100644 index 0000000..17b5d6e --- /dev/null +++ b/BMLite_example/src/hcp_tiny.c @@ -0,0 +1,329 @@ +#include +#include +#include +#include +#include +#include + +#include "bep_host_if.h" +#include "platform.h" +#include "fpc_crc.h" + +#include "fpc_hcp_common.h" +#include "hcp_tiny.h" + +#define DEBUG(...) printf(__VA_ARGS__) + +static uint32_t fpc_com_ack = FPC_BEP_ACK; + +static fpc_bep_result_t _rx_application(HCP_comm_t *hcp_comm); +static fpc_bep_result_t _rx_link(HCP_comm_t *hcp_comm); +static fpc_bep_result_t _tx_application(HCP_comm_t *hcp_comm); +static fpc_bep_result_t _tx_link(HCP_comm_t *hcp_comm); + +static fpc_bep_result_t hcp_init_cmd(HCP_comm_t *hcp_comm, uint16_t cmd); +static fpc_bep_result_t hcp_add_arg(HCP_comm_t *hcp_comm, uint16_t arg, uint8_t *data, uint16_t size); +static fpc_bep_result_t hcp_get_arg(HCP_comm_t *hcp_comm, uint16_t arg_type, uint16_t *size, uint8_t **payload); + +typedef struct { + uint16_t cmd; + uint16_t args_nr; + uint8_t args[]; +} _HCP_cmd_t; + +typedef struct { + uint16_t arg; + uint16_t size; + uint8_t pld[]; +} _CMD_arg_t; + +typedef struct { + uint16_t lnk_chn; + uint16_t lnk_size; + uint16_t t_size; + uint16_t t_seq_nr; + uint16_t t_seq_len; + _HCP_cmd_t t_pld; +} _HPC_pkt_t; + +fpc_bep_result_t hcp_init_cmd(HCP_comm_t *hcp_comm, uint16_t cmd) +{ + _HCP_cmd_t *out = (_HCP_cmd_t *)hcp_comm->data_buffer; + out->cmd = cmd; + out->args_nr = 0; + hcp_comm->data_size = 4; + return FPC_BEP_RESULT_OK; +} + +fpc_bep_result_t hcp_add_arg(HCP_comm_t *hcp_comm, uint16_t arg, uint8_t *data, uint16_t size) +{ + if(hcp_comm->data_size + 4 + size > hcp_comm->data_size_max) { + return FPC_BEP_RESULT_NO_MEMORY; + } + + ((_HCP_cmd_t *)hcp_comm->data_buffer)->args_nr++; + _CMD_arg_t *args = (_CMD_arg_t *)(&hcp_comm->data_buffer[hcp_comm->data_size]); + args->arg = arg; + args->size = size; + if(size) { + memcpy(&args->pld, data, size); + } + hcp_comm->data_size += 4 + size; + return FPC_BEP_RESULT_OK; +} + +fpc_bep_result_t hcp_get_arg(HCP_comm_t *hcp_comm, uint16_t arg_type, uint16_t *size, uint8_t **payload) +{ + uint16_t i = 0; + uint8_t *buffer = hcp_comm->data_buffer; + uint16_t args_nr = ((_HCP_cmd_t *)(buffer))->args_nr; + uint8_t *pdata = (uint8_t *)&((_HCP_cmd_t *)(buffer))->args; + while (i < args_nr && (pdata - buffer) <= hcp_comm->data_size) { + _CMD_arg_t *parg = (_CMD_arg_t *)pdata; + if(parg->arg == arg_type) { + *size = parg->size; + *payload = parg->pld; + return FPC_BEP_RESULT_OK; + } else { + i++; + pdata += 4 + parg->size; + } + } + return FPC_BEP_RESULT_INVALID_ARGUMENT; +} + +static fpc_bep_result_t _rx_application(HCP_comm_t *hcp_comm) +{ + fpc_bep_result_t status = FPC_BEP_RESULT_OK; + fpc_bep_result_t com_result = FPC_BEP_RESULT_OK; + uint16_t seq_nr = 0; + uint16_t seq_len = 1; + uint16_t len; + uint8_t *p = hcp_comm->data_buffer; + _HPC_pkt_t *pkt = (_HPC_pkt_t *)hcp_comm->txrx_buffer; + uint16_t buf_len = 0; + + while(seq_nr < seq_len) { + status = _rx_link(hcp_comm); + + if (!status) { + len = pkt->lnk_size - 4; + seq_nr = pkt->t_seq_nr; + seq_len = pkt->t_seq_len; + if(buf_len + len < hcp_comm->data_size_max) { + memcpy(p, &pkt->t_pld, len); + p += len; + buf_len += len; + } else { + com_result = FPC_BEP_RESULT_NO_MEMORY; + } + if (seq_len > 1) + DEBUG("S: Seqence %d of %d\n", seq_nr, seq_len); + } else { + DEBUG("S: Receiving chunk error %d\n", status); + return status; + } + } + hcp_comm->data_size = buf_len; + return com_result; +} + +static fpc_bep_result_t _rx_link(HCP_comm_t *hcp_comm) +{ + // Get size, msg and CRC + uint16_t result = hcp_comm->read(4, hcp_comm->txrx_buffer, hcp_comm->phy_rx_timeout, NULL); + _HPC_pkt_t *pkt = (_HPC_pkt_t *)hcp_comm->txrx_buffer; + uint16_t size; + + if (result) { + //DEBUG("Timed out waiting for response.\n"); + return result; + } + + size = pkt->lnk_size; + + // Check if size plus header and crc is larger than max package size. + if (MTU < size + 8) { + DEBUG("S: Invalid size %d, larger than MTU %d.\n", size, MTU); + return FPC_BEP_RESULT_IO_ERROR; + } + + hcp_comm->read(size + 4, hcp_comm->txrx_buffer + 4, 100, NULL); +#ifdef DBG + // Print received data to log + DEBUG("SRX: Received %d bytes\n", size + 4); + DEBUG("SRX: Received data:"); + + for (int i=0; itxrx_buffer[i]); + } + DEBUG("\n"); +#endif + uint32_t crc = *(uint32_t *)(hcp_comm->txrx_buffer + 4 + size); + uint32_t crc_calc = fpc_crc(0, hcp_comm->txrx_buffer+4, size); + + if (crc_calc != crc) { + DEBUG("S: CRC mismatch. Calculated %08X, received %08X\n", crc_calc, crc); + return FPC_BEP_RESULT_IO_ERROR; + } + + // Send Ack + hcp_comm->write(4, (uint8_t *)&fpc_com_ack, 0, NULL); + + return 0; +} + +static fpc_bep_result_t _tx_application(HCP_comm_t *hcp_comm) +{ + uint16_t seq_nr = 1; + fpc_bep_result_t status = FPC_BEP_RESULT_OK; + uint16_t data_left = hcp_comm->data_size; + uint8_t *p = hcp_comm->data_buffer; + + _HPC_pkt_t *pkt = (_HPC_pkt_t *)hcp_comm->txrx_buffer; + + // Application MTU size is PHY MTU - (Transport and Link overhead) + uint16_t app_mtu = MTU - 6 - 8; + + // Calculate sequence length + uint16_t seq_len = (data_left / app_mtu) + 1; + + pkt->lnk_chn = 0; + pkt->t_seq_len = seq_len; + + for (seq_nr = 1; seq_nr <= seq_len && !status; seq_nr++) { + pkt->t_seq_nr = seq_nr; + if (data_left < app_mtu) { + pkt->t_size = data_left; + memcpy(hcp_comm->txrx_buffer + 10, p, data_left); + pkt->lnk_size = data_left + 6; + } else { + pkt->t_size = app_mtu; + memcpy(hcp_comm->txrx_buffer + 10, p, app_mtu); + pkt->lnk_size = app_mtu + 6; + p += app_mtu; + } + + status = _tx_link(hcp_comm); + } + + return status; +} + +fpc_bep_result_t _tx_link(HCP_comm_t *hcp_comm) +{ + fpc_bep_result_t result; + + _HPC_pkt_t *pkt = (_HPC_pkt_t *)hcp_comm->txrx_buffer; + + uint32_t crc_calc = fpc_crc(0, &pkt->t_size, pkt->lnk_size); + *(uint32_t *)(hcp_comm->txrx_buffer + 4 + pkt->lnk_size) = crc_calc; + uint16_t size = pkt->lnk_size + 8; + + result = hcp_comm->write(size, hcp_comm->txrx_buffer, 0, NULL); + if(result) { + DEBUG("S: Sending error\n"); + return result; + } + +#ifdef DBG + // Print sent data to log + DEBUG("STX: Sent %d bytes\n", size); + DEBUG("STX: Sent data: "); + + for (int i=0; i < size; i++) { + DEBUG(" 0x%02X", hcp_comm->txrx_buffer[i]); + } + DEBUG("\n"); +#endif + // Wait for ACK + uint32_t ack; + result = hcp_comm->read(4, (uint8_t *)&ack, 100, NULL); + if (result == FPC_BEP_RESULT_TIMEOUT) { + DEBUG("S: ASK timeout\n"); + return FPC_BEP_RESULT_OK; + } + + if(ack != fpc_com_ack) { + return FPC_BEP_RESULT_IO_ERROR; + } + + return FPC_BEP_RESULT_OK; +} + +fpc_bep_result_t send_command_args2(HCP_comm_t *chain, fpc_hcp_cmd_t command_id, + fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, + fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length) +{ + fpc_bep_result_t bep_result; + hcp_init_cmd(chain, command_id); + + if(arg_key1 != ARG_NONE) { + bep_result = hcp_add_arg(chain, arg_key1, arg_data1, arg_data1_length); + if(bep_result) { + return bep_result; + } + } + + if(arg_key2 != ARG_NONE) { + bep_result = hcp_add_arg(chain, arg_key2, arg_data2, arg_data2_length); + if(bep_result) { + return bep_result; + } + } + + bep_result = _tx_application(chain); + + if (bep_result != FPC_BEP_RESULT_OK) { + DEBUG("%s:%u ERROR %d\n", __func__, __LINE__, bep_result); + } + + return bep_result; +} + +fpc_bep_result_t receive_result_args2(HCP_comm_t *chain, + fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, + fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length) +{ + fpc_bep_result_t bep_result; + uint16_t size; + uint8_t *pld; + + + bep_result = _rx_application(chain); + if(bep_result) { + DEBUG("S: Receive err: %d\n", bep_result); + return bep_result; + } + + if (arg_key1 != ARG_NONE) { + bep_result = hcp_get_arg(chain, arg_key1, &size, &pld); + if(bep_result == FPC_BEP_RESULT_OK) { + if(arg_data1 == NULL) { + return FPC_BEP_RESULT_NO_MEMORY; + } + memcpy(arg_data1, pld, arg_data1_length); + } else { + DEBUG("Arg1 0x%04X not found\n", arg_key1); + return FPC_BEP_RESULT_INVALID_ARGUMENT; + } + } + + if (arg_key2 != ARG_NONE) { + bep_result = hcp_get_arg(chain, arg_key2, &size, &pld); + if(bep_result == FPC_BEP_RESULT_OK) { + if(arg_data2 == NULL) { + return FPC_BEP_RESULT_NO_MEMORY; + } + memcpy(arg_data2, pld, arg_data2_length); + } else { + DEBUG("Arg2 0x%04X not found\n", arg_key2); + //return FPC_BEP_RESULT_INVALID_ARGUMENT; + } + } + + return FPC_BEP_RESULT_OK; + +} + + diff --git a/BMLite_example/src/main.c b/BMLite_example/src/main.c index 8eab909..9f35901 100644 --- a/BMLite_example/src/main.c +++ b/BMLite_example/src/main.c @@ -32,9 +32,23 @@ #include #include "bep_host_if.h" -#include "com_common.h" #include "platform.h" +#define DATA_BUFFER_SIZE 102400 +static uint8_t hcp_txrx_buffer[MTU]; +static uint8_t hcp_data_buffer[DATA_BUFFER_SIZE]; + +static HCP_comm_t hcp_chain = { + .read = platform_spi_receive, + .write = platform_spi_send, + .data_buffer = hcp_data_buffer, + .txrx_buffer = hcp_txrx_buffer, + .data_size = 0, + .data_size_max = sizeof(hcp_data_buffer), + .phy_rx_timeout = 2000, +}; + + static void help(void) { fprintf(stderr, "BEP Host Communication Application\n"); @@ -48,9 +62,9 @@ int main (int argc, char **argv) int timeout = 5; int index; int c; - uint8_t buffer[512]; - uint16_t size[2] = { 256, 256 }; - fpc_com_chain_t hcp_chain; + // uint8_t buffer[512]; + // uint16_t size[2] = { 256, 256 }; + //fpc_com_chain_t hcp_chain; interface_t iface = COM_INTERFACE; opterr = 0; @@ -116,8 +130,15 @@ int main (int argc, char **argv) exit(1); } - init_com_chain(&hcp_chain, buffer, size, NULL, iface); - hcp_chain.channel = 1; + // init_com_chain(&hcp_chain, buffer, size, NULL, iface); + // hcp_chain.channel = 1; + if (iface == COM_INTERFACE) { + hcp_chain.read = platform_com_receive; + hcp_chain.write = platform_com_send; + } else { + hcp_chain.read = platform_spi_receive; + hcp_chain.write = platform_spi_send; + } while(1) { char cmd[100]; @@ -150,7 +171,7 @@ int main (int argc, char **argv) res = bep_enroll_finger(&hcp_chain); break; case 'b': - res = bep_identify_finger(&hcp_chain, &template_id, &match); + res = bep_identify_finger(&hcp_chain, 0, &template_id, &match); if (res == FPC_BEP_RESULT_OK) { if (match) { printf("Match with template id: %d\n", template_id); @@ -174,11 +195,15 @@ int main (int argc, char **argv) template_id = atoi(cmd); res = bep_delete_template(&hcp_chain, template_id); break; - case 'f': + case 'f': { printf("Timeout (ms): "); fgets(cmd, sizeof(cmd), stdin); + uint32_t prev_timeout = hcp_chain.phy_rx_timeout; + hcp_chain.phy_rx_timeout = atoi(cmd); res = bep_capture(&hcp_chain, atoi(cmd)); + hcp_chain.phy_rx_timeout = prev_timeout; break; + } case 'g': { uint32_t size; res = bep_image_get_size(&hcp_chain, &size); diff --git a/BMLite_example/src/platform_com.c b/BMLite_example/src/platform_com.c index 75ad568..51618b9 100644 --- a/BMLite_example/src/platform_com.c +++ b/BMLite_example/src/platform_com.c @@ -29,7 +29,6 @@ #include #include -#include "fpc_com_result.h" #include "platform.h" static int fd = -1; @@ -85,30 +84,30 @@ bool platform_com_init(char *port, int baudrate, int timeout) return true; } -fpc_com_result_t platform_com_send(uint16_t size, const uint8_t *data, uint32_t timeout, +fpc_bep_result_t platform_com_send(uint16_t size, const uint8_t *data, uint32_t timeout, void *session) { - fpc_com_result_t res = FPC_COM_RESULT_OK; + fpc_bep_result_t res = FPC_BEP_RESULT_OK; int n; if (fd < 0) { fprintf(stderr, "error invalid file descriptor"); - return FPC_COM_RESULT_INVALID_ARGUMENT; + return FPC_BEP_RESULT_INVALID_ARGUMENT; } n = write(fd, data, size); if (n != size) { - res = FPC_COM_RESULT_IO_ERROR; + res = FPC_BEP_RESULT_IO_ERROR; } return res; } -fpc_com_result_t platform_com_receive(uint16_t size, uint8_t *data, uint32_t timeout, +fpc_bep_result_t platform_com_receive(uint16_t size, uint8_t *data, uint32_t timeout, void *session) { - fpc_com_result_t res = FPC_COM_RESULT_OK; + fpc_bep_result_t res = FPC_BEP_RESULT_OK; int n_read = 0; int n = 0; fd_set rfds; @@ -117,7 +116,7 @@ fpc_com_result_t platform_com_receive(uint16_t size, uint8_t *data, uint32_t tim if (fd < 0) { fprintf(stderr, "error invalid file descriptor"); - return FPC_COM_RESULT_INVALID_ARGUMENT; + return FPC_BEP_RESULT_INVALID_ARGUMENT; } FD_ZERO(&rfds); diff --git a/BMLite_example/src/platform_linux.c b/BMLite_example/src/platform_linux.c index 4867d03..085bf2d 100644 --- a/BMLite_example/src/platform_linux.c +++ b/BMLite_example/src/platform_linux.c @@ -29,7 +29,6 @@ #include #include -#include "fpc_com_result.h" #include "platform.h" uint64_t platform_get_time(void) diff --git a/BMLite_example/src/platform_spi.c b/BMLite_example/src/platform_spi.c index a1a7170..8e6897d 100644 --- a/BMLite_example/src/platform_spi.c +++ b/BMLite_example/src/platform_spi.c @@ -31,7 +31,6 @@ #include #include -#include "fpc_com_result.h" #include "platform.h" #include @@ -144,7 +143,7 @@ bool platform_spi_init(uint32_t speed_hz) return true; } -static fpc_com_result_t platform_spi_write_read(const uint8_t *write, uint8_t *read, size_t size, +static fpc_bep_result_t platform_spi_write_read(const uint8_t *write, uint8_t *read, size_t size, bool leave_cs_asserted) { /* @@ -174,13 +173,13 @@ static fpc_com_result_t platform_spi_write_read(const uint8_t *write, uint8_t *r * from the the number of bytes written an error has occured. */ if (status == size) { - return FPC_COM_RESULT_OK; + return FPC_BEP_RESULT_OK; } - return FPC_COM_RESULT_IO_ERROR; + return FPC_BEP_RESULT_IO_ERROR; } -fpc_com_result_t platform_spi_send(uint16_t size, const uint8_t *data, uint32_t timeout, +fpc_bep_result_t platform_spi_send(uint16_t size, const uint8_t *data, uint32_t timeout, void *session) { uint8_t buff[size]; @@ -188,17 +187,18 @@ fpc_com_result_t platform_spi_send(uint16_t size, const uint8_t *data, uint32_t return platform_spi_write_read(data, buff, size, false); } -fpc_com_result_t platform_spi_receive(uint16_t size, uint8_t *data, uint32_t timeout, +fpc_bep_result_t platform_spi_receive(uint16_t size, uint8_t *data, uint32_t timeout, void *session) { volatile uint64_t start_time = platform_get_time(); volatile uint64_t curr_time = start_time; + // Wait for BM_Lite Ready for timeout or indefinitily if timeout is 0 while (!fpc_sensor_spi_read_irq() && - (curr_time = platform_get_time()) - start_time < timeout) { + (!timeout || (curr_time = platform_get_time()) - start_time < timeout)) { //usleep(1); } - if(curr_time - start_time >= timeout) { - return FPC_COM_RESULT_TIMEOUT; + if(timeout && curr_time - start_time >= timeout) { + return FPC_BEP_RESULT_TIMEOUT; } uint8_t buff[size]; diff --git a/hcp/LICENSE.txt b/hcp/LICENSE.txt deleted file mode 100644 index 298f0e2..0000000 --- a/hcp/LICENSE.txt +++ /dev/null @@ -1,174 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. diff --git a/hcp/doc/img/hcp.eps b/hcp/doc/img/hcp.eps deleted file mode 100644 index 0b2a2ca..0000000 --- a/hcp/doc/img/hcp.eps +++ /dev/null @@ -1,1733 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.15.10 (http://cairographics.org) -%%CreationDate: Tue Apr 03 17:58:42 2018 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%BoundingBox: 0 0 483 193 -%%EndComments -%%BeginProlog -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -/cairo_data_source { - CairoDataIndex CairoData length lt - { CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def } - { () } ifelse -} def -/cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def -/cairo_image { image cairo_flush_ascii85_file } def -/cairo_imagemask { imagemask cairo_flush_ascii85_file } def -%%EndProlog -%%BeginSetup -%%BeginResource: font Calibri-Light -11 dict begin -/FontType 42 def -/FontName /Calibri-Light def -/PaintType 0 def -/FontMatrix [ 1 0 0 1 0 0 ] def -/FontBBox [ 0 0 0 0 ] def -/Encoding 256 array def -0 1 255 { Encoding exch /.notdef put } for -Encoding 32 /space put -Encoding 40 /parenleft put -Encoding 41 /parenright put -Encoding 45 /hyphen put -Encoding 48 /zero put -Encoding 49 /one put -Encoding 50 /two put -Encoding 51 /three put -Encoding 53 /five put -Encoding 54 /six put -Encoding 65 /A put -Encoding 66 /B put -Encoding 67 /C put -Encoding 68 /D put -Encoding 75 /K put -Encoding 76 /L put -Encoding 78 /N put -Encoding 80 /P put -Encoding 83 /S put -Encoding 84 /T put -Encoding 97 /a put -Encoding 98 /b put -Encoding 100 /d put -Encoding 101 /e put -Encoding 102 /f put -Encoding 103 /g put -Encoding 105 /i put -Encoding 108 /l put -Encoding 109 /m put -Encoding 110 /n put -Encoding 111 /o put -Encoding 114 /r put -Encoding 115 /s put -Encoding 116 /t put -Encoding 117 /u put -Encoding 121 /y put -Encoding 122 /z put -/CharStrings 38 dict dup begin -/.notdef 0 def -/A 1 def -/r 2 def -/g 3 def -/u 4 def -/m 5 def -/e 6 def -/n 7 def -/t 8 def -/space 9 def -/one 10 def -/two 11 def -/B 12 def -/y 13 def -/s 14 def -/S 15 def -/i 16 def -/z 17 def -/D 18 def -/a 19 def -/K 20 def -/N 21 def -/C 22 def -/o 23 def -/d 24 def -/b 25 def -/f 26 def -/P 27 def -/l 28 def -/zero 29 def -/hyphen 30 def -/six 31 def -/five 32 def -/parenleft 33 def -/three 34 def -/T 35 def -/L 36 def -/parenright 37 def -end readonly def -/sfnts [ -<000100000009008000030010637674203ff35086000020dc000002986670676d70f5847d0000 -2374000006c3676c7966a5aab16a0000009c00002040686561640508a57500002a3800000036 -686865610e2803fd00002a7000000024686d74788f1e11d500002a940000009c6c6f63610002 -b3ec00002b30000000a06d617870037f063d00002bd00000002070726570e082493100002bf0 -0000040a0004002e000003cd050e000300070039004d004a40242d07023ab2440ead17441744 -17020120ae080401021f08010323350603511911493f0401002fdddedddecd3fdddecd111239 -39012fdddddeed111239392f2f10ed10ed10ddce3031011121110111211101140e0207071406 -23222e02352734363333323e0235342623220e0223222e02353436373e0333321e0203140e02 -23222e0235343e0233321e0203cdfc610353fcf60281244158340516150a0e0a05041a151431 -4128115862273f302007030705030508072837432145664322e0060e171112180f06060f1812 -11170e06050efaf2050efb380482fb7e03163c5e402301aa080702040504c817151b2e402450 -5c11151103090f0c0c13080713120d26425afd7c12180f06060f181212180f06060f18000000 -00020028fffa045a05140022002600a5b326230123b8fff0400b0c10480523010876220122b8 -fff8404c0c0f48781801260b0a230a2223230c25240d240dc31616371577150215240ac30101 -380278020202181f245f24022424232625b90c0b0c22181d230a0d1601040c230c230c121d52 -12550555003f3f3f1239392f2f11173911123939113310ed32113301192f5d3318c45d3210ed -10cd5d3210ed107d87c4c4013311331087c4c43031015d2b5d5e5d2b5d25160e0223222e0227 -0321030e0323222e0237013e0333321e021707230321045406010d1b1515190e07037cfdc877 -02080e1913151c0d010601c5030c131b11121b130b035401f401ef290f130a0303060a070159 -fea9070a0704040a120f04cf080b060303060b086dfd48000000000100a7fffa029d03c20033 -00254013260fb15f0001001a0aa52b4a260f152049154c003f3f1239393fed012fc45ded3930 -3101140e0223222e0223220e020711140e0223222e023511343e0233321e0215153e0333321e -06029d0205070609182026171b34393f26060d171211170e05050e151111160c0527423c391e -0d22271f0c040301036f0f150d07090a091733543dfd9c060a060404060a060389060a070303 -070a068f3946270e03080b09070b130000030043fe93037c03c2003e004e005f00ba407d2935 -3935020c311c31022b303b30022f200c10480c2b1c2b0208392849280238234823021a232a23 -02171d271d0236194619021519251902150925090212b02d47b1333fb2074fb11b040f300333 -072d33071b1b07332d040000010058b12a25600f300703384aa40c53a41515603803a43c492a -2042a4384a5ba4204f003fed3fed12393fed1112392fedd6ed1217390110de32edc45d17392f -2f2f2f1112173910ed10ed10ed10ed30315d5d5d5d5d5d5d5e5d2b5d5d5d0114062323161615 -140e0223222627060615141617171e0315140e0223222e0235343e0237262635343637262635 -343e023332161721321603342623220e0215141633323e0213342627250e0315141633323e02 -037c120e8f2a21315a7c4b3d6e1f141a493af53e6d52303167a06f6a955f2b10213120333030 -221d2032597c4a27451d010b110fdf71683550341a71663651341a5f6b5afef9242e1b0a9585 -5471461e037f1c162b65384d78532c22191434222634020a021e3b563a3c6e53312541583323 -3e38341b1a4a2a3e5f26265a3f4c79542d09071afeeb6774243e522e6473243d51fd63424603 -091c322f2d174a4c21364600000100a3ffef038103b70032003f40270a111a11022910391002 -0b101b1002080b27b13f0001001fb1132d49270b05194924a40e4d054c003f3fed3f1239393f -012fedd45ded3930315e5d5d5d25140e0223222e023535060623222e023511343e0233321e02 -1511141e023332363711343e0233321e02150381050e161012160c054e954a597a4b21050e17 -1112170d061a34513645894d050e171211170d0614060a060404060a0680574e3c6788600223 -060a070303070a06fde8546a4b29625f0289060a070303070a06000100a7fffa05b103c20050 -00774050474d01264d364d02004d104d0205451545022744374402064416440208473f013626 -4626024612014613b11e1e320ab11f504f5002005001503e27b13210a44b4a24a4414a3e462d -38492d4c194c054c003f3f3f3f1239393fed3fed012fed39d45d5ded11392fed3930315d5d5d -5e5d5d5d5d5d5d25140e0223222e023511342e022322060711140e0223222e023511342e0223 -22060711140e0223222e023511343e0233321e021515363633321e02173e0333321e021505b1 -060d171112170e0517314b333f814d060d171111170e0518314b333f814c060d171211170e05 -050e151111160c054e8c45395944300f2f534b46225575471f14060a060404060a06022d4069 -4b29625ffd77060a060404060a06022d40694b29625ffd77060a060404060a060389060a0703 -03070a0680574e1b31442934472b133c66884c0000020068ffef038903c2002b003400634041 -7631863102782e019729a729029628a628020923192302091f191f020866077607021313212c -b2002b012b3404b221352ca304041c2fa4264a18a40e2209a41c4d003ffdf4ed3fed12392fed -0110deed32dd5ded12392f30315d5e5d5d5d5d5d5d0114062321141e0233323e0233321e0215 -140e0623222e0235343e0233321e021527362623220e020703892612fd97214c7a593f64492f -0a060a06030203060a34546f4069a26e393b6e9b5f66905d2b7b038a8444674726030207241b -54886134161b16060d140f070d0b0a0a1919143f7bb67873b67f43447398540b90a233546f3c -0000000100a7fffa038503c2003200414029033013300208162f262f362f0336124612022a13 -b11e0bb13f0001001e10a42d4a2a192449194c054c003f3f3f12393fed012fd45ded10ed3930 -315d5d5e5d25140e0223222e023511342e022322060711140e0223222e023511343e0233321e -021515363633321e02150385060d171112170d061a345136458a4c060d171211170e05050e15 -1111160c054e964a597a4b2114060a060404060a06021954694b29625ffd77060a060404060a -060389060a070303070a0680574e3c668860000000010027fff1025b04aa003a005540380a10 -0d10482b0a3b0a4b0a030d0a1d0a02232db117000d100d020d0d112929000f111f113f114f11 -0408112da423491d0da4174931a4074d003fed3fedcd3fed012f5e5dc4322f12392f5d33ed32 -30315d5d2b25140e0423222e02351123222635343e02333335343e0233321e02151533321e02 -151406232311141633323e0233321e02025b070f1d262a14435e3c1b870e1004080b0787050e -171112170d06fa070b0804110dfa3b4e18271e1508050805034a151a0f0d09052449704c0233 -19190d130d06de060a070303070a06de060d130d1919fddd676c0a0c0a040b11000100bd0000 -03960516002e002f401a0029c21e1f1801181f0b010b101101111312bd23522910b90654003f -ed323ffdc6012f5dcd5dc45d33fdcd303125140e022321222e0235343e023321110506062626 -35343e0237253e0333321e02151133321e020396060a0c06fd70060b0a0605090c07011ffeee -10140c04020609070136030a0e100b11180e06f6070d0905320e130c05050c130e0c140d0704 -26a70a030a17100d130e0a05c60204030104060a06fb6a070d14000100800000038b051f003e -00544031273101053115310208891999190278190178130116c333253325330039c50b113839 -2020391bba3316062e531039ba0654003fed323f123939ed11392f123939012fedcd39392f2f -10ed30315d5d5d5e5d5d25140e022321222e0235343e0237013e0335342e0223220e0223222e -0235343e0633321e0215140e02070721321e02038b05090e09fd4509100c0602060a08010963 -753e131f3c593a3f644b320c060a070302040717375466375b875a2c1545836dec0250080e0a -05380c150f08060d160f0d14101009011868a4846c3030574127232b23060d140d0c100d0c14 -222319365c79433e7b91b073f7070e14000300bd000003e4050e001e002b00380038401d2633 -c20b1fc31a0b15150b00c32c0b1a27ba31310724ba105134ba0754003fed3fed12392fed3901 -2fdced11392f1239ed10ed32303101140e0423212226351134363321321e0215140e02071e03 -03342e0223231133323e0213342e0223231121323e0203e41b32485b6a46feb1122626120116 -718c5b2d152a3f2b345c4528d61c3d6252cade495a3a1c54294f7456e9011a3e5f492b016a39 -62503e2b161b240490241b2e55794a2e54483a140a37546f021433533b20fe30274257fdcf40 -624222fe071f3d5b00010029fe93035e03b7002400524030691979190201b220090109090e00 -1a1bb1241a0a1a18b22f0e7f0e020e0f1a5f1a02081a1f49190a13490a4b044f004b003f3f3f -3f12393f01192f5e5d18d45ded123910dded123912392f5ded30315d2103060623222e023713 -262627012634363633321e02170133013e0233321616140702077e05202312180d020580080c -02feb7050b1915161a0f0703011b04011605111c1413190c05fead0b0f040b110c0141030e07 -03730e110a0303060a07fcea03160e0903040a110d0000010055ffef02bb03c200490066403e -87489748021a26010b260115020104020141b0242432320c1bb1000001000c4a2ea4370aa511 -603770370250110137113711163ca4411b05294a16a4054d003fed3f123939ed1139392f2f5d -5d10ed10ed0110ded45ded12392f322fed30315d5d5d5d5d01140e0223222e0435343e023332 -1e0233323e0235342e0635343e0233321e0615140e0223222e0223220e0215141e0602bb3059 -7c4b2f54442f160a04060a060b2a3f57392e4c381f28415357534128244b7550224337281507 -030203060906082034482f2f472e17284254575442280105416748260f171a141e190d140e07 -1c211c14283f2a2a3a2b21232a3c543b2f5b482c0b1215100b0c110c0c130e07161a16162836 -202c3c2c2222293a51000001004cffef034c051f00490052402b41c2243224320c1bc3000c4a -231b3c2ebb370aba1120370137113711163cba491641411b05295316ba0556003fed3f123939 -111239ed1139392f2f5d10ed10ed1112390110ded4ed1239392f2fed303101140e0223222e04 -35343e0233321e0233323e0235342e0635343e0233321e0615140e0223222e0223220e021514 -1e06034c3e709a5b3e6e563b160a04070b060e3351714b3d664a2934556c716c553436628952 -29544b3b13050402030609060b2d445e3c3b583a1d34566d716d5634015e56885f3217202117 -1f1711160e05232923213e5b3a3c564135353e53704d4b77532c10191f13090e130e0d150f08 -1d241d20374a293c564235353d536f0000020094fffa0130051f00150021001b400d16b51c15 -b10a1fa9191049054c003f3fdeed012fedd4ed303125140e0223222e023511343e0233321e02 -15131406232226353436333216011e060d171211170e05050e171112170d0612222d2c21222d -2c2114060a060404060a060389060a070303070a0601313022213030222100010064000002ca -03b2002b00444013072601072557250210b11f141f141f0026b109b8ffc040120a004d1f0901 -092c2511a419490f27a4054b003fed323fed320110de5d2bedcd39392f2f10ed30315d5d2514 -0e02232122263535343e02370121222635343e023321321e021515140e02070121321e0202ca -05080c07fde5121904080d0a01aefe5a0e1205080c0701f409100b0703080e0afe5301cc070c -0805340d140d06181c1c0b1214170f02a3191b0d140d06060c140e170a14151910fd5d060d14 -0000000200bd00000474050e0012001f001c400e13c3001ac20918ba0e511bba0554003fed3f -ed012fedd4ed303101140e0223232226351134363321321e0207342e0223231133323e020474 -52a0eba3ff122626120110a5e3994e833977b68dc7c884b77a3d029aa3f9a8561b240490241b -5aa5e79471c18c4ffbcc4188cf00000000020068ffef032103c2003300400061b59738a73802 -31b8fff040350a0d4828133813020a131a1302080f180a0d48091734b10027271f0001003ab2 -11412aa622231da42e35a316162e4a3da40c4d044c003f3fed3f392fed10fdf4ed0110deedc4 -5d392f10ed323930312b5e5d5d2b5d25140606232226263535060623222e0235343e02333335 -342e0223220e0223222e0235343e0433321e02150723220e021514163332363703210d151211 -180d3d934f47714e2a3e72a062901836563e3c60482f0a060a07030619405360305d804f2277 -a5486c4823635a477b45140a0b05050b0a6542482545623d4b6f4a254e3a593c1e1d241d040b -110c151919221d122d547b4eb91a32462d4e5d494c00000100bdfffa03d1051400330032401a -30c4210ac21522c42c2c1509c400152752210a101b5210550555003f3f3f1239393f012fd4ed -12392fed10fd32ed303125140e0223222626270111140e0223222e023511343e0233321e0215 -11013e0333321e02151406070101161603d1040e181312251407fdf5060e171211180e06060e -181112170e0601f5060e12181212160d040b0dfe2901f70e0616070a0704040d090298fd6806 -0a060404060a0604e6060a060404060a06fdb4024c070a0603040709060b140efde5fd89120e -0000000100bdfffa045e0510003d0033401b270f0f14c21e0a2e2e32c2001e38520a2e0f2704 -19225119550655003f3f3f1217393f012fd4ed32113310ed322f33303125140e022323222e02 -27012626272316141511140e0223222e02351134363333321e0217011e03173326343511343e -0233321e0215045e0b1115091914211f1f13fe3822451f0101060e171211180e062612321820 -1a190f015d213b38371b0101060e171210180e073b12180f060a192a2103283b7d3b499949fc -ba060a060404060a0604bb241b0813231bfd953a6b67643354b65402f1060a070303070a0600 -00000001006bfff3040c051b0039002740141c002bc30e3a18bb2126ba135304ba3530bb0956 -003ffdd4ed3ffdd4ed0110deedd4c4303125140e0623222e0235343e0233321e0615140e0223 -222e0223220e0215141e0233323e0233321e02040c0204071340617e4c7ac68b4b5091cb7b3a -6d5c491b07040203070a070e335378535b986d3d386a9c63517956370f06080503b00b120e0c -132b2a1e55a4f09a9efbaf5d16222c1b0c0f130c0e150f08293229498ed08781c88948293229 -050d160000020064ffef03c803c200130027005c404069257925026621762102661b761b0269 -177917028712019711010611861102080d0188080109078907020703010814b2400001001eb2 -0a2819a40f4a23a5054d003fed3fed0110deedd45ded30315e5d5d5d5d5d5d5d5d5d5d5d0114 -0e0223222e0235343e0233321e0207342e0223220e0215141e0233323e0203c8386fa66e6a9f -6b35376fa66f6a9f6a367e1e46765851764b241e46765851764b2401e26cb6864b437db2706c -b6854a427db27a4d8c6b3f3a678c514e8d6a3e3a668c0002006bffef0381056d002600390077 -400c37281416004c76328632022db8fff0b316004d2db8fff8403c15004d762c862c02281015 -16004c671a0109151915020910191002080b1b39b10e342a1804002fb2133a21460b39271b04 -0e2aa4184a34a40e4d054c003f3fed3fed1217393f0110deedd41739ed323930315e5d5d5d2b -5d2b2b5d2b25140e0223222e023535060623222e0235343e023332161711343e0233321e0215 -03262623220e0215141e0233323e02370381050d140f10150d07489a5b628a57283262905f52 -8842050e171112170d06774b8b4c45623e1c183a60482444484d2c14070a060303060a07824e -594c82af6273b9824649470221060a060404060a06fd4e5b60426c88464b8e6f43142e493600 -0000000200a7ffef03bd0572002a003d004f4033793b893b02792e892e020528152802680901 -0503150302080a2136b1152bb200150a363521040530a4264a1b46104c39a4054d003fed3f3f -3fed121739012fd4ed10ed323930315e5d5d5d5d5d01140e0223222e022715140e0223222e02 -3511343e0233321e0215113e0333321e0207342e0223220e020711161633323e0203bd326391 -5e2a47444729060e140f0f150d05050e171112170d062b4e4a4927628b57287d183a60482345 -484d2b4b8b4b45623e1c01e474b9824611263a2975070a060303060a070544060a070303070a -06fdcb2d3d25104c82ae754c8e6e43142e4936fe765b61436c880001002bfffa027c0578003c -003f40273320080c48161010002000300003001bb1300f2a012a3f2501250aa436471a26a430 -49204c1049003f3f3fed323fed012f5dc45d33fdc45d33c430312b01140e0223222e0223220e -02151533321e02151406232311140e0223222e02351123222635343e02333335343e0233321e -04027c030507050816212d1e2a3a240fde070a0804100dde060d181111170e05880e0f04070b -0788224568452240210b0703051f0e110a040a0c0a1b3b5d426b060d130d1919fcc7060a0604 -04060a06033919190d130d06675f8654260d0f0b1015000200bdfffa03a6050e001c00290026 -40132406c2111dc3001125ba06060c23ba15510c55003f3fed12392fed012fd4ed10ed323031 -01140e02232311140e0223222e02351134363321321e0407342e0223231133323e0203a63d72 -a474a8060e171211180e0626120107274a6367482781425f672eb8b055724e29039b5a966c3c -fe11060a060404060a0604bb241b07173f5b75515475390ffdce2b4c6b00000100a7fffa011e -057200150010b600b10a1046054c003f3f012fed303125140e0223222e023511343e0233321e -0215011e060d171211170e05050e171112170d0614060a060404060a060544060a070303070a -0600000000020050ffef03bf051f0013002b0076405569287928026a277a2702482758270265 -23752302651d751d02471d571d026a187a1802b71201871101061101080d01670c770c02b808 -0109070107030108590269020214c34000010020c30a2c1bb90f5325b90556003fed3fed0110 -deedd45ded30315d5e5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d01140e0223222e0235343e023332 -1e0207342e0423220e0215141e0233323e0403bf2e6bad7f75a3652d2e6aad7f75a3662d800f -2031455837637b4518224a74534262462e1a0a028992f4b16355a8f7a291f5b16355a8f7ad63 -a17e5d3d1d5d9ac66a94d78b432a4c687a8800000001004a01c80228022c000f000eb400070b -a404002fed012fcd3031011406232122263534363321321e020228100dfe5d0d11110d01a306 -0b080401fa1d15161c1c16050c130000ffff0077ffef03b3051d02060026000000010068ffef -0387050e003e0072404b973da73db73d03053d01973ca73cb73c038b20018b1a01781a010602 -0137c17028802802283228320e1dc3000e3f0aba13131836ba2c3ab900223022602270220408 -2222052c5118ba0556003fed3f12392f5e5ded10ed11392fed0110ded4ed1239392f2f5ded30 -315d5d5d5d5d5d5d01140e0223222e0635343e0233321e0233323e0235342e02232206232226 -351134363321321e02151406232111363633321e020387447cad683c6c54350e05040203070a -060a2b4a6d4b477a5a332c5a895c3f55241a181f1a0227080e0a051312fe11234b3572a96f37 -019d67a06e391319190d090d130d0c140e071a1f1a234c7553466946220d192401fc1c1f070e -140d1720fe6605023762880000010094feab01dc05880023001a400c1aaf0010af0603b2151f -0b85003f2f012ffdd6edd6ed3031010602151412171616060623222e02272e0335343e02373e -0333321e0201d96560636004010914110c130f0a033653391d203b533301060c15110f130b01 -0567ccfe54d3d5fe56cf090d09040204070564d0d8de7171ded9d2660305050305080d000000 -00010071ffef037e051f00580085405486579657027557017656010756017750875002374c01 -254c01044c144c0298340189189918021703010502010831c34e53264e40264e4e2640030e1b -c3000e593b113b111636ba49532cba202005495316ba0556003fed3f12392fed3910ed113939 -2f2f0110ded4ed1217392f2f2f11123910ed30315e5d5d5d5d5d5d5d5d5d5d5d5d01140e0223 -222e0635343633321e0233323e0235342e022323222e0235343e023333323e0235342e022322 -0e0223222e0235343e0633321e0215140e0207151e03037e376ca26a4070573a0e0705030d0b -0937577346486c4a25305a825180060d0b07060a0d08714671502b1d39573a3d644d310a060a -0703020608123851683b5983562a21405d3c4371532f016d548c6638161e200c0c0f17101e16 -22282226455f383c614626060d140f0d130d062647633d2d503c22242b24040c15110b110e0d -12242218305473433e6b53380a020634526d00010011fffa03cd050e0022001a400c0006c218 -110612ba1d510c55003f3fed32012fc4fdcd303101140e02232111140e0223222e0235112122 -2e0235343e023321321e0203cd04080c07fe7e060e181111180e06fe7e080b080404080b0803 -7e070c080404d60d140d07fb73060a060404060a06048d070d140d0e150e07070e1500000001 -00bd000003460514001a0016400a15c200090f5215ba0654003fed3f012fcded303125140e02 -232122263511343e0233321e02151121321e02034604080c08fdcf1226060e181112170e0601 -ef080c0804380e140f071b2404bb060a060404060a06fb75070d1500000000010087feab01cf -05880021001c400d00b2121505af0f1faf151a0a85003f2f012fedd6ed10d6ed303101140e02 -070e03232226263637361235340227263e0233321e0217161201cf1d395236030a0f130c1214 -0902046162616403010b130f10150d0502667a021871ded8d0640507040204090d09cd01acd5 -d301accc070d080503050503cbfe4d00000000020077ffef03b3051d00340048006940456742 -77420296330115332533353303043301953201992c0136289628020908018b07010503850302 -087702012b3fcf0c1c1c0c35cf000c493ac830300526c8136344c80569003fed3fed12392fed -0110ded4ed12392f10ed3230315d5e5d5d5d5d5d5d5d5d5d5d01140e0223222e0435343e0433 -321e0615140e0223222e0223220e02073e0333321e0207342e0223220e0207141e0233323e02 -03b33068a3734c76593c261114304f76a069254a3f2b0e06040201050a080b25374e3565915e -2e031c45525c336d925825801a3e674c2a554f471c25486b474a6c4621019c4e9a794c27496b -8aa56056ad9d886339090e120b0b0c0f0a0b120c070e120e548eba66102019103a6587583f68 -4a290f1a23148cbf7533395b6f00079e056d03b8fe9300000000050efdda0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000047005e007600a3005200730000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000 -00000576000b03b1000600130000fffaffedfea6ffedfeb8050e000600130000fffaffedfe93 -00000000041d00060011000000000000ff09ffee050e0013041d0006000f0000fffafff1fe93 -0000feb803420006050e0006000bfdc7fffafff50000ff2503090006000dff36fffafff30287 -0006000d0000fffafff1079efeaffea703090006000b0437019bfdda0053003a0041004c0054 -005e0055005f006b007e0041004a00550062007a004a005b006c007500820043004b0056005f -0066006d0076007f009c00a300c000d2004c0055005e006700700077007e00870090009700ab -00c9005d0064006d0074007b008a00a100bd00680071007a0083008c009800ab005d0066006d -007600ad006600700079008000890091009a00ab0048005d006c0075004f007100780064008a -006a007f0090008c007700660000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000055a001500a0fff8ff42fea2fdbc0325030c01cc007b008700800075004800fa -00620514006b052cfff60122fff1050affec047ffff10131fff2000a037c0366404065585554 -535251504f4e4d4c4b4a494847464544434241403f3e3d3c3b3a39383736352f2e2d2c282625 -2423221f181411100f0d0b0a090807060504030201002c4523466020b02660b004262348482d -2c452346236120b02661b004262348482d2c45234660b0206120b04660b004262348482d2c45 -23462361b0206020b02661b02061b004262348482d2c45234660b0406120b06660b004262348 -482d2c4523462361b0406020b02661b04061b004262348482d2c0110203c003c2d2c20452320 -b0cd442320b8015a51582320b08d44235920b0ed51582320b04d44235920b0042651582320b0 -0d44235921212d2c20204518684420b001602045b04676688a4560442d2c01b10b0a43234365 -0a2d2c00b10a0b4323430b2d2c00b0282370b101283e01b0282370b10228453ab10200080d2d -2c2045b00325456164b050515845441b2121592d2c2045b0004360442d2c01b00643b0074365 -0a2d2c2069b04061b0008b20b12cc08a8cb8100062602b0c642364615c58b00361592d2c8a03 -458a8a87b0112bb0292344b0297ae4182d2c4565b02c234445b02b23442d2c4b525845441b21 -21592d2c01b005251023208af500b0016023edec2d2c01b005251023208af500b0016123edec -2d2c01b0062510f500edec2d2c20b001600110203c003c2d2c20b001610110203c003c2d2c00 -b00743b006430b2d2c21210c6423648bb84000622d2c21b08051580c6423648bb82000621bb2 -00402f2b59b002602d2c21b0c051580c6423648bb81555621bb200802f2b59b002602d2c0c64 -23648bb84000626023212d2c4523456023456023456023766818b08062202d2cb00426b00426 -b00425b0042545234520b003266062636820b0032661658a2344442d2c2045b0005458b04044 -2045b04061441b2121592d2c45b1302f4523456160b0016069442d2c4b5158b02f2370b01423 -421b2121592d2c4b515820b0032545695358441b2121591b2121592d2c45b01443b0006063b0 -016069442d2cb02f45442d2c452320458a60442d2c45234560442d2c4b235158b90033ffe0b1 -34201bb3330034005944442d2cb0164358b00326458a586466b01f601b64b020606620581b21 -b04059b001615923586559b02923442310b029e01b2121212121592d2cb0164358b004254564 -b020606620581b21b04059b0016123586559b0292344b00425b00725082058021b0359b00525 -10b004252046b0042523423cb0072510b006252046b00425b0016023423c2058011b0059b005 -2510b00425b029e0b0072510b00625b029e0b00425b00725082058021b0359b00425b0032543 -48b00625b00325b0016043481b2159212121212121212d2cb0164358b004254564b020606620 -581b21b04059b0016123581b6559b0292344b00525b00825082058021b0359b0042510b00525 -2046b0042523423cb00425b0072508b0072510b006252046b00425b0016023423c2058011b00 -59b0042510b00525b029e0b02920456544b0072510b00625b029e0b00525b00825082058021b -0359b00525b003254348b00425b0072508b00625b00325b0016043481b215921212121212121 -2d2c02b00425202046b004252342b0052508b003254548212121212d2c02b0032520b0042508 -b0022543482121212d2c452320451820b00050205823652359236820b040505821b040592358 -65598a60442d2c4b53234b515a5820458a60441b2121592d2c4b545820458a60441b2121592d -2c4b53234b515a58381b2121592d2c4b5458381b2121592d2cb002435458b0462b1b21212121 -592d2cb002435458b0472b1b212121592d2cb002435458b0482b1b21212121592d2cb0024354 -58b0492b1b212121592d2c208a08234b538a4b515a5823381b2121592d2c0020b200400325b0 -062649618b3812342d2c014623466023466123201020468a61b8ff80628ab140408a70456068 -3a2d2c208a2349648a2353583c1b21592d2c4b52587d1b7a592d2cb012004b014b54422d2cb1 -020042b123018851b1400188535a58b910000020885458b202010243604259b12401885158b9 -20000040885458b2020202436042b12401885458b2022002436042004b014b5258b202080243 -6042591bb940000080885458b202040243604259b94000008063b80100885458b20208024360 -4259b94000010063b80200885458b202100243604259b94000020063b80400885458b2024002 -43604259595959592d2c451868234b51582320452064b04050587c59688a6059442d2cb00016 -b00225b0022501b001233e00b002233eb10102060cb00a236542b00b234201b001233f00b002 -233fb10102060cb006236542b0072342b00116012d2c00456823b140408a7045606823456861 -65b200010115132338b1010011362d0000010000000633334303dd2a5f0f3cf5001b08000000 -0000c9dc9d7000000000d5968a5bfbe9fdda0a78079e00000009000200010000000000010000 -0600fe0001c40acdfbe9fb080a78000100000000000000000000000000000027040e002e0482 -002802c200a703c00043042800a3065400a703f40068042800a702a1002701cf0000040e00bd -040e0080044800bd0387002903180055039f004c01c400940326006404db00bd03c400680409 -00bd051b00bd0448006b042c00640428006b042800a70264002b041000bd01c400a7040e0050 -0273004a040e0077040e006802640094040e007103de0011035a00bd02640087040e00770000 -00000000012c0000025000000304000004c800000594000006e4000007dc000008ac0000099c -0000099c00000a5400000b5400000c3000000cfc00000e2000000f3000000fb0000010780000 -10f800001208000012d8000013bc0000147c0000154c000016680000176400001844000018e4 -0000193c00001a3000001a7800001a8800001ba400001c3000001d9800001e1c00001e880000 -1f140000204000010000002704250017010a000800020010002f0066000002ba00dc00080001 -b1092f410e013c003f013c0002013901360038001f013801360038001f01370136b2381fd041 -3e01360001014800380147005501460038014500550144003801430055014200380141005501 -400038013f0055012f0038012e0055012d0038012c00550080014b00010080014a0001014900 -38012e0055004f0147000100f0013f00010000013d0030013d00020000013d0070013d008001 -3d00e0013d0004ffc0013db30e114600410e0134003001340080013400d00134000400000133 -0020013300800133b2030c2f410c01310001000f0131001f0131006f0131007f0131008f0131 -b2050f00b8012e409b0114e2a4ff1fe1b1ff1fdb94711fd9d72e1fdad6691fd8d49d1fd7d62c -1fd5d6371fd0ce1a1fcfce681fcdceae1fccce801f0fce016d1fce010fce013bcac8821fc9c8 -8c1fc7c8361fc6c24e1fc5c2581fc4c25f1fc3c2661fc1c26d1fc0c2801f00c210c220c2036d -20c230c20210c220c20200c210c2023b20c201bfba261fbeba3a1fbdba521fbcba6d1fbbba73 -1fb9ba831fb8ba791f50ba01b8ffc0b3ba7a8246b8ffc0b3ba686e46b8ffc0b3ba555a46b8ff -c0b3ba424646b8ffc040ffba2f3246b5b14b1fb4b15d1fb3b1631fb2b16a1fb0b1771fafb182 -1faeb15b1fa6a4711fa5a47a1fa3a48c1f9f9d1d1f9e9d391f9c9d931f9998551f988c301f8a -01895585032b1f8403471f825b805581ab80557f5b7d557eab7d552f7d012f7d3f7d6f7d9f7d -cf7dff7d06795b775578ab77551f778f779f770377017a557c5b7a557bab7a55707a01885b86 -5587ab86551f868f869f8603860372555076607602760372556e666d55b06d015f6d6f6d7f6d -036d037255745b725573ab725540726072707280720472026f55715b6f5570ab6f556f06011f -6a032b1f6947675568ab67556647645565ab645563476255614760554060015c475a555bab5a -404a5557032b1f5647545555ab54555347515552ab51555106461f4f474e554e03251f4d474b -554cab4b554a47485549ab485548022b1f4747465546012b1f24220a1f2322181f0003010803 -bd0100010000050001019000542b4bb807ff524bb008505bb00188b02553b00188b040515ab0 -0688b000555a5b58b101018e59b21a01024354234b515a58b101018e59858d8d001d424bb01d -5358b203a0a01d42594bb0805358b20340401d42594bb0ff5358b20300001d42595e732b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b732b2b2b2b2b2b2b2b2b2b2b732b2b2b73732b2b732b -732b2b732b2b2b732b2b73742b2b2b2b2b2b2b2b2b012b2b2b002b2b2b012b2b2b2b2b2b2b00 -2b2b2b2b2b742b2b2b2b2b2b2b01755e7374755e732b2b2b2b2b2b002b2b2b015e73745e732b -2b2b2b002b2b012b2b2b002b2b012b005e735e73745e73732b737473732b73732b2b2b2b2b2b -2b732b2b2b74185e000000> -] def -/f-0-0 currentdict end definefont pop -%%EndResource -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 0 483 193 -%%EndPageSetup -q 0 0 483 193 rectclip -1 0 0 -1 0 193 cm q -0 g -0.24 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -0.375 -106.621 m 0.375 -96.152 l 0.375 -85.98 8.625 -77.73 18.801 -77.73 - c 319.27 -77.73 l 329.449 -77.73 337.699 -69.48 337.699 -59.301 c 337.699 - -69.48 345.949 -77.73 356.121 -77.73 c 463.84 -77.73 l 474.02 -77.73 482.262 - -85.98 482.262 -96.152 c 482.262 -106.621 l S Q -0.976471 0.768627 0.6 rg -0.375 106.625 160.629 28.348 re f* -0 g -0.75 w -q 1 0 0 -1 0 0 cm -0.375 -106.625 160.629 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 54.599999 124.575997 Tm -/f-0-0 1 Tf -[(A)31(r)12(g)3(u)-12(m)59(e)-36(n)53(t)-3( )26(1)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -53.918 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -53.918 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 64.749999 181.450996 Tm -/f-0-0 1 Tf -[(2)39( )-39(By)40(t)-3(e)26(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -107.461 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -107.461 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 112.579998 181.450996 Tm -/f-0-0 1 Tf -[(S)-12(i)20(z)-4(e)28( )26(By)-21(t)63(e)-37(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -0.375 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -0.375 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 11.15 181.450996 Tm -/f-0-0 1 Tf -[(2)41( )-39(By)45(t)-3(e)28(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -53.918 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -53.918 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 60.649999 153.000997 Tm -/f-0-0 1 Tf -[(D)10(a)6(ta)-196(S)55(i)-44(z)62(e)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -107.461 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -107.461 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 124.129997 153.000997 Tm -/f-0-0 1 Tf -[(D)10(a)6(ta)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -0.375 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -0.375 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 19.275 153.000997 Tm -/f-0-0 1 Tf -[(K)37(e)-37(y)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -161 106.625 160.629 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -161 -106.625 160.629 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 215.449995 124.575997 Tm -/f-0-0 1 Tf -[(A)29(r)10(gu)-13(m)57(e)-38(n)51(t)-5( )26(2)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -214.551 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -214.551 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 225.629995 181.450996 Tm -/f-0-0 1 Tf -[(2)41( )-39(By)45(t)-3(e)28(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -268.09 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -268.09 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 273.419994 181.450996 Tm -/f-0-0 1 Tf -[(S)-12(i)20(z)-4(e)28( )26(By)-23(t)63(e)-39(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -161 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -161 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 171.999996 181.450996 Tm -/f-0-0 1 Tf -[(2)41( )-39(By)45(t)-3(e)28(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -214.551 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -214.551 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 221.499995 153.000997 Tm -/f-0-0 1 Tf -[(D)7(a)4(t)-5(a)-197(S)53(i)-47(z)60(e)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -268.09 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -268.09 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 284.969994 153.000997 Tm -/f-0-0 1 Tf -[(D)10(a)6(ta)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -161 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -161 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 180.149996 153.000997 Tm -/f-0-0 1 Tf -[(K)39(e)-35(y)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -321.629 106.625 160.633 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -321.629 -106.625 160.633 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 375.599992 124.575997 Tm -/f-0-0 1 Tf -[(A)31(r)12(g)3(u)-12(m)59(e)-36(n)53(t)-3( )26(N)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -375.18 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -375.18 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 386.469991 181.450996 Tm -/f-0-0 1 Tf -[(2)41( )-39(By)45(t)-3(e)28(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -428.719 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -428.719 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 434.29999 181.450996 Tm -/f-0-0 1 Tf -[(S)-12(i)20(z)-4(e)28( )26(By)-21(t)63(e)-37(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -321.629 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -321.629 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 332.849993 181.450996 Tm -/f-0-0 1 Tf -[(2)39( )-39(By)40(t)-3(e)26(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -375.18 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -375.18 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 382.379992 153.000997 Tm -/f-0-0 1 Tf -[(D)10(a)6(ta)-196(S)55(i)-44(z)62(e)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -428.719 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -428.719 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 445.81999 153.000997 Tm -/f-0-0 1 Tf -[(D)7(a)4(ta)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -321.629 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -321.629 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 340.999992 153.000997 Tm -/f-0-0 1 Tf -[(K)39(e)-35(y)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -0.375 106.625 160.629 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -0.375 -106.625 160.629 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 54.599999 124.575997 Tm -/f-0-0 1 Tf -[(A)31(r)12(g)3(u)-12(m)59(e)-36(n)53(t)-3( )26(1)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -53.918 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -53.918 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 64.749999 181.450996 Tm -/f-0-0 1 Tf -[(2)39( )-39(By)40(t)-3(e)26(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -107.461 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -107.461 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 112.579998 181.450996 Tm -/f-0-0 1 Tf -[(S)-12(i)20(z)-4(e)28( )26(By)-21(t)63(e)-37(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -0.375 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -0.375 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 11.15 181.450996 Tm -/f-0-0 1 Tf -[(2)41( )-39(By)45(t)-3(e)28(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -53.918 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -53.918 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 60.649999 153.000997 Tm -/f-0-0 1 Tf -[(D)10(a)6(ta)-196(S)55(i)-44(z)62(e)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -107.461 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -107.461 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 124.129997 153.000997 Tm -/f-0-0 1 Tf -[(D)10(a)6(ta)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -0.375 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -0.375 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 19.275 153.000997 Tm -/f-0-0 1 Tf -[(K)37(e)-37(y)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -161 106.625 160.629 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -161 -106.625 160.629 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 215.449995 124.575997 Tm -/f-0-0 1 Tf -[(A)29(r)10(gu)-13(m)57(e)-38(n)51(t)-5( )26(2)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -214.551 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -214.551 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 225.629995 181.450996 Tm -/f-0-0 1 Tf -[(2)41( )-39(By)45(t)-3(e)28(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -268.09 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -268.09 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 273.419994 181.450996 Tm -/f-0-0 1 Tf -[(S)-12(i)20(z)-4(e)28( )26(By)-23(t)63(e)-39(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -161 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -161 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 171.999996 181.450996 Tm -/f-0-0 1 Tf -[(2)41( )-39(By)45(t)-3(e)28(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -214.551 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -214.551 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 221.499995 153.000997 Tm -/f-0-0 1 Tf -[(D)7(a)4(t)-5(a)-197(S)53(i)-47(z)60(e)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -268.09 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -268.09 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 284.969994 153.000997 Tm -/f-0-0 1 Tf -[(D)10(a)6(ta)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -161 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -161 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 180.149996 153.000997 Tm -/f-0-0 1 Tf -[(K)39(e)-35(y)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -321.629 106.625 160.633 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -321.629 -106.625 160.633 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 375.599992 124.575997 Tm -/f-0-0 1 Tf -[(A)31(r)12(g)3(u)-12(m)59(e)-36(n)53(t)-3( )26(N)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -375.18 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -375.18 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 386.469991 181.450996 Tm -/f-0-0 1 Tf -[(2)41( )-39(By)45(t)-3(e)28(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -428.719 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -428.719 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 434.29999 181.450996 Tm -/f-0-0 1 Tf -[(S)-12(i)20(z)-4(e)28( )26(By)-21(t)63(e)-37(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -321.629 163.316 53.543 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -321.629 -163.316 53.543 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 332.849993 181.450996 Tm -/f-0-0 1 Tf -[(2)39( )-39(By)40(t)-3(e)26(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -375.18 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -375.18 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 382.379992 153.000997 Tm -/f-0-0 1 Tf -[(D)10(a)6(ta)-196(S)55(i)-44(z)62(e)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -428.719 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -428.719 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 445.81999 153.000997 Tm -/f-0-0 1 Tf -[(D)7(a)4(ta)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -321.629 134.973 53.543 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -321.629 -134.973 53.543 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 340.999992 153.000997 Tm -/f-0-0 1 Tf -[(K)39(e)-35(y)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -60.895 28.727 85.039 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -60.895 -28.727 85.039 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 87.519998 46.400999 Tm -/f-0-0 1 Tf -[(2)42( )-38(B)4(y)43(te)27(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -145.93 28.727 85.039 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -145.93 -28.727 85.039 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 174.799996 46.400999 Tm -/f-0-0 1 Tf -(2)Tj -ET - Q -Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 182.879996 46.400999 Tm -/f-0-0 1 Tf -[(B)4(y)43(te)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -60.895 0.375 85.039 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -60.895 -0.375 85.039 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 80.749998 17.981 Tm -/f-0-0 1 Tf -[(Co)59(m)-6(m)-6(a)4(n)54(d)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -145.93 0.375 85.039 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -145.93 -0.375 85.039 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 164.769996 11.351 Tm -/f-0-0 1 Tf -[(N)39(u)-11(m)-6(b)53(e)28(r)-53( )26(o)56(f)]TJ -ET - Q -Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 164.419996 24.600999 Tm -/f-0-0 1 Tf -[(A)31(r)12(g)3(u)-12(m)59(e)-36(n)53(t)-3(s)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -230.969 0.375 212.602 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -230.969 -0.375 212.602 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 320.429993 17.981 Tm -/f-0-0 1 Tf -[(P)42(a)5(y)-25(l)21(o)-9(a)4(d)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -230.969 28.727 212.602 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -230.969 -28.727 212.602 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 271.199994 46.400999 Tm -/f-0-0 1 Tf -(0)Tj -ET - Q -Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 276.769994 46.400999 Tm -/f-0-0 1 Tf -(-)Tj -ET - Q -Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 280.149994 46.400999 Tm -/f-0-0 1 Tf -[(6)42(5)-23(5)42(2)-24(6)42( )27(\()-32(1)42(6)-23(3)42(6)-24(3)42( )27 -(f)-32(o)57(r)12( )-38(T)19(L)21(S)-12(\))34( )27(B)4(y)-23(t)64(e)-36(s) -]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -60.895 28.727 85.039 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -60.895 -28.727 85.039 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 87.519998 46.400999 Tm -/f-0-0 1 Tf -[(2)42( )-38(B)4(y)43(te)27(s)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -145.93 28.727 85.039 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -145.93 -28.727 85.039 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 174.799996 46.400999 Tm -/f-0-0 1 Tf -(2)Tj -ET - Q -Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 182.879996 46.400999 Tm -/f-0-0 1 Tf -[(B)4(y)43(te)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -60.895 0.375 85.039 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -60.895 -0.375 85.039 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 80.749998 17.981 Tm -/f-0-0 1 Tf -[(Co)59(m)-6(m)-6(a)4(n)54(d)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -145.93 0.375 85.039 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -145.93 -0.375 85.039 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 164.769996 11.351 Tm -/f-0-0 1 Tf -[(N)39(u)-11(m)-6(b)53(e)28(r)-53( )26(o)56(f)]TJ -ET - Q -Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 164.419996 24.600999 Tm -/f-0-0 1 Tf -[(A)31(r)12(g)3(u)-12(m)59(e)-36(n)53(t)-3(s)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -230.969 0.375 212.602 28.348 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -230.969 -0.375 212.602 -28.348 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.274999 0 0 -11.274999 320.429993 17.981 Tm -/f-0-0 1 Tf -[(P)42(a)5(y)-25(l)21(o)-9(a)4(d)]TJ -ET - Q -Q -0.984314 0.843137 0.733333 rg -230.969 28.727 212.602 28.344 re f* -0 g -0.75 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -1 0 0 cm -230.969 -28.727 212.602 -28.344 re S Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 271.199994 46.400999 Tm -/f-0-0 1 Tf -(0)Tj -ET - Q -Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 276.769994 46.400999 Tm -/f-0-0 1 Tf -(-)Tj -ET - Q -Q -q -0 0 483 193 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -11.3 0 0 -11.3 280.149994 46.400999 Tm -/f-0-0 1 Tf -[(6)42(5)-23(5)42(2)-24(6)42( )27(\()-32(1)42(6)-23(3)42(6)-24(3)42( )27 -(f)-32(o)57(r)12( )-38(T)19(L)21(S)-12(\))34( )27(B)4(y)-23(t)64(e)-36(s) -]TJ -ET - Q -Q -Q Q -showpage -%%Trailer -end -%%EOF diff --git a/hcp/doc/img/hcp.pdf b/hcp/doc/img/hcp.pdf deleted file mode 100644 index bf60a1f..0000000 Binary files a/hcp/doc/img/hcp.pdf and /dev/null differ diff --git a/hcp/doc/img/hcp.svg b/hcp/doc/img/hcp.svg deleted file mode 100644 index 69877fb..0000000 --- a/hcp/doc/img/hcp.svg +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - - - - - - - - HCP 2.0 - - - - Side brace - - - - - - - - - - - - - - - - - - Ark.1056 - - Ark.1020 - Argument 1 - - - - Argument 1 - - Ark.1028 - 2 Bytes - - - - 2 Bytes - - Ark.1030 - Size Bytes - - - - Size Bytes - - Ark.1031 - 2 Bytes - - - - 2 Bytes - - Ark.1032 - Data Size - - - - Data Size - - Ark.1033 - Data - - - - Data - - Ark.1034 - Key - - - - Key - - Ark.1035 - Argument 2 - - - - Argument 2 - - Ark.1036 - 2 Bytes - - - - 2 Bytes - - Ark.1037 - Size Bytes - - - - Size Bytes - - Ark.1038 - 2 Bytes - - - - 2 Bytes - - Ark.1039 - Data Size - - - - Data Size - - Ark.1040 - Data - - - - Data - - Ark.1041 - Key - - - - Key - - Ark.1042 - Argument N - - - - Argument N - - Ark.1043 - 2 Bytes - - - - 2 Bytes - - Ark.1044 - Size Bytes - - - - Size Bytes - - Ark.1045 - 2 Bytes - - - - 2 Bytes - - Ark.1046 - Data Size - - - - Data Size - - Ark.1047 - Data - - - - Data - - Ark.1048 - Key - - - - Key - - - Ark.1057 - - Ark.1000 - 2 Bytes - - - - 2 Bytes - - Ark.1001 - 2 Byte - - - - 2 Byte - - Ark.1003 - Command - - - - Command - - Ark.1004 - Number of Arguments - - - - Number of Arguments - - Ark.1007 - Payload - - - - Payload - - Ark.1055 - 0-65526 (16363 for TLS) Bytes - - - - 0-65526 (16363 for TLS) Bytes - - - diff --git a/hcp/doc/img/stack.eps b/hcp/doc/img/stack.eps deleted file mode 100644 index 1bb1627..0000000 --- a/hcp/doc/img/stack.eps +++ /dev/null @@ -1,1019 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.15.10 (http://cairographics.org) -%%CreationDate: Tue Apr 03 18:08:31 2018 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%BoundingBox: 0 0 532 118 -%%EndComments -%%BeginProlog -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -/cairo_data_source { - CairoDataIndex CairoData length lt - { CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def } - { () } ifelse -} def -/cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def -/cairo_image { image cairo_flush_ascii85_file } def -/cairo_imagemask { imagemask cairo_flush_ascii85_file } def -%%EndProlog -%%BeginSetup -%%BeginResource: font Calibri-Light -11 dict begin -/FontType 42 def -/FontName /Calibri-Light def -/PaintType 0 def -/FontMatrix [ 1 0 0 1 0 0 ] def -/FontBBox [ 0 0 0 0 ] def -/Encoding 256 array def -0 1 255 { Encoding exch /.notdef put } for -Encoding 32 /space put -Encoding 47 /slash put -Encoding 65 /A put -Encoding 67 /C put -Encoding 68 /D put -Encoding 72 /H put -Encoding 76 /L put -Encoding 78 /N put -Encoding 80 /P put -Encoding 82 /R put -Encoding 83 /S put -Encoding 84 /T put -Encoding 97 /a put -Encoding 99 /c put -Encoding 100 /d put -Encoding 101 /e put -Encoding 104 /h put -Encoding 105 /i put -Encoding 107 /k put -Encoding 108 /l put -Encoding 110 /n put -Encoding 111 /o put -Encoding 112 /p put -Encoding 113 /q put -Encoding 114 /r put -Encoding 115 /s put -Encoding 116 /t put -Encoding 117 /u put -Encoding 120 /x put -Encoding 121 /y put -Encoding 122 /z put -/CharStrings 32 dict dup begin -/.notdef 0 def -/P 1 def -/h 2 def -/y 3 def -/s 4 def -/i 5 def -/c 6 def -/a 7 def -/l 8 def -/space 9 def -/L 10 def -/e 11 def -/r 12 def -/n 13 def -/k 14 def -/T 15 def -/p 16 def -/o 17 def -/t 18 def -/A 19 def -/S 20 def -/q 21 def -/d 22 def -/N 23 def -/z 24 def -/C 25 def -/R 26 def -/H 27 def -/D 28 def -/x 29 def -/slash 30 def -/u 31 def -end readonly def -/sfnts [ -<000100000009008000030010637674203ff3508600001a1c000002986670676d70f5847d0000 -1cb4000006c3676c7966137357b90000009c00001980686561640508a5750000237800000036 -686865610e2803f6000023b000000024686d7478756b0e53000023d4000000806c6f63610001 -a2e400002454000000846d6178700378063d000024d80000002070726570e0824931000024f8 -0000040a0004002e000003cd050e000300070039004d004a40242d07023ab2440ead17441744 -17020120ae080401021f08010323350603511911493f0401002fdddedddecd3fdddecd111239 -39012fdddddeed111239392f2f10ed10ed10ddce3031011121110111211101140e0207071406 -23222e02352734363333323e0235342623220e0223222e02353436373e0333321e0203140e02 -23222e0235343e0233321e0203cdfc610353fcf60281244158340516150a0e0a05041a151431 -4128115862273f302007030705030508072837432145664322e0060e171112180f06060f1812 -11170e06050efaf2050efb380482fb7e03163c5e402301aa080702040504c817151b2e402450 -5c11151103090f0c0c13080713120d26425afd7c12180f06060f181212180f06060f18000000 -000200bdfffa03a6050e001c0029002640132406c2111dc3001125ba06060c23ba15510c5500 -3f3fed12392fed012fd4ed10ed32303101140e02232311140e0223222e02351134363321321e -0407342e0223231133323e0203a63d72a474a8060e171211180e0626120107274a6367482781 -425f672eb8b055724e29039b5a966c3cfe11060a060404060a0604bb241b07173f5b75515475 -390ffdce2b4c6b00000100a7fffa038505720032003d4026262f362f462f03002f102f020847 -2b014612010bb1322a14b11e2a1910a42d4a2446194c054c003f3f3f3fed1239012fed32d4ed -30315d5d5e5d5d25140e0223222e023511342e022322060711140e0223222e023511343e0233 -321e021511363633321e02150385060d171112170d061a345136458a4c060d171211170e0505 -0e171112170d064a944a597a4b2114060a060404060a06021954694b29625ffd77060a060404 -060a060544060a070303070a06fdcb524d3c6688600000010029fe93035e03b7002400524030 -691979190201b220090109090e001a1bb1241a0a1a18b22f0e7f0e020e0f1a5f1a02081a1f49 -190a13490a4b044f004b003f3f3f3f12393f01192f5e5d18d45ded123910dded123912392f5d -ed30315d2103060623222e023713262627012634363633321e02170133013e02333216161407 -02077e05202312180d020580080c02feb7050b1915161a0f0703011b04011605111c1413190c -05fead0b0f040b110c0141030e0703730e110a0303060a07fcea03160e0903040a110d000001 -0055ffef02bb03c200490066403e87489748021a26010b260115020104020141b0242432320c -1bb1000001000c4a2ea4370aa511603770370250110137113711163ca4411b05294a16a4054d -003fed3f123939ed1139392f2f5d5d10ed10ed0110ded45ded12392f322fed30315d5d5d5d5d -01140e0223222e0435343e0233321e0233323e0235342e0635343e0233321e0615140e022322 -2e0223220e0215141e0602bb30597c4b2f54442f160a04060a060b2a3f57392e4c381f284153 -57534128244b7550224337281507030203060906082034482f2f472e17284254575442280105 -416748260f171a141e190d140e071c211c14283f2a2a3a2b21232a3c543b2f5b482c0b121510 -0b0c110c0c130e07161a16162836202c3c2c2222293a510000020094fffa0130051f00150021 -001b400d16b51c15b10a1fa9191049054c003f3fdeed012fedd4ed303125140e0223222e0235 -11343e0233321e0215131406232226353436333216011e060d171211170e05050e171112170d -0612222d2c21222d2c2114060a060404060a060389060a070303070a06013130222130302221 -00010064ffef031f03c2003500654044662a762a862a03662576258625030b101b1002980ba8 -0b020b0b1b0b021c000001080027b20e3603a43119a41f30314031023f1f4f1f02311f311f2c -24a4134a2ca5094d003fed3fed1139392f2f5d5d10ed10ed0110deedc45e5d3230315d5d5d5d -5d25140e0623222e0235343e0233321e0615140623222e0223220615141e0233323e0233321e -02031f0204071a3d4c582f5e9162333f6e93542d52453619090502110a0e29405b3f828d2647 -66403c5c442d0b060906039a0c130e0b1a281e133f7bb37584bc7839111c24190d10130d1d17 -242b24c8bd5f8f5f2f262e26070f150000020068ffef032103c2003300400061b59738a73802 -31b8fff040350a0d4828133813020a131a1302080f180a0d48091734b10027271f0001003ab2 -11412aa622231da42e35a316162e4a3da40c4d044c003f3fed3f392fed10fdf4ed0110deedc4 -5d392f10ed323930312b5e5d5d2b5d25140606232226263535060623222e0235343e02333335 -342e0223220e0223222e0235343e0433321e02150723220e021514163332363703210d151211 -180d3d934f47714e2a3e72a062901836563e3c60482f0a060a07030619405360305d804f2277 -a5486c4823635a477b45140a0b05050b0a6542482545623d4b6f4a254e3a593c1e1d241d040b -110c151919221d122d547b4eb91a32462d4e5d494c00000100a7fffa011e057200150010b600 -b10a1046054c003f3f012fed303125140e0223222e023511343e0233321e0215011e060d1712 -11170e05050e171112170d0614060a060404060a060544060a070303070a06000000000100bd -000003460514001a0016400a15c200090f5215ba0654003fed3f012fcded303125140e022321 -22263511343e0233321e02151121321e02034604080c08fdcf1226060e181112170e0601ef08 -0c0804380e140f071b2404bb060a060404060a06fb75070d1500000000020068ffef038903c2 -002b0034006340417631863102782e019729a729029628a628020923192302091f191f020866 -077607021313212cb2002b012b3404b221352ca304041c2fa4264a18a40e2209a41c4d003ffd -f4ed3fed12392fed0110deed32dd5ded12392f30315d5e5d5d5d5d5d5d0114062321141e0233 -323e0233321e0215140e0623222e0235343e0233321e021527362623220e020703892612fd97 -214c7a593f64492f0a060a06030203060a34546f4069a26e393b6e9b5f66905d2b7b038a8444 -674726030207241b54886134161b16060d140f070d0b0a0a1919143f7bb67873b67f43447398 -540b90a233546f3c0000000100a7fffa029d03c2003300254013260fb15f0001001a0aa52b4a -260f152049154c003f3f1239393fed012fc45ded39303101140e0223222e0223220e02071114 -0e0223222e023511343e0233321e0215153e0333321e06029d0205070609182026171b34393f -26060d171211170e05050e151111160c0527423c391e0d22271f0c040301036f0f150d07090a -091733543dfd9c060a060404060a060389060a070303070a068f3946270e03080b09070b1300 -000100a7fffa038503c2003200414029033013300208162f262f362f0336124612022a13b11e -0bb13f0001001e10a42d4a2a192449194c054c003f3f3f12393fed012fd45ded10ed3930315d -5d5e5d25140e0223222e023511342e022322060711140e0223222e023511343e0233321e0215 -15363633321e02150385060d171112170d061a345136458a4c060d171211170e05050e151111 -160c054e964a597a4b2114060a060404060a06021954694b29625ffd77060a060404060a0603 -89060a070303070a0680574e3c6688600000000100a7fffa0359057200340047402916310131 -e0220cb11623b51a2d012d2d160ab41900010016172201170b01220b0528491c46114c054c00 -3f3f3f3f1239395d5d012fd45ded12392f5ded10fd32e43031005d25140e0223222e02270111 -140e0223222e023511343e0233321e021511013e0333321e0215140607010116160359060e18 -13141a130d06fe58060d171211170e05050e171112170d06017d0811141a11111910080c0ffe -9601920d0a16070a070403060a070202fdfe060a060404060a060544060a070303070a06fcc0 -0181090b0703020609070a130ffeaafe200f1000000000010011fffa03cd050e0022001a400c -0006c218110612ba1d510c55003f3fed32012fc4fdcd303101140e02232111140e0223222e02 -351121222e0235343e023321321e0203cd04080c07fe7e060e181111180e06fe7e080b080404 -080b08037e070c080404d60d140d07fb73060a060404060a06048d070d140d0e150e07070e15 -0000000200a7fe9303bd03c2002a003d0049402e693b793b02583b01692e792e020528010503 -0121360ab1152bb200150a363521040530a4264a1b49104f39a4054d003fed3f3f3fed121739 -012fd4ed10ed323930315d5d5d5d5d01140e0223222e022711140e0223222e023511343e0233 -321e0215153e0333321e0207342e0223220e020711161633323e0203bd3363925e2846434325 -060d171211170e05050d150f0f140e062a4c4c502d628a57277d18395f482445484e2b4b894b -45633e1d01e674ba824711243626fe2d060a070303070a0604f0070a060303060a07832b3f2a -144b82ad754c8d6e42142e4936fe765b61436d89000000020064ffef03c803c200130027005c -404069257925026621762102661b761b0269177917028712019711010611861102080d018808 -0109078907020703010814b2400001001eb20a2819a40f4a23a5054d003fed3fed0110deedd4 -5ded30315e5d5d5d5d5d5d5d5d5d5d5d01140e0223222e0235343e0233321e0207342e022322 -0e0215141e0233323e0203c8386fa66e6a9f6b35376fa66f6a9f6a367e1e46765851764b241e -46765851764b2401e26cb6864b437db2706cb6854a427db27a4d8c6b3f3a678c514e8d6a3e3a -668c00010027fff1025b04aa003a005540380a100d10482b0a3b0a4b0a030d0a1d0a02232db1 -17000d100d020d0d112929000f111f113f114f110408112da423491d0da4174931a4074d003f -ed3fedcd3fed012f5e5dc4322f12392f5d33ed3230315d5d2b25140e0423222e023511232226 -35343e02333335343e0233321e02151533321e02151406232311141633323e0233321e02025b -070f1d262a14435e3c1b870e1004080b0787050e171112170d06fa070b0804110dfa3b4e1827 -1e1508050805034a151a0f0d09052449704c023319190d130d06de060a070303070a06de060d -130d1919fddd676c0a0c0a040b1100020028fffa045a05140022002600a5b326230123b8fff0 -400b0c10480523010876220122b8fff8404c0c0f48781801260b0a230a2223230c25240d240d -c31616371577150215240ac30101380278020202181f245f24022424232625b90c0b0c22181d -230a0d1601040c230c230c121d5212550555003f3f3f1239392f2f11173911123939113310ed -32113301192f5d3318c45d3210ed10cd5d3210ed107d87c4c4013311331087c4c43031015d2b -5d5e5d2b5d25160e0223222e02270321030e0323222e0237013e0333321e0217072303210454 -06010d1b1515190e07037cfdc87702080e1913151c0d010601c5030c131b11121b130b035401 -f401ef290f130a0303060a070159fea9070a0704040a120f04cf080b060303060b086dfd4800 -00000001004cffef034c051f00490052402b41c2243224320c1bc3000c4a231b3c2ebb370aba -1120370137113711163cba491641411b05295316ba0556003fed3f123939111239ed1139392f -2f5d10ed10ed1112390110ded4ed1239392f2fed303101140e0223222e0435343e0233321e02 -33323e0235342e0635343e0233321e0615140e0223222e0223220e0215141e06034c3e709a5b -3e6e563b160a04070b060e3351714b3d664a2934556c716c55343662895229544b3b13050402 -030609060b2d445e3c3b583a1d34566d716d5634015e56885f32172021171f1711160e052329 -23213e5b3a3c564135353e53704d4b77532c10191f13090e130e0d150f081d241d20374a293c -564235353d536f000002006bfe93038103c2002a003d004f403376368636027630863002661e -010b171b17020c121c1202081f0b2bb12a33b2153e25490b3d2b1f04102ea41a4a38a4104d05 -4f003f3fed3fed1217393f0110deedd4ed323930315e5d5d5d5d5d01140e0223222e0235110e -0323222e0235343e0233321e021735343e0233321e021507262623220e0215141e0233323e02 -370381060d171112170e052c4e4a4927628a57283262905f2a47454629070d15100f140d0577 -4b8b4c45623e1c183a60482444484d2cfead060a070303070a0601e22d3e25104c82af6273b9 -824611253b2975070a060303060a07fc5b60426c88464c8e6e43142e493600000002006bffef -0381056d002600390077400c37281416004c76328632022db8fff0b316004d2db8fff8403c15 -004d762c862c0228101516004c671a0109151915020910191002080b1b39b10e342a1804002f -b2133a21460b39271b040e2aa4184a34a40e4d054c003f3fed3fed1217393f0110deedd41739 -ed323930315e5d5d5d2b5d2b2b5d2b25140e0223222e023535060623222e0235343e02333216 -1711343e0233321e021503262623220e0215141e0233323e02370381050d140f10150d07489a -5b628a57283262905f528842050e171112170d06774b8b4c45623e1c183a60482444484d2c14 -070a060303060a07824e594c82af6273b9824649470221060a060404060a06fd4e5b60426c88 -464b8e6f43142e4936000000000100bdfffa045e0510003d0033401b270f0f14c21e0a2e2e32 -c2001e38520a2e0f270419225119550655003f3f3f1217393f012fd4ed32113310ed322f3330 -3125140e022323222e0227012626272316141511140e0223222e02351134363333321e021701 -1e03173326343511343e0233321e0215045e0b1115091914211f1f13fe3822451f0101060e17 -1211180e0626123218201a190f015d213b38371b0101060e171210180e073b12180f060a192a -2103283b7d3b499949fcba060a060404060a0604bb241b0813231bfd953a6b67643354b65402 -f1060a070303070a0600000000010064000002ca03b2002b00444013072601072557250210b1 -1f141f141f0026b109b8ffc040120a004d1f0901092c2511a419490f27a4054b003fed323fed -320110de5d2bedcd39392f2f10ed30315d5d25140e02232122263535343e0237012122263534 -3e023321321e021515140e02070121321e0202ca05080c07fde5121904080d0a01aefe5a0e12 -05080c0701f409100b0703080e0afe5301cc070c0805340d140d06181c1c0b1214170f02a319 -1b0d140d06060c140e170a14151910fd5d060d1400000001006bfff3040c051b003900274014 -1c002bc30e3a18bb2126ba135304ba3530bb0956003ffdd4ed3ffdd4ed0110deedd4c4303125 -140e0623222e0235343e0233321e0615140e0223222e0223220e0215141e0233323e0233321e -02040c0204071340617e4c7ac68b4b5091cb7b3a6d5c491b07040203070a070e335378535b98 -6d3d386a9c63517956370f06080503b00b120e0c132b2a1e55a4f09a9efbaf5d16222c1b0c0f -130c0e150f08293229498ed08781c88948293229050d1600000200bdfffa03e7050e00360044 -0036401c102e11290ac30037c3293f11c21c2e10ba4040173dba215117550555003f3f3fed12 -392fed39012fed32d4edd4ed11123939303125140e0223222e0227032e03232311140e022322 -2e023511343633333216171e0315140e02071e031713161603342627262623231133323e0203 -e7050e19131117100a0479153044604386060e171211180e062612f3303f1a4a6e482324425c -3721352d2814790d07d74a571d4437a0ba4b6c472116070a070403090f0c013a355e4528fdb9 -060a060404060a0604bb241b05040d3a556b3e40654d38130f2c3e5132fed2231a0397537319 -0807fe25254056000000000100bdfffa04370514002f002b4016230cc217240bc200172a5224 -ba0c0c121d5212550555003f3f3f12392fed3f012fd4ed3210ed32303125140e0223222e0235 -112111140e0223222e023511343e0233321e0215112111343e0233321e02150437060e181112 -170e06fd7a060e171211180e06060e181112170e060286060e171211180e0614060a06040406 -0a06025bfda5060a060404060a0604e6060a060404060a06fde2021e060a060404060a060000 -000200bd00000474050e0012001f001c400e13c3001ac20918ba0e511bba0554003fed3fed01 -2fedd4ed303101140e0223232226351134363321321e0207342e0223231133323e02047452a0 -eba3ff122626120110a5e3994e833977b68dc7c884b77a3d029aa3f9a8561b240490241b5aa5 -e79471c18c4ffbcc4188cf0000000001002efffa032803b7002f00624036862f01192f018817 -0115170122b21824b12e182e182e00170b0cb2160b2f0023230b0ab2000f0b5f0b020b294923 -0b111d49114c054c003f3f3f1239393f01192f5d18dded1239192f12391810dded1239123939 -2f2f10ed10ed30315d5d5d5d251616060623222e022703030e03232226263637010126263636 -33321e021713133e0333321616060701031f08010e1d1615190f0904f4f30409101914151c0d -0109012afee408010f1e1615190e0804e6ec04080d1714151d0e0109fee2270c110b0503060a -06017afe86060a0603050b110c01b701ad0c110b0403060906fe9e016206090603040a110dfe -5700000000010001fef302e005b500150013b715b10b00b10a1005002f2f012fedd6ed303117 -0e0323222e0237013e0333321e02077a040b0f150f0f170e03050262040a0f160f0f160d0404 -e80c0e0803060b110b06700c0e0803060b110b00000100a3ffef038103b70032003f40270a11 -1a110229103910020b101b1002080b27b13f0001001fb1132d49270b05194924a40e4d054c00 -3f3fed3f1239393f012fedd45ded3930315e5d5d5d25140e0223222e023535060623222e0235 -11343e0233321e021511141e023332363711343e0233321e02150381050e161012160c054e95 -4a597a4b21050e171112170d061a34513645894d050e171211170d0614060a060404060a0680 -574e3c6788600223060a070303070a06fde8546a4b29625f0289060a070303070a06079e056d -03b8fe9300000000050efdda0000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000047005e007600a300520073 -0000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000576000b03b1000600130000fffaffed -fea6ffedfeb8050e000600130000fffaffedfe9300000000041d00060011000000000000ff09 -ffee050e0013041d0006000f0000fffafff1fe930000feb803420006050e0006000bfdc7fffa -fff50000ff2503090006000dff36fffafff302870006000d0000fffafff1079efeaffea70309 -0006000b0437019bfdda0053003a0041004c0054005e0055005f006b007e0041004a00550062 -007a004a005b006c007500820043004b0056005f0066006d0076007f009c00a300c000d2004c -0055005e006700700077007e00870090009700ab00c9005d0064006d0074007b008a00a100bd -00680071007a0083008c009800ab005d0066006d007600ad006600700079008000890091009a -00ab0048005d006c0075004f007100780064008a006a007f0090008c00770066000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000055a001500a0fff8ff42fea2 -fdbc0325030c01cc007b008700800075004800fa00620514006b052cfff60122fff1050affec -047ffff10131fff2000a037c0366404065585554535251504f4e4d4c4b4a4948474645444342 -41403f3e3d3c3b3a39383736352f2e2d2c2826252423221f181411100f0d0b0a090807060504 -030201002c4523466020b02660b004262348482d2c452346236120b02661b004262348482d2c -45234660b0206120b04660b004262348482d2c4523462361b0206020b02661b02061b0042623 -48482d2c45234660b0406120b06660b004262348482d2c4523462361b0406020b02661b04061 -b004262348482d2c0110203c003c2d2c20452320b0cd442320b8015a51582320b08d44235920 -b0ed51582320b04d44235920b0042651582320b00d44235921212d2c20204518684420b00160 -2045b04676688a4560442d2c01b10b0a432343650a2d2c00b10a0b4323430b2d2c00b0282370 -b101283e01b0282370b10228453ab10200080d2d2c2045b00325456164b050515845441b2121 -592d2c2045b0004360442d2c01b00643b00743650a2d2c2069b04061b0008b20b12cc08a8cb8 -100062602b0c642364615c58b00361592d2c8a03458a8a87b0112bb0292344b0297ae4182d2c -4565b02c234445b02b23442d2c4b525845441b2121592d2c01b005251023208af500b0016023 -edec2d2c01b005251023208af500b0016123edec2d2c01b0062510f500edec2d2c20b0016001 -10203c003c2d2c20b001610110203c003c2d2c00b00743b006430b2d2c21210c6423648bb840 -00622d2c21b08051580c6423648bb82000621bb200402f2b59b002602d2c21b0c051580c6423 -648bb81555621bb200802f2b59b002602d2c0c6423648bb84000626023212d2c452345602345 -6023456023766818b08062202d2cb00426b00426b00425b0042545234520b003266062636820 -b0032661658a2344442d2c2045b0005458b040442045b04061441b2121592d2c45b1302f4523 -456160b0016069442d2c4b5158b02f2370b01423421b2121592d2c4b515820b0032545695358 -441b2121591b2121592d2c45b01443b0006063b0016069442d2cb02f45442d2c452320458a60 -442d2c45234560442d2c4b235158b90033ffe0b134201bb3330034005944442d2cb0164358b0 -0326458a586466b01f601b64b020606620581b21b04059b001615923586559b02923442310b0 -29e01b2121212121592d2cb0164358b004254564b020606620581b21b04059b0016123586559 -b0292344b00425b00725082058021b0359b0052510b004252046b0042523423cb0072510b006 -252046b00425b0016023423c2058011b0059b0052510b00425b029e0b0072510b00625b029e0 -b00425b00725082058021b0359b00425b003254348b00625b00325b0016043481b2159212121 -212121212d2cb0164358b004254564b020606620581b21b04059b0016123581b6559b0292344 -b00525b00825082058021b0359b0042510b005252046b0042523423cb00425b0072508b00725 -10b006252046b00425b0016023423c2058011b0059b0042510b00525b029e0b02920456544b0 -072510b00625b029e0b00525b00825082058021b0359b00525b003254348b00425b0072508b0 -0625b00325b0016043481b2159212121212121212d2c02b00425202046b004252342b0052508 -b003254548212121212d2c02b0032520b0042508b0022543482121212d2c452320451820b000 -50205823652359236820b040505821b04059235865598a60442d2c4b53234b515a5820458a60 -441b2121592d2c4b545820458a60441b2121592d2c4b53234b515a58381b2121592d2c4b5458 -381b2121592d2cb002435458b0462b1b21212121592d2cb002435458b0472b1b212121592d2c -b002435458b0482b1b21212121592d2cb002435458b0492b1b212121592d2c208a08234b538a -4b515a5823381b2121592d2c0020b200400325b0062649618b3812342d2c0146234660234661 -23201020468a61b8ff80628ab140408a704560683a2d2c208a2349648a2353583c1b21592d2c -4b52587d1b7a592d2cb012004b014b54422d2cb1020042b123018851b1400188535a58b91000 -0020885458b202010243604259b12401885158b920000040885458b2020202436042b1240188 -5458b2022002436042004b014b5258b2020802436042591bb940000080885458b20204024360 -4259b94000008063b80100885458b202080243604259b94000010063b80200885458b2021002 -43604259b94000020063b80400885458b202400243604259595959592d2c451868234b515823 -20452064b04050587c59688a6059442d2cb00016b00225b0022501b001233e00b002233eb101 -02060cb00a236542b00b234201b001233f00b002233fb10102060cb006236542b0072342b001 -16012d2c00456823b140408a704560682345686165b200010115132338b1010011362d000001 -0000000633339ae8f7325f0f3cf5001b080000000000c9dc9d7000000000d5968a5bfbe9fdda -0a78079e000000090002000100000000000100000600fe0001c40acdfbe9fb080a7800010000 -0000000000000000000000000020040e002e041000bd042800a7038700290318005501c40094 -0367006403c4006801c400a701cf0000035a00bd03f4006802c200a7042800a7038700a703de -0011042800a7042c006402a1002704820028039f004c0428006b0428006b051b00bd03260064 -0448006b044200bd04f400bd04db00bd0359002e02e60001042800a3000000000000012c0000 -01cc00000298000003640000048800000508000005fc0000070c0000076400000764000007d0 -000008c80000097c00000a4c00000b3400000bb800000cb000000d8000000e7000000f940000 -10a4000011a0000012bc000013a0000014680000152800001624000016d80000175800001858 -000018b40000198000010000002004250017010a000800020010002f0066000002ba00dc0008 -0001b1092f410e013c003f013c0002013901360038001f013801360038001f01370136b2381f -d0413e0136000101480038014700550146003801450055014400380143005501420038014100 -5501400038013f0055012f0038012e0055012d0038012c00550080014b00010080014a000101 -490038012e0055004f0147000100f0013f00010000013d0030013d00020000013d0070013d00 -80013d00e0013d0004ffc0013db30e114600410e0134003001340080013400d0013400040000 -01330020013300800133b2030c2f410c01310001000f0131001f0131006f0131007f0131008f -0131b2050f00b8012e409b0114e2a4ff1fe1b1ff1fdb94711fd9d72e1fdad6691fd8d49d1fd7 -d62c1fd5d6371fd0ce1a1fcfce681fcdceae1fccce801f0fce016d1fce010fce013bcac8821f -c9c88c1fc7c8361fc6c24e1fc5c2581fc4c25f1fc3c2661fc1c26d1fc0c2801f00c210c220c2 -036d20c230c20210c220c20200c210c2023b20c201bfba261fbeba3a1fbdba521fbcba6d1fbb -ba731fb9ba831fb8ba791f50ba01b8ffc0b3ba7a8246b8ffc0b3ba686e46b8ffc0b3ba555a46 -b8ffc0b3ba424646b8ffc040ffba2f3246b5b14b1fb4b15d1fb3b1631fb2b16a1fb0b1771faf -b1821faeb15b1fa6a4711fa5a47a1fa3a48c1f9f9d1d1f9e9d391f9c9d931f9998551f988c30 -1f8a01895585032b1f8403471f825b805581ab80557f5b7d557eab7d552f7d012f7d3f7d6f7d -9f7dcf7dff7d06795b775578ab77551f778f779f770377017a557c5b7a557bab7a55707a0188 -5b865587ab86551f868f869f8603860372555076607602760372556e666d55b06d015f6d6f6d -7f6d036d037255745b725573ab725540726072707280720472026f55715b6f5570ab6f556f06 -011f6a032b1f6947675568ab67556647645565ab645563476255614760554060015c475a555b -ab5a404a5557032b1f5647545555ab54555347515552ab51555106461f4f474e554e03251f4d -474b554cab4b554a47485549ab485548022b1f4747465546012b1f24220a1f2322181f000301 -0803bd0100010000050001019000542b4bb807ff524bb008505bb00188b02553b00188b04051 -5ab00688b000555a5b58b101018e59b21a01024354234b515a58b101018e59858d8d001d424b -b01d5358b203a0a01d42594bb0805358b20340401d42594bb0ff5358b20300001d42595e732b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b732b2b2b2b2b2b2b2b2b2b2b732b2b2b73732b2b -732b732b2b732b2b2b732b2b73742b2b2b2b2b2b2b2b2b012b2b2b002b2b2b012b2b2b2b2b2b -2b002b2b2b2b2b742b2b2b2b2b2b2b01755e7374755e732b2b2b2b2b2b002b2b2b015e73745e -732b2b2b2b002b2b012b2b2b002b2b012b005e735e73745e73732b737473732b73732b2b2b2b -2b2b2b732b2b2b74185e000000> -] def -/f-0-0 currentdict end definefont pop -%%EndResource -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 0 532 118 -%%EndPageSetup -q 0 0 532 118 rectclip -1 0 0 -1 0 118 cm q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0.486275 g -0.216789 w -2 J -0 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -418.195 -98.649 m 448.926 -98.649 l 452.316 -98.649 455.066 -101.398 455.066 - -104.789 c 455.066 -108.181 457.816 -110.929 461.207 -110.929 c 457.816 - -110.929 455.066 -113.678 455.066 -117.069 c 455.066 -117.09 l 455.066 --120.481 452.316 -123.23 448.926 -123.23 c 418.195 -123.23 l S Q - Q -Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 465.203306 109.037259 Tm -/f-0-0 1 Tf -[(P)41(h)-13(y)-25(s)53(i)22(c)-41(a)4(l)21( )27(L)19(a)4(y)-25(e)27(r) -]TJ -ET - Q -Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0.486275 g -0.216789 w -2 J -0 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -418.195 -74.069 m 448.926 -74.069 l 452.316 -74.069 455.066 -76.817 455.066 - -80.209 c 455.066 -83.601 457.816 -86.349 461.207 -86.349 c 457.816 -86.349 - 455.066 -89.097 455.066 -92.489 c 455.066 -92.509 l 455.066 -95.901 452.316 - -98.649 448.926 -98.649 c 418.195 -98.649 l S Q - Q -Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 465.203306 85.489194 Tm -/f-0-0 1 Tf -[(L)19(i)22(n)-13(k)41( )-41(L)19(a)4(y)41(e)-38(r)]TJ -ET - Q -Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0.486275 g -0.216789 w -2 J -0 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -418.195 -49.489 m 448.926 -49.489 l 452.316 -49.489 455.066 -52.237 455.066 - -55.629 c 455.066 -59.02 457.816 -61.769 461.207 -61.769 c 457.816 -61.769 - 455.066 -64.517 455.066 -67.909 c 455.066 -67.929 l 455.066 -71.321 452.316 - -74.069 448.926 -74.069 c 418.195 -74.069 l S Q - Q -Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 465.203306 61.961803 Tm -/f-0-0 1 Tf -[(T)16(r)11(a)4(n)-13(s)53(p)-12(o)-11(r)11(t)60( )-40(L)18(a)4(y)41(e) --38(r)]TJ -ET - Q -Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0.486275 g -0.216789 w -2 J -0 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -369.008 -24.904 m 448.926 -24.904 l 452.316 -24.904 455.066 -27.652 455.066 - -31.052 c 455.066 -34.444 457.824 -37.192 461.215 -37.192 c 457.824 -37.192 - 455.066 -39.949 455.066 -43.34 c 455.066 -46.74 452.316 -49.489 448.926 - -49.489 c 369.008 -49.489 l S Q - Q -Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 465.229321 38.438547 Tm -/f-0-0 1 Tf -[(A)32(p)-10(p)-10(l)21(i)22(c)27(a)6(ti)18(o)-8(n)54( )-38(L)21(a)6(y) -43(e)-36(r)]TJ -ET - Q -Q -1 0.85098 0.396078 rg -196.973 47.195 49.164 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -196.973 -49.489 49.164 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 206.903478 61.961803 Tm -/f-0-0 1 Tf -[(S)-11(e)29(q)-11( )27(L)21(e)29(n)]TJ -ET - Q -Q -1 0.85098 0.396078 rg -246.133 47.195 122.902 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -246.133 -49.489 122.902 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 292.899362 61.961803 Tm -/f-0-0 1 Tf -[(P)43(a)6(y)-24(l)22(o)-8(a)5(d)]TJ -ET - Q -Q -1 0.85098 0.396078 rg -147.809 47.195 49.16 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -147.809 -49.489 49.16 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 159.842909 61.961803 Tm -/f-0-0 1 Tf -[(S)-11(e)29(q)-11( )27(N)42(r)]TJ -ET - Q -Q -1 0.85098 0.396078 rg -98.648 47.195 49.16 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -98.648 -49.489 49.16 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 115.938789 61.961803 Tm -/f-0-0 1 Tf -[(S)-11(i)21(z)-3(e)]TJ -ET - Q -Q -1 0.85098 0.396078 rg -196.973 47.195 49.164 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -196.973 -49.489 49.164 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 206.903478 61.961803 Tm -/f-0-0 1 Tf -[(S)-11(e)29(q)-11( )27(L)21(e)29(n)]TJ -ET - Q -Q -1 0.85098 0.396078 rg -246.133 47.195 122.902 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -246.133 -49.489 122.902 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 292.899362 61.961803 Tm -/f-0-0 1 Tf -[(P)43(a)6(y)-24(l)22(o)-8(a)5(d)]TJ -ET - Q -Q -1 0.85098 0.396078 rg -147.809 47.195 49.16 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -147.809 -49.489 49.16 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 159.842909 61.961803 Tm -/f-0-0 1 Tf -[(S)-11(e)29(q)-11( )27(N)42(r)]TJ -ET - Q -Q -1 0.85098 0.396078 rg -98.648 47.195 49.16 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -98.648 -49.489 49.16 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 115.938789 61.961803 Tm -/f-0-0 1 Tf -[(S)-11(i)21(z)-3(e)]TJ -ET - Q -Q -0.572549 0.803922 0.862745 rg -49.48 70.656 49.156 23.422 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -49.48 -74.089 49.156 -24.56 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.777186 0 0 -9.324124 66.705993 85.530543 Tm -/f-0-0 1 Tf -[(S)-12(i)20(z)-4(e)]TJ -ET - Q -Q -0.572549 0.803922 0.862745 rg -98.641 70.656 270.359 23.422 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -98.641 -74.089 270.359 -24.56 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.777186 0 0 -9.324124 219.043665 85.530543 Tm -/f-0-0 1 Tf -[(P)42(a)5(y)-25(l)21(o)-9(a)4(d)]TJ -ET - Q -Q -0.572549 0.803922 0.862745 rg -369 70.656 49.156 23.422 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -369 -74.089 49.156 -24.56 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.777186 0 0 -9.324124 386.387476 85.530543 Tm -/f-0-0 1 Tf -(CRC)Tj -ET - Q -Q -0.572549 0.803922 0.862745 rg -0.324 70.656 49.156 23.422 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -0.324 -74.089 49.156 -24.56 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.777186 0 0 -9.324124 9.300251 85.530543 Tm -/f-0-0 1 Tf -[(Ch)57(a)4(n)-11(n)-12(e)29(l)]TJ -ET - Q -Q -0.572549 0.803922 0.862745 rg -49.48 70.656 49.156 23.422 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -49.48 -74.089 49.156 -24.56 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.777186 0 0 -9.324124 66.705993 85.530543 Tm -/f-0-0 1 Tf -[(S)-12(i)20(z)-4(e)]TJ -ET - Q -Q -0.572549 0.803922 0.862745 rg -98.641 70.656 270.359 23.422 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -98.641 -74.089 270.359 -24.56 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.777186 0 0 -9.324124 219.043665 85.530543 Tm -/f-0-0 1 Tf -[(P)42(a)5(y)-25(l)21(o)-9(a)4(d)]TJ -ET - Q -Q -0.572549 0.803922 0.862745 rg -369 70.656 49.156 23.422 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -369 -74.089 49.156 -24.56 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.777186 0 0 -9.324124 386.387476 85.530543 Tm -/f-0-0 1 Tf -(CRC)Tj -ET - Q -Q -0.572549 0.803922 0.862745 rg -0.324 70.656 49.156 23.422 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -0.324 -74.089 49.156 -24.56 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.777186 0 0 -9.324124 9.300251 85.530543 Tm -/f-0-0 1 Tf -[(Ch)57(a)4(n)-11(n)-12(e)29(l)]TJ -ET - Q -Q -0.976471 0.768627 0.6 rg -246.133 0.309 122.902 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -246.133 -0.324 122.902 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 300.010043 14.886347 Tm -/f-0-0 1 Tf -[(H)22(C)4(P)]TJ -ET - Q -Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0.486275 g -0.216789 w -2 J -0 j -[] 0.0 d -2 M q 1 0 0 -0.953661 0 0 cm -369.008 -0.324 m 448.926 -0.324 l 452.316 -0.324 455.066 -3.08 455.066 --6.472 c 455.066 -9.867 457.824 -12.62 461.215 -12.62 c 457.824 -12.62 455.066 - -15.368 455.066 -18.756 c 455.066 -22.156 452.316 -24.904 448.926 -24.904 - c 369.008 -24.904 l S Q - Q -Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 465.229321 14.886347 Tm -/f-0-0 1 Tf -[(H)22(C)4(P)]TJ -ET - Q -Q -0.768627 0.839216 0.627451 rg -0.324 94.078 417.875 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -0.324 -98.649 417.875 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 191.832303 109.057934 Tm -/f-0-0 1 Tf -[(L)21(i)22(n)-11(k)43( )-38(D)10(a)6(t)63(a)]TJ -ET - Q -Q -0.768627 0.839216 0.627451 rg -0.324 94.078 417.875 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -0.324 -98.649 417.875 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 191.832303 109.057934 Tm -/f-0-0 1 Tf -[(L)21(i)22(n)-11(k)43( )-38(D)10(a)6(t)63(a)]TJ -ET - Q -Q -0.74902 g -246.133 23.754 122.902 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -246.133 -24.908 122.902 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 271.289829 38.438547 Tm -/f-0-0 1 Tf -[(Cl)24(e)29(a)6(r)12(te)27(x)21(t )-42(/)31( )27(S)-12(e)29(c)28(u)-13 -(r)13(i)22(ty)]TJ -ET - Q -Q -0.74902 g -246.133 23.754 122.902 23.441 re f* -0 g -0.650367 w -1 J -1 j -[] 0.0 d -10 M q 1 0 0 -0.953661 0 0 cm -246.133 -24.908 122.902 -24.58 re S Q -q -0 0 532 118 re W n -[ 1 0 0 1 0 0 ] concat - q -0 g -BT -9.798866 0 0 -9.344799 271.289829 38.438547 Tm -/f-0-0 1 Tf -[(Cl)24(e)29(a)6(r)12(te)27(x)21(t )-42(/)31( )27(S)-12(e)29(c)28(u)-13 -(r)13(i)22(ty)]TJ -ET - Q -Q -Q Q -showpage -%%Trailer -end -%%EOF diff --git a/hcp/doc/img/stack.pdf b/hcp/doc/img/stack.pdf deleted file mode 100644 index 29e3d6f..0000000 Binary files a/hcp/doc/img/stack.pdf and /dev/null differ diff --git a/hcp/doc/img/stack.svg b/hcp/doc/img/stack.svg deleted file mode 100644 index 9ae1aaf..0000000 --- a/hcp/doc/img/stack.svg +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - - - - - - Layer Structure - - - - Side brace.23 - Physical Layer - - - - - - - - - - - - - - - - - - - Physical Layer - - Side brace.24 - Link Layer - - - - - - - - - - - - - - - - - - - Link Layer - - Side brace.25 - Transport Layer - - - - - - - - - - - - - - - - - - - Transport Layer - - Side brace.26 - Application Layer - - - - - - - - - - - - - - - - - - - Application Layer - - Ark.32 - - Ark.6 - Seq Len - - - - Seq Len - - Ark.7 - Payload - - - - Payload - - Ark.30 - Seq Nr - - - - Seq Nr - - Ark.31 - Size - - - - Size - - - Ark.33 - - Ark.3 - Size - - - - Size - - Ark.4 - Payload - - - - Payload - - Ark.5 - CRC - - - - CRC - - Ark.29 - Channel - - - - Channel - - - Ark.34 - HCP - - - - HCP - - Side brace.35 - HCP - - - - - - - - - - - - - - - - - - - HCP - - Ark.37 - - Ark.2 - Link Data - - - - Link Data - - - Ark.38 - - Ark.1 - Cleartext / Security - - - - Cleartext / Security - - - diff --git a/hcp/doc/md/1_stack.md b/hcp/doc/md/1_stack.md deleted file mode 100644 index 212e7a8..0000000 --- a/hcp/doc/md/1_stack.md +++ /dev/null @@ -1,49 +0,0 @@ -\page stack FPC embedded stack - -The communication stack implemented on the embedded devices by FPC follows the following -specification. - -\image html stack.svg "HCP embedded stack" -\image latex stack.eps "HCP embedded stack" - -\section phy Physical - -The physical layer have a fixed size buffer of 256 bytes. - -\section link Link - -The link layer handles packet consistency. - -Each packet received is acknowledged on the link layer, if an error occurs no retransmission is -done on this level, instead the error is propagated upwards. - -Channel | Size | Payload | CRC | -------- | ------- | ---------- | ------- | -2 bytes | 2 bytes | size bytes | 4 bytes | - -All fields are using unsigned data types. - -\section tsp Transport - -The transport layer handles packet segmentation. - -As the PHY MTU is 256 bytes the maximum payload per segment is 242 bytes. - -Errors are propagated upwards. - -Size | Seq Nr | Seq Len | Payload | -------- | ------- | ------- | ---------- | -2 bytes | 2 bytes | 2 bytes | size bytes | - -All fields are using unsigned data types. - -\section app Application - -The application layer is a optional security layer, the default implementation is clear text -(unsecure). - -If a security solution is used it will be part of that products documentation. - -\section hcp HCP - -The HCP frame is described in the \link hcpf HCP frame format section. diff --git a/hcp/doc/md/2_hcpframe.md b/hcp/doc/md/2_hcpframe.md deleted file mode 100644 index 2e50317..0000000 --- a/hcp/doc/md/2_hcpframe.md +++ /dev/null @@ -1,28 +0,0 @@ -\page hcpf HCP frame format - -The Host Communication Protocol (HCP) describes a general way of sending commands and information -between devices. - -\image html hcp.svg "HCP frame format" -\image latex hcp.eps "HCP frame format" - -\section cmd Command - -The Commands define the general action that is going to be executed. However, each command -can have several Arguments each with data attached. - -| CMD | Num Args | Payload | -| ------- | -------- | -------- | -| 2 bytes | 2 bytes | xx bytes | - -All fields are using unsigned data types. - -\section arg Argument - -The Argument is used as a complement to the command if it is needed and can contain arbitrary data. - -| ARG | Size | Data | -| ------- | --------| ---------- | -| 2 bytes | 2 bytes | size bytes | - -All fields are using unsigned data types. diff --git a/hcp/doc/md/4_biometrics.md b/hcp/doc/md/4_biometrics.md deleted file mode 100644 index 6a57d7c..0000000 --- a/hcp/doc/md/4_biometrics.md +++ /dev/null @@ -1,89 +0,0 @@ -\page bio Biometrics - -\section capture_b Capture - -@startuml -Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout] -... Wait for finger down... -rnote over BioMcu : fpc_bep_capture -hnote over BioMcu : image -BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result] -@enduml -*** - -\section extract_b Extract - -@startuml -group Capture -Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout] -... Wait for finger down... -rnote over BioMcu : fpc_bep_capture -hnote over BioMcu : image -BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result] -end -Host --> BioMcu: CMD_IMAGE \nARG_EXTRACT -rnote over BioMcu : fpc_bep_image_extract -hnote over BioMcu : template -BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result] -@enduml -*** - -\section enroll_b Enroll - -@startuml -Host --> BioMcu: CMD_ENROLL \nARG_START -rnote over BioMcu : fpc_bep_enroll_start -hnote over BioMcu : session -BioMcu --> Host: CMD_ENROLL \nARG_RESULT[bep_result] -||| -loop Enroll Image -group Capture -Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout] -... Wait for finger down... -rnote over BioMcu : fpc_bep_capture -hnote over BioMcu : image -BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result] -end -||| -Host --> BioMcu: CMD_ENROLL \nARG_ADD -rnote over BioMcu : fpc_bep_enroll -rnote over BioMcu : count -BioMcu --> Host: CMD_ENROLL \nARG_COUNT[count] \nARG_RESULT[bep_result] -Host --> BioMcu: CMD_WAIT \nARG_FINGER_UP \nARG_TIMEOUT[timeout] -... Wait for finger up... -BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result] -end -||| -Host --> BioMcu: CMD_ENROLL \nARG_FINISH -rnote over BioMcu : fpc_bep_enroll_finish -hnote over BioMcu : enroll template -BioMcu --> Host: CMD_ENROLL \nARG_RESULT[bep_result] -@enduml -*** - -\section identify_b Identify - -@startuml -group Capture -Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout] -... Wait for finger down... -rnote over BioMcu : fpc_bep_capture -hnote over BioMcu : image -BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result] -end -||| -group Extract -Host --> BioMcu: CMD_IMAGE \nARG_EXTRACT -rnote over BioMcu : fpc_bep_image_extract -hnote over BioMcu : template -BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result] -end -||| -Host --> BioMcu: CMD_IDENTIFY -rnote over BioMcu : fpc_template_storage_get_all -rnote over BioMcu : fpc_bep_identify -hnote over BioMcu : id -BioMcu --> Host: CMD_IDENTIFY \nARG_MATCH \nARG_ID[id] \nARG_RESULT[bep_result] -hnote over Host: id -@enduml -*** diff --git a/hcp/doc/md/5_image.md b/hcp/doc/md/5_image.md deleted file mode 100644 index 150e284..0000000 --- a/hcp/doc/md/5_image.md +++ /dev/null @@ -1,36 +0,0 @@ -\page image Image handling - -\section create_i Create - -@startuml -Host --> BioMcu: CMD_IMAGE \nARG_CREATE -hnote over BioMcu : image -BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result] -@enduml -*** - -\section upload_i Upload - -@startuml -participant Host -participant BioMcu - -hnote over BioMcu : image -Host --> BioMcu: CMD_IMAGE \nARG_UPLOAD -BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result] \nARG_DATA[image] -hnote over Host : image -@enduml -*** - -\section download_i Download - -@startuml -participant Host -participant BioMcu - -hnote over Host : image -Host --> BioMcu: CMD_IMAGE \nARG_DOWNLOAD \nARG_DATA[image] -hnote over BioMcu : image -BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result] -@enduml -*** diff --git a/hcp/doc/md/6_template.md b/hcp/doc/md/6_template.md deleted file mode 100644 index 1c1adc6..0000000 --- a/hcp/doc/md/6_template.md +++ /dev/null @@ -1,40 +0,0 @@ -\page template Template handling - -\section upload_t Upload - -@startuml -participant Host -participant BioMcu - -hnote over BioMcu : template -Host --> BioMcu: CMD_TEMPLATE \nARG_UPLOAD -BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result] \nARG_DATA[template] -hnote over Host : template -@enduml -*** - -\section download_t Download - -@startuml -participant Host -participant BioMcu - -hnote over Host : template -Host --> BioMcu: CMD_TEMPLATE \nARG_DOWNLOAD \nARG_DATA[template] -hnote over BioMcu : template -BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result] -@enduml -*** - -\section save_t Save - -@startuml -participant Host -participant BioMcu - -hnote over BioMcu : template -Host --> BioMcu: CMD_TEMPLATE \nARG_SAVE \nARG_ID[id] -hnote over BioMcu : template[id] (nvm) -BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result] -@enduml -*** diff --git a/hcp/doc/md/7_storage.md b/hcp/doc/md/7_storage.md deleted file mode 100644 index a86ef60..0000000 --- a/hcp/doc/md/7_storage.md +++ /dev/null @@ -1,69 +0,0 @@ -\page storage Storage handling - -\section delete_id Delete ID - -@startuml -participant Host -participant BioMcu - -hnote over BioMcu : template[id] (nvm) -Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_DELETE \nARG_ID[id] -rnote over BioMcu : fpc_template_storage_remove -BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result] -@enduml -*** - -\section delete_all Delete All - -@startuml -participant Host -participant BioMcu - -hnote over BioMcu : template[] (nvm) -Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_DELETE \nARG_ALL -rnote over BioMcu : fpc_template_storage_remove_all -BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result] -@enduml -*** - -\section upload_s Upload - -@startuml -participant Host -participant BioMcu - -hnote over BioMcu : template[id] (nvm) -Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_UPLOAD \nARG_ID[id] -rnote over BioMcu : fpc_template_storage_get -hnote over BioMcu : template (ram) -BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result] - -@enduml -*** - -\section count_s Count - -@startuml -participant Host -participant BioMcu - -Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_COUNT -rnote over BioMcu : fpc_template_storage_get_count -BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result] \nARG_COUNT[template_count] - -@enduml -*** - -\section get_id Get IDs - -@startuml -participant Host -participant BioMcu - -hnote over BioMcu : ids[] (nvm) -Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_ID -rnote over BioMcu : fpc_template_storage_get_all_ids -BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result] \nARG_DATA[ids] - -@enduml -*** \ No newline at end of file diff --git a/hcp/doc/md/8_sensor.md b/hcp/doc/md/8_sensor.md deleted file mode 100644 index df4627c..0000000 --- a/hcp/doc/md/8_sensor.md +++ /dev/null @@ -1,28 +0,0 @@ -\page sensor Sensor operations - -\section wait_up_s Wait for finger up - -@startuml -Host --> BioMcu: CMD_WAIT \nARG_FINGER_UP \nARG_TIMEOUT[timeout] -... Wait for finger up... -BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result] -@enduml -*** - -\section wait_down_s Wait for finger down - -@startuml -Host --> BioMcu: CMD_WAIT \nARG_FINGER_DOWN \nARG_TIMEOUT[timeout] -... Wait for finger down... -BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result] -@enduml -*** - -\section sensor_reset_s Reset sensor - -@startuml -Host --> BioMcu : CMD_SENSOR \nARG_RESET -rnote over BioMcu : fpc_bep_sensor_reset -BioMcu --> Host : CMD_SENSOR \nARG_RESULT[bep_result] -@enduml -*** diff --git a/hcp/doc/md/9_device.md b/hcp/doc/md/9_device.md deleted file mode 100644 index c9c6f71..0000000 --- a/hcp/doc/md/9_device.md +++ /dev/null @@ -1,10 +0,0 @@ -\page device Device operations - -\section reset_d Reset device - -@startuml -Host --> BioMcu: CMD_RESET -BioMcu --> Host: CMD_RESET \nARG_RESULT[bep_result] -rnote over BioMcu: Reset -@enduml -*** diff --git a/hcp/doxygen/HCP.html b/hcp/doxygen/HCP.html deleted file mode 100644 index 7449175..0000000 --- a/hcp/doxygen/HCP.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - -

You will be redirected automatically, otherwise please - click here. -

- - diff --git a/hcp/doxygen/HCP.pdf b/hcp/doxygen/HCP.pdf deleted file mode 100644 index ee70bf5..0000000 Binary files a/hcp/doxygen/HCP.pdf and /dev/null differ diff --git a/hcp/doxygen/html/1__stack_8md.html b/hcp/doxygen/html/1__stack_8md.html deleted file mode 100644 index 22fb90e..0000000 --- a/hcp/doxygen/html/1__stack_8md.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/1_stack.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/1_stack.md File Reference
-
- -
- - - - diff --git a/hcp/doxygen/html/1__stack_8md_source.html b/hcp/doxygen/html/1__stack_8md_source.html deleted file mode 100644 index d2729a2..0000000 --- a/hcp/doxygen/html/1__stack_8md_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/1_stack.md Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/1_stack.md
-
-
-Go to the documentation of this file.
1 \page stack FPC embedded stack
2 
3 The communication stack implemented on the embedded devices by FPC follows the following
4 specification.
5 
6 \image html stack.svg "HCP embedded stack"
7 \image latex stack.eps "HCP embedded stack"
8 
9 \section phy Physical
10 
11 The physical layer have a fixed size buffer of 256 bytes.
12 
13 \section link Link
14 
15 The link layer handles packet consistency.
16 
17 Each packet received is acknowledged on the link layer, if an error occurs no retransmission is
18 done on this level, instead the error is propagated upwards.
19 
20 Channel | Size | Payload | CRC |
21 ------- | ------- | ---------- | ------- |
22 2 bytes | 2 bytes | size bytes | 4 bytes |
23 
24 All fields are using unsigned data types.
25 
26 \section tsp Transport
27 
28 The transport layer handles packet segmentation.
29 
30 As the PHY MTU is 256 bytes the maximum payload per segment is 242 bytes.
31 
32 Errors are propagated upwards.
33 
34 Size | Seq Nr | Seq Len | Payload |
35 ------- | ------- | ------- | ---------- |
36 2 bytes | 2 bytes | 2 bytes | size bytes |
37 
38 All fields are using unsigned data types.
39 
40 \section app Application
41 
42 The application layer is a optional security layer, the default implementation is clear text
43 (unsecure).
44 
45 If a security solution is used it will be part of that products documentation.
46 
47 \section hcp HCP
48 
49 The HCP frame is described in the \link hcpf HCP frame format section.
-
- - - - diff --git a/hcp/doxygen/html/2__hcpframe_8md.html b/hcp/doxygen/html/2__hcpframe_8md.html deleted file mode 100644 index 9ef5004..0000000 --- a/hcp/doxygen/html/2__hcpframe_8md.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/2_hcpframe.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/2_hcpframe.md File Reference
-
- -
- - - - diff --git a/hcp/doxygen/html/2__hcpframe_8md_source.html b/hcp/doxygen/html/2__hcpframe_8md_source.html deleted file mode 100644 index 17a6bab..0000000 --- a/hcp/doxygen/html/2__hcpframe_8md_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/2_hcpframe.md Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/2_hcpframe.md
-
-
-Go to the documentation of this file.
1 \page hcpf HCP frame format
2 
3 The Host Communication Protocol (HCP) describes a general way of sending commands and information
4 between devices.
5 
6 \image html hcp.svg "HCP frame format"
7 \image latex hcp.eps "HCP frame format"
8 
9 \section cmd Command
10 
11 The Commands define the general action that is going to be executed. However, each command
12 can have several Arguments each with data attached.
13 
14 | CMD | Num Args | Payload |
15 | ------- | -------- | -------- |
16 | 2 bytes | 2 bytes | xx bytes |
17 
18 All fields are using unsigned data types.
19 
20 \section arg Argument
21 
22 The Argument is used as a complement to the command if it is needed and can contain arbitrary data.
23 
24 | ARG | Size | Data |
25 | ------- | --------| ---------- |
26 | 2 bytes | 2 bytes | size bytes |
27 
28 All fields are using unsigned data types.
-
- - - - diff --git a/hcp/doxygen/html/4__biometrics_8md.html b/hcp/doxygen/html/4__biometrics_8md.html deleted file mode 100644 index 84a283b..0000000 --- a/hcp/doxygen/html/4__biometrics_8md.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/4_biometrics.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/4_biometrics.md File Reference
-
- -
- - - - diff --git a/hcp/doxygen/html/4__biometrics_8md_source.html b/hcp/doxygen/html/4__biometrics_8md_source.html deleted file mode 100644 index e31e745..0000000 --- a/hcp/doxygen/html/4__biometrics_8md_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/4_biometrics.md Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/4_biometrics.md
-
-
-Go to the documentation of this file.
1 \page bio Biometrics
2 
3 \section capture_b Capture
4 
5 @startuml
6 Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout]
7 ... Wait for finger down...
8 rnote over BioMcu : fpc_bep_capture
9 hnote over BioMcu : image
10 BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result]
11 @enduml
12 ***
13 
14 \section extract_b Extract
15 
16 @startuml
17 group Capture
18 Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout]
19 ... Wait for finger down...
20 rnote over BioMcu : fpc_bep_capture
21 hnote over BioMcu : image
22 BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result]
23 end
24 Host --> BioMcu: CMD_IMAGE \nARG_EXTRACT
25 rnote over BioMcu : fpc_bep_image_extract
26 hnote over BioMcu : template
27 BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]
28 @enduml
29 ***
30 
31 \section enroll_b Enroll
32 
33 @startuml
34 Host --> BioMcu: CMD_ENROLL \nARG_START
35 rnote over BioMcu : fpc_bep_enroll_start
36 hnote over BioMcu : session
37 BioMcu --> Host: CMD_ENROLL \nARG_RESULT[bep_result]
38 |||
39 loop Enroll Image
40 group Capture
41 Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout]
42 ... Wait for finger down...
43 rnote over BioMcu : fpc_bep_capture
44 hnote over BioMcu : image
45 BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result]
46 end
47 |||
48 Host --> BioMcu: CMD_ENROLL \nARG_ADD
49 rnote over BioMcu : fpc_bep_enroll
50 rnote over BioMcu : count
51 BioMcu --> Host: CMD_ENROLL \nARG_COUNT[count] \nARG_RESULT[bep_result]
52 Host --> BioMcu: CMD_WAIT \nARG_FINGER_UP \nARG_TIMEOUT[timeout]
53 ... Wait for finger up...
54 BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result]
55 end
56 |||
57 Host --> BioMcu: CMD_ENROLL \nARG_FINISH
58 rnote over BioMcu : fpc_bep_enroll_finish
59 hnote over BioMcu : enroll template
60 BioMcu --> Host: CMD_ENROLL \nARG_RESULT[bep_result]
61 @enduml
62 ***
63 
64 \section identify_b Identify
65 
66 @startuml
67 group Capture
68 Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout]
69 ... Wait for finger down...
70 rnote over BioMcu : fpc_bep_capture
71 hnote over BioMcu : image
72 BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result]
73 end
74 |||
75 group Extract
76 Host --> BioMcu: CMD_IMAGE \nARG_EXTRACT
77 rnote over BioMcu : fpc_bep_image_extract
78 hnote over BioMcu : template
79 BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]
80 end
81 |||
82 Host --> BioMcu: CMD_IDENTIFY
83 rnote over BioMcu : fpc_template_storage_get_all
84 rnote over BioMcu : fpc_bep_identify
85 hnote over BioMcu : id
86 BioMcu --> Host: CMD_IDENTIFY \nARG_MATCH \nARG_ID[id] \nARG_RESULT[bep_result]
87 hnote over Host: id
88 @enduml
89 ***
-
- - - - diff --git a/hcp/doxygen/html/5__image_8md.html b/hcp/doxygen/html/5__image_8md.html deleted file mode 100644 index 69eee1d..0000000 --- a/hcp/doxygen/html/5__image_8md.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/5_image.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/5_image.md File Reference
-
- -
- - - - diff --git a/hcp/doxygen/html/5__image_8md_source.html b/hcp/doxygen/html/5__image_8md_source.html deleted file mode 100644 index 9aa7e11..0000000 --- a/hcp/doxygen/html/5__image_8md_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/5_image.md Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/5_image.md
-
-
-Go to the documentation of this file.
1 \page image Image handling
2 
3 \section create_i Create
4 
5 @startuml
6 Host --> BioMcu: CMD_IMAGE \nARG_CREATE
7 hnote over BioMcu : image
8 BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]
9 @enduml
10 ***
11 
12 \section upload_i Upload
13 
14 @startuml
15 participant Host
16 participant BioMcu
17 
18 hnote over BioMcu : image
19 Host --> BioMcu: CMD_IMAGE \nARG_UPLOAD
20 BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result] \nARG_DATA[image]
21 hnote over Host : image
22 @enduml
23 ***
24 
25 \section download_i Download
26 
27 @startuml
28 participant Host
29 participant BioMcu
30 
31 hnote over Host : image
32 Host --> BioMcu: CMD_IMAGE \nARG_DOWNLOAD \nARG_DATA[image]
33 hnote over BioMcu : image
34 BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]
35 @enduml
36 ***
-
- - - - diff --git a/hcp/doxygen/html/6__template_8md.html b/hcp/doxygen/html/6__template_8md.html deleted file mode 100644 index f32f4eb..0000000 --- a/hcp/doxygen/html/6__template_8md.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/6_template.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/6_template.md File Reference
-
- -
- - - - diff --git a/hcp/doxygen/html/6__template_8md_source.html b/hcp/doxygen/html/6__template_8md_source.html deleted file mode 100644 index cdf6183..0000000 --- a/hcp/doxygen/html/6__template_8md_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/6_template.md Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/6_template.md
-
-
-Go to the documentation of this file.
1 \page template Template handling
2 
3 \section upload_t Upload
4 
5 @startuml
6 participant Host
7 participant BioMcu
8 
9 hnote over BioMcu : template
10 Host --> BioMcu: CMD_TEMPLATE \nARG_UPLOAD
11 BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result] \nARG_DATA[template]
12 hnote over Host : template
13 @enduml
14 ***
15 
16 \section download_t Download
17 
18 @startuml
19 participant Host
20 participant BioMcu
21 
22 hnote over Host : template
23 Host --> BioMcu: CMD_TEMPLATE \nARG_DOWNLOAD \nARG_DATA[template]
24 hnote over BioMcu : template
25 BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result]
26 @enduml
27 ***
28 
29 \section save_t Save
30 
31 @startuml
32 participant Host
33 participant BioMcu
34 
35 hnote over BioMcu : template
36 Host --> BioMcu: CMD_TEMPLATE \nARG_SAVE \nARG_ID[id]
37 hnote over BioMcu : template[id] (nvm)
38 BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result]
39 @enduml
40 ***
-
- - - - diff --git a/hcp/doxygen/html/7__storage_8md.html b/hcp/doxygen/html/7__storage_8md.html deleted file mode 100644 index 3e99ec5..0000000 --- a/hcp/doxygen/html/7__storage_8md.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/7_storage.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/7_storage.md File Reference
-
- -
- - - - diff --git a/hcp/doxygen/html/7__storage_8md_source.html b/hcp/doxygen/html/7__storage_8md_source.html deleted file mode 100644 index bfa997b..0000000 --- a/hcp/doxygen/html/7__storage_8md_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/7_storage.md Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/7_storage.md
-
-
-Go to the documentation of this file.
1 \page storage Storage handling
2 
3 \section delete_id Delete ID
4 
5 @startuml
6 participant Host
7 participant BioMcu
8 
9 hnote over BioMcu : template[id] (nvm)
10 Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_DELETE \nARG_ID[id]
11 rnote over BioMcu : fpc_template_storage_remove
12 BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result]
13 @enduml
14 ***
15 
16 \section delete_all Delete All
17 
18 @startuml
19 participant Host
20 participant BioMcu
21 
22 hnote over BioMcu : template[] (nvm)
23 Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_DELETE \nARG_ALL
24 rnote over BioMcu : fpc_template_storage_remove_all
25 BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result]
26 @enduml
27 ***
28 
29 \section upload_s Upload
30 
31 @startuml
32 participant Host
33 participant BioMcu
34 
35 hnote over BioMcu : template[id] (nvm)
36 Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_UPLOAD \nARG_ID[id]
37 rnote over BioMcu : fpc_template_storage_get
38 hnote over BioMcu : template (ram)
39 BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result]
40 
41 @enduml
42 ***
43 
44 \section count_s Count
45 
46 @startuml
47 participant Host
48 participant BioMcu
49 
50 Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_COUNT
51 rnote over BioMcu : fpc_template_storage_get_count
52 BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result] \nARG_COUNT[template_count]
53 
54 @enduml
55 ***
56 
57 \section get_id Get IDs
58 
59 @startuml
60 participant Host
61 participant BioMcu
62 
63 hnote over BioMcu : ids[] (nvm)
64 Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_ID
65 rnote over BioMcu : fpc_template_storage_get_all_ids
66 BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result] \nARG_DATA[ids]
67 
68 @enduml
69 ***
-
- - - - diff --git a/hcp/doxygen/html/8__sensor_8md.html b/hcp/doxygen/html/8__sensor_8md.html deleted file mode 100644 index e284b37..0000000 --- a/hcp/doxygen/html/8__sensor_8md.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/8_sensor.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/8_sensor.md File Reference
-
- -
- - - - diff --git a/hcp/doxygen/html/8__sensor_8md_source.html b/hcp/doxygen/html/8__sensor_8md_source.html deleted file mode 100644 index d665b32..0000000 --- a/hcp/doxygen/html/8__sensor_8md_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/8_sensor.md Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/8_sensor.md
-
-
-Go to the documentation of this file.
1 \page sensor Sensor operations
2 
3 \section wait_up_s Wait for finger up
4 
5 @startuml
6 Host --> BioMcu: CMD_WAIT \nARG_FINGER_UP \nARG_TIMEOUT[timeout]
7 ... Wait for finger up...
8 BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result]
9 @enduml
10 ***
11 
12 \section wait_down_s Wait for finger down
13 
14 @startuml
15 Host --> BioMcu: CMD_WAIT \nARG_FINGER_DOWN \nARG_TIMEOUT[timeout]
16 ... Wait for finger down...
17 BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result]
18 @enduml
19 ***
20 
21 \section sensor_reset_s Reset sensor
22 
23 @startuml
24 Host --> BioMcu : CMD_SENSOR \nARG_RESET
25 rnote over BioMcu : fpc_bep_sensor_reset
26 BioMcu --> Host : CMD_SENSOR \nARG_RESULT[bep_result]
27 @enduml
28 ***
-
- - - - diff --git a/hcp/doxygen/html/9__device_8md.html b/hcp/doxygen/html/9__device_8md.html deleted file mode 100644 index 34a3526..0000000 --- a/hcp/doxygen/html/9__device_8md.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/9_device.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/9_device.md File Reference
-
- -
- - - - diff --git a/hcp/doxygen/html/9__device_8md_source.html b/hcp/doxygen/html/9__device_8md_source.html deleted file mode 100644 index ff87129..0000000 --- a/hcp/doxygen/html/9__device_8md_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Host Communication Protocol: doc/md/9_device.md Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
doc/md/9_device.md
-
-
-Go to the documentation of this file.
1 \page device Device operations
2 
3 \section reset_d Reset device
4 
5 @startuml
6 Host --> BioMcu: CMD_RESET
7 BioMcu --> Host: CMD_RESET \nARG_RESULT[bep_result]
8 rnote over BioMcu: Reset
9 @enduml
10 ***
-
- - - - diff --git a/hcp/doxygen/html/annotated.html b/hcp/doxygen/html/annotated.html deleted file mode 100644 index 2be5b26..0000000 --- a/hcp/doxygen/html/annotated.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - -Host Communication Protocol: Data Structures - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
Data Structures
-
-
-
Here are the data structures with brief descriptions:
- - - - - - - -
 Cfpc_com_chain
 Cfpc_com_chain_private
 Cfpc_com_packet_link
 Cfpc_com_packet_transport
 Cfpc_hcp_arg_dataCommand Argument
 Cfpc_hcp_packetApplication Command Packet
-
-
-
- - - - diff --git a/hcp/doxygen/html/annotated_dup.js b/hcp/doxygen/html/annotated_dup.js deleted file mode 100644 index d5950a0..0000000 --- a/hcp/doxygen/html/annotated_dup.js +++ /dev/null @@ -1,9 +0,0 @@ -var annotated_dup = -[ - [ "fpc_com_chain", "structfpc__com__chain.html", "structfpc__com__chain" ], - [ "fpc_com_chain_private", "structfpc__com__chain__private.html", "structfpc__com__chain__private" ], - [ "fpc_com_packet_link", "structfpc__com__packet__link.html", "structfpc__com__packet__link" ], - [ "fpc_com_packet_transport", "structfpc__com__packet__transport.html", "structfpc__com__packet__transport" ], - [ "fpc_hcp_arg_data", "structfpc__hcp__arg__data.html", "structfpc__hcp__arg__data" ], - [ "fpc_hcp_packet", "structfpc__hcp__packet.html", "structfpc__hcp__packet" ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/arrowdown.png b/hcp/doxygen/html/arrowdown.png deleted file mode 100644 index 0b63f6d..0000000 Binary files a/hcp/doxygen/html/arrowdown.png and /dev/null differ diff --git a/hcp/doxygen/html/arrowright.png b/hcp/doxygen/html/arrowright.png deleted file mode 100644 index c6ee22f..0000000 Binary files a/hcp/doxygen/html/arrowright.png and /dev/null differ diff --git a/hcp/doxygen/html/bc_s.png b/hcp/doxygen/html/bc_s.png deleted file mode 100644 index 224b29a..0000000 Binary files a/hcp/doxygen/html/bc_s.png and /dev/null differ diff --git a/hcp/doxygen/html/bdwn.png b/hcp/doxygen/html/bdwn.png deleted file mode 100644 index 940a0b9..0000000 Binary files a/hcp/doxygen/html/bdwn.png and /dev/null differ diff --git a/hcp/doxygen/html/bio.html b/hcp/doxygen/html/bio.html deleted file mode 100644 index 6cb56ad..0000000 --- a/hcp/doxygen/html/bio.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - -Host Communication Protocol: Biometrics - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - -
-
- -
-
-
- -
-
-
-
Biometrics
-
-
-

-Capture

-
-

-Extract

-
-

-Enroll

-
-

-Identify

-
-
-
- - - - diff --git a/hcp/doxygen/html/classes.html b/hcp/doxygen/html/classes.html deleted file mode 100644 index 4f3072a..0000000 --- a/hcp/doxygen/html/classes.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - -Host Communication Protocol: Data Structure Index - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
Data Structure Index
-
- -
- - - - diff --git a/hcp/doxygen/html/closed.png b/hcp/doxygen/html/closed.png deleted file mode 100644 index 98cc2c9..0000000 Binary files a/hcp/doxygen/html/closed.png and /dev/null differ diff --git a/hcp/doxygen/html/device.html b/hcp/doxygen/html/device.html deleted file mode 100644 index 7a316ec..0000000 --- a/hcp/doxygen/html/device.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - -Host Communication Protocol: Device operations - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - -
-
- -
-
-
- -
-
-
-
Device operations
-
-
-

-Reset device

-
-
-
- - - - diff --git a/hcp/doxygen/html/dir_000001_000000.html b/hcp/doxygen/html/dir_000001_000000.html deleted file mode 100644 index cf9d79f..0000000 --- a/hcp/doxygen/html/dir_000001_000000.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - -Host Communication Protocol: src -> inc Relation - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - -
-
- -
-
-
- - - - - - diff --git a/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html deleted file mode 100644 index 0ad6e8b..0000000 --- a/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - -Host Communication Protocol: src Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
src Directory Reference
-
-
-
-Directory dependency graph for src:
-
-
-
-
- - - - - - - - - - - -

-Files

 
file  fpc_com_transport.c [code]
 Communication transport layer implementation.
 
file  fpc_hcp.c [code]
 Host Communication Protocol implementation.
 
-
-
- - - - diff --git a/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js deleted file mode 100644 index a4b8e35..0000000 --- a/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js +++ /dev/null @@ -1,6 +0,0 @@ -var dir_68267d1309a1af8e8297ef4c3efbcdba = -[ - [ "fpc_com_link.c", "fpc__com__link_8c.html", "fpc__com__link_8c" ], - [ "fpc_com_transport.c", "fpc__com__transport_8c.html", "fpc__com__transport_8c" ], - [ "fpc_hcp.c", "fpc__hcp_8c.html", "fpc__hcp_8c" ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map b/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map deleted file mode 100644 index 75b1903..0000000 --- a/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 deleted file mode 100644 index 76e9230..0000000 --- a/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -078edd713872194e35fdc26e1b4695d3 \ No newline at end of file diff --git a/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg b/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg deleted file mode 100644 index c0f984a..0000000 --- a/hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - -src - - -dir_68267d1309a1af8e8297ef4c3efbcdba - - -src - - - - -dir_bfccd401955b95cf8c75461437045ac0 - - -inc - - - - -dir_68267d1309a1af8e8297ef4c3efbcdba->dir_bfccd401955b95cf8c75461437045ac0 - - - -4 - - - - - diff --git a/hcp/doxygen/html/dir_bfccd401955b95cf8c75461437045ac0.html b/hcp/doxygen/html/dir_bfccd401955b95cf8c75461437045ac0.html deleted file mode 100644 index 3347207..0000000 --- a/hcp/doxygen/html/dir_bfccd401955b95cf8c75461437045ac0.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -Host Communication Protocol: inc Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
inc Directory Reference
-
-
- - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  fpc_com_chain.h [code]
 Communication chain type definitions.
 
 
file  fpc_com_packets.h [code]
 Communication packet type definitions.
 
file  fpc_com_result.h [code]
 Communication result type definitions.
 
file  fpc_com_transport.h [code]
 Communication transport interface.
 
file  fpc_hcp.h [code]
 Host Communication Protocol interface.
 
file  fpc_hcp_common.h [code]
 Host Communication Protocol common type definitions.
 
-
-
- - - - diff --git a/hcp/doxygen/html/dir_bfccd401955b95cf8c75461437045ac0.js b/hcp/doxygen/html/dir_bfccd401955b95cf8c75461437045ac0.js deleted file mode 100644 index 1177085..0000000 --- a/hcp/doxygen/html/dir_bfccd401955b95cf8c75461437045ac0.js +++ /dev/null @@ -1,10 +0,0 @@ -var dir_bfccd401955b95cf8c75461437045ac0 = -[ - [ "fpc_com_chain.h", "fpc__com__chain_8h.html", "fpc__com__chain_8h" ], - [ "fpc_com_link.h", "fpc__com__link_8h.html", "fpc__com__link_8h" ], - [ "fpc_com_packets.h", "fpc__com__packets_8h.html", "fpc__com__packets_8h" ], - [ "fpc_com_result.h", "fpc__com__result_8h.html", "fpc__com__result_8h" ], - [ "fpc_com_transport.h", "fpc__com__transport_8h.html", "fpc__com__transport_8h" ], - [ "fpc_hcp.h", "fpc__hcp_8h.html", "fpc__hcp_8h" ], - [ "fpc_hcp_common.h", "fpc__hcp__common_8h.html", "fpc__hcp__common_8h" ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/doc.png b/hcp/doxygen/html/doc.png deleted file mode 100644 index 17edabf..0000000 Binary files a/hcp/doxygen/html/doc.png and /dev/null differ diff --git a/hcp/doxygen/html/doxygen.css b/hcp/doxygen/html/doxygen.css deleted file mode 100644 index 1425ec5..0000000 --- a/hcp/doxygen/html/doxygen.css +++ /dev/null @@ -1,1475 +0,0 @@ -/* The standard CSS for doxygen 1.8.11 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #ffffff; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 4px 6px; - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line:after { - content:"\000A"; - white-space: pre; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - -div.classindex ul { - list-style: none; - padding-left: 0; -} - -div.classindex span.ai { - display: inline-block; -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #DEE4F0; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: bold; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - border-top-left-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 10px 2px 10px; - background-color: #FBFCFD; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view inside a (index) page */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #9CAFD4; - border-bottom: 1px solid #9CAFD4; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; -} - -.arrow { - color: #9CAFD4; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; - font-size: 80%; - display: inline-block; - width: 16px; - height: 22px; -} - -.icon { - font-family: Arial, Helvetica; - font-weight: bold; - font-size: 12px; - height: 14px; - width: 16px; - display: inline-block; - background-color: #728DC1; - color: white; - text-align: center; - border-radius: 4px; - margin-left: 2px; - margin-right: 2px; -} - -.icona { - width: 24px; - height: 22px; - display: inline-block; -} - -.iconfopen { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.iconfclosed { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.icondoc { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('doc.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -table.directory { - font: 400 14px Roboto,sans-serif; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable caption { - caption-side: top; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -table.classindex -{ - margin: 10px; - white-space: nowrap; - margin-left: 3%; - margin-right: 3%; - width: 94%; - border: 0; - border-spacing: 0; - padding: 0; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -dl -{ - padding: 0 0 0 10px; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ -dl.section -{ - margin-left: 0px; - padding-left: 0px; -} - -dl.note -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00D000; -} - -dl.deprecated -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #505050; -} - -dl.todo -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00C0E0; -} - -dl.test -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #3030E0; -} - -dl.bug -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectalign -{ - vertical-align: middle; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 8px 10px 10px; - width: 200px; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - diff --git a/hcp/doxygen/html/doxygen.png b/hcp/doxygen/html/doxygen.png deleted file mode 100644 index 3ff17d8..0000000 Binary files a/hcp/doxygen/html/doxygen.png and /dev/null differ diff --git a/hcp/doxygen/html/dynsections.js b/hcp/doxygen/html/dynsections.js deleted file mode 100644 index 1e6bf07..0000000 --- a/hcp/doxygen/html/dynsections.js +++ /dev/null @@ -1,104 +0,0 @@ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - -Host Communication Protocol: File List - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
File List
-
-
-
Here is a list of all files with brief descriptions:
-
[detail level 12]
- - - - - - - - - - - - -
  inc
 fpc_com_chain.hCommunication chain type definitions
 fpc_com_link.hCommunication link interface
 fpc_com_packets.hCommunication packet type definitions
 fpc_com_result.hCommunication result type definitions
 fpc_com_transport.hCommunication transport interface
 fpc_hcp.hHost Communication Protocol interface
 fpc_hcp_common.hHost Communication Protocol common type definitions
  src
 fpc_com_link.cCommunication link layer implementation
 fpc_com_transport.cCommunication transport layer implementation
 fpc_hcp.cHost Communication Protocol implementation
-
-
-
- - - - diff --git a/hcp/doxygen/html/files.js b/hcp/doxygen/html/files.js deleted file mode 100644 index 0a216ca..0000000 --- a/hcp/doxygen/html/files.js +++ /dev/null @@ -1,5 +0,0 @@ -var files = -[ - [ "inc", "dir_bfccd401955b95cf8c75461437045ac0.html", "dir_bfccd401955b95cf8c75461437045ac0" ], - [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/folderclosed.png b/hcp/doxygen/html/folderclosed.png deleted file mode 100644 index bb8ab35..0000000 Binary files a/hcp/doxygen/html/folderclosed.png and /dev/null differ diff --git a/hcp/doxygen/html/folderopen.png b/hcp/doxygen/html/folderopen.png deleted file mode 100644 index d6c7f67..0000000 Binary files a/hcp/doxygen/html/folderopen.png and /dev/null differ diff --git a/hcp/doxygen/html/fpc__com__chain_8h.html b/hcp/doxygen/html/fpc__com__chain_8h.html deleted file mode 100644 index c91c9e8..0000000 --- a/hcp/doxygen/html/fpc__com__chain_8h.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_com_chain.h File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_com_chain.h File Reference
-
-
- -

Communication chain type definitions. -More...

-
#include <stdint.h>
-#include "fpc_com_result.h"
-#include "fpc_hcp_common.h"
-#include "fpc_com_packets.h"
-
-Include dependency graph for fpc_com_chain.h:
-
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-
-

Go to the source code of this file.

- - - - - - -

-Data Structures

struct  fpc_com_chain_private
 
struct  fpc_com_chain
 
- - - - - - - -

-Typedefs

typedef struct fpc_com_chain_private fpc_com_chain_private_t
 Communication chain private variables. More...
 
typedef struct fpc_com_chain fpc_com_chain_t
 Communication chain. More...
 
- - - - -

-Enumerations

enum  fpc_com_chain_dir_t {
-  FPC_COM_CHAIN_TX = 0, -
-  FPC_COM_CHAIN_RX = 1 -
- }
 Communication chain direction type. More...
 
-

Detailed Description

-

Communication chain type definitions.

- -

Definition in file fpc_com_chain.h.

-

Typedef Documentation

- -
-
- -

Communication chain private variables.

- -

Definition at line 34 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
typedef struct fpc_com_chain fpc_com_chain_t
-
- -

Communication chain.

- -

Definition at line 48 of file fpc_com_chain.h.

- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum fpc_com_chain_dir_t
-
- -

Communication chain direction type.

- - - -
Enumerator
FPC_COM_CHAIN_TX  -
FPC_COM_CHAIN_RX  -
- -

Definition at line 149 of file fpc_com_chain.h.

- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__chain_8h.js b/hcp/doxygen/html/fpc__com__chain_8h.js deleted file mode 100644 index a70f492..0000000 --- a/hcp/doxygen/html/fpc__com__chain_8h.js +++ /dev/null @@ -1,11 +0,0 @@ -var fpc__com__chain_8h = -[ - [ "fpc_com_chain_private", "structfpc__com__chain__private.html", "structfpc__com__chain__private" ], - [ "fpc_com_chain", "structfpc__com__chain.html", "structfpc__com__chain" ], - [ "fpc_com_chain_private_t", "fpc__com__chain_8h.html#a0983b70df0d560f35537acc24ecc0d0d", null ], - [ "fpc_com_chain_t", "fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de", null ], - [ "fpc_com_chain_dir_t", "fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005", [ - [ "FPC_COM_CHAIN_TX", "fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005afe8870bc644ab21ffad73d3045febd4d", null ], - [ "FPC_COM_CHAIN_RX", "fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005aa50bc934637a1ceea907810ccdd36e1c", null ] - ] ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__chain_8h__dep__incl.map b/hcp/doxygen/html/fpc__com__chain_8h__dep__incl.map deleted file mode 100644 index 41888bd..0000000 --- a/hcp/doxygen/html/fpc__com__chain_8h__dep__incl.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/hcp/doxygen/html/fpc__com__chain_8h__dep__incl.md5 b/hcp/doxygen/html/fpc__com__chain_8h__dep__incl.md5 deleted file mode 100644 index fb067aa..0000000 --- a/hcp/doxygen/html/fpc__com__chain_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1da3230b9ede79419647e0f9db2fcf4a \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__chain_8h__dep__incl.svg b/hcp/doxygen/html/fpc__com__chain_8h__dep__incl.svg deleted file mode 100644 index 72cca7f..0000000 --- a/hcp/doxygen/html/fpc__com__chain_8h__dep__incl.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - -inc/fpc_com_chain.h - - -Node1 - -inc/fpc_com_chain.h - - -Node2 - - -inc/fpc_com_link.h - - - - -Node1->Node2 - - - - -Node5 - - -inc/fpc_com_transport.h - - - - -Node1->Node5 - - - - -Node6 - - -inc/fpc_hcp.h - - - - -Node1->Node6 - - - - -Node3 - - -src/fpc_com_link.c - - - - -Node2->Node3 - - - - -Node4 - - -src/fpc_com_transport.c - - - - -Node2->Node4 - - - - -Node5->Node4 - - - - -Node7 - - -src/fpc_hcp.c - - - - -Node6->Node7 - - - - - diff --git a/hcp/doxygen/html/fpc__com__chain_8h__incl.map b/hcp/doxygen/html/fpc__com__chain_8h__incl.map deleted file mode 100644 index 65def15..0000000 --- a/hcp/doxygen/html/fpc__com__chain_8h__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/hcp/doxygen/html/fpc__com__chain_8h__incl.md5 b/hcp/doxygen/html/fpc__com__chain_8h__incl.md5 deleted file mode 100644 index 6475780..0000000 --- a/hcp/doxygen/html/fpc__com__chain_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f3463291a698aa7de197e31a9e7ef155 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__chain_8h__incl.svg b/hcp/doxygen/html/fpc__com__chain_8h__incl.svg deleted file mode 100644 index 77c3842..0000000 --- a/hcp/doxygen/html/fpc__com__chain_8h__incl.svg +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - -inc/fpc_com_chain.h - - -Node1 - -inc/fpc_com_chain.h - - -Node2 - -stdint.h - - -Node1->Node2 - - - - -Node3 - - -fpc_com_result.h - - - - -Node1->Node3 - - - - -Node4 - - -fpc_hcp_common.h - - - - -Node1->Node4 - - - - -Node6 - - -fpc_com_packets.h - - - - -Node1->Node6 - - - - -Node3->Node2 - - - - -Node4->Node2 - - - - -Node5 - -stdbool.h - - -Node4->Node5 - - - - -Node6->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__com__chain_8h_source.html b/hcp/doxygen/html/fpc__com__chain_8h_source.html deleted file mode 100644 index 77f33e3..0000000 --- a/hcp/doxygen/html/fpc__com__chain_8h_source.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_com_chain.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
fpc_com_chain.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Fingerprint Cards AB
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #ifndef FPC_COM_CHAIN_H
23 #define FPC_COM_CHAIN_H
24 
25 #include <stdint.h>
26 
27 #include "fpc_com_result.h"
28 #include "fpc_hcp_common.h"
29 #include "fpc_com_packets.h"
30 
40  uint16_t hcp_seq_len;
42  uint16_t hcp_seq_nr;
43 };
44 
50 struct fpc_com_chain {
53 
59  void *(*argument_allocator)(fpc_hcp_cmd_t cmd, fpc_hcp_arg_t arg, uint16_t size,
60  bool *free_data, void *context);
62  void (*argument_free)(fpc_hcp_cmd_t cmd, fpc_hcp_arg_data_t *arg_data, void *context);
66  uint32_t (*crc_calc)(uint32_t start, const void *data, uint32_t size);
67 
73  fpc_com_result_t (*app_tx)(fpc_com_chain_t *chain);
75  fpc_com_result_t (*app_rx)(fpc_com_chain_t *chain);
77  uint16_t (*app_overhead_get)(uint16_t *offset);
79  uint16_t app_packet_size[2];
81  uint16_t app_mtu_size[2];
83  uint8_t *app_mtu_buffer[2];
95  uint16_t (*tsp_overhead_get)(uint16_t *offset);
103  uint16_t (*link_overhead_get)(uint16_t *offset);
113  fpc_com_result_t (*phy_tx)(uint16_t size, const uint8_t *buffer, uint32_t timeout,
114  void *session);
116  fpc_com_result_t (*phy_rx)(uint16_t size, uint8_t *buffer, uint32_t timeout,
117  void *session);
119  uint16_t phy_mtu_size[2];
121  uint8_t *phy_mtu_buffer[2];
123  uint32_t phy_timeout_tx;
125  uint32_t phy_timeout_rx;
130 
137  void *session;
143  void *context;
144 };
145 
149 typedef enum {
153 
154 #endif /* FPC_COM_CHAIN_H */
uint16_t fpc_hcp_cmd_t
- - -
Communication result type definitions.
- -
Application Command Packet.
-
uint32_t phy_timeout_tx
-
fpc_com_chain_dir_t
Communication chain direction type.
-
void * session
User session pointer. User private stuff, to be able to pass necessary info from the layer that calls...
- -
void * context
User context pointer. User private stuff, to be able to pass nessecary context to argument_allocator ...
-
fpc_com_channel_t channel
-
Command Argument.
- -
uint32_t phy_timeout_rx
- -
uint16_t fpc_hcp_arg_t
-
uint8_t fpc_com_result_t
-
fpc_hcp_packet_t * hcp_packet
Definition: fpc_com_chain.h:38
-
fpc_com_chain_private_t private_vars
-
uint16_t fpc_com_channel_t
- -
Host Communication Protocol common type definitions.
-
Communication packet type definitions.
- -
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__link_8c.html b/hcp/doxygen/html/fpc__com__link_8c.html deleted file mode 100644 index a39bf0b..0000000 --- a/hcp/doxygen/html/fpc__com__link_8c.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - -Host Communication Protocol: src/fpc_com_link.c File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_com_link.c File Reference
-
-
- -

Communication link layer implementation. -More...

-
#include <string.h>
-#include <stdlib.h>
-#include "fpc_com_link.h"
-
-Include dependency graph for fpc_com_link.c:
-
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - -

-Functions

fpc_com_result_t fpc_com_link_transmit (fpc_com_packet_link_t *packet, fpc_com_chain_t *chain)
 Sends a packet over the physical link in blocking mode. More...
 
fpc_com_result_t fpc_com_link_receive (fpc_com_packet_link_t *packet, fpc_com_chain_t *chain)
 Receives a packet from the physical link. More...
 
uint16_t fpc_com_link_get_overhead (uint16_t *offset)
 Returns the overhead of the layer. More...
 
-

Detailed Description

-

Communication link layer implementation.

- -

Definition in file fpc_com_link.c.

-

Function Documentation

- -
-
- - - - - - - - -
uint16_t fpc_com_link_get_overhead (uint16_t * offset)
-
- -

Returns the overhead of the layer.

-
Parameters
- - -
[out]offsetThe offset to the packet data.
-
-
-
Returns
Overhead size in bytes.
- -

Definition at line 126 of file fpc_com_link.c.

- -

References fpc_com_packet_link::channel, fpc_com_packet_link::crc, and fpc_com_packet_link::size.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_com_link_receive (fpc_com_packet_link_tpacket,
fpc_com_chain_tchain 
)
-
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_com_link_transmit (fpc_com_packet_link_tpacket,
fpc_com_chain_tchain 
)
-
- -

Sends a packet over the physical link in blocking mode.

-
Parameters
- - - -
[in]packetPacket to transmit.
[in]chainThe communication chain to use.
-
-
-
Returns
fpc_com_result_t
- -

Definition at line 27 of file fpc_com_link.c.

- -

References fpc_com_packet_link::channel, fpc_com_packet_link::crc, fpc_com_chain::crc_calc, fpc_com_packet_link::data, FPC_COM_ACK, FPC_COM_CHAIN_TX, fpc_com_link_get_overhead(), FPC_COM_RESULT_INVALID_ARGUMENT, FPC_COM_RESULT_IO_ERROR, FPC_COM_RESULT_OK, FPC_COM_RESULT_TIMEOUT, fpc_com_chain::phy_mtu_buffer, fpc_com_chain::phy_rx, fpc_com_chain::phy_timeout_rx, fpc_com_chain::phy_timeout_tx, fpc_com_chain::phy_tx, fpc_com_chain::session, and fpc_com_packet_link::size.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__link_8c.js b/hcp/doxygen/html/fpc__com__link_8c.js deleted file mode 100644 index 7a7d60f..0000000 --- a/hcp/doxygen/html/fpc__com__link_8c.js +++ /dev/null @@ -1,6 +0,0 @@ -var fpc__com__link_8c = -[ - [ "fpc_com_link_get_overhead", "fpc__com__link_8c.html#a3e60e21a5ac4ad4881e4929de2f3c2f4", null ], - [ "fpc_com_link_receive", "fpc__com__link_8c.html#ae64b80cd91fbfe44abc06dc52eacf739", null ], - [ "fpc_com_link_transmit", "fpc__com__link_8c.html#a43a8a308255ea41e7b7cdefd63a90d14", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__link_8c__incl.map b/hcp/doxygen/html/fpc__com__link_8c__incl.map deleted file mode 100644 index f80ec9e..0000000 --- a/hcp/doxygen/html/fpc__com__link_8c__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/hcp/doxygen/html/fpc__com__link_8c__incl.md5 b/hcp/doxygen/html/fpc__com__link_8c__incl.md5 deleted file mode 100644 index 372b027..0000000 --- a/hcp/doxygen/html/fpc__com__link_8c__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -5ae4569dea06540c6706ee9e9b27db36 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__link_8c__incl.svg b/hcp/doxygen/html/fpc__com__link_8c__incl.svg deleted file mode 100644 index 26e6a9f..0000000 --- a/hcp/doxygen/html/fpc__com__link_8c__incl.svg +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -src/fpc_com_link.c - - -Node1 - -src/fpc_com_link.c - - -Node2 - -string.h - - -Node1->Node2 - - - - -Node3 - -stdlib.h - - -Node1->Node3 - - - - -Node4 - - -fpc_com_link.h - - - - -Node1->Node4 - - - - -Node5 - -stdbool.h - - -Node4->Node5 - - - - -Node6 - -stdint.h - - -Node4->Node6 - - - - -Node7 - - -fpc_com_result.h - - - - -Node4->Node7 - - - - -Node8 - - -fpc_com_chain.h - - - - -Node4->Node8 - - - - -Node7->Node6 - - - - -Node8->Node6 - - - - -Node8->Node7 - - - - -Node9 - - -fpc_hcp_common.h - - - - -Node8->Node9 - - - - -Node10 - - -fpc_com_packets.h - - - - -Node8->Node10 - - - - -Node9->Node5 - - - - -Node9->Node6 - - - - -Node10->Node6 - - - - - diff --git a/hcp/doxygen/html/fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.map b/hcp/doxygen/html/fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.map deleted file mode 100644 index 621ae0a..0000000 --- a/hcp/doxygen/html/fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.md5 b/hcp/doxygen/html/fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.md5 deleted file mode 100644 index 7012d06..0000000 --- a/hcp/doxygen/html/fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -1079db44f9fcfecbed78b0a2bbb98b54 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.svg b/hcp/doxygen/html/fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.svg deleted file mode 100644 index 1fce018..0000000 --- a/hcp/doxygen/html/fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -fpc_com_link_transmit - - -Node1 - -fpc_com_link_transmit - - -Node2 - - -fpc_com_link_get_overhead - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__com__link_8c_source.html b/hcp/doxygen/html/fpc__com__link_8c_source.html deleted file mode 100644 index 49f5ee4..0000000 --- a/hcp/doxygen/html/fpc__com__link_8c_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -Host Communication Protocol: src/fpc_com_link.c Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
fpc_com_link.c
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Fingerprint Cards AB
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #include <string.h>
23 #include <stdlib.h>
24 
25 #include "fpc_com_link.h"
26 
28 {
29  uint32_t ack;
30  uint16_t size;
31  fpc_com_result_t result;
32 
33  if (packet == NULL) {
35  goto exit;
36  }
37 
38  /* Calculate CRC for payload */
39  packet->crc = chain->crc_calc(0, packet->data, packet->size);
40 
41  /* Get total size to be transfered over PHY layer */
42  size = packet->size + fpc_com_link_get_overhead(NULL);
43 
45  *((uint16_t *)(chain->phy_mtu_buffer[FPC_COM_CHAIN_TX] + sizeof(packet->channel)))
46  = packet->size;
47  /* Copy CRC to PHY mtu buffer */
48  memcpy(packet->data + packet->size, &packet->crc, sizeof(packet->crc));
49 
50  /* Send Packet */
51  result = chain->phy_tx(size, chain->phy_mtu_buffer[FPC_COM_CHAIN_TX], chain->phy_timeout_tx,
52  chain->session);
53  if (result != FPC_COM_RESULT_OK) {
54  goto exit;
55  }
56 
57  /* Receive ACK */
58  result = chain->phy_rx(sizeof(ack), (uint8_t *)&ack, chain->phy_timeout_rx, chain->session);
59  /* Handle no ack and timeout as IO error */
60  if (ack != FPC_COM_ACK || result == FPC_COM_RESULT_TIMEOUT) {
61  result = FPC_COM_RESULT_IO_ERROR;
62  goto exit;
63  }
64  /* Handle rest as normal error */
65  if (result != FPC_COM_RESULT_OK) {
66  goto exit;
67  }
68 
69 exit:
70  return result;
71 }
72 
74 {
75  bool status;
76  uint32_t ack = FPC_COM_ACK;
77  const uint8_t header_size = sizeof(packet->channel) + sizeof(packet->size);
78  fpc_com_result_t result;
79 
80  if (packet == NULL) {
82  goto exit;
83  }
84 
85  /* Receive Header */
86  result = chain->phy_rx(header_size, chain->phy_mtu_buffer[FPC_COM_CHAIN_RX],
87  chain->phy_timeout_rx, chain->session);
88  if (result != FPC_COM_RESULT_OK) {
89  goto exit;
90  }
91 
93  packet->size = *((uint16_t *) (chain->phy_mtu_buffer[FPC_COM_CHAIN_RX]
94  + sizeof(fpc_com_channel_t)));
95  packet->data = chain->phy_mtu_buffer[FPC_COM_CHAIN_RX] + header_size;
96 
97  /* Check if packet size is valid */
98  if (chain->phy_mtu_size[FPC_COM_CHAIN_RX]
99  < (header_size + packet->size + sizeof(packet->crc))) {
100  result = FPC_COM_RESULT_IO_ERROR;
101  goto exit;
102  }
103 
104  /* Receive Payload */
105  result = chain->phy_rx(packet->size + sizeof(packet->crc), packet->data,
106  chain->phy_timeout_rx, chain->session);
107  if (result != FPC_COM_RESULT_OK) {
108  goto exit;
109  }
110 
111  /* Check incoming packet CRC */
112  memcpy(&packet->crc, packet->data + packet->size, sizeof(packet->crc));
113  status = (packet->crc == chain->crc_calc(0, packet->data, packet->size));
114  if (!status) {
115  result = FPC_COM_RESULT_IO_ERROR;
116  goto exit;
117  }
118 
119  /* Send ACK */
120  result = chain->phy_tx(sizeof(ack), (uint8_t *)&ack, chain->phy_timeout_tx, chain->session);
121 
122 exit:
123  return result;
124 }
125 
126 uint16_t fpc_com_link_get_overhead(uint16_t *offset)
127 {
128  fpc_com_packet_link_t *packet;
129  static const uint16_t internal_offset = sizeof(packet->channel) + sizeof(packet->size);
130 
131  if (offset) {
132  *offset = internal_offset;
133  }
134  return internal_offset + sizeof(packet->crc);
135 }
- -
uint8_t * phy_mtu_buffer[2]
-
uint16_t phy_mtu_size[2]
- - -
fpc_com_result_t(* phy_rx)(uint16_t size, uint8_t *buffer, uint32_t timeout, void *session)
-
uint32_t phy_timeout_tx
- -
void * session
User session pointer. User private stuff, to be able to pass necessary info from the layer that calls...
- - - -
uint32_t(* crc_calc)(uint32_t start, const void *data, uint32_t size)
Definition: fpc_com_chain.h:66
-
#define FPC_COM_ACK
- -
fpc_com_result_t(* phy_tx)(uint16_t size, const uint8_t *buffer, uint32_t timeout, void *session)
-
uint32_t phy_timeout_rx
- - -
uint8_t fpc_com_result_t
- -
uint16_t fpc_com_channel_t
- - - - -
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__link_8h.html b/hcp/doxygen/html/fpc__com__link_8h.html deleted file mode 100644 index 5340057..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_com_link.h File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_com_link.h File Reference
-
-
- -

Communication link interface. -More...

-
#include <stdbool.h>
-#include <stdint.h>
-#include "fpc_com_result.h"
-#include "fpc_com_chain.h"
-
-Include dependency graph for fpc_com_link.h:
-
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - -

-Functions

fpc_com_result_t fpc_com_link_transmit (fpc_com_packet_link_t *packet, fpc_com_chain_t *chain)
 Sends a packet over the physical link in blocking mode. More...
 
fpc_com_result_t fpc_com_link_receive (fpc_com_packet_link_t *packet, fpc_com_chain_t *chain)
 Receives a packet from the physical link. More...
 
uint16_t fpc_com_link_get_overhead (uint16_t *offset)
 Returns the overhead of the layer. More...
 
-

Detailed Description

-

Communication link interface.

- -

Definition in file fpc_com_link.h.

-

Function Documentation

- -
-
- - - - - - - - -
uint16_t fpc_com_link_get_overhead (uint16_t * offset)
-
- -

Returns the overhead of the layer.

-
Parameters
- - -
[out]offsetThe offset to the packet data.
-
-
-
Returns
Overhead size in bytes.
- -

Definition at line 126 of file fpc_com_link.c.

- -

References fpc_com_packet_link::channel, fpc_com_packet_link::crc, and fpc_com_packet_link::size.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_com_link_receive (fpc_com_packet_link_tpacket,
fpc_com_chain_tchain 
)
-
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_com_link_transmit (fpc_com_packet_link_tpacket,
fpc_com_chain_tchain 
)
-
- -

Sends a packet over the physical link in blocking mode.

-
Parameters
- - - -
[in]packetPacket to transmit.
[in]chainThe communication chain to use.
-
-
-
Returns
fpc_com_result_t
- -

Definition at line 27 of file fpc_com_link.c.

- -

References fpc_com_packet_link::channel, fpc_com_packet_link::crc, fpc_com_chain::crc_calc, fpc_com_packet_link::data, FPC_COM_ACK, FPC_COM_CHAIN_TX, fpc_com_link_get_overhead(), FPC_COM_RESULT_INVALID_ARGUMENT, FPC_COM_RESULT_IO_ERROR, FPC_COM_RESULT_OK, FPC_COM_RESULT_TIMEOUT, fpc_com_chain::phy_mtu_buffer, fpc_com_chain::phy_rx, fpc_com_chain::phy_timeout_rx, fpc_com_chain::phy_timeout_tx, fpc_com_chain::phy_tx, fpc_com_chain::session, and fpc_com_packet_link::size.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__link_8h.js b/hcp/doxygen/html/fpc__com__link_8h.js deleted file mode 100644 index 31e19e9..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h.js +++ /dev/null @@ -1,6 +0,0 @@ -var fpc__com__link_8h = -[ - [ "fpc_com_link_get_overhead", "fpc__com__link_8h.html#a3e60e21a5ac4ad4881e4929de2f3c2f4", null ], - [ "fpc_com_link_receive", "fpc__com__link_8h.html#ae64b80cd91fbfe44abc06dc52eacf739", null ], - [ "fpc_com_link_transmit", "fpc__com__link_8h.html#a43a8a308255ea41e7b7cdefd63a90d14", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__link_8h__dep__incl.map b/hcp/doxygen/html/fpc__com__link_8h__dep__incl.map deleted file mode 100644 index e1b2862..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/hcp/doxygen/html/fpc__com__link_8h__dep__incl.md5 b/hcp/doxygen/html/fpc__com__link_8h__dep__incl.md5 deleted file mode 100644 index dd31e89..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -25bb356645f94e2250849d59b6042d5f \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__link_8h__dep__incl.svg b/hcp/doxygen/html/fpc__com__link_8h__dep__incl.svg deleted file mode 100644 index befe4d2..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h__dep__incl.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -inc/fpc_com_link.h - - -Node1 - -inc/fpc_com_link.h - - -Node2 - - -src/fpc_com_link.c - - - - -Node1->Node2 - - - - -Node3 - - -src/fpc_com_transport.c - - - - -Node1->Node3 - - - - - diff --git a/hcp/doxygen/html/fpc__com__link_8h__incl.map b/hcp/doxygen/html/fpc__com__link_8h__incl.map deleted file mode 100644 index 905eabf..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/hcp/doxygen/html/fpc__com__link_8h__incl.md5 b/hcp/doxygen/html/fpc__com__link_8h__incl.md5 deleted file mode 100644 index fcda822..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -2693b0444fc65501786e794e5550d85c \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__link_8h__incl.svg b/hcp/doxygen/html/fpc__com__link_8h__incl.svg deleted file mode 100644 index a6f11c1..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h__incl.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -inc/fpc_com_link.h - - -Node1 - -inc/fpc_com_link.h - - -Node2 - -stdbool.h - - -Node1->Node2 - - - - -Node3 - -stdint.h - - -Node1->Node3 - - - - -Node4 - - -fpc_com_result.h - - - - -Node1->Node4 - - - - -Node5 - - -fpc_com_chain.h - - - - -Node1->Node5 - - - - -Node4->Node3 - - - - -Node5->Node3 - - - - -Node5->Node4 - - - - -Node6 - - -fpc_hcp_common.h - - - - -Node5->Node6 - - - - -Node7 - - -fpc_com_packets.h - - - - -Node5->Node7 - - - - -Node6->Node2 - - - - -Node6->Node3 - - - - -Node7->Node3 - - - - - diff --git a/hcp/doxygen/html/fpc__com__link_8h_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.map b/hcp/doxygen/html/fpc__com__link_8h_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.map deleted file mode 100644 index 621ae0a..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__com__link_8h_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.md5 b/hcp/doxygen/html/fpc__com__link_8h_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.md5 deleted file mode 100644 index 7012d06..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -1079db44f9fcfecbed78b0a2bbb98b54 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__link_8h_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.svg b/hcp/doxygen/html/fpc__com__link_8h_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.svg deleted file mode 100644 index 1fce018..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -fpc_com_link_transmit - - -Node1 - -fpc_com_link_transmit - - -Node2 - - -fpc_com_link_get_overhead - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__com__link_8h_source.html b/hcp/doxygen/html/fpc__com__link_8h_source.html deleted file mode 100644 index 72874d3..0000000 --- a/hcp/doxygen/html/fpc__com__link_8h_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_com_link.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
fpc_com_link.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Fingerprint Cards AB
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #ifndef FPC_COM_LINK_H
23 #define FPC_COM_LINK_H
24 
25 #include <stdbool.h>
26 #include <stdint.h>
27 
28 #include "fpc_com_result.h"
29 #include "fpc_com_chain.h"
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif /* __cplusplus */
34 
43 
52 
59 uint16_t fpc_com_link_get_overhead(uint16_t *offset);
60 
61 #ifdef __cplusplus
62 }
63 #endif /* __cplusplus */
64 
65 #endif /* FPC_COM_LINK_H */
-
Communication result type definitions.
- - -
Communication chain type definitions.
-
uint8_t fpc_com_result_t
- - -
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__packets_8h.html b/hcp/doxygen/html/fpc__com__packets_8h.html deleted file mode 100644 index cf73c5d..0000000 --- a/hcp/doxygen/html/fpc__com__packets_8h.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_com_packets.h File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_com_packets.h File Reference
-
-
- -

Communication packet type definitions. -More...

-
#include <stdint.h>
-
-Include dependency graph for fpc_com_packets.h:
-
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-
-

Go to the source code of this file.

- - - - - - -

-Data Structures

struct  fpc_com_packet_transport
 
struct  fpc_com_packet_link
 
- - - -

-Macros

#define FPC_COM_ACK   0x7f01ff7f
 
- - - - - - - -

-Typedefs

typedef struct fpc_com_packet_transport fpc_com_packet_tsp_t
 
typedef uint16_t fpc_com_channel_t
 
typedef struct fpc_com_packet_link fpc_com_packet_link_t
 
- - - -

-Enumerations

enum  fpc_com_channel {
-  FPC_COM_CHANNEL_NONE = 0x00, -
-  FPC_COM_CHANNEL_CLEAR = 0x01, -
-  FPC_COM_CHANNEL_TLS = 0x02, -
-  FPC_COM_CHANNEL_END = 0xFF -
- }
 
-

Detailed Description

-

Communication packet type definitions.

- -

Definition in file fpc_com_packets.h.

-

Macro Definition Documentation

- -
-
- - - - -
#define FPC_COM_ACK   0x7f01ff7f
-
-

Communication acknowledge definition

- -

Definition at line 32 of file fpc_com_packets.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef uint16_t fpc_com_channel_t
-
-

Communication channel type

- -

Definition at line 58 of file fpc_com_packets.h.

- -
-
- -
-
- - - - -
typedef struct fpc_com_packet_link fpc_com_packet_link_t
-
-

Link layer packet

- -
-
- -
-
-

Transport layer packet.

- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum fpc_com_channel
-
-

Transport packet channels.

- - - - - -
Enumerator
FPC_COM_CHANNEL_NONE  -
FPC_COM_CHANNEL_CLEAR  -
FPC_COM_CHANNEL_TLS  -
FPC_COM_CHANNEL_END  -
- -

Definition at line 51 of file fpc_com_packets.h.

- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__packets_8h.js b/hcp/doxygen/html/fpc__com__packets_8h.js deleted file mode 100644 index 719f942..0000000 --- a/hcp/doxygen/html/fpc__com__packets_8h.js +++ /dev/null @@ -1,15 +0,0 @@ -var fpc__com__packets_8h = -[ - [ "fpc_com_packet_transport", "structfpc__com__packet__transport.html", "structfpc__com__packet__transport" ], - [ "fpc_com_packet_link", "structfpc__com__packet__link.html", "structfpc__com__packet__link" ], - [ "FPC_COM_ACK", "fpc__com__packets_8h.html#a4f4c239eb61e8e793498793c1be608f7", null ], - [ "fpc_com_channel_t", "fpc__com__packets_8h.html#a243c6cf0a9ab056a1fce6430bb88c2d8", null ], - [ "fpc_com_packet_link_t", "fpc__com__packets_8h.html#af6fc3a46c87f1ad2a452eb822f2a0942", null ], - [ "fpc_com_packet_tsp_t", "fpc__com__packets_8h.html#a056a2f08f90fe7e467988b2ddbc41f3c", null ], - [ "fpc_com_channel", "fpc__com__packets_8h.html#ad77ec293a161472c5ca6283ae1c944c8", [ - [ "FPC_COM_CHANNEL_NONE", "fpc__com__packets_8h.html#ad77ec293a161472c5ca6283ae1c944c8a82d8a35822a610caddc5c841e3a74a2a", null ], - [ "FPC_COM_CHANNEL_CLEAR", "fpc__com__packets_8h.html#ad77ec293a161472c5ca6283ae1c944c8aff1cc469181cd2df91ed52a2092748ed", null ], - [ "FPC_COM_CHANNEL_TLS", "fpc__com__packets_8h.html#ad77ec293a161472c5ca6283ae1c944c8ae9bbbecb694256ca41a9b57f101fb973", null ], - [ "FPC_COM_CHANNEL_END", "fpc__com__packets_8h.html#ad77ec293a161472c5ca6283ae1c944c8af73ea123cd946a1ef0109660569cd856", null ] - ] ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__packets_8h__dep__incl.map b/hcp/doxygen/html/fpc__com__packets_8h__dep__incl.map deleted file mode 100644 index 590a765..0000000 --- a/hcp/doxygen/html/fpc__com__packets_8h__dep__incl.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/hcp/doxygen/html/fpc__com__packets_8h__dep__incl.md5 b/hcp/doxygen/html/fpc__com__packets_8h__dep__incl.md5 deleted file mode 100644 index 88f83de..0000000 --- a/hcp/doxygen/html/fpc__com__packets_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -061c95db64158805437ca80c13b84b7d \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__packets_8h__dep__incl.svg b/hcp/doxygen/html/fpc__com__packets_8h__dep__incl.svg deleted file mode 100644 index 45b3697..0000000 --- a/hcp/doxygen/html/fpc__com__packets_8h__dep__incl.svg +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -inc/fpc_com_packets.h - - -Node1 - -inc/fpc_com_packets.h - - -Node2 - - -inc/fpc_com_chain.h - - - - -Node1->Node2 - - - - -Node3 - - -inc/fpc_com_link.h - - - - -Node2->Node3 - - - - -Node6 - - -inc/fpc_com_transport.h - - - - -Node2->Node6 - - - - -Node7 - - -inc/fpc_hcp.h - - - - -Node2->Node7 - - - - -Node4 - - -src/fpc_com_link.c - - - - -Node3->Node4 - - - - -Node5 - - -src/fpc_com_transport.c - - - - -Node3->Node5 - - - - -Node6->Node5 - - - - -Node8 - - -src/fpc_hcp.c - - - - -Node7->Node8 - - - - - diff --git a/hcp/doxygen/html/fpc__com__packets_8h__incl.map b/hcp/doxygen/html/fpc__com__packets_8h__incl.map deleted file mode 100644 index 2b9729a..0000000 --- a/hcp/doxygen/html/fpc__com__packets_8h__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/hcp/doxygen/html/fpc__com__packets_8h__incl.md5 b/hcp/doxygen/html/fpc__com__packets_8h__incl.md5 deleted file mode 100644 index 8993b28..0000000 --- a/hcp/doxygen/html/fpc__com__packets_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f1d62a394723cf9f4c0d14de4aab5e68 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__packets_8h__incl.svg b/hcp/doxygen/html/fpc__com__packets_8h__incl.svg deleted file mode 100644 index c7079f1..0000000 --- a/hcp/doxygen/html/fpc__com__packets_8h__incl.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - -inc/fpc_com_packets.h - - -Node1 - -inc/fpc_com_packets.h - - -Node2 - -stdint.h - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__com__packets_8h_source.html b/hcp/doxygen/html/fpc__com__packets_8h_source.html deleted file mode 100644 index a9b983c..0000000 --- a/hcp/doxygen/html/fpc__com__packets_8h_source.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_com_packets.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
fpc_com_packets.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Fingerprint Cards AB
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #ifndef FPC_COM_PACKETS_H
23 #define FPC_COM_PACKETS_H
24 
25 #include <stdint.h>
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif /* __cplusplus */
30 
32 #define FPC_COM_ACK 0x7f01ff7f
33 
37 typedef struct fpc_com_packet_transport {
39  uint16_t size;
41  uint16_t seq_len;
43  uint16_t seq_nr;
45  uint8_t *data;
47 
56 };
58 typedef uint16_t fpc_com_channel_t;
59 
61 typedef struct fpc_com_packet_link {
63  fpc_com_channel_t channel;
65  uint16_t size;
67  uint8_t *data;
69  uint32_t crc;
71 
72 #ifdef __cplusplus
73 }
74 #endif /* __cplusplus */
75 
76 #endif /* FPC_COM_PACKETS_H */
-
struct fpc_com_packet_link fpc_com_packet_link_t
-
fpc_com_channel
- - - - - - -
struct fpc_com_packet_transport fpc_com_packet_tsp_t
- - - - -
uint16_t fpc_com_channel_t
- - - -
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__result_8h.html b/hcp/doxygen/html/fpc__com__result_8h.html deleted file mode 100644 index ba641c1..0000000 --- a/hcp/doxygen/html/fpc__com__result_8h.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_com_result.h File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_com_result.h File Reference
-
-
- -

Communication result type definitions. -More...

-
#include <stdint.h>
-
-Include dependency graph for fpc_com_result.h:
-
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-
-

Go to the source code of this file.

- - - - -

-Typedefs

typedef uint8_t fpc_com_result_t
 
- - - -

-Enumerations

enum  fpc_com_result {
-  FPC_COM_RESULT_OK, -
-  FPC_COM_RESULT_NO_MEMORY, -
-  FPC_COM_RESULT_INVALID_ARGUMENT, -
-  FPC_COM_RESULT_NOT_IMPLEMENTED, -
-  FPC_COM_RESULT_IO_ERROR, -
-  FPC_COM_RESULT_TIMEOUT -
- }
 
-

Detailed Description

-

Communication result type definitions.

- -

Definition in file fpc_com_result.h.

-

Typedef Documentation

- -
-
- - - - -
typedef uint8_t fpc_com_result_t
-
-

Communication result type

- -

Definition at line 41 of file fpc_com_result.h.

- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum fpc_com_result
-
-

Communication result codes

- - - - - - - -
Enumerator
FPC_COM_RESULT_OK  -
FPC_COM_RESULT_NO_MEMORY  -
FPC_COM_RESULT_INVALID_ARGUMENT  -
FPC_COM_RESULT_NOT_IMPLEMENTED  -
FPC_COM_RESULT_IO_ERROR  -
FPC_COM_RESULT_TIMEOUT  -
- -

Definition at line 32 of file fpc_com_result.h.

- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__result_8h.js b/hcp/doxygen/html/fpc__com__result_8h.js deleted file mode 100644 index b1add6d..0000000 --- a/hcp/doxygen/html/fpc__com__result_8h.js +++ /dev/null @@ -1,12 +0,0 @@ -var fpc__com__result_8h = -[ - [ "fpc_com_result_t", "fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a", null ], - [ "fpc_com_result", "fpc__com__result_8h.html#a5435902ad319b641b2758a2f8f48897a", [ - [ "FPC_COM_RESULT_OK", "fpc__com__result_8h.html#a5435902ad319b641b2758a2f8f48897aaa4090b7c45045bce15b6b8d9cd7ef914", null ], - [ "FPC_COM_RESULT_NO_MEMORY", "fpc__com__result_8h.html#a5435902ad319b641b2758a2f8f48897aa5c99bdb5025135bc89f86391ed9cf039", null ], - [ "FPC_COM_RESULT_INVALID_ARGUMENT", "fpc__com__result_8h.html#a5435902ad319b641b2758a2f8f48897aa2e96fad27e661c9eb3bce808d0d7e92e", null ], - [ "FPC_COM_RESULT_NOT_IMPLEMENTED", "fpc__com__result_8h.html#a5435902ad319b641b2758a2f8f48897aa01c8c09db85b54df5cb355631c36fe4e", null ], - [ "FPC_COM_RESULT_IO_ERROR", "fpc__com__result_8h.html#a5435902ad319b641b2758a2f8f48897aa9018f4fe6916e76acf8f1a8391d9b80f", null ], - [ "FPC_COM_RESULT_TIMEOUT", "fpc__com__result_8h.html#a5435902ad319b641b2758a2f8f48897aa37ce8bdd82e871575b23e9f1d6f06dbf", null ] - ] ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__result_8h__dep__incl.map b/hcp/doxygen/html/fpc__com__result_8h__dep__incl.map deleted file mode 100644 index ec44453..0000000 --- a/hcp/doxygen/html/fpc__com__result_8h__dep__incl.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/hcp/doxygen/html/fpc__com__result_8h__dep__incl.md5 b/hcp/doxygen/html/fpc__com__result_8h__dep__incl.md5 deleted file mode 100644 index b12a1a6..0000000 --- a/hcp/doxygen/html/fpc__com__result_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -8c259507ddbf28df71e644395974c58b \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__result_8h__dep__incl.svg b/hcp/doxygen/html/fpc__com__result_8h__dep__incl.svg deleted file mode 100644 index 26f1de6..0000000 --- a/hcp/doxygen/html/fpc__com__result_8h__dep__incl.svg +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -inc/fpc_com_result.h - - -Node1 - -inc/fpc_com_result.h - - -Node2 - - -inc/fpc_com_chain.h - - - - -Node1->Node2 - - - - -Node3 - - -inc/fpc_com_link.h - - - - -Node1->Node3 - - - - -Node2->Node3 - - - - -Node6 - - -inc/fpc_com_transport.h - - - - -Node2->Node6 - - - - -Node7 - - -inc/fpc_hcp.h - - - - -Node2->Node7 - - - - -Node4 - - -src/fpc_com_link.c - - - - -Node3->Node4 - - - - -Node5 - - -src/fpc_com_transport.c - - - - -Node3->Node5 - - - - -Node6->Node5 - - - - -Node8 - - -src/fpc_hcp.c - - - - -Node7->Node8 - - - - - diff --git a/hcp/doxygen/html/fpc__com__result_8h__incl.map b/hcp/doxygen/html/fpc__com__result_8h__incl.map deleted file mode 100644 index 6fcc9b3..0000000 --- a/hcp/doxygen/html/fpc__com__result_8h__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/hcp/doxygen/html/fpc__com__result_8h__incl.md5 b/hcp/doxygen/html/fpc__com__result_8h__incl.md5 deleted file mode 100644 index 0f2eca8..0000000 --- a/hcp/doxygen/html/fpc__com__result_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -59ffa2fa2be94ddda3a06d18caab6576 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__result_8h__incl.svg b/hcp/doxygen/html/fpc__com__result_8h__incl.svg deleted file mode 100644 index d206e53..0000000 --- a/hcp/doxygen/html/fpc__com__result_8h__incl.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - -inc/fpc_com_result.h - - -Node1 - -inc/fpc_com_result.h - - -Node2 - -stdint.h - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__com__result_8h_source.html b/hcp/doxygen/html/fpc__com__result_8h_source.html deleted file mode 100644 index 2aeb43c..0000000 --- a/hcp/doxygen/html/fpc__com__result_8h_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_com_result.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
fpc_com_result.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Fingerprint Cards AB
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #ifndef FPC_COM_RESULT_H
23 #define FPC_COM_RESULT_H
24 
25 #include <stdint.h>
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif /* __cplusplus */
30 
39 };
41 typedef uint8_t fpc_com_result_t;
42 
43 #ifdef __cplusplus
44 }
45 #endif /* __cplusplus */
46 
47 #endif /* FPC_COM_RESULT_H */
- - - -
fpc_com_result
-
uint8_t fpc_com_result_t
- - -
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8c.html b/hcp/doxygen/html/fpc__com__transport_8c.html deleted file mode 100644 index 6ab9ec5..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - -Host Communication Protocol: src/fpc_com_transport.c File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_com_transport.c File Reference
-
-
- -

Communication transport layer implementation. -More...

-
#include <stdlib.h>
-#include <string.h>
-#include "fpc_com_link.h"
-#include "fpc_com_transport.h"
-
-Include dependency graph for fpc_com_transport.c:
-
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - -

-Functions

fpc_com_result_t fpc_com_transport_transmit (fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
 Transmit a transport layer packet. More...
 
fpc_com_result_t fpc_com_transport_receive (fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
 Receive a transport layer packet. More...
 
uint16_t fpc_com_transport_get_overhead (uint16_t *offset)
 Returns the overhead of the layer. More...
 
-

Detailed Description

-

Communication transport layer implementation.

- -

Definition in file fpc_com_transport.c.

-

Function Documentation

- -
-
- - - - - - - - -
uint16_t fpc_com_transport_get_overhead (uint16_t * offset)
-
- -

Returns the overhead of the layer.

-
Parameters
- - -
[out]offsetThe offset to the packet data.
-
-
-
Returns
Overhead size in bytes.
- -

Definition at line 88 of file fpc_com_transport.c.

- -

References fpc_com_packet_transport::seq_len, fpc_com_packet_transport::seq_nr, and fpc_com_packet_transport::size.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_com_transport_receive (fpc_com_packet_tsp_tpacket,
fpc_com_chain_tchain 
)
-
- -

Receive a transport layer packet.

-
Parameters
- - - -
[in,out]packetThe packet to populate.
[in]chainThe chain to use.
-
-
-
Returns
fpc_com_result_t
- -

Definition at line 60 of file fpc_com_transport.c.

- -

References fpc_com_packet_transport::data, fpc_com_packet_link::data, fpc_com_link_receive(), FPC_COM_RESULT_INVALID_ARGUMENT, FPC_COM_RESULT_OK, fpc_com_packet_transport::seq_len, fpc_com_packet_transport::seq_nr, and fpc_com_packet_transport::size.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_com_transport_transmit (fpc_com_packet_tsp_tpacket,
fpc_com_chain_tchain 
)
-
- -

Transmit a transport layer packet.

-
Parameters
- - - -
[in]packetThe packet to transmit.
[in]chainThe chain to use.
-
-
-
Returns
fpc_com_result_t
- -

Definition at line 28 of file fpc_com_transport.c.

- -

References fpc_com_packet_link::channel, fpc_com_chain::channel, fpc_com_packet_link::data, FPC_COM_CHAIN_TX, fpc_com_link_transmit(), FPC_COM_RESULT_INVALID_ARGUMENT, fpc_com_chain::link_overhead_get, fpc_com_chain::phy_mtu_buffer, fpc_com_packet_transport::seq_len, fpc_com_packet_transport::seq_nr, fpc_com_packet_transport::size, fpc_com_packet_link::size, and fpc_com_chain::tsp_overhead_get.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8c.js b/hcp/doxygen/html/fpc__com__transport_8c.js deleted file mode 100644 index ad4d579..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c.js +++ /dev/null @@ -1,6 +0,0 @@ -var fpc__com__transport_8c = -[ - [ "fpc_com_transport_get_overhead", "fpc__com__transport_8c.html#ab5c3ffee064012e456917a1b37d30938", null ], - [ "fpc_com_transport_receive", "fpc__com__transport_8c.html#acc641d17a6f587ceb132b5500390f99a", null ], - [ "fpc_com_transport_transmit", "fpc__com__transport_8c.html#af7766ded38ea5a21005d9c99dbd24a72", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__transport_8c__incl.map b/hcp/doxygen/html/fpc__com__transport_8c__incl.map deleted file mode 100644 index 76e9460..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c__incl.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8c__incl.md5 b/hcp/doxygen/html/fpc__com__transport_8c__incl.md5 deleted file mode 100644 index fa4345d..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e2ee468a645c6759453b89bbbb374223 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__transport_8c__incl.svg b/hcp/doxygen/html/fpc__com__transport_8c__incl.svg deleted file mode 100644 index b5bad52..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c__incl.svg +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -src/fpc_com_transport.c - - -Node1 - -src/fpc_com_transport.c - - -Node2 - -stdlib.h - - -Node1->Node2 - - - - -Node3 - -string.h - - -Node1->Node3 - - - - -Node4 - - -fpc_com_link.h - - - - -Node1->Node4 - - - - -Node11 - - -fpc_com_transport.h - - - - -Node1->Node11 - - - - -Node5 - -stdbool.h - - -Node4->Node5 - - - - -Node6 - -stdint.h - - -Node4->Node6 - - - - -Node7 - - -fpc_com_result.h - - - - -Node4->Node7 - - - - -Node8 - - -fpc_com_chain.h - - - - -Node4->Node8 - - - - -Node7->Node6 - - - - -Node8->Node6 - - - - -Node8->Node7 - - - - -Node9 - - -fpc_hcp_common.h - - - - -Node8->Node9 - - - - -Node10 - - -fpc_com_packets.h - - - - -Node8->Node10 - - - - -Node9->Node5 - - - - -Node9->Node6 - - - - -Node10->Node6 - - - - -Node11->Node6 - - - - -Node11->Node8 - - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8c_acc641d17a6f587ceb132b5500390f99a_cgraph.map b/hcp/doxygen/html/fpc__com__transport_8c_acc641d17a6f587ceb132b5500390f99a_cgraph.map deleted file mode 100644 index 7ab2bf1..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c_acc641d17a6f587ceb132b5500390f99a_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8c_acc641d17a6f587ceb132b5500390f99a_cgraph.md5 b/hcp/doxygen/html/fpc__com__transport_8c_acc641d17a6f587ceb132b5500390f99a_cgraph.md5 deleted file mode 100644 index ad3feb8..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c_acc641d17a6f587ceb132b5500390f99a_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -fc06ca2920b5dc571e73125ea600e963 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__transport_8c_acc641d17a6f587ceb132b5500390f99a_cgraph.svg b/hcp/doxygen/html/fpc__com__transport_8c_acc641d17a6f587ceb132b5500390f99a_cgraph.svg deleted file mode 100644 index ffb034f..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c_acc641d17a6f587ceb132b5500390f99a_cgraph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -fpc_com_transport_receive - - -Node1 - -fpc_com_transport_receive - - -Node2 - - -fpc_com_link_receive - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8c_af7766ded38ea5a21005d9c99dbd24a72_cgraph.map b/hcp/doxygen/html/fpc__com__transport_8c_af7766ded38ea5a21005d9c99dbd24a72_cgraph.map deleted file mode 100644 index e09af63..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c_af7766ded38ea5a21005d9c99dbd24a72_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8c_af7766ded38ea5a21005d9c99dbd24a72_cgraph.md5 b/hcp/doxygen/html/fpc__com__transport_8c_af7766ded38ea5a21005d9c99dbd24a72_cgraph.md5 deleted file mode 100644 index 22f7f28..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c_af7766ded38ea5a21005d9c99dbd24a72_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -20f39a00e89e8d273c4640a927738f62 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__transport_8c_af7766ded38ea5a21005d9c99dbd24a72_cgraph.svg b/hcp/doxygen/html/fpc__com__transport_8c_af7766ded38ea5a21005d9c99dbd24a72_cgraph.svg deleted file mode 100644 index 4580bd6..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c_af7766ded38ea5a21005d9c99dbd24a72_cgraph.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -fpc_com_transport_transmit - - -Node1 - -fpc_com_transport_transmit - - -Node2 - - -fpc_com_link_transmit - - - - -Node1->Node2 - - - - -Node3 - - -fpc_com_link_get_overhead - - - - -Node2->Node3 - - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8c_source.html b/hcp/doxygen/html/fpc__com__transport_8c_source.html deleted file mode 100644 index fb9e30d..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8c_source.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -Host Communication Protocol: src/fpc_com_transport.c Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
fpc_com_transport.c
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Fingerprint Cards AB
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #include <stdlib.h>
23 #include <string.h>
24 
25 #include "fpc_com_link.h"
26 #include "fpc_com_transport.h"
27 
29 {
30  fpc_com_packet_link_t link_packet = { 0 };
31  fpc_com_result_t result;
32  uint16_t link_offset;
33  uint16_t offset;
34 
35  if (packet == NULL|| chain == NULL) {
37  goto exit;
38  }
39 
40  /* Construct header */
41  chain->link_overhead_get(&link_offset);
42  link_packet.data = chain->phy_mtu_buffer[FPC_COM_CHAIN_TX] + link_offset;
43 
44  *((uint16_t *)(link_packet.data)) = packet->size;
45  offset = sizeof(packet->size);
46  *((uint16_t *)(link_packet.data + offset)) = packet->seq_nr;
47  offset += sizeof(packet->seq_nr);
48  *((uint16_t *)(link_packet.data + offset)) = packet->seq_len;
49 
50  link_packet.channel = chain->channel;
51  link_packet.size = packet->size + chain->tsp_overhead_get(NULL);
52 
53  /* Send packet */
54  result = fpc_com_link_transmit(&link_packet, chain);
55 
56 exit:
57  return result;
58 }
59 
61 {
62  fpc_com_packet_link_t link_packet = { 0 };
63  fpc_com_result_t result;
64  uint16_t offset;
65 
66  if (packet == NULL|| chain == NULL) {
68  goto exit;
69  }
70 
71  result = fpc_com_link_receive(&link_packet, chain);
72  if (result != FPC_COM_RESULT_OK) {
73  goto exit;
74  }
75 
76  packet->size = *((uint16_t *)link_packet.data);
77  offset = sizeof(packet->size);
78  packet->seq_nr = *((uint16_t *)(link_packet.data + offset));
79  offset += sizeof(packet->seq_nr);
80  packet->seq_len = *((uint16_t *)(link_packet.data + offset));
81  offset += sizeof(packet->seq_len);
82  packet->data = link_packet.data + offset;
83 
84 exit:
85  return result;
86 }
87 
88 uint16_t fpc_com_transport_get_overhead(uint16_t *offset)
89 {
90  fpc_com_packet_tsp_t *packet;
91  static const uint16_t internal_offset = sizeof(packet->size) + sizeof(packet->seq_len)
92  + sizeof(packet->seq_nr);
93 
94  if (offset) {
95  *offset = internal_offset;
96  }
97 
98  return internal_offset;
99 }
fpc_com_result_t fpc_com_transport_transmit(fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
Transmit a transport layer packet.
-
uint16_t(* tsp_overhead_get)(uint16_t *offset)
Definition: fpc_com_chain.h:95
-
uint8_t * phy_mtu_buffer[2]
- - - - - - - -
fpc_com_channel_t channel
- -
fpc_com_result_t fpc_com_transport_receive(fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
Receive a transport layer packet.
- - - -
uint16_t(* link_overhead_get)(uint16_t *offset)
-
Communication transport interface.
-
uint8_t fpc_com_result_t
- - - - -
uint16_t fpc_com_transport_get_overhead(uint16_t *offset)
Returns the overhead of the layer.
- -
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8h.html b/hcp/doxygen/html/fpc__com__transport_8h.html deleted file mode 100644 index caf8e31..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_com_transport.h File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_com_transport.h File Reference
-
-
- -

Communication transport interface. -More...

-
#include <stdint.h>
-#include "fpc_com_chain.h"
-
-Include dependency graph for fpc_com_transport.h:
-
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - -

-Functions

fpc_com_result_t fpc_com_transport_transmit (fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
 Transmit a transport layer packet. More...
 
fpc_com_result_t fpc_com_transport_receive (fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
 Receive a transport layer packet. More...
 
uint16_t fpc_com_transport_get_overhead (uint16_t *offset)
 Returns the overhead of the layer. More...
 
-

Detailed Description

-

Communication transport interface.

- -

Definition in file fpc_com_transport.h.

-

Function Documentation

- -
-
- - - - - - - - -
uint16_t fpc_com_transport_get_overhead (uint16_t * offset)
-
- -

Returns the overhead of the layer.

-
Parameters
- - -
[out]offsetThe offset to the packet data.
-
-
-
Returns
Overhead size in bytes.
- -

Definition at line 88 of file fpc_com_transport.c.

- -

References fpc_com_packet_transport::seq_len, fpc_com_packet_transport::seq_nr, and fpc_com_packet_transport::size.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_com_transport_receive (fpc_com_packet_tsp_tpacket,
fpc_com_chain_tchain 
)
-
- -

Receive a transport layer packet.

-
Parameters
- - - -
[in,out]packetThe packet to populate.
[in]chainThe chain to use.
-
-
-
Returns
fpc_com_result_t
- -

Definition at line 60 of file fpc_com_transport.c.

- -

References fpc_com_packet_transport::data, fpc_com_packet_link::data, fpc_com_link_receive(), FPC_COM_RESULT_INVALID_ARGUMENT, FPC_COM_RESULT_OK, fpc_com_packet_transport::seq_len, fpc_com_packet_transport::seq_nr, and fpc_com_packet_transport::size.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_com_transport_transmit (fpc_com_packet_tsp_tpacket,
fpc_com_chain_tchain 
)
-
- -

Transmit a transport layer packet.

-
Parameters
- - - -
[in]packetThe packet to transmit.
[in]chainThe chain to use.
-
-
-
Returns
fpc_com_result_t
- -

Definition at line 28 of file fpc_com_transport.c.

- -

References fpc_com_packet_link::channel, fpc_com_chain::channel, fpc_com_packet_link::data, FPC_COM_CHAIN_TX, fpc_com_link_transmit(), FPC_COM_RESULT_INVALID_ARGUMENT, fpc_com_chain::link_overhead_get, fpc_com_chain::phy_mtu_buffer, fpc_com_packet_transport::seq_len, fpc_com_packet_transport::seq_nr, fpc_com_packet_transport::size, fpc_com_packet_link::size, and fpc_com_chain::tsp_overhead_get.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8h.js b/hcp/doxygen/html/fpc__com__transport_8h.js deleted file mode 100644 index 0c4c394..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h.js +++ /dev/null @@ -1,6 +0,0 @@ -var fpc__com__transport_8h = -[ - [ "fpc_com_transport_get_overhead", "fpc__com__transport_8h.html#ab5c3ffee064012e456917a1b37d30938", null ], - [ "fpc_com_transport_receive", "fpc__com__transport_8h.html#acc641d17a6f587ceb132b5500390f99a", null ], - [ "fpc_com_transport_transmit", "fpc__com__transport_8h.html#af7766ded38ea5a21005d9c99dbd24a72", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__transport_8h__dep__incl.map b/hcp/doxygen/html/fpc__com__transport_8h__dep__incl.map deleted file mode 100644 index 6d8a497..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8h__dep__incl.md5 b/hcp/doxygen/html/fpc__com__transport_8h__dep__incl.md5 deleted file mode 100644 index 79a1d9d..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -8fb97776be33e5dbe96688f89b04167a \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__transport_8h__dep__incl.svg b/hcp/doxygen/html/fpc__com__transport_8h__dep__incl.svg deleted file mode 100644 index 1b45bd8..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h__dep__incl.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -inc/fpc_com_transport.h - - -Node1 - -inc/fpc_com_transport.h - - -Node2 - - -src/fpc_com_transport.c - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8h__incl.map b/hcp/doxygen/html/fpc__com__transport_8h__incl.map deleted file mode 100644 index c66f458..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8h__incl.md5 b/hcp/doxygen/html/fpc__com__transport_8h__incl.md5 deleted file mode 100644 index d627d6b..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -963a62242b7de62ac8d59612453aad3c \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__transport_8h__incl.svg b/hcp/doxygen/html/fpc__com__transport_8h__incl.svg deleted file mode 100644 index f7adee7..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h__incl.svg +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -inc/fpc_com_transport.h - - -Node1 - -inc/fpc_com_transport.h - - -Node2 - -stdint.h - - -Node1->Node2 - - - - -Node3 - - -fpc_com_chain.h - - - - -Node1->Node3 - - - - -Node3->Node2 - - - - -Node4 - - -fpc_com_result.h - - - - -Node3->Node4 - - - - -Node5 - - -fpc_hcp_common.h - - - - -Node3->Node5 - - - - -Node7 - - -fpc_com_packets.h - - - - -Node3->Node7 - - - - -Node4->Node2 - - - - -Node5->Node2 - - - - -Node6 - -stdbool.h - - -Node5->Node6 - - - - -Node7->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8h_acc641d17a6f587ceb132b5500390f99a_cgraph.map b/hcp/doxygen/html/fpc__com__transport_8h_acc641d17a6f587ceb132b5500390f99a_cgraph.map deleted file mode 100644 index 7ab2bf1..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h_acc641d17a6f587ceb132b5500390f99a_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8h_acc641d17a6f587ceb132b5500390f99a_cgraph.md5 b/hcp/doxygen/html/fpc__com__transport_8h_acc641d17a6f587ceb132b5500390f99a_cgraph.md5 deleted file mode 100644 index ad3feb8..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h_acc641d17a6f587ceb132b5500390f99a_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -fc06ca2920b5dc571e73125ea600e963 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__transport_8h_acc641d17a6f587ceb132b5500390f99a_cgraph.svg b/hcp/doxygen/html/fpc__com__transport_8h_acc641d17a6f587ceb132b5500390f99a_cgraph.svg deleted file mode 100644 index ffb034f..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h_acc641d17a6f587ceb132b5500390f99a_cgraph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -fpc_com_transport_receive - - -Node1 - -fpc_com_transport_receive - - -Node2 - - -fpc_com_link_receive - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8h_af7766ded38ea5a21005d9c99dbd24a72_cgraph.map b/hcp/doxygen/html/fpc__com__transport_8h_af7766ded38ea5a21005d9c99dbd24a72_cgraph.map deleted file mode 100644 index e09af63..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h_af7766ded38ea5a21005d9c99dbd24a72_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8h_af7766ded38ea5a21005d9c99dbd24a72_cgraph.md5 b/hcp/doxygen/html/fpc__com__transport_8h_af7766ded38ea5a21005d9c99dbd24a72_cgraph.md5 deleted file mode 100644 index 22f7f28..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h_af7766ded38ea5a21005d9c99dbd24a72_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -20f39a00e89e8d273c4640a927738f62 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__com__transport_8h_af7766ded38ea5a21005d9c99dbd24a72_cgraph.svg b/hcp/doxygen/html/fpc__com__transport_8h_af7766ded38ea5a21005d9c99dbd24a72_cgraph.svg deleted file mode 100644 index 4580bd6..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h_af7766ded38ea5a21005d9c99dbd24a72_cgraph.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -fpc_com_transport_transmit - - -Node1 - -fpc_com_transport_transmit - - -Node2 - - -fpc_com_link_transmit - - - - -Node1->Node2 - - - - -Node3 - - -fpc_com_link_get_overhead - - - - -Node2->Node3 - - - - - diff --git a/hcp/doxygen/html/fpc__com__transport_8h_source.html b/hcp/doxygen/html/fpc__com__transport_8h_source.html deleted file mode 100644 index 1deb259..0000000 --- a/hcp/doxygen/html/fpc__com__transport_8h_source.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_com_transport.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
fpc_com_transport.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Fingerprint Cards AB
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #ifndef FPC_COM_TRANSPORT_H
23 #define FPC_COM_TRANSPORT_H
24 
25 #include <stdint.h>
26 
27 #include "fpc_com_chain.h"
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif /* __cplusplus */
32 
41 
50 
57 uint16_t fpc_com_transport_get_overhead(uint16_t *offset);
58 
59 #ifdef __cplusplus
60 }
61 #endif /* __cplusplus */
62 
63 #endif /* FPC_COM_TRANSPORT_H */
-
fpc_com_result_t fpc_com_transport_transmit(fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
Transmit a transport layer packet.
-
uint16_t fpc_com_transport_get_overhead(uint16_t *offset)
Returns the overhead of the layer.
- -
Communication chain type definitions.
-
uint8_t fpc_com_result_t
-
fpc_com_result_t fpc_com_transport_receive(fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
Receive a transport layer packet.
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c.html b/hcp/doxygen/html/fpc__hcp_8c.html deleted file mode 100644 index 7bbe551..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c.html +++ /dev/null @@ -1,721 +0,0 @@ - - - - - - -Host Communication Protocol: src/fpc_hcp.c File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_hcp.c File Reference
-
-
- -

Host Communication Protocol implementation. -More...

-
#include <stdlib.h>
-#include <string.h>
-#include "fpc_hcp.h"
-
-Include dependency graph for fpc_hcp.c:
-
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Macros

HCP Packet Member Sizes

Macros for packet member sizes.

-
#define PACKET_ID_SIZE   sizeof(((fpc_hcp_packet_t*)0)->id)
 
#define PACKET_NUM_ARGS_SIZE   sizeof(((fpc_hcp_packet_t*)0)->num_args)
 
#define PACKET_HEADER_SIZE   (PACKET_ID_SIZE + PACKET_NUM_ARGS_SIZE)
 
HCP Argument Member Sizes

Macros for argument member sizes.

-
#define ARGUMENT_ARG_SIZE   sizeof(((fpc_hcp_arg_data_t*)0)->arg)
 
#define ARGUMENT_SIZE_SIZE   sizeof(((fpc_hcp_arg_data_t*)0)->size)
 
#define ARGUMENT_HEADER_SIZE   (ARGUMENT_ARG_SIZE + ARGUMENT_SIZE_SIZE)
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

static fpc_com_result_t recieve_chunks (fpc_com_chain_t *chain)
 Handle receive chunks. More...
 
static fpc_com_result_t transmit_chunks (fpc_com_chain_t *chain)
 Handle transmit chunks. More...
 
uint16_t fpc_hcp_get_size (fpc_hcp_packet_t *packet, uint16_t *num_args)
 Calculate serialized packet size. More...
 
fpc_com_result_t fpc_hcp_transmit (fpc_hcp_packet_t *packet, fpc_com_chain_t *chain)
 Transmits an application packet through the supplied transmit chain. More...
 
fpc_com_result_t fpc_hcp_receive (fpc_hcp_packet_t *packet, fpc_com_chain_t *chain)
 Receives an application packet through the supplied transmit chain. More...
 
bool fpc_hcp_arg_add (fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t size, bool free_data, void *data)
 Add argument to packet. More...
 
bool fpc_hcp_arg_check (fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg)
 Check if command contains selected argument key. More...
 
fpc_hcp_arg_data_tfpc_hcp_arg_get (fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg)
 Get Argument with specified key. More...
 
bool fpc_hcp_arg_copy_data (fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t data_size, uint8_t *data)
 Copy data from an argument with specified key. More...
 
void fpc_hcp_free (fpc_com_chain_t *chain, fpc_hcp_packet_t *packet)
 Frees the resources held by the packet i.e. the dynamic data held in the arguments. More...
 
-

Detailed Description

-

Host Communication Protocol implementation.

- -

Definition in file fpc_hcp.c.

-

Macro Definition Documentation

- -
-
- - - - -
#define ARGUMENT_ARG_SIZE   sizeof(((fpc_hcp_arg_data_t*)0)->arg)
-
- -

Definition at line 44 of file fpc_hcp.c.

- -
-
- -
-
- - - - -
#define ARGUMENT_HEADER_SIZE   (ARGUMENT_ARG_SIZE + ARGUMENT_SIZE_SIZE)
-
- -

Definition at line 46 of file fpc_hcp.c.

- -
-
- -
-
- - - - -
#define ARGUMENT_SIZE_SIZE   sizeof(((fpc_hcp_arg_data_t*)0)->size)
-
- -

Definition at line 45 of file fpc_hcp.c.

- -
-
- -
-
- - - - -
#define PACKET_HEADER_SIZE   (PACKET_ID_SIZE + PACKET_NUM_ARGS_SIZE)
-
- -

Definition at line 35 of file fpc_hcp.c.

- -
-
- -
-
- - - - -
#define PACKET_ID_SIZE   sizeof(((fpc_hcp_packet_t*)0)->id)
-
- -

Definition at line 33 of file fpc_hcp.c.

- -
-
- -
-
- - - - -
#define PACKET_NUM_ARGS_SIZE   sizeof(((fpc_hcp_packet_t*)0)->num_args)
-
- -

Definition at line 34 of file fpc_hcp.c.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool fpc_hcp_arg_add (fpc_hcp_packet_tpacket,
fpc_hcp_arg_t arg,
uint16_t size,
bool free_data,
void * data 
)
-
- -

Add argument to packet.

-
Note
This function does not allocate any memory, it will only set the argument variables.
-
Parameters
- - - - - - -
[in]packetPacket to add to.
[in]argArgument id.
[in]sizeSize of argument data.
[in]free_dataSet to true if data should be owned by the argument, false if user still owns data.
[in]dataPointer to argument data.
-
-
-
Returns
true = success, false = failure.
- -

Definition at line 145 of file fpc_hcp.c.

- -

References fpc_hcp_arg_data::arg, ARG_NONE, fpc_hcp_packet::arguments, fpc_hcp_arg_data::data, fpc_hcp_arg_data::free_data, fpc_hcp_packet::num_args, and fpc_hcp_arg_data::size.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool fpc_hcp_arg_check (fpc_hcp_packet_tpacket,
fpc_hcp_arg_t arg 
)
-
- -

Check if command contains selected argument key.

-
Parameters
- - - -
[in]packetThe packet to scan.
[in]argArgument to look for.
-
-
-
Returns
true if found, false if not found.
- -

Definition at line 169 of file fpc_hcp.c.

- -

References fpc_hcp_arg_get().

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool fpc_hcp_arg_copy_data (fpc_hcp_packet_tpacket,
fpc_hcp_arg_t arg,
uint16_t data_size,
uint8_t * data 
)
-
- -

Copy data from an argument with specified key.

-

Argument data will be copied to specified data buffer. Remaining bytes in data will be cleared if the argument data size is less than data size when the argument contains data.

-
Parameters
- - - - - -
[in]packetThe packet to operate on.
[in]argThe arg to retrieve data from.
[in]data_sizeNumber of bytes to copy.
[in,out]dataPointer to data buffer.
-
-
-
Returns
True if argument found, false if not found.
- -

Definition at line 183 of file fpc_hcp.c.

- -

References fpc_hcp_arg_data::data, fpc_hcp_arg_get(), and fpc_hcp_arg_data::size.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_hcp_arg_data_t* fpc_hcp_arg_get (fpc_hcp_packet_tpacket,
fpc_hcp_arg_t arg 
)
-
- -

Get Argument with specified key.

-
Parameters
- - - -
[in]packetThe packet to operate on.
[in]argThe arg to retrieve.
-
-
-
Returns
Pointer to fpc_hcp_arg_data_t is successful, otherwise NULL.
- -

Definition at line 173 of file fpc_hcp.c.

- -

References fpc_hcp_arg_data::arg, fpc_hcp_packet::arguments, and fpc_hcp_packet::num_args.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void fpc_hcp_free (fpc_com_chain_tchain,
fpc_hcp_packet_tpacket 
)
-
- -

Frees the resources held by the packet i.e. the dynamic data held in the arguments.

-
Parameters
- - - -
[in]chainPointer to the communication chain used to retrieve the packet.
[in]packetPointer to packet.
-
-
- -

Definition at line 198 of file fpc_hcp.c.

- -

References fpc_hcp_arg_data::arg, ARG_NONE, fpc_com_chain::argument_free, fpc_hcp_packet::arguments, CMD_NONE, fpc_com_chain::context, fpc_hcp_packet::id, and fpc_hcp_packet::num_args.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
uint16_t fpc_hcp_get_size (fpc_hcp_packet_tpacket,
uint16_t * num_args 
)
-
- -

Calculate serialized packet size.

-
Parameters
- - - -
[in]packetPacket to calculate.
[in,out]num_argsWill return number of arguments held by the command can be set to NULL.
-
-
-
Returns
Serialized size.
- -

Definition at line 64 of file fpc_hcp.c.

- -

References fpc_hcp_arg_data::arg, ARG_NONE, ARGUMENT_HEADER_SIZE, fpc_hcp_packet::arguments, fpc_hcp_packet::num_args, PACKET_HEADER_SIZE, and fpc_hcp_arg_data::size.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_hcp_receive (fpc_hcp_packet_tpacket,
fpc_com_chain_tchain 
)
-
- -

Receives an application packet through the supplied transmit chain.

-
Parameters
- - - -
[in,out]packetPointer to pre-allocated packet struct.
[in]chainThe chain to use.
-
-
-
Returns
fpc_com_result_t
- -

Definition at line 117 of file fpc_hcp.c.

- -

References fpc_com_chain::app_mtu_buffer, fpc_com_chain::app_mtu_size, FPC_COM_CHAIN_RX, FPC_COM_RESULT_INVALID_ARGUMENT, fpc_com_chain_private::hcp_packet, fpc_com_chain::initialized, fpc_com_chain::link_overhead_get, fpc_com_chain::phy_mtu_buffer, fpc_com_chain::phy_mtu_size, fpc_com_chain::private_vars, recieve_chunks(), and fpc_com_chain::tsp_overhead_get.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_hcp_transmit (fpc_hcp_packet_tpacket,
fpc_com_chain_tchain 
)
-
- -

Transmits an application packet through the supplied transmit chain.

-
Parameters
- - - -
[in]packetApplication packet to send.
[in]chainThe chain to use.
-
-
-
Returns
fpc_com_result_t
- -

Definition at line 89 of file fpc_hcp.c.

- -

References fpc_com_chain::app_mtu_buffer, fpc_com_chain::app_mtu_size, FPC_COM_CHAIN_TX, FPC_COM_RESULT_INVALID_ARGUMENT, fpc_com_chain_private::hcp_packet, fpc_com_chain::initialized, fpc_com_chain::link_overhead_get, fpc_com_chain::phy_mtu_buffer, fpc_com_chain::phy_mtu_size, fpc_com_chain::private_vars, transmit_chunks(), and fpc_com_chain::tsp_overhead_get.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
- - - - -
-
- - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c.js b/hcp/doxygen/html/fpc__hcp_8c.js deleted file mode 100644 index 2b0ac49..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c.js +++ /dev/null @@ -1,19 +0,0 @@ -var fpc__hcp_8c = -[ - [ "ARGUMENT_ARG_SIZE", "fpc__hcp_8c.html#a119829b571e80de1f9f2b2841e32fa42", null ], - [ "ARGUMENT_HEADER_SIZE", "fpc__hcp_8c.html#a3496d79780b19b71442831ff927f540b", null ], - [ "ARGUMENT_SIZE_SIZE", "fpc__hcp_8c.html#aa5d90c20e4e2341e40b371741f9f12c9", null ], - [ "PACKET_HEADER_SIZE", "fpc__hcp_8c.html#a69bfb6e73bae0625ac56f441ccf542d1", null ], - [ "PACKET_ID_SIZE", "fpc__hcp_8c.html#a6eac0136b31c600d0077de19003a0fb2", null ], - [ "PACKET_NUM_ARGS_SIZE", "fpc__hcp_8c.html#aeff07e75eb0e6cc94982a68ddb4adbd4", null ], - [ "fpc_hcp_arg_add", "fpc__hcp_8c.html#a9b6886d13174fd6e88bd673ba09cca7d", null ], - [ "fpc_hcp_arg_check", "fpc__hcp_8c.html#ae1b7ce8b198acf7c8f6802300e2591ea", null ], - [ "fpc_hcp_arg_copy_data", "fpc__hcp_8c.html#addefbe1e416979abcf59f7bf652e2a77", null ], - [ "fpc_hcp_arg_get", "fpc__hcp_8c.html#a3860f01dade55ac5f55e85342b8f6d0d", null ], - [ "fpc_hcp_free", "fpc__hcp_8c.html#a78f14eb8269c8f17ea46f01beab88608", null ], - [ "fpc_hcp_get_size", "fpc__hcp_8c.html#a144fab9621ae9cd7abb8e3660b20265f", null ], - [ "fpc_hcp_receive", "fpc__hcp_8c.html#aa964fefb0fc68032f44850ee060b8e9b", null ], - [ "fpc_hcp_transmit", "fpc__hcp_8c.html#ac8ec0a9f397508976922d1833a9a7626", null ], - [ "recieve_chunks", "fpc__hcp_8c.html#ac28e8941753ebcac47c1fc0a06813e61", null ], - [ "transmit_chunks", "fpc__hcp_8c.html#a0c5716b3b2adf3204cf135d9ddaa3688", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8c__incl.map b/hcp/doxygen/html/fpc__hcp_8c__incl.map deleted file mode 100644 index ce5a48a..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c__incl.md5 b/hcp/doxygen/html/fpc__hcp_8c__incl.md5 deleted file mode 100644 index e49e778..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -281f2828284728946baac6d13f783561 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8c__incl.svg b/hcp/doxygen/html/fpc__hcp_8c__incl.svg deleted file mode 100644 index cc4b894..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c__incl.svg +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -src/fpc_hcp.c - - -Node1 - -src/fpc_hcp.c - - -Node2 - -stdlib.h - - -Node1->Node2 - - - - -Node3 - -string.h - - -Node1->Node3 - - - - -Node4 - - -fpc_hcp.h - - - - -Node1->Node4 - - - - -Node5 - -stdbool.h - - -Node4->Node5 - - - - -Node6 - -stdint.h - - -Node4->Node6 - - - - -Node7 - - -fpc_hcp_common.h - - - - -Node4->Node7 - - - - -Node8 - - -fpc_com_chain.h - - - - -Node4->Node8 - - - - -Node7->Node5 - - - - -Node7->Node6 - - - - -Node8->Node6 - - - - -Node8->Node7 - - - - -Node9 - - -fpc_com_result.h - - - - -Node8->Node9 - - - - -Node10 - - -fpc_com_packets.h - - - - -Node8->Node10 - - - - -Node9->Node6 - - - - -Node10->Node6 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_a0c5716b3b2adf3204cf135d9ddaa3688_cgraph.map b/hcp/doxygen/html/fpc__hcp_8c_a0c5716b3b2adf3204cf135d9ddaa3688_cgraph.map deleted file mode 100644 index 0369038..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_a0c5716b3b2adf3204cf135d9ddaa3688_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_a0c5716b3b2adf3204cf135d9ddaa3688_cgraph.md5 b/hcp/doxygen/html/fpc__hcp_8c_a0c5716b3b2adf3204cf135d9ddaa3688_cgraph.md5 deleted file mode 100644 index 43743a5..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_a0c5716b3b2adf3204cf135d9ddaa3688_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -b250e4c4eba13b466baea94b9aedc064 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8c_a0c5716b3b2adf3204cf135d9ddaa3688_cgraph.svg b/hcp/doxygen/html/fpc__hcp_8c_a0c5716b3b2adf3204cf135d9ddaa3688_cgraph.svg deleted file mode 100644 index da9ebf6..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_a0c5716b3b2adf3204cf135d9ddaa3688_cgraph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -transmit_chunks - - -Node1 - -transmit_chunks - - -Node2 - - -fpc_hcp_get_size - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_aa964fefb0fc68032f44850ee060b8e9b_cgraph.map b/hcp/doxygen/html/fpc__hcp_8c_aa964fefb0fc68032f44850ee060b8e9b_cgraph.map deleted file mode 100644 index 40790a0..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_aa964fefb0fc68032f44850ee060b8e9b_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_aa964fefb0fc68032f44850ee060b8e9b_cgraph.md5 b/hcp/doxygen/html/fpc__hcp_8c_aa964fefb0fc68032f44850ee060b8e9b_cgraph.md5 deleted file mode 100644 index e4c2356..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_aa964fefb0fc68032f44850ee060b8e9b_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -c8a1373f76cbcb80bc7197d6f8738d54 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8c_aa964fefb0fc68032f44850ee060b8e9b_cgraph.svg b/hcp/doxygen/html/fpc__hcp_8c_aa964fefb0fc68032f44850ee060b8e9b_cgraph.svg deleted file mode 100644 index dd37a6b..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_aa964fefb0fc68032f44850ee060b8e9b_cgraph.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -fpc_hcp_receive - - -Node1 - -fpc_hcp_receive - - -Node2 - - -recieve_chunks - - - - -Node1->Node2 - - - - -Node3 - - -fpc_hcp_arg_add - - - - -Node2->Node3 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_ac28e8941753ebcac47c1fc0a06813e61_cgraph.map b/hcp/doxygen/html/fpc__hcp_8c_ac28e8941753ebcac47c1fc0a06813e61_cgraph.map deleted file mode 100644 index a1c8b5c..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_ac28e8941753ebcac47c1fc0a06813e61_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_ac28e8941753ebcac47c1fc0a06813e61_cgraph.md5 b/hcp/doxygen/html/fpc__hcp_8c_ac28e8941753ebcac47c1fc0a06813e61_cgraph.md5 deleted file mode 100644 index ddf48a3..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_ac28e8941753ebcac47c1fc0a06813e61_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -a4f580059c24a99b70a3e1fabdb7f5e5 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8c_ac28e8941753ebcac47c1fc0a06813e61_cgraph.svg b/hcp/doxygen/html/fpc__hcp_8c_ac28e8941753ebcac47c1fc0a06813e61_cgraph.svg deleted file mode 100644 index 98fbe84..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_ac28e8941753ebcac47c1fc0a06813e61_cgraph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -recieve_chunks - - -Node1 - -recieve_chunks - - -Node2 - - -fpc_hcp_arg_add - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_ac8ec0a9f397508976922d1833a9a7626_cgraph.map b/hcp/doxygen/html/fpc__hcp_8c_ac8ec0a9f397508976922d1833a9a7626_cgraph.map deleted file mode 100644 index 0bedd7e..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_ac8ec0a9f397508976922d1833a9a7626_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_ac8ec0a9f397508976922d1833a9a7626_cgraph.md5 b/hcp/doxygen/html/fpc__hcp_8c_ac8ec0a9f397508976922d1833a9a7626_cgraph.md5 deleted file mode 100644 index a496d1c..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_ac8ec0a9f397508976922d1833a9a7626_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -9596474d49066c85e453de78f4af85de \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8c_ac8ec0a9f397508976922d1833a9a7626_cgraph.svg b/hcp/doxygen/html/fpc__hcp_8c_ac8ec0a9f397508976922d1833a9a7626_cgraph.svg deleted file mode 100644 index 74fb564..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_ac8ec0a9f397508976922d1833a9a7626_cgraph.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -fpc_hcp_transmit - - -Node1 - -fpc_hcp_transmit - - -Node2 - - -transmit_chunks - - - - -Node1->Node2 - - - - -Node3 - - -fpc_hcp_get_size - - - - -Node2->Node3 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_addefbe1e416979abcf59f7bf652e2a77_cgraph.map b/hcp/doxygen/html/fpc__hcp_8c_addefbe1e416979abcf59f7bf652e2a77_cgraph.map deleted file mode 100644 index e659c9d..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_addefbe1e416979abcf59f7bf652e2a77_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_addefbe1e416979abcf59f7bf652e2a77_cgraph.md5 b/hcp/doxygen/html/fpc__hcp_8c_addefbe1e416979abcf59f7bf652e2a77_cgraph.md5 deleted file mode 100644 index db0e3fc..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_addefbe1e416979abcf59f7bf652e2a77_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -91c93424f2e67d8a35bdc3f37f89d5dc \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8c_addefbe1e416979abcf59f7bf652e2a77_cgraph.svg b/hcp/doxygen/html/fpc__hcp_8c_addefbe1e416979abcf59f7bf652e2a77_cgraph.svg deleted file mode 100644 index d620794..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_addefbe1e416979abcf59f7bf652e2a77_cgraph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -fpc_hcp_arg_copy_data - - -Node1 - -fpc_hcp_arg_copy_data - - -Node2 - - -fpc_hcp_arg_get - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.map b/hcp/doxygen/html/fpc__hcp_8c_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.map deleted file mode 100644 index 875eb9b..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.md5 b/hcp/doxygen/html/fpc__hcp_8c_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.md5 deleted file mode 100644 index 1836b85..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -529d025920f22b6a43cc9f025014d76b \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8c_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.svg b/hcp/doxygen/html/fpc__hcp_8c_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.svg deleted file mode 100644 index e519ac1..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -fpc_hcp_arg_check - - -Node1 - -fpc_hcp_arg_check - - -Node2 - - -fpc_hcp_arg_get - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8c_source.html b/hcp/doxygen/html/fpc__hcp_8c_source.html deleted file mode 100644 index 2e48205..0000000 --- a/hcp/doxygen/html/fpc__hcp_8c_source.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Host Communication Protocol: src/fpc_hcp.c Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
fpc_hcp.c
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Fingerprint Cards AB
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #include <stdlib.h>
23 #include <string.h>
24 
25 #include "fpc_hcp.h"
26 
33 #define PACKET_ID_SIZE sizeof(((fpc_hcp_packet_t*)0)->id)
34 #define PACKET_NUM_ARGS_SIZE sizeof(((fpc_hcp_packet_t*)0)->num_args)
35 #define PACKET_HEADER_SIZE (PACKET_ID_SIZE + PACKET_NUM_ARGS_SIZE)
36 
44 #define ARGUMENT_ARG_SIZE sizeof(((fpc_hcp_arg_data_t*)0)->arg)
45 #define ARGUMENT_SIZE_SIZE sizeof(((fpc_hcp_arg_data_t*)0)->size)
46 #define ARGUMENT_HEADER_SIZE (ARGUMENT_ARG_SIZE + ARGUMENT_SIZE_SIZE)
47 
63 
64 uint16_t fpc_hcp_get_size(fpc_hcp_packet_t *packet, uint16_t *num_args)
65 {
66  uint16_t size = 0;
67  uint16_t args = 0;
68 
69  if (packet == NULL) {
70  goto exit;
71  }
72  size = PACKET_HEADER_SIZE;
73 
74  for (uint8_t i = 0; i < packet->num_args; i++) {
75  if (packet->arguments[i].arg != ARG_NONE) {
76  size += ARGUMENT_HEADER_SIZE;
77  size += packet->arguments[i].size;
78  args++;
79  }
80  }
81  if (num_args) {
82  *num_args = args;
83  }
84 
85 exit:
86  return size;
87 }
88 
90 {
91  fpc_com_result_t result;
92 
93  if (chain == NULL || packet == NULL || chain->initialized == false ||
94  chain->phy_mtu_buffer[FPC_COM_CHAIN_TX] == NULL) {
96  goto exit;
97  }
98  chain->private_vars.hcp_packet = packet;
99 
100  if (chain->app_mtu_size[FPC_COM_CHAIN_TX] == 0 ||
101  chain->app_mtu_buffer[FPC_COM_CHAIN_TX] == NULL) {
102  uint16_t tsp_offset;
103  uint16_t link_offset;
104  uint16_t overhead;
105 
106  overhead = chain->tsp_overhead_get(&tsp_offset) + chain->link_overhead_get(&link_offset);
108  + tsp_offset + link_offset;
109  chain->app_mtu_size[FPC_COM_CHAIN_TX] = chain->phy_mtu_size[FPC_COM_CHAIN_TX] - overhead;
110  }
111  result = transmit_chunks(chain);
112 
113 exit:
114  return result;
115 }
116 
118 {
119  fpc_com_result_t result;
120 
121  if (chain == NULL || packet == NULL || chain->initialized == false ||
122  chain->phy_mtu_buffer[FPC_COM_CHAIN_RX] == NULL) {
124  goto exit;
125  }
126  chain->private_vars.hcp_packet = packet;
127 
128  if (chain->app_mtu_size[FPC_COM_CHAIN_RX] == 0 ||
129  chain->app_mtu_buffer[FPC_COM_CHAIN_RX] == NULL) {
130  uint16_t tsp_offset;
131  uint16_t link_offset;
132  uint16_t overhead;
133 
134  overhead = chain->tsp_overhead_get(&tsp_offset) + chain->link_overhead_get(&link_offset);
136  + tsp_offset + link_offset;
137  chain->app_mtu_size[FPC_COM_CHAIN_RX] = chain->phy_mtu_size[FPC_COM_CHAIN_RX] - overhead;
138  }
139  result = recieve_chunks(chain);
140 
141 exit:
142  return result;
143 }
144 
145 bool fpc_hcp_arg_add(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t size, bool free_data,
146  void *data)
147 {
148  bool result = false;
149 
150  if (packet == NULL || (size > 0 && data == NULL)) {
151  goto exit;
152  }
153 
154  for (uint8_t i = 0; i < packet->num_args; i++) {
155  if (packet->arguments[i].arg == ARG_NONE) {
156  packet->arguments[i].arg = arg;
157  packet->arguments[i].size = size;
158  packet->arguments[i].free_data = free_data;
159  packet->arguments[i].data = data;
160  result = true;
161  break;
162  }
163  }
164 
165 exit:
166  return result;
167 }
168 
170  return fpc_hcp_arg_get(packet, arg) != NULL;
171 }
172 
174 {
175  for (uint8_t i = 0; i < packet->num_args; i++) {
176  if (packet->arguments[i].arg == arg) {
177  return &(packet->arguments[i]);
178  }
179  }
180  return NULL;
181 }
182 
183 bool fpc_hcp_arg_copy_data(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t data_size,
184  uint8_t *data)
185 {
186  fpc_hcp_arg_data_t *arg_data = fpc_hcp_arg_get(packet, arg);
187 
188  if (arg_data == NULL || data == NULL || data_size == 0 || arg_data->size == 0
189  || data_size > arg_data->size) {
190  return false;
191  }
192 
193  memcpy(data, arg_data->data, data_size);
194 
195  return true;
196 }
197 
199 {
200  if (chain && packet) {
201  for (uint8_t i = 0; i < packet->num_args; i++) {
202  if (packet->arguments[i].arg != ARG_NONE) {
203  chain->argument_free(packet->id, &packet->arguments[i], chain->context);
204  }
205  }
206  memset(packet->arguments, 0x0, sizeof(*packet->arguments) * packet->num_args);
207  packet->id = CMD_NONE;
208  }
209 }
210 
212 {
213  uint8_t *data;
214  uint16_t rem_size;
215  uint16_t id_rem_size;
216  uint16_t size_rem_size;
217  uint16_t arg_rem_size = 0;
218  uint16_t arg_size;
219  uint8_t *arg_data = NULL;
220  uint16_t overhead;
221  uint16_t arg_nr = 0;
222  uint16_t num_args = 0;
223  fpc_com_result_t result;
224  bool first_packet = true;
225  fpc_hcp_arg_t arg;
226  uint16_t app_offset;
227 
228  /* Calculate application packet data MTU size */
229  overhead = chain->app_overhead_get(&app_offset);
230  if (overhead > chain->app_mtu_size[FPC_COM_CHAIN_RX]) {
232  goto exit;
233  }
234 
235  /* Retrieve application packets */
236  do {
237  /* Get packet from application layer */
238  result = chain->app_rx(chain);
239  if (result != FPC_COM_RESULT_OK) {
240  break;
241  }
242 
243  /* Get packet size */
244  rem_size = chain->app_packet_size[FPC_COM_CHAIN_RX];
245  data = chain->app_mtu_buffer[FPC_COM_CHAIN_RX] + app_offset;
246 
247  if (first_packet) {
248  /* ID */
249  chain->private_vars.hcp_packet->id = *((uint16_t *) data);
250  data += PACKET_ID_SIZE;
251 
252  /* Number of arguments */
253  num_args = *((uint16_t *) data);
254  data += PACKET_NUM_ARGS_SIZE;
255 
256  first_packet = false;
257  rem_size -= PACKET_HEADER_SIZE;
258  id_rem_size = ARGUMENT_ARG_SIZE;
259  size_rem_size = ARGUMENT_SIZE_SIZE;
260  }
261 
262  while (rem_size && (arg_nr < num_args)) {
263  uint16_t copy_size;
264 
265  if (rem_size && id_rem_size) {
266  /* Set copy size */
267  copy_size = HCP_MIN(id_rem_size, rem_size);
268 
269  /* Copy arg id */
270  memcpy(((uint8_t *) &arg) + (ARGUMENT_ARG_SIZE - id_rem_size), data, copy_size);
271  data += copy_size;
272 
273  /* Update parameters */
274  id_rem_size -= copy_size;
275  rem_size -= copy_size;
276  }
277 
278  if (rem_size && size_rem_size) {
279  bool status;
280 
281  /* Set copy size */
282  copy_size = HCP_MIN(size_rem_size, rem_size);
283 
284  /* Copy arg size */
285  memcpy(((uint8_t *) &arg_size) + (ARGUMENT_SIZE_SIZE - size_rem_size),
286  data, copy_size);
287  data += copy_size;
288 
289  /* Update parameters */
290  size_rem_size -= copy_size;
291  rem_size -= copy_size;
292 
293  if (size_rem_size == 0) {
294  bool free_data = true;
295 
296  if (arg_size) {
297  arg_data = chain->argument_allocator(chain->private_vars.hcp_packet->id,
298  arg, arg_size, &free_data, chain->context);
299  if (arg_data == NULL) {
300  result = FPC_COM_RESULT_NO_MEMORY;
301  break;
302  }
303  }
304 
305  status = fpc_hcp_arg_add(chain->private_vars.hcp_packet, arg, arg_size,
306  free_data, arg_data);
307  if (status == false) {
308  fpc_hcp_arg_data_t arg_struct = { 0 };
309 
310  arg_struct.arg = arg;
311  arg_struct.free_data = free_data;
312  arg_struct.size = arg_size;
313  arg_struct.data = arg_data;
314  chain->argument_free(chain->private_vars.hcp_packet->id, &arg_struct,
315  chain->context);
316 
317  if (arg_nr < num_args) {
319  break;
320  } else {
321  result = FPC_COM_RESULT_NO_MEMORY;
322  break;
323  }
324  }
325  arg_rem_size = arg_size;
326  }
327  }
328 
329  if (rem_size && arg_rem_size) {
330  /* Set copy size */
331  copy_size = HCP_MIN(arg_rem_size, rem_size);
332 
333  /* Copy argument data */
334  memcpy(arg_data + (arg_size - arg_rem_size), data, copy_size);
335  data += copy_size;
336 
337  /* Update parameters */
338  rem_size -= copy_size;
339  arg_rem_size -= copy_size;
340  }
341 
342  /* If data has been copied set new arg to true */
343  if (id_rem_size == 0 && size_rem_size == 0 && arg_rem_size == 0) {
344  id_rem_size = ARGUMENT_ARG_SIZE;
345  size_rem_size = ARGUMENT_SIZE_SIZE;
346  arg_nr++;
347  }
348  }
349  } while (result == FPC_COM_RESULT_OK && arg_nr < num_args);
350 
351 exit:
352  return result;
353 }
354 
356 {
357  uint16_t serialized_size;
358  uint16_t packet_data_left;
359  uint16_t data_rem_size = 0;
360  uint16_t app_mtu;
361  uint16_t overhead;
362  fpc_com_result_t result;
363  uint16_t num_args = 0;
364  uint16_t arg_nr = 0;
365  uint16_t app_offset;
366  uint8_t *data;
367  fpc_hcp_arg_data_t *arg_data = NULL;
368 
369 
370  /* Calculate transport packet data MTU size */
371  overhead = chain->app_overhead_get(&app_offset);
372  if (overhead > chain->phy_mtu_size[FPC_COM_CHAIN_TX]) {
374  goto exit;
375  }
376  app_mtu = chain->app_mtu_size[FPC_COM_CHAIN_TX] - overhead;
377 
378  /* Get application packet total serialized size */
379  serialized_size = fpc_hcp_get_size(chain->private_vars.hcp_packet, &num_args);
380 
381  /* Set initial sequence length and size */
382  /* Calculate sequence length (number of application packages) */
383  chain->private_vars.hcp_seq_len = (serialized_size + app_mtu + 1) / app_mtu;
384  chain->private_vars.hcp_seq_nr = 1;
385 
386  /* Set first packet size */
387  chain->app_packet_size[FPC_COM_CHAIN_TX] = HCP_MIN(serialized_size, app_mtu);
388  packet_data_left = chain->app_packet_size[FPC_COM_CHAIN_TX];
389 
390  /* Point packet data to application buffer */
391  data = chain->app_mtu_buffer[FPC_COM_CHAIN_TX] + app_offset;
392 
393  /* Copy command ID to buffer */
394  *((fpc_hcp_cmd_t *) data) = chain->private_vars.hcp_packet->id;
395  data += PACKET_ID_SIZE;
396 
397  /* Copy number of arguments to buffer */
398  *((uint16_t *) data) = num_args;
399  data += PACKET_NUM_ARGS_SIZE;
400 
401  packet_data_left -= PACKET_HEADER_SIZE;
402 
403  do {
404  /* Copy arguments to data blob */
405  while (packet_data_left && arg_nr < num_args) {
406  /* Copy arg header to buffer */
407  if (!data_rem_size && packet_data_left >= ARGUMENT_HEADER_SIZE) {
408  /* Get current argument */
409  arg_data = &chain->private_vars.hcp_packet->arguments[arg_nr];
410 
411  /* Copy argument id */
412  memcpy(data, &arg_data->arg, ARGUMENT_ARG_SIZE);
413  data += ARGUMENT_ARG_SIZE;
414 
415  /* Copy argument size */
416  memcpy(data, &arg_data->size, ARGUMENT_SIZE_SIZE);
417  data += ARGUMENT_SIZE_SIZE;
418 
419  /* Update parameters */
420  packet_data_left -= ARGUMENT_HEADER_SIZE;
421  data_rem_size = arg_data->size;
422  } else if (!data_rem_size && packet_data_left < ARGUMENT_HEADER_SIZE) {
423  /*
424  * Special case to ensure that the argument header
425  * is not split over several packets as that will break the
426  * argument allocator.
427  */
428  chain->app_packet_size[FPC_COM_CHAIN_TX] -= packet_data_left;
429  break;
430  }
431 
432  /* Copy argument data to transport package data blob */
433  if (packet_data_left && data_rem_size) {
434  uint16_t copy_size;
435 
436  /* Set copy size */
437  copy_size = HCP_MIN(data_rem_size, packet_data_left);
438 
439  /* Copy argument data */
440  memcpy(data, arg_data->data + (arg_data->size - data_rem_size), copy_size);
441  data += copy_size;
442 
443  /* Update parameters */
444  data_rem_size -= copy_size;
445  packet_data_left -= copy_size;
446  }
447  if (!data_rem_size) {
448  arg_nr++;
449  }
450  }
451 
452  /* Transmit transport package */
453  result = chain->app_tx(chain);
454 
455  chain->private_vars.hcp_seq_nr++;
456 
457  /* Reduce data left counter */
458  serialized_size -= chain->app_packet_size[FPC_COM_CHAIN_TX];
459 
460  /* Set next packet size */
461  packet_data_left = HCP_MIN(serialized_size, app_mtu);
462  chain->app_packet_size[FPC_COM_CHAIN_TX] = packet_data_left;
463 
464  /* Set destination offset to zero for next packet */
465  data = chain->app_mtu_buffer[FPC_COM_CHAIN_TX] + app_offset;
466  } while (result == FPC_COM_RESULT_OK && serialized_size);
467 
468 exit:
469  return result;
470 }
-
uint16_t fpc_hcp_cmd_t
- -
uint16_t(* tsp_overhead_get)(uint16_t *offset)
Definition: fpc_com_chain.h:95
-
fpc_com_result_t(* app_tx)(fpc_com_chain_t *chain)
Definition: fpc_com_chain.h:73
-
uint8_t * phy_mtu_buffer[2]
-
static fpc_com_result_t recieve_chunks(fpc_com_chain_t *chain)
Handle receive chunks.
Definition: fpc_hcp.c:211
-
uint16_t(* app_overhead_get)(uint16_t *offset)
Definition: fpc_com_chain.h:77
-
uint16_t phy_mtu_size[2]
- - -
#define ARGUMENT_HEADER_SIZE
Definition: fpc_hcp.c:46
-
bool fpc_hcp_arg_check(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg)
Check if command contains selected argument key.
Definition: fpc_hcp.c:169
- - - - -
Application Command Packet.
-
#define HCP_MIN(x, y)
-
uint16_t app_mtu_size[2]
Definition: fpc_com_chain.h:81
-
bool fpc_hcp_arg_copy_data(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t data_size, uint8_t *data)
Copy data from an argument with specified key.
Definition: fpc_hcp.c:183
-
fpc_hcp_cmd_t id
-
void *(* argument_allocator)(fpc_hcp_cmd_t cmd, fpc_hcp_arg_t arg, uint16_t size, bool *free_data, void *context)
Definition: fpc_com_chain.h:59
-
static fpc_com_result_t transmit_chunks(fpc_com_chain_t *chain)
Handle transmit chunks.
Definition: fpc_hcp.c:355
-
#define PACKET_HEADER_SIZE
Definition: fpc_hcp.c:35
-
fpc_hcp_arg_data_t * fpc_hcp_arg_get(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg)
Get Argument with specified key.
Definition: fpc_hcp.c:173
-
void * context
User context pointer. User private stuff, to be able to pass nessecary context to argument_allocator ...
- -
void(* argument_free)(fpc_hcp_cmd_t cmd, fpc_hcp_arg_data_t *arg_data, void *context)
Definition: fpc_com_chain.h:62
-
#define PACKET_NUM_ARGS_SIZE
Definition: fpc_hcp.c:34
-
Command Argument.
- -
#define ARGUMENT_ARG_SIZE
Definition: fpc_hcp.c:44
-
bool fpc_hcp_arg_add(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t size, bool free_data, void *data)
Add argument to packet.
Definition: fpc_hcp.c:145
-
fpc_com_result_t fpc_hcp_transmit(fpc_hcp_packet_t *packet, fpc_com_chain_t *chain)
Transmits an application packet through the supplied transmit chain.
Definition: fpc_hcp.c:89
- -
uint16_t app_packet_size[2]
Definition: fpc_com_chain.h:79
-
uint8_t * app_mtu_buffer[2]
Definition: fpc_com_chain.h:83
- -
uint16_t fpc_hcp_arg_t
-
uint16_t(* link_overhead_get)(uint16_t *offset)
-
#define PACKET_ID_SIZE
Definition: fpc_hcp.c:33
-
fpc_hcp_arg_data_t * arguments
-
uint8_t fpc_com_result_t
-
fpc_hcp_packet_t * hcp_packet
Definition: fpc_com_chain.h:38
-
fpc_com_chain_private_t private_vars
-
uint16_t fpc_hcp_get_size(fpc_hcp_packet_t *packet, uint16_t *num_args)
Calculate serialized packet size.
Definition: fpc_hcp.c:64
- -
fpc_com_result_t fpc_hcp_receive(fpc_hcp_packet_t *packet, fpc_com_chain_t *chain)
Receives an application packet through the supplied transmit chain.
Definition: fpc_hcp.c:117
-
fpc_hcp_arg_t arg
-
Host Communication Protocol interface.
- -
#define ARGUMENT_SIZE_SIZE
Definition: fpc_hcp.c:45
-
void fpc_hcp_free(fpc_com_chain_t *chain, fpc_hcp_packet_t *packet)
Frees the resources held by the packet i.e. the dynamic data held in the arguments.
Definition: fpc_hcp.c:198
-
fpc_com_result_t(* app_rx)(fpc_com_chain_t *chain)
Definition: fpc_com_chain.h:75
- -
-
- - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h.html b/hcp/doxygen/html/fpc__hcp_8h.html deleted file mode 100644 index 8b503ba..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h.html +++ /dev/null @@ -1,528 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_hcp.h File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_hcp.h File Reference
-
-
- -

Host Communication Protocol interface. -More...

-
#include <stdbool.h>
-#include <stdint.h>
-#include "fpc_hcp_common.h"
-#include "fpc_com_chain.h"
-
-Include dependency graph for fpc_hcp.h:
-
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

fpc_com_result_t fpc_hcp_transmit (fpc_hcp_packet_t *packet, fpc_com_chain_t *chain)
 Transmits an application packet through the supplied transmit chain. More...
 
fpc_com_result_t fpc_hcp_receive (fpc_hcp_packet_t *packet, fpc_com_chain_t *chain)
 Receives an application packet through the supplied transmit chain. More...
 
bool fpc_hcp_arg_add (fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t size, bool free_data, void *data)
 Add argument to packet. More...
 
bool fpc_hcp_arg_check (fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg)
 Check if command contains selected argument key. More...
 
fpc_hcp_arg_data_tfpc_hcp_arg_get (fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg)
 Get Argument with specified key. More...
 
bool fpc_hcp_arg_copy_data (fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t data_size, uint8_t *data)
 Copy data from an argument with specified key. More...
 
void fpc_hcp_free (fpc_com_chain_t *chain, fpc_hcp_packet_t *packet)
 Frees the resources held by the packet i.e. the dynamic data held in the arguments. More...
 
uint16_t fpc_hcp_get_size (fpc_hcp_packet_t *packet, uint16_t *num_args)
 Calculate serialized packet size. More...
 
-

Detailed Description

-

Host Communication Protocol interface.

- -

Definition in file fpc_hcp.h.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool fpc_hcp_arg_add (fpc_hcp_packet_tpacket,
fpc_hcp_arg_t arg,
uint16_t size,
bool free_data,
void * data 
)
-
- -

Add argument to packet.

-
Note
This function does not allocate any memory, it will only set the argument variables.
-
Parameters
- - - - - - -
[in]packetPacket to add to.
[in]argArgument id.
[in]sizeSize of argument data.
[in]free_dataSet to true if data should be owned by the argument, false if user still owns data.
[in]dataPointer to argument data.
-
-
-
Returns
true = success, false = failure.
- -

Definition at line 145 of file fpc_hcp.c.

- -

References fpc_hcp_arg_data::arg, ARG_NONE, fpc_hcp_packet::arguments, fpc_hcp_arg_data::data, fpc_hcp_arg_data::free_data, fpc_hcp_packet::num_args, and fpc_hcp_arg_data::size.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool fpc_hcp_arg_check (fpc_hcp_packet_tpacket,
fpc_hcp_arg_t arg 
)
-
- -

Check if command contains selected argument key.

-
Parameters
- - - -
[in]packetThe packet to scan.
[in]argArgument to look for.
-
-
-
Returns
true if found, false if not found.
- -

Definition at line 169 of file fpc_hcp.c.

- -

References fpc_hcp_arg_get().

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool fpc_hcp_arg_copy_data (fpc_hcp_packet_tpacket,
fpc_hcp_arg_t arg,
uint16_t data_size,
uint8_t * data 
)
-
- -

Copy data from an argument with specified key.

-

Argument data will be copied to specified data buffer. Remaining bytes in data will be cleared if the argument data size is less than data size when the argument contains data.

-
Parameters
- - - - - -
[in]packetThe packet to operate on.
[in]argThe arg to retrieve data from.
[in]data_sizeNumber of bytes to copy.
[in,out]dataPointer to data buffer.
-
-
-
Returns
True if argument found, false if not found.
- -

Definition at line 183 of file fpc_hcp.c.

- -

References fpc_hcp_arg_data::data, fpc_hcp_arg_get(), and fpc_hcp_arg_data::size.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_hcp_arg_data_t* fpc_hcp_arg_get (fpc_hcp_packet_tpacket,
fpc_hcp_arg_t arg 
)
-
- -

Get Argument with specified key.

-
Parameters
- - - -
[in]packetThe packet to operate on.
[in]argThe arg to retrieve.
-
-
-
Returns
Pointer to fpc_hcp_arg_data_t is successful, otherwise NULL.
- -

Definition at line 173 of file fpc_hcp.c.

- -

References fpc_hcp_arg_data::arg, fpc_hcp_packet::arguments, and fpc_hcp_packet::num_args.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void fpc_hcp_free (fpc_com_chain_tchain,
fpc_hcp_packet_tpacket 
)
-
- -

Frees the resources held by the packet i.e. the dynamic data held in the arguments.

-
Parameters
- - - -
[in]chainPointer to the communication chain used to retrieve the packet.
[in]packetPointer to packet.
-
-
- -

Definition at line 198 of file fpc_hcp.c.

- -

References fpc_hcp_arg_data::arg, ARG_NONE, fpc_com_chain::argument_free, fpc_hcp_packet::arguments, CMD_NONE, fpc_com_chain::context, fpc_hcp_packet::id, and fpc_hcp_packet::num_args.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
uint16_t fpc_hcp_get_size (fpc_hcp_packet_tpacket,
uint16_t * num_args 
)
-
- -

Calculate serialized packet size.

-
Parameters
- - - -
[in]packetPacket to calculate.
[in,out]num_argsWill return number of arguments held by the command can be set to NULL.
-
-
-
Returns
Serialized size.
- -

Definition at line 64 of file fpc_hcp.c.

- -

References fpc_hcp_arg_data::arg, ARG_NONE, ARGUMENT_HEADER_SIZE, fpc_hcp_packet::arguments, fpc_hcp_packet::num_args, PACKET_HEADER_SIZE, and fpc_hcp_arg_data::size.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_hcp_receive (fpc_hcp_packet_tpacket,
fpc_com_chain_tchain 
)
-
- -

Receives an application packet through the supplied transmit chain.

-
Parameters
- - - -
[in,out]packetPointer to pre-allocated packet struct.
[in]chainThe chain to use.
-
-
-
Returns
fpc_com_result_t
- -

Definition at line 117 of file fpc_hcp.c.

- -

References fpc_com_chain::app_mtu_buffer, fpc_com_chain::app_mtu_size, FPC_COM_CHAIN_RX, FPC_COM_RESULT_INVALID_ARGUMENT, fpc_com_chain_private::hcp_packet, fpc_com_chain::initialized, fpc_com_chain::link_overhead_get, fpc_com_chain::phy_mtu_buffer, fpc_com_chain::phy_mtu_size, fpc_com_chain::private_vars, recieve_chunks(), and fpc_com_chain::tsp_overhead_get.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fpc_com_result_t fpc_hcp_transmit (fpc_hcp_packet_tpacket,
fpc_com_chain_tchain 
)
-
- -

Transmits an application packet through the supplied transmit chain.

-
Parameters
- - - -
[in]packetApplication packet to send.
[in]chainThe chain to use.
-
-
-
Returns
fpc_com_result_t
- -

Definition at line 89 of file fpc_hcp.c.

- -

References fpc_com_chain::app_mtu_buffer, fpc_com_chain::app_mtu_size, FPC_COM_CHAIN_TX, FPC_COM_RESULT_INVALID_ARGUMENT, fpc_com_chain_private::hcp_packet, fpc_com_chain::initialized, fpc_com_chain::link_overhead_get, fpc_com_chain::phy_mtu_buffer, fpc_com_chain::phy_mtu_size, fpc_com_chain::private_vars, transmit_chunks(), and fpc_com_chain::tsp_overhead_get.

- -

-Here is the call graph for this function:
-
-
-
-
-

- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h.js b/hcp/doxygen/html/fpc__hcp_8h.js deleted file mode 100644 index e6cd45e..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h.js +++ /dev/null @@ -1,11 +0,0 @@ -var fpc__hcp_8h = -[ - [ "fpc_hcp_arg_add", "fpc__hcp_8h.html#a9b6886d13174fd6e88bd673ba09cca7d", null ], - [ "fpc_hcp_arg_check", "fpc__hcp_8h.html#ae1b7ce8b198acf7c8f6802300e2591ea", null ], - [ "fpc_hcp_arg_copy_data", "fpc__hcp_8h.html#addefbe1e416979abcf59f7bf652e2a77", null ], - [ "fpc_hcp_arg_get", "fpc__hcp_8h.html#a3860f01dade55ac5f55e85342b8f6d0d", null ], - [ "fpc_hcp_free", "fpc__hcp_8h.html#a78f14eb8269c8f17ea46f01beab88608", null ], - [ "fpc_hcp_get_size", "fpc__hcp_8h.html#a144fab9621ae9cd7abb8e3660b20265f", null ], - [ "fpc_hcp_receive", "fpc__hcp_8h.html#aa964fefb0fc68032f44850ee060b8e9b", null ], - [ "fpc_hcp_transmit", "fpc__hcp_8h.html#ac8ec0a9f397508976922d1833a9a7626", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8h__dep__incl.map b/hcp/doxygen/html/fpc__hcp_8h__dep__incl.map deleted file mode 100644 index e49a625..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h__dep__incl.md5 b/hcp/doxygen/html/fpc__hcp_8h__dep__incl.md5 deleted file mode 100644 index 0a0ff1c..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -8e99a82fe41fc214aaf6dbfd0f5240cc \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8h__dep__incl.svg b/hcp/doxygen/html/fpc__hcp_8h__dep__incl.svg deleted file mode 100644 index 2f3569a..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h__dep__incl.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -inc/fpc_hcp.h - - -Node1 - -inc/fpc_hcp.h - - -Node2 - - -src/fpc_hcp.c - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h__incl.map b/hcp/doxygen/html/fpc__hcp_8h__incl.map deleted file mode 100644 index ef9503b..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h__incl.md5 b/hcp/doxygen/html/fpc__hcp_8h__incl.md5 deleted file mode 100644 index 9950163..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -08bf749f5323a0049976eab702f0245f \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8h__incl.svg b/hcp/doxygen/html/fpc__hcp_8h__incl.svg deleted file mode 100644 index 0b102d6..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h__incl.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -inc/fpc_hcp.h - - -Node1 - -inc/fpc_hcp.h - - -Node2 - -stdbool.h - - -Node1->Node2 - - - - -Node3 - -stdint.h - - -Node1->Node3 - - - - -Node4 - - -fpc_hcp_common.h - - - - -Node1->Node4 - - - - -Node5 - - -fpc_com_chain.h - - - - -Node1->Node5 - - - - -Node4->Node2 - - - - -Node4->Node3 - - - - -Node5->Node3 - - - - -Node5->Node4 - - - - -Node6 - - -fpc_com_result.h - - - - -Node5->Node6 - - - - -Node7 - - -fpc_com_packets.h - - - - -Node5->Node7 - - - - -Node6->Node3 - - - - -Node7->Node3 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h_aa964fefb0fc68032f44850ee060b8e9b_cgraph.map b/hcp/doxygen/html/fpc__hcp_8h_aa964fefb0fc68032f44850ee060b8e9b_cgraph.map deleted file mode 100644 index 40790a0..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_aa964fefb0fc68032f44850ee060b8e9b_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h_aa964fefb0fc68032f44850ee060b8e9b_cgraph.md5 b/hcp/doxygen/html/fpc__hcp_8h_aa964fefb0fc68032f44850ee060b8e9b_cgraph.md5 deleted file mode 100644 index e4c2356..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_aa964fefb0fc68032f44850ee060b8e9b_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -c8a1373f76cbcb80bc7197d6f8738d54 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8h_aa964fefb0fc68032f44850ee060b8e9b_cgraph.svg b/hcp/doxygen/html/fpc__hcp_8h_aa964fefb0fc68032f44850ee060b8e9b_cgraph.svg deleted file mode 100644 index dd37a6b..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_aa964fefb0fc68032f44850ee060b8e9b_cgraph.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -fpc_hcp_receive - - -Node1 - -fpc_hcp_receive - - -Node2 - - -recieve_chunks - - - - -Node1->Node2 - - - - -Node3 - - -fpc_hcp_arg_add - - - - -Node2->Node3 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h_ac8ec0a9f397508976922d1833a9a7626_cgraph.map b/hcp/doxygen/html/fpc__hcp_8h_ac8ec0a9f397508976922d1833a9a7626_cgraph.map deleted file mode 100644 index 0bedd7e..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_ac8ec0a9f397508976922d1833a9a7626_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h_ac8ec0a9f397508976922d1833a9a7626_cgraph.md5 b/hcp/doxygen/html/fpc__hcp_8h_ac8ec0a9f397508976922d1833a9a7626_cgraph.md5 deleted file mode 100644 index a496d1c..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_ac8ec0a9f397508976922d1833a9a7626_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -9596474d49066c85e453de78f4af85de \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8h_ac8ec0a9f397508976922d1833a9a7626_cgraph.svg b/hcp/doxygen/html/fpc__hcp_8h_ac8ec0a9f397508976922d1833a9a7626_cgraph.svg deleted file mode 100644 index 74fb564..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_ac8ec0a9f397508976922d1833a9a7626_cgraph.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -fpc_hcp_transmit - - -Node1 - -fpc_hcp_transmit - - -Node2 - - -transmit_chunks - - - - -Node1->Node2 - - - - -Node3 - - -fpc_hcp_get_size - - - - -Node2->Node3 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h_addefbe1e416979abcf59f7bf652e2a77_cgraph.map b/hcp/doxygen/html/fpc__hcp_8h_addefbe1e416979abcf59f7bf652e2a77_cgraph.map deleted file mode 100644 index e659c9d..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_addefbe1e416979abcf59f7bf652e2a77_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h_addefbe1e416979abcf59f7bf652e2a77_cgraph.md5 b/hcp/doxygen/html/fpc__hcp_8h_addefbe1e416979abcf59f7bf652e2a77_cgraph.md5 deleted file mode 100644 index db0e3fc..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_addefbe1e416979abcf59f7bf652e2a77_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -91c93424f2e67d8a35bdc3f37f89d5dc \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8h_addefbe1e416979abcf59f7bf652e2a77_cgraph.svg b/hcp/doxygen/html/fpc__hcp_8h_addefbe1e416979abcf59f7bf652e2a77_cgraph.svg deleted file mode 100644 index d620794..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_addefbe1e416979abcf59f7bf652e2a77_cgraph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -fpc_hcp_arg_copy_data - - -Node1 - -fpc_hcp_arg_copy_data - - -Node2 - - -fpc_hcp_arg_get - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.map b/hcp/doxygen/html/fpc__hcp_8h_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.map deleted file mode 100644 index 875eb9b..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.md5 b/hcp/doxygen/html/fpc__hcp_8h_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.md5 deleted file mode 100644 index 1836b85..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -529d025920f22b6a43cc9f025014d76b \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp_8h_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.svg b/hcp/doxygen/html/fpc__hcp_8h_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.svg deleted file mode 100644 index e519ac1..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_ae1b7ce8b198acf7c8f6802300e2591ea_cgraph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -fpc_hcp_arg_check - - -Node1 - -fpc_hcp_arg_check - - -Node2 - - -fpc_hcp_arg_get - - - - -Node1->Node2 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp_8h_source.html b/hcp/doxygen/html/fpc__hcp_8h_source.html deleted file mode 100644 index ed3ceae..0000000 --- a/hcp/doxygen/html/fpc__hcp_8h_source.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_hcp.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
fpc_hcp.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Fingerprint Cards AB
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #ifndef FPC_HCP_H
23 #define FPC_HCP_H
24 
25 #include <stdbool.h>
26 #include <stdint.h>
27 
28 #include "fpc_hcp_common.h"
29 #include "fpc_com_chain.h"
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif /* __cplusplus */
34 
43 
52 
66 bool fpc_hcp_arg_add(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t size, bool free_data,
67  void *data);
68 
77 
86 
101 bool fpc_hcp_arg_copy_data(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t data_size,
102  uint8_t *data);
103 
110 void fpc_hcp_free(fpc_com_chain_t *chain, fpc_hcp_packet_t *packet);
111 
119 uint16_t fpc_hcp_get_size(fpc_hcp_packet_t *packet, uint16_t *num_args);
120 
121 #ifdef __cplusplus
122 }
123 #endif /* __cplusplus */
124 
125 #endif /* FPC_HCP_H */
bool fpc_hcp_arg_check(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg)
Check if command contains selected argument key.
Definition: fpc_hcp.c:169
- -
Application Command Packet.
-
fpc_hcp_arg_data_t * fpc_hcp_arg_get(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg)
Get Argument with specified key.
Definition: fpc_hcp.c:173
-
Communication chain type definitions.
-
Command Argument.
-
bool fpc_hcp_arg_add(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t size, bool free_data, void *data)
Add argument to packet.
Definition: fpc_hcp.c:145
-
fpc_com_result_t fpc_hcp_receive(fpc_hcp_packet_t *packet, fpc_com_chain_t *chain)
Receives an application packet through the supplied transmit chain.
Definition: fpc_hcp.c:117
-
uint16_t fpc_hcp_arg_t
-
uint16_t fpc_hcp_get_size(fpc_hcp_packet_t *packet, uint16_t *num_args)
Calculate serialized packet size.
Definition: fpc_hcp.c:64
-
bool fpc_hcp_arg_copy_data(fpc_hcp_packet_t *packet, fpc_hcp_arg_t arg, uint16_t data_size, uint8_t *data)
Copy data from an argument with specified key.
Definition: fpc_hcp.c:183
-
fpc_com_result_t fpc_hcp_transmit(fpc_hcp_packet_t *packet, fpc_com_chain_t *chain)
Transmits an application packet through the supplied transmit chain.
Definition: fpc_hcp.c:89
-
uint8_t fpc_com_result_t
-
Host Communication Protocol common type definitions.
-
void fpc_hcp_free(fpc_com_chain_t *chain, fpc_hcp_packet_t *packet)
Frees the resources held by the packet i.e. the dynamic data held in the arguments.
Definition: fpc_hcp.c:198
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__hcp__common_8h.html b/hcp/doxygen/html/fpc__hcp__common_8h.html deleted file mode 100644 index 2d8c85e..0000000 --- a/hcp/doxygen/html/fpc__hcp__common_8h.html +++ /dev/null @@ -1,691 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_hcp_common.h File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_hcp_common.h File Reference
-
-
- -

Host Communication Protocol common type definitions. -More...

-
#include <stdint.h>
-#include <stdbool.h>
-
-Include dependency graph for fpc_hcp_common.h:
-
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - -

-Data Structures

struct  fpc_hcp_arg_data
 Command Argument. More...
 
struct  fpc_hcp_packet
 Application Command Packet. More...
 
- - - - - - - -

-Macros

#define HCP_MIN(x, y)   (((x) < (y)) ? (x) : (y))
 
#define CMD_APP_BASE_VAL   0xE000
 
#define ARG_APP_BASE_VAL   0x7000
 
- - - - - - - - - - - -

-Typedefs

typedef uint16_t fpc_hcp_cmd_t
 
typedef uint16_t fpc_hcp_arg_t
 
typedef struct fpc_hcp_arg_data fpc_hcp_arg_data_t
 Command Argument. More...
 
typedef struct fpc_hcp_packet fpc_hcp_packet_t
 Application Command Packet. More...
 
- - - - - -

-Enumerations

enum  fpc_hcp_cmd {
-  CMD_NONE = 0x0000, -
-  CMD_CAPTURE = 0x0001, -
-  CMD_ENROLL = 0x0002, -
-  CMD_IDENTIFY = 0x0003, -
-  CMD_MATCH = 0x0004, -
-  CMD_IMAGE = 0x0005, -
-  CMD_TEMPLATE = 0x0006, -
-  CMD_WAIT = 0x0007, -
-  CMD_SETTINGS = 0x0008, -
-  CMD_NAVIGATE = 0x1001, -
-  CMD_SENSOR = 0x1002, -
-  CMD_DEADPIXELS = 0x1003, -
-  CMD_CONNECT = 0x2001, -
-  CMD_RECONNECT = 0x2002, -
-  CMD_RESET = 0x3002, -
-  CMD_CANCEL = 0x3003, -
-  CMD_INFO = 0x3004, -
-  CMD_STORAGE_TEMPLATE = 0x4002, -
-  CMD_STORAGE_CALIBRATION = 0x4003, -
-  CMD_STORAGE_LOG = 0x4004, -
-  CMD_STORAGE_SETTINGS = 0x4005, -
-  CMD_TEST = 0x5001, -
-  CMD_MCU = 0x5002, -
-  CMD_GPIO = 0x5003, -
-  CMD_COMMUNICATION = 0x6001, -
-  CMD_APP_BASE = CMD_APP_BASE_VAL, -
-  CMD_DIAG = 0xF003, -
-  CMD_FFFF = 0xFFFF -
- }
 
enum  fpc_hcp_arg {
-  ARG_NONE = 0x0000, -
-  ARG_FINGER_DOWN = 0x0001, -
-  ARG_FINGER_UP = 0x0002, -
-  ARG_START = 0x0003, -
-  ARG_ADD = 0x0004, -
-  ARG_FINISH = 0x0005, -
-  ARG_ID = 0x0006, -
-  ARG_ALL = 0x0007, -
-  ARG_EXTRACT = 0x0008, -
-  ARG_MATCH_IMAGE = 0x0009, -
-  ARG_MATCH = 0x000A, -
-  ARG_ACQUIRE = 0x1001, -
-  ARG_RELEASE = 0x1002, -
-  ARG_SET = 0x1003, -
-  ARG_GET = 0x1004, -
-  ARG_UPLOAD = 0x1005, -
-  ARG_DOWNLOAD = 0x1006, -
-  ARG_CREATE = 0x1007, -
-  ARG_SAVE = 0x1008, -
-  ARG_DELETE = 0x1009, -
-  ARG_DATA = 0x100A, -
-  ARG_UPDATE = 0x100B, -
-  ARG_SEQ_NR = 0x100C, -
-  ARG_SEQ_LEN = 0x100D, -
-  ARG_RESULT = 0x2001, -
-  ARG_COUNT = 0x2002, -
-  ARG_SIZE = 0x2003, -
-  ARG_LEVEL = 0x2004, -
-  ARG_FORMAT = 0x2005, -
-  ARG_FLAG = 0x2006, -
-  ARG_PROPERTIES = 0x2007, -
-  ARG_SPEED = 0x2008, -
-  ARG_PROD_TEST = 0x2009, -
-  ARG_SENSOR_TYPE = 0x3001, -
-  ARG_WIDTH = 0x3002, -
-  ARG_HEIGHT = 0x3003, -
-  ARG_RESET = 0x3004, -
-  ARG_DPI = 0x3005, -
-  ARG_MAX_SPI_CLOCK = 0x3006, -
-  ARG_NUM_SUB_AREAS_WIDTH = 0x3007, -
-  ARG_NUM_SUB_AREAS_HEIGHT = 0x3008, -
-  ARG_IRQ_STATUS = 0x3009, -
-  ARG_RESET_HARD = 0x300A, -
-  ARG_IDLE = 0x4001, -
-  ARG_SLEEP = 0x4002, -
-  ARG_DEEP_SLEEP = 0x4003, -
-  ARG_POWER_MODE = 0x4004, -
-  ARG_BUSY_WAIT = 0x4005, -
-  ARG_TIMEOUT = 0x5001, -
-  ARG_DONE = 0x5002, -
-  ARG_BOOT = 0x6001, -
-  ARG_STATUS = 0x6002, -
-  ARG_VERSION = 0x6003, -
-  ARG_UNIQUE_ID = 0x6004, -
-  ARG_APP_BASE = ARG_APP_BASE_VAL, -
-  ARG_NONCE = 0x8001, -
-  ARG_MAC = 0x8002, -
-  ARG_RANDOM = 0x8003, -
-  ARG_CLAIM = 0x8004, -
-  ARG_PUBLIC_KEY = 0x8005, -
-  ARG_CIPHERTEXT = 0x8006, -
-  ARG_MTU = 0x9001, -
-  ARG_STACK = 0xE001, -
-  ARG_FILL = 0xE002, -
-  ARG_HEAP = 0xE003, -
-  ARG_MODE = 0xF001, -
-  ARG_DEBUG = 0xF002, -
-  ARG_FFFF = 0xFFFF -
- }
 
-

Detailed Description

-

Host Communication Protocol common type definitions.

- -

Definition in file fpc_hcp_common.h.

-

Macro Definition Documentation

- -
-
- - - - -
#define ARG_APP_BASE_VAL   0x7000
-
-

Program specific arguments base number

- -

Definition at line 39 of file fpc_hcp_common.h.

- -
-
- -
-
- - - - -
#define CMD_APP_BASE_VAL   0xE000
-
-

Program specific commands base number

- -

Definition at line 36 of file fpc_hcp_common.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define HCP_MIN( x,
 
)   (((x) < (y)) ? (x) : (y))
-
-

Returns the smallest of two values.

- -

Definition at line 33 of file fpc_hcp_common.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef struct fpc_hcp_arg_data fpc_hcp_arg_data_t
-
- -

Command Argument.

- -
-
- -
-
- - - - -
typedef uint16_t fpc_hcp_arg_t
-
-

HCP Argument type

- -

Definition at line 191 of file fpc_hcp_common.h.

- -
-
- -
-
- - - - -
typedef uint16_t fpc_hcp_cmd_t
-
-

HCP Command type

- -

Definition at line 92 of file fpc_hcp_common.h.

- -
-
- -
-
- - - - -
typedef struct fpc_hcp_packet fpc_hcp_packet_t
-
- -

Application Command Packet.

- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum fpc_hcp_arg
-
-

HCP Argument definitions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Enumerator
ARG_NONE  -
ARG_FINGER_DOWN  -
ARG_FINGER_UP  -
ARG_START  -
ARG_ADD  -
ARG_FINISH  -
ARG_ID  -
ARG_ALL  -
ARG_EXTRACT  -
ARG_MATCH_IMAGE  -
ARG_MATCH  -
ARG_ACQUIRE  -
ARG_RELEASE  -
ARG_SET  -
ARG_GET  -
ARG_UPLOAD  -
ARG_DOWNLOAD  -
ARG_CREATE  -
ARG_SAVE  -
ARG_DELETE  -
ARG_DATA  -
ARG_UPDATE  -
ARG_SEQ_NR  -
ARG_SEQ_LEN  -
ARG_RESULT  -
ARG_COUNT  -
ARG_SIZE  -
ARG_LEVEL  -
ARG_FORMAT  -
ARG_FLAG  -
ARG_PROPERTIES  -
ARG_SPEED  -
ARG_PROD_TEST  -
ARG_SENSOR_TYPE  -
ARG_WIDTH  -
ARG_HEIGHT  -
ARG_RESET  -
ARG_DPI  -
ARG_MAX_SPI_CLOCK  -
ARG_NUM_SUB_AREAS_WIDTH  -
ARG_NUM_SUB_AREAS_HEIGHT  -
ARG_IRQ_STATUS  -
ARG_RESET_HARD  -
ARG_IDLE  -
ARG_SLEEP  -
ARG_DEEP_SLEEP  -
ARG_POWER_MODE  -
ARG_BUSY_WAIT  -
ARG_TIMEOUT  -
ARG_DONE  -
ARG_BOOT  -
ARG_STATUS  -
ARG_VERSION  -
ARG_UNIQUE_ID  -
ARG_APP_BASE  -
ARG_NONCE  -
ARG_MAC  -
ARG_RANDOM  -
ARG_CLAIM  -
ARG_PUBLIC_KEY  -
ARG_CIPHERTEXT  -
ARG_MTU  -
ARG_STACK  -
ARG_FILL  -
ARG_HEAP  -
ARG_MODE  -
ARG_DEBUG  -
ARG_FFFF  -
- -

Definition at line 95 of file fpc_hcp_common.h.

- -
-
- -
-
- - - - -
enum fpc_hcp_cmd
-
-

HCP Command definitions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Enumerator
CMD_NONE  -
CMD_CAPTURE  -
CMD_ENROLL  -
CMD_IDENTIFY  -
CMD_MATCH  -
CMD_IMAGE  -
CMD_TEMPLATE  -
CMD_WAIT  -
CMD_SETTINGS  -
CMD_NAVIGATE  -
CMD_SENSOR  -
CMD_DEADPIXELS  -
CMD_CONNECT  -
CMD_RECONNECT  -
CMD_RESET  -
CMD_CANCEL  -
CMD_INFO  -
CMD_STORAGE_TEMPLATE  -
CMD_STORAGE_CALIBRATION  -
CMD_STORAGE_LOG  -
CMD_STORAGE_SETTINGS  -
CMD_TEST  -
CMD_MCU  -
CMD_GPIO  -
CMD_COMMUNICATION  -
CMD_APP_BASE  -
CMD_DIAG  -
CMD_FFFF  -
- -

Definition at line 42 of file fpc_hcp_common.h.

- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/fpc__hcp__common_8h.js b/hcp/doxygen/html/fpc__hcp__common_8h.js deleted file mode 100644 index 3fc7ecd..0000000 --- a/hcp/doxygen/html/fpc__hcp__common_8h.js +++ /dev/null @@ -1,112 +0,0 @@ -var fpc__hcp__common_8h = -[ - [ "fpc_hcp_arg_data", "structfpc__hcp__arg__data.html", "structfpc__hcp__arg__data" ], - [ "fpc_hcp_packet", "structfpc__hcp__packet.html", "structfpc__hcp__packet" ], - [ "ARG_APP_BASE_VAL", "fpc__hcp__common_8h.html#a09b96c2b90da3d5908a01e5fe67759a8", null ], - [ "CMD_APP_BASE_VAL", "fpc__hcp__common_8h.html#adfce1fcf9573fd4c0176d083e134826c", null ], - [ "HCP_MIN", "fpc__hcp__common_8h.html#a30795492e653a5a0de20222cf9ff927e", null ], - [ "fpc_hcp_arg_data_t", "fpc__hcp__common_8h.html#a4243dac41cd32d44aac72af8e1583b86", null ], - [ "fpc_hcp_arg_t", "fpc__hcp__common_8h.html#a7470deee2c0eae8f5ac7feb71649df0b", null ], - [ "fpc_hcp_cmd_t", "fpc__hcp__common_8h.html#ac3276a2f739c2a97e665a95212e75108", null ], - [ "fpc_hcp_packet_t", "fpc__hcp__common_8h.html#ac2c1c83c186c5de07d8a6da8ed84a895", null ], - [ "fpc_hcp_arg", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58", [ - [ "ARG_NONE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a987f8fc7b774aef0a635c58ae03258c9", null ], - [ "ARG_FINGER_DOWN", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a282c3331c717e21252ccf640a4cba42c", null ], - [ "ARG_FINGER_UP", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58af48460c9570e2416acd42cc65c4ee907", null ], - [ "ARG_START", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ad418e077c4bc91838b87a02e3b8b84d0", null ], - [ "ARG_ADD", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a57c87d820bbe44f6f951f579e3508960", null ], - [ "ARG_FINISH", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a2d7a3821705650a0f636e34cf9489483", null ], - [ "ARG_ID", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a48d1fd0360ac3953b957ab6c9aa62c89", null ], - [ "ARG_ALL", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a1703d631e5bd90fea40f7e82e065a873", null ], - [ "ARG_EXTRACT", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ab0a35f8c351ed7c50728d59ecb509434", null ], - [ "ARG_MATCH_IMAGE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a155eb6605e2804ecc5ae06db45ee904a", null ], - [ "ARG_MATCH", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a47f98fb40b6f16b7f4604dbef56ee28c", null ], - [ "ARG_ACQUIRE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a46b975e4a2a31cce91e0cc48eb8b373f", null ], - [ "ARG_RELEASE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a6f1a444d4907de32c6c930d10928581b", null ], - [ "ARG_SET", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58aea669c57b85839cff76f2e6582d5c8dd", null ], - [ "ARG_GET", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a6b7d8a512edd4ef35af996bdb380ebd8", null ], - [ "ARG_UPLOAD", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a1bc2f89df547e23e6db793cf29e15fdf", null ], - [ "ARG_DOWNLOAD", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58afc542445ec748543f1d05e05c81d03d1", null ], - [ "ARG_CREATE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ae9f8c9eaebf35fd26d679dfeef48bf01", null ], - [ "ARG_SAVE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a3fa6a9cdd6a159dbafd5bd2a4b3e575f", null ], - [ "ARG_DELETE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a7db081ad1c3f134525b6f08a83b70384", null ], - [ "ARG_DATA", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a46506036ceef2a484b5f42f52732d6e8", null ], - [ "ARG_UPDATE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a7eb54a6407b8f036a99fc4883ab097f4", null ], - [ "ARG_SEQ_NR", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a092a5df860a6a79009fef7138fb207ce", null ], - [ "ARG_SEQ_LEN", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a6443ffda57973ae9edce5d2b132d7d76", null ], - [ "ARG_RESULT", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a1954b1b5a42e2f4eff359436be29cef1", null ], - [ "ARG_COUNT", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a00ee914d3647af57d9db7938060eb682", null ], - [ "ARG_SIZE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58afa0fead9b5887e6b618e080d0b30514e", null ], - [ "ARG_LEVEL", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a0386ac5eced03cb9d2be780b0c4b0fd2", null ], - [ "ARG_FORMAT", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a43a63501dc02c77c850cafec34b00fd5", null ], - [ "ARG_FLAG", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58afd135f03243c33991ef507f4410718f7", null ], - [ "ARG_PROPERTIES", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a968d1d7920ff2ac65ca260186e1aa028", null ], - [ "ARG_SPEED", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58aae814c366575ca79777bc0e5ec122aa6", null ], - [ "ARG_PROD_TEST", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ae3bf6570b0c4e1e980fb0405cef2912c", null ], - [ "ARG_SENSOR_TYPE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a922451aeec022bcbab31c71a8734fd93", null ], - [ "ARG_WIDTH", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58acb4c97b112251c21e6782d989ae8a484", null ], - [ "ARG_HEIGHT", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ab9e5a927ad842f9b2db5b52ab5b5316d", null ], - [ "ARG_RESET", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a619f2902b8c376b4b2fe699638211c67", null ], - [ "ARG_DPI", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a07974bddb5cae40a2bc09385b209b209", null ], - [ "ARG_MAX_SPI_CLOCK", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ae0f96db5102db07a51edd87025dd2f86", null ], - [ "ARG_NUM_SUB_AREAS_WIDTH", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a5adfdcc50da0d70c671ae8d5edc57831", null ], - [ "ARG_NUM_SUB_AREAS_HEIGHT", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a719d48bade9494c60b193939a7501262", null ], - [ "ARG_IRQ_STATUS", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58abf16a47a0895ad93a98ccaf9376c4fa9", null ], - [ "ARG_RESET_HARD", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a5abe1e5c03f21a575376db0f66514804", null ], - [ "ARG_IDLE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ab8ffba94ea26f83c305b64c44d3ca09c", null ], - [ "ARG_SLEEP", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58aedad699fc0f742f58c742c1e620a329f", null ], - [ "ARG_DEEP_SLEEP", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58aff16068d335ea5e90339da952f4a6060", null ], - [ "ARG_POWER_MODE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58adeee3496e1368324614b6afae894f7d2", null ], - [ "ARG_BUSY_WAIT", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ae206f73bdf0ce85890a5b7a594231224", null ], - [ "ARG_TIMEOUT", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58aa80c0e222790742c377c03b6b8b3e9ab", null ], - [ "ARG_DONE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58acb38f9522ee19f17516fb004f7a31ec3", null ], - [ "ARG_BOOT", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58aa570dd07229441bd829f1d4e686606d1", null ], - [ "ARG_STATUS", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58aad9742f47efcf0013940226b2e497c7c", null ], - [ "ARG_VERSION", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58af01f11067617ec591cc6ee62809f827b", null ], - [ "ARG_UNIQUE_ID", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a5f76b317c72e414827ec818ece9223aa", null ], - [ "ARG_APP_BASE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ac928346884dee40945b535e4fbdf119f", null ], - [ "ARG_NONCE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ada18bddfb708b09575a7548135407eca", null ], - [ "ARG_MAC", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a959acef0db146c5d71d1b05472589166", null ], - [ "ARG_RANDOM", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58abb8a4e32e04302f5cb94978158cfbd90", null ], - [ "ARG_CLAIM", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a55981094b5dc4952ca13dd0411bfcd1c", null ], - [ "ARG_PUBLIC_KEY", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a3630f2e98b4a6e054f534034a3d30290", null ], - [ "ARG_CIPHERTEXT", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58aab481518edfbde054853f68ad63a0902", null ], - [ "ARG_MTU", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a0f2f0f3bc6002b8daccf87cf8f8e4be0", null ], - [ "ARG_STACK", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a93a55fca7e43f8df9680655425322b0d", null ], - [ "ARG_FILL", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58af37a85125ebbad80778ad3983b9bc2c6", null ], - [ "ARG_HEAP", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58afb482c5323d8a0c661e2c458d8430871", null ], - [ "ARG_MODE", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58ae5d10daf180fe71b5fabfb24f2cb0dba", null ], - [ "ARG_DEBUG", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58a0cd002a3e72fb077172846250990fb37", null ], - [ "ARG_FFFF", "fpc__hcp__common_8h.html#a0147c05f7b301caea7aa2636fbbd9d58aabc429eaa99cde7c994f7bc7d879cb3f", null ] - ] ], - [ "fpc_hcp_cmd", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182", [ - [ "CMD_NONE", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a93c1ce1fac89139d9f4df4b6db21b1cc", null ], - [ "CMD_CAPTURE", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182ad34fc485a2b1e9c623eed78d54efac89", null ], - [ "CMD_ENROLL", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182af90acddc72e82283496db2863853190e", null ], - [ "CMD_IDENTIFY", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182ae9a038931a585cc73f21b035f4f02347", null ], - [ "CMD_MATCH", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182aa2735ed6979a4de609d1b13379bcd78e", null ], - [ "CMD_IMAGE", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a489f5bfe07b9122b07ae95603b620637", null ], - [ "CMD_TEMPLATE", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a1d4e7718d9eae380267c13779b21d920", null ], - [ "CMD_WAIT", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182af1d86b498be7d0a42ad6fcf34296a362", null ], - [ "CMD_SETTINGS", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a7a01e7d4340b392631db49a9c7ede188", null ], - [ "CMD_NAVIGATE", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a37fc3c1817e3791aa81cfa86b7bf26e3", null ], - [ "CMD_SENSOR", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182acc3dcbcf471a99ff3d6de183c3f9733d", null ], - [ "CMD_DEADPIXELS", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a81d698458a12460b7795847a94445fad", null ], - [ "CMD_CONNECT", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a0c7199178f41b307f34eecfde9abafd6", null ], - [ "CMD_RECONNECT", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a5d4c8fb0b21f73bc8e35c43db443cb4e", null ], - [ "CMD_RESET", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182ae71f12b62f9fca54c98ef9630f8fcad1", null ], - [ "CMD_CANCEL", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182aa91fa7175e319a64b5e72703c615feb8", null ], - [ "CMD_INFO", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a6b1ac29fd084fc49f7c5c5e80130614b", null ], - [ "CMD_STORAGE_TEMPLATE", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a8f333f0cd3deafb6e1c6f93990fc8abe", null ], - [ "CMD_STORAGE_CALIBRATION", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a8cfea8ce93dc9f7991fe1daa7ad6e9c2", null ], - [ "CMD_STORAGE_LOG", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a7e36d8f68511c4ab2c8b721ec04f9bf6", null ], - [ "CMD_STORAGE_SETTINGS", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182ae7c96552ac5a62a847ca1a9181db96c0", null ], - [ "CMD_TEST", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a12e11ac7c830ec6038306c9803cdd949", null ], - [ "CMD_MCU", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a5cd077c360e0f4e828268ac6809c195b", null ], - [ "CMD_GPIO", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a08d7df74aae09d5b69935dd5611cb08c", null ], - [ "CMD_COMMUNICATION", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182aa6d4775c93c8d5dcbc916b16f8c63a71", null ], - [ "CMD_APP_BASE", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a2ec8efd2fb642829c4e04db49a884e32", null ], - [ "CMD_DIAG", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182a863d8a2960e3769b5e02a51cdd29dacd", null ], - [ "CMD_FFFF", "fpc__hcp__common_8h.html#a3f3d4d418351daf32d5b5af6a7f32182abe3fc8ddbf9a2fc3e6d13d23096146ff", null ] - ] ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp__common_8h__dep__incl.map b/hcp/doxygen/html/fpc__hcp__common_8h__dep__incl.map deleted file mode 100644 index 426523f..0000000 --- a/hcp/doxygen/html/fpc__hcp__common_8h__dep__incl.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/hcp/doxygen/html/fpc__hcp__common_8h__dep__incl.md5 b/hcp/doxygen/html/fpc__hcp__common_8h__dep__incl.md5 deleted file mode 100644 index 1500d8c..0000000 --- a/hcp/doxygen/html/fpc__hcp__common_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -aa7be3c9a9eed00f83579400ec8a634d \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp__common_8h__dep__incl.svg b/hcp/doxygen/html/fpc__hcp__common_8h__dep__incl.svg deleted file mode 100644 index 221086f..0000000 --- a/hcp/doxygen/html/fpc__hcp__common_8h__dep__incl.svg +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -inc/fpc_hcp_common.h - - -Node1 - -inc/fpc_hcp_common.h - - -Node2 - - -inc/fpc_com_chain.h - - - - -Node1->Node2 - - - - -Node7 - - -inc/fpc_hcp.h - - - - -Node1->Node7 - - - - -Node3 - - -inc/fpc_com_link.h - - - - -Node2->Node3 - - - - -Node6 - - -inc/fpc_com_transport.h - - - - -Node2->Node6 - - - - -Node2->Node7 - - - - -Node4 - - -src/fpc_com_link.c - - - - -Node3->Node4 - - - - -Node5 - - -src/fpc_com_transport.c - - - - -Node3->Node5 - - - - -Node6->Node5 - - - - -Node8 - - -src/fpc_hcp.c - - - - -Node7->Node8 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp__common_8h__incl.map b/hcp/doxygen/html/fpc__hcp__common_8h__incl.map deleted file mode 100644 index ffb42f3..0000000 --- a/hcp/doxygen/html/fpc__hcp__common_8h__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/hcp/doxygen/html/fpc__hcp__common_8h__incl.md5 b/hcp/doxygen/html/fpc__hcp__common_8h__incl.md5 deleted file mode 100644 index c01528b..0000000 --- a/hcp/doxygen/html/fpc__hcp__common_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -bd263c011edd4c4b84e46030d319bb62 \ No newline at end of file diff --git a/hcp/doxygen/html/fpc__hcp__common_8h__incl.svg b/hcp/doxygen/html/fpc__hcp__common_8h__incl.svg deleted file mode 100644 index 9cab59b..0000000 --- a/hcp/doxygen/html/fpc__hcp__common_8h__incl.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - -inc/fpc_hcp_common.h - - -Node1 - -inc/fpc_hcp_common.h - - -Node2 - -stdint.h - - -Node1->Node2 - - - - -Node3 - -stdbool.h - - -Node1->Node3 - - - - - diff --git a/hcp/doxygen/html/fpc__hcp__common_8h_source.html b/hcp/doxygen/html/fpc__hcp__common_8h_source.html deleted file mode 100644 index ff6eb69..0000000 --- a/hcp/doxygen/html/fpc__hcp__common_8h_source.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Host Communication Protocol: inc/fpc_hcp_common.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
fpc_hcp_common.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Fingerprint Cards AB
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #ifndef FPC_HCP_COMMON_H
23 #define FPC_HCP_COMMON_H
24 
25 #include <stdint.h>
26 #include <stdbool.h>
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif /* __cplusplus */
31 
33 #define HCP_MIN(x, y) (((x) < (y)) ? (x) : (y))
34 
36 #define CMD_APP_BASE_VAL 0xE000
37 
39 #define ARG_APP_BASE_VAL 0x7000
40 
43  CMD_NONE = 0x0000,
44 
45  /* Biometry */
46  CMD_CAPTURE = 0x0001,
47  CMD_ENROLL = 0x0002,
48  CMD_IDENTIFY = 0x0003,
49  CMD_MATCH = 0x0004,
50  CMD_IMAGE = 0x0005,
51  CMD_TEMPLATE = 0x0006,
52  CMD_WAIT = 0x0007,
53  CMD_SETTINGS = 0x0008,
54 
55  /* Sensor */
56  CMD_NAVIGATE = 0x1001,
57  CMD_SENSOR = 0x1002,
58  CMD_DEADPIXELS = 0x1003,
59 
60  /* Security */
61  CMD_CONNECT = 0x2001,
62  CMD_RECONNECT = 0x2002,
63 
64  /* Firmware */
65  CMD_RESET = 0x3002,
66  CMD_CANCEL = 0x3003,
67  CMD_INFO = 0x3004,
68 
69  /* Storage */
72  CMD_STORAGE_LOG = 0x4004,
74 
75  /* Hardware */
76  CMD_TEST = 0x5001,
77  CMD_MCU = 0x5002,
78  CMD_GPIO = 0x5003,
79 
80  /* Communication */
82 
83  /* Application specific commands */
85 
86  /* Debug */
87  CMD_DIAG = 0xF003,
88 
89  CMD_FFFF = 0xFFFF,
90 };
92 typedef uint16_t fpc_hcp_cmd_t;
93 
96  ARG_NONE = 0x0000,
97 
98  /* Biometry */
99  ARG_FINGER_DOWN = 0x0001,
100  ARG_FINGER_UP = 0x0002,
101  ARG_START = 0x0003,
102  ARG_ADD = 0x0004,
103  ARG_FINISH = 0x0005,
104  ARG_ID = 0x0006,
105  ARG_ALL = 0x0007,
106  ARG_EXTRACT = 0x0008,
107  ARG_MATCH_IMAGE = 0x0009,
108  ARG_MATCH = 0x000A,
109 
110  /* Data */
111  ARG_ACQUIRE = 0x1001,
112  ARG_RELEASE = 0x1002,
113  ARG_SET = 0x1003,
114  ARG_GET = 0x1004,
115  ARG_UPLOAD = 0x1005,
116  ARG_DOWNLOAD = 0x1006,
117  ARG_CREATE = 0x1007,
118  ARG_SAVE = 0x1008,
119  ARG_DELETE = 0x1009,
120  ARG_DATA = 0x100A,
121  ARG_UPDATE = 0x100B,
122  ARG_SEQ_NR = 0x100C,
123  ARG_SEQ_LEN = 0x100D,
124 
125  /* Results */
126  ARG_RESULT = 0x2001,
127  ARG_COUNT = 0x2002,
128  ARG_SIZE = 0x2003,
129  ARG_LEVEL = 0x2004,
130  ARG_FORMAT = 0x2005,
131  ARG_FLAG = 0x2006,
132  ARG_PROPERTIES = 0x2007,
133  ARG_SPEED = 0x2008,
134  ARG_PROD_TEST = 0x2009,
135 
136  /* Sensor */
137  ARG_SENSOR_TYPE = 0x3001,
138  ARG_WIDTH = 0x3002,
139  ARG_HEIGHT = 0x3003,
140  ARG_RESET = 0x3004,
141  ARG_DPI = 0x3005,
145  ARG_IRQ_STATUS = 0x3009,
146  ARG_RESET_HARD = 0x300A,
147 
148  /* MCU */
149  ARG_IDLE = 0x4001,
150  ARG_SLEEP = 0x4002,
151  ARG_DEEP_SLEEP = 0x4003,
152  ARG_POWER_MODE = 0x4004,
153  ARG_BUSY_WAIT = 0x4005,
154 
155  /* Misc */
156  ARG_TIMEOUT = 0x5001,
157  ARG_DONE = 0x5002,
158 
159  /* Info */
160  ARG_BOOT = 0x6001,
161  ARG_STATUS = 0x6002,
162  ARG_VERSION = 0x6003,
163  ARG_UNIQUE_ID = 0x6004,
164 
165  /* Application specific arguments */
167 
168  /* VSM */
169  ARG_NONCE = 0x8001,
170  ARG_MAC = 0x8002,
171  ARG_RANDOM = 0x8003,
172  ARG_CLAIM = 0x8004,
173  ARG_PUBLIC_KEY = 0x8005,
174  ARG_CIPHERTEXT = 0x8006,
175 
176  /* Communication */
177  ARG_MTU = 0x9001,
178 
179  /* Debug */
180  ARG_STACK = 0xE001,
181  ARG_FILL = 0xE002,
182  ARG_HEAP = 0xE003,
183 
184  /* Log */
185  ARG_MODE = 0xF001,
186  ARG_DEBUG = 0xF002,
187 
188  ARG_FFFF = 0xFFFF,
189 };
191 typedef uint16_t fpc_hcp_arg_t;
192 
196 typedef struct fpc_hcp_arg_data {
198  fpc_hcp_arg_t arg;
200  uint16_t size;
202  bool free_data;
204  uint8_t *data;
206 
210 typedef struct fpc_hcp_packet {
212  fpc_hcp_cmd_t id;
214  uint16_t num_args;
218 
219 #ifdef __cplusplus
220 }
221 #endif /* __cplusplus */
222 
223 #endif /* FPC_HCP_COMMON_H */
- - - -
uint16_t fpc_hcp_cmd_t
- - - -
fpc_hcp_arg
- - -
#define CMD_APP_BASE_VAL
- - - - - - -
struct fpc_hcp_packet fpc_hcp_packet_t
Application Command Packet.
- - - - - - - - -
Application Command Packet.
- - -
fpc_hcp_cmd_t id
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Command Argument.
- - - - - - - - - - - - - - - -
uint16_t fpc_hcp_arg_t
- - - - -
fpc_hcp_arg_data_t * arguments
- - - - -
fpc_hcp_cmd
-
#define ARG_APP_BASE_VAL
- - - - - - - - -
struct fpc_hcp_arg_data fpc_hcp_arg_data_t
Command Argument.
- -
fpc_hcp_arg_t arg
- - - - - - - - - - - -
-
- - - - diff --git a/hcp/doxygen/html/functions.html b/hcp/doxygen/html/functions.html deleted file mode 100644 index f092547..0000000 --- a/hcp/doxygen/html/functions.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - -Host Communication Protocol: Data Fields - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - - - -
-
- -
-
-
- -
-
-
Here is a list of all struct and union fields with links to the structures/unions they belong to:
- -

- a -

- - -

- c -

- - -

- d -

- - -

- f -

- - -

- h -

- - -

- i -

- - -

- l -

- - -

- n -

- - -

- p -

- - -

- s -

- - -

- t -

-
-
- - - - diff --git a/hcp/doxygen/html/functions_vars.html b/hcp/doxygen/html/functions_vars.html deleted file mode 100644 index 07edad9..0000000 --- a/hcp/doxygen/html/functions_vars.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - -Host Communication Protocol: Data Fields - Variables - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - - - -
-
- -
-
-
- -
-
-  - -

- a -

- - -

- c -

- - -

- d -

- - -

- f -

- - -

- h -

- - -

- i -

- - -

- l -

- - -

- n -

- - -

- p -

- - -

- s -

- - -

- t -

-
-
- - - - diff --git a/hcp/doxygen/html/globals.html b/hcp/doxygen/html/globals.html deleted file mode 100644 index 02a5e98..0000000 --- a/hcp/doxygen/html/globals.html +++ /dev/null @@ -1,589 +0,0 @@ - - - - - - -Host Communication Protocol: Globals - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - - - -
-
- -
-
-
- -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- a -

- - -

- c -

- - -

- f -

- - -

- h -

- - -

- p -

- - -

- r -

- - -

- t -

-
-
- - - - diff --git a/hcp/doxygen/html/globals_defs.html b/hcp/doxygen/html/globals_defs.html deleted file mode 100644 index 319db70..0000000 --- a/hcp/doxygen/html/globals_defs.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -Host Communication Protocol: Globals - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - - -
-
- -
-
-
- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/globals_enum.html b/hcp/doxygen/html/globals_enum.html deleted file mode 100644 index 92c00b3..0000000 --- a/hcp/doxygen/html/globals_enum.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - -Host Communication Protocol: Globals - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - - -
-
- -
-
-
- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/globals_eval.html b/hcp/doxygen/html/globals_eval.html deleted file mode 100644 index 725bf4c..0000000 --- a/hcp/doxygen/html/globals_eval.html +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - -Host Communication Protocol: Globals - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - - - -
-
- -
-
-
- -
-
-  - -

- a -

- - -

- c -

- - -

- f -

-
-
- - - - diff --git a/hcp/doxygen/html/globals_func.html b/hcp/doxygen/html/globals_func.html deleted file mode 100644 index 13913bb..0000000 --- a/hcp/doxygen/html/globals_func.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -Host Communication Protocol: Globals - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - - -
-
- -
-
-
- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/globals_type.html b/hcp/doxygen/html/globals_type.html deleted file mode 100644 index ef9199b..0000000 --- a/hcp/doxygen/html/globals_type.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -Host Communication Protocol: Globals - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - - -
-
- -
-
-
- -
-
-
-
- - - - diff --git a/hcp/doxygen/html/graph_legend.html b/hcp/doxygen/html/graph_legend.html deleted file mode 100644 index 9d1d9fe..0000000 --- a/hcp/doxygen/html/graph_legend.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - -Host Communication Protocol: Graph Legend - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - -
-
- -
-
-
- -
-
-
-
Graph Legend
-
-
-

This page explains how to interpret the graphs that are generated by doxygen.

-

Consider the following example:

1 /*! Invisible class because of truncation */
2 class Invisible { };
3 
4 /*! Truncated class, inheritance relation is hidden */
5 class Truncated : public Invisible { };
6 
7 /* Class not documented with doxygen comments */
8 class Undocumented { };
9 
10 /*! Class that is inherited using public inheritance */
11 class PublicBase : public Truncated { };
12 
13 /*! A template class */
14 template<class T> class Templ { };
15 
16 /*! Class that is inherited using protected inheritance */
17 class ProtectedBase { };
18 
19 /*! Class that is inherited using private inheritance */
20 class PrivateBase { };
21 
22 /*! Class that is used by the Inherited class */
23 class Used { };
24 
25 /*! Super class that inherits a number of other classes */
26 class Inherited : public PublicBase,
27  protected ProtectedBase,
28  private PrivateBase,
29  public Undocumented,
30  public Templ<int>
31 {
32  private:
33  Used *m_usedClass;
34 };

This will result in the following graph:

-

The boxes in the above graph have the following meaning:

-
    -
  • -A filled gray box represents the struct or class for which the graph is generated.
  • -
  • -A box with a black border denotes a documented struct or class.
  • -
  • -A box with a gray border denotes an undocumented struct or class.
  • -
  • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • -
-

The arrows have the following meaning:

-
    -
  • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • -
  • -A dark green arrow is used for protected inheritance.
  • -
  • -A dark red arrow is used for private inheritance.
  • -
  • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • -
  • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • -
-
-
- - - - diff --git a/hcp/doxygen/html/graph_legend.md5 b/hcp/doxygen/html/graph_legend.md5 deleted file mode 100644 index a06ed05..0000000 --- a/hcp/doxygen/html/graph_legend.md5 +++ /dev/null @@ -1 +0,0 @@ -387ff8eb65306fa251338d3c9bd7bfff \ No newline at end of file diff --git a/hcp/doxygen/html/graph_legend.svg b/hcp/doxygen/html/graph_legend.svg deleted file mode 100644 index 61dad70..0000000 --- a/hcp/doxygen/html/graph_legend.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -Graph Legend - - -Node9 - -Inherited - - -Node10 - - -PublicBase - - - - -Node10->Node9 - - - - -Node11 - - -Truncated - - - - -Node11->Node10 - - - - -Node13 - - -ProtectedBase - - - - -Node13->Node9 - - - - -Node14 - - -PrivateBase - - - - -Node14->Node9 - - - - -Node15 - -Undocumented - - -Node15->Node9 - - - - -Node16 - - -Templ< int > - - - - -Node16->Node9 - - - - -Node17 - - -Templ< T > - - - - -Node17->Node16 - - -< int > - - -Node18 - - -Used - - - - -Node18->Node9 - - -m_usedClass - - - diff --git a/hcp/doxygen/html/hcp.svg b/hcp/doxygen/html/hcp.svg deleted file mode 100644 index 69877fb..0000000 --- a/hcp/doxygen/html/hcp.svg +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - - - - - - - - HCP 2.0 - - - - Side brace - - - - - - - - - - - - - - - - - - Ark.1056 - - Ark.1020 - Argument 1 - - - - Argument 1 - - Ark.1028 - 2 Bytes - - - - 2 Bytes - - Ark.1030 - Size Bytes - - - - Size Bytes - - Ark.1031 - 2 Bytes - - - - 2 Bytes - - Ark.1032 - Data Size - - - - Data Size - - Ark.1033 - Data - - - - Data - - Ark.1034 - Key - - - - Key - - Ark.1035 - Argument 2 - - - - Argument 2 - - Ark.1036 - 2 Bytes - - - - 2 Bytes - - Ark.1037 - Size Bytes - - - - Size Bytes - - Ark.1038 - 2 Bytes - - - - 2 Bytes - - Ark.1039 - Data Size - - - - Data Size - - Ark.1040 - Data - - - - Data - - Ark.1041 - Key - - - - Key - - Ark.1042 - Argument N - - - - Argument N - - Ark.1043 - 2 Bytes - - - - 2 Bytes - - Ark.1044 - Size Bytes - - - - Size Bytes - - Ark.1045 - 2 Bytes - - - - 2 Bytes - - Ark.1046 - Data Size - - - - Data Size - - Ark.1047 - Data - - - - Data - - Ark.1048 - Key - - - - Key - - - Ark.1057 - - Ark.1000 - 2 Bytes - - - - 2 Bytes - - Ark.1001 - 2 Byte - - - - 2 Byte - - Ark.1003 - Command - - - - Command - - Ark.1004 - Number of Arguments - - - - Number of Arguments - - Ark.1007 - Payload - - - - Payload - - Ark.1055 - 0-65526 (16363 for TLS) Bytes - - - - 0-65526 (16363 for TLS) Bytes - - - diff --git a/hcp/doxygen/html/hcp_8md.html b/hcp/doxygen/html/hcp_8md.html deleted file mode 100644 index a609af7..0000000 --- a/hcp/doxygen/html/hcp_8md.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -Host Communication Protocol: hcp.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
hcp.md File Reference
-
- -
- - - - diff --git a/hcp/doxygen/html/hcp_8md_source.html b/hcp/doxygen/html/hcp_8md_source.html deleted file mode 100644 index e3942ae..0000000 --- a/hcp/doxygen/html/hcp_8md_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Host Communication Protocol: hcp.md Source File - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
-
-
hcp.md
-
-
-Go to the documentation of this file.
1 # Main {#mainpage}
2 
3 Welcome to the documentation for the Host Communication Protocol (HCP).
4 
5 The first part covers the physical method of sending messages and the second part covers the
6 specification of the different command flows.
7 
8 \section fes FPC embedded stack and HCP
9 - \subpage stack
10 - \subpage hcpf
11 
12 \section cfs Command flow specification
13 - \subpage bio
14  - \ref capture_b
15  - \ref extract_b
16  - \ref enroll_b
17  - \ref identify_b
18 - \subpage image
19 - \subpage template
20 - \subpage storage
21 - \subpage sensor
22 - \subpage device
-
- - - - diff --git a/hcp/doxygen/html/hcpf.html b/hcp/doxygen/html/hcpf.html deleted file mode 100644 index 2c4bc96..0000000 --- a/hcp/doxygen/html/hcpf.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - -Host Communication Protocol: HCP frame format - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - -
-
- -
-
-
- -
-
-
-
HCP frame format
-
-
-

The Host Communication Protocol (HCP) describes a general way of sending commands and information between devices.

-
-hcp.svg -
-HCP frame format
-

-Command

-

The Commands define the general action that is going to be executed. However, each command can have several Arguments each with data attached.

- - - - - -
CMD Num Args Payload
2 bytes 2 bytes xx bytes
-

All fields are using unsigned data types.

-

-Argument

-

The Argument is used as a complement to the command if it is needed and can contain arbitrary data.

- - - - - -
ARG Size Data
2 bytes 2 bytes size bytes
-

All fields are using unsigned data types.

-
-
- - - - diff --git a/hcp/doxygen/html/image.html b/hcp/doxygen/html/image.html deleted file mode 100644 index faf8031..0000000 --- a/hcp/doxygen/html/image.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - -Host Communication Protocol: Image handling - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - -
-
- -
-
-
- -
-
-
-
Image handling
-
-
-

-Create

-
-

-Upload

-
-

-Download

-
-
-
- - - - diff --git a/hcp/doxygen/html/index.html b/hcp/doxygen/html/index.html deleted file mode 100644 index bd8f33c..0000000 --- a/hcp/doxygen/html/index.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - -Host Communication Protocol: Main - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - -
-
- -
-
-
- -
-
-
-
Main
-
-
-

Welcome to the documentation for the Host Communication Protocol (HCP).

-

The first part covers the physical method of sending messages and the second part covers the specification of the different command flows.

-

-FPC embedded stack and HCP

- -

-Command flow specification

- -
-
- - - - diff --git a/hcp/doxygen/html/index.js b/hcp/doxygen/html/index.js deleted file mode 100644 index 1b4cb5f..0000000 --- a/hcp/doxygen/html/index.js +++ /dev/null @@ -1,47 +0,0 @@ -var index = -[ - [ "FPC embedded stack and HCP", "index.html#fes", null ], - [ "Command flow specification", "index.html#cfs", null ], - [ "FPC embedded stack", "stack.html", [ - [ "Physical", "stack.html#phy", null ], - [ "Link", "stack.html#link", null ], - [ "Transport", "stack.html#tsp", null ], - [ "Application", "stack.html#app", null ], - [ "HCP", "stack.html#hcp", null ] - ] ], - [ "HCP frame format", "hcpf.html", [ - [ "Command", "hcpf.html#cmd", null ], - [ "Argument", "hcpf.html#arg", null ] - ] ], - [ "Biometrics", "bio.html", [ - [ "Capture", "bio.html#capture_b", null ], - [ "Extract", "bio.html#extract_b", null ], - [ "Enroll", "bio.html#enroll_b", null ], - [ "Identify", "bio.html#identify_b", null ] - ] ], - [ "Image handling", "image.html", [ - [ "Create", "image.html#create_i", null ], - [ "Upload", "image.html#upload_i", null ], - [ "Download", "image.html#download_i", null ] - ] ], - [ "Template handling", "template.html", [ - [ "Upload", "template.html#upload_t", null ], - [ "Download", "template.html#download_t", null ], - [ "Save", "template.html#save_t", null ] - ] ], - [ "Storage handling", "storage.html", [ - [ "Delete ID", "storage.html#delete_id", null ], - [ "Delete All", "storage.html#delete_all", null ], - [ "Upload", "storage.html#upload_s", null ], - [ "Count", "storage.html#count_s", null ], - [ "Get IDs", "storage.html#get_id", null ] - ] ], - [ "Sensor operations", "sensor.html", [ - [ "Wait for finger up", "sensor.html#wait_up_s", null ], - [ "Wait for finger down", "sensor.html#wait_down_s", null ], - [ "Reset sensor", "sensor.html#sensor_reset_s", null ] - ] ], - [ "Device operations", "device.html", [ - [ "Reset device", "device.html#reset_d", null ] - ] ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/jquery.js b/hcp/doxygen/html/jquery.js deleted file mode 100644 index d52a1c7..0000000 --- a/hcp/doxygen/html/jquery.js +++ /dev/null @@ -1,68 +0,0 @@ -/* - * jQuery JavaScript Library v1.7.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Nov 21 21:11:03 2011 -0500 - */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/* - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/* - * jQuery UI 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/* - * jQuery UI Widget 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/* - * jQuery UI Mouse 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/* - * jQuery hashchange event - v1.3 - 7/21/2010 - * http://benalman.com/projects/jquery-hashchange-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' - -
[legend]
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Fields

bool initialized
 
uint32_t(* crc_calc )(uint32_t start, const void *data, uint32_t size)
 
fpc_com_chain_private_t private_vars
 
void * session
 User session pointer. User private stuff, to be able to pass necessary info from the layer that calls hcp down to the user's TX and RX functions (phy_tx/rx), to enable multi threaded applications at the host side. More...
 
void * context
 User context pointer. User private stuff, to be able to pass nessecary context to argument_allocator and argument_free. More...
 
HCP Layer
void *(* argument_allocator )(fpc_hcp_cmd_t cmd, fpc_hcp_arg_t arg, uint16_t size, bool *free_data, void *context)
 
void(* argument_free )(fpc_hcp_cmd_t cmd, fpc_hcp_arg_data_t *arg_data, void *context)
 
Application Layer
fpc_com_result_t(* app_tx )(fpc_com_chain_t *chain)
 
fpc_com_result_t(* app_rx )(fpc_com_chain_t *chain)
 
uint16_t(* app_overhead_get )(uint16_t *offset)
 
uint16_t app_packet_size [2]
 
uint16_t app_mtu_size [2]
 
uint8_t * app_mtu_buffer [2]
 
Transport Layer
fpc_com_result_t(* tsp_tx )(fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
 
fpc_com_result_t(* tsp_rx )(fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
 
uint16_t(* tsp_overhead_get )(uint16_t *offset)
 
Link Layer
uint16_t(* link_overhead_get )(uint16_t *offset)
 
fpc_com_channel_t channel
 
Physical Layer
fpc_com_result_t(* phy_tx )(uint16_t size, const uint8_t *buffer, uint32_t timeout, void *session)
 
fpc_com_result_t(* phy_rx )(uint16_t size, uint8_t *buffer, uint32_t timeout, void *session)
 
uint16_t phy_mtu_size [2]
 
uint8_t * phy_mtu_buffer [2]
 
uint32_t phy_timeout_tx
 
uint32_t phy_timeout_rx
 
-

Detailed Description

-

Communication chain struct

- -

Definition at line 50 of file fpc_com_chain.h.

-

Field Documentation

- -
-
- - - - -
uint8_t* fpc_com_chain::app_mtu_buffer[2]
-
-

Application MTU buffers

- -

Definition at line 83 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint16_t fpc_com_chain::app_mtu_size[2]
-
-

Application MTU sizes

- -

Definition at line 81 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint16_t(* fpc_com_chain::app_overhead_get) (uint16_t *offset)
-
-

Application layer overhead get interface function

- -

Definition at line 77 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint16_t fpc_com_chain::app_packet_size[2]
-
-

Application packet sizes

- -

Definition at line 79 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
fpc_com_result_t(* fpc_com_chain::app_rx) (fpc_com_chain_t *chain)
-
-

Application layer receive interface function

- -

Definition at line 75 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
fpc_com_result_t(* fpc_com_chain::app_tx) (fpc_com_chain_t *chain)
-
-

Application layer transmit interface function

- -

Definition at line 73 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
void*(* fpc_com_chain::argument_allocator) (fpc_hcp_cmd_t cmd, fpc_hcp_arg_t arg, uint16_t size, bool *free_data, void *context)
-
-

Argument allocator interface function

- -

Definition at line 59 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
void(* fpc_com_chain::argument_free) (fpc_hcp_cmd_t cmd, fpc_hcp_arg_data_t *arg_data, void *context)
-
-

Argument free interface function

- -

Definition at line 62 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
fpc_com_channel_t fpc_com_chain::channel
-
-

Communication channel

- -

Definition at line 105 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
void* fpc_com_chain::context
-
- -

User context pointer. User private stuff, to be able to pass nessecary context to argument_allocator and argument_free.

- -

Definition at line 143 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint32_t(* fpc_com_chain::crc_calc) (uint32_t start, const void *data, uint32_t size)
-
-

CRC calculation interface function

- -

Definition at line 66 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
bool fpc_com_chain::initialized
-
-

Initialization status

- -

Definition at line 52 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint16_t(* fpc_com_chain::link_overhead_get) (uint16_t *offset)
-
-

Link layer overhead get interface function

- -

Definition at line 103 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint8_t* fpc_com_chain::phy_mtu_buffer[2]
-
-

Physical MTU buffers

- -

Definition at line 121 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint16_t fpc_com_chain::phy_mtu_size[2]
-
-

Physical MTU sizes

- -

Definition at line 119 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
fpc_com_result_t(* fpc_com_chain::phy_rx) (uint16_t size, uint8_t *buffer, uint32_t timeout, void *session)
-
-

Physical layer receive interface function

- -

Definition at line 116 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint32_t fpc_com_chain::phy_timeout_rx
-
-

Physical receive timeout

- -

Definition at line 125 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint32_t fpc_com_chain::phy_timeout_tx
-
-

Physical transmit timeout

- -

Definition at line 123 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
fpc_com_result_t(* fpc_com_chain::phy_tx) (uint16_t size, const uint8_t *buffer, uint32_t timeout, void *session)
-
-

Physical layer transmit interface function

- -

Definition at line 113 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
fpc_com_chain_private_t fpc_com_chain::private_vars
-
-

Communication change private variables

- -

Definition at line 129 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
void* fpc_com_chain::session
-
- -

User session pointer. User private stuff, to be able to pass necessary info from the layer that calls hcp down to the user's TX and RX functions (phy_tx/rx), to enable multi threaded applications at the host side.

- -

Definition at line 137 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint16_t(* fpc_com_chain::tsp_overhead_get) (uint16_t *offset)
-
-

Transport layer overhead get interface function

- -

Definition at line 95 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
fpc_com_result_t(* fpc_com_chain::tsp_rx) (fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
-
-

Transport layer receive interface function

- -

Definition at line 93 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
fpc_com_result_t(* fpc_com_chain::tsp_tx) (fpc_com_packet_tsp_t *packet, fpc_com_chain_t *chain)
-
-

Transport layer transmit interface function

- -

Definition at line 91 of file fpc_com_chain.h.

- -
-
-
The documentation for this struct was generated from the following file: - - - - - - diff --git a/hcp/doxygen/html/structfpc__com__chain.js b/hcp/doxygen/html/structfpc__com__chain.js deleted file mode 100644 index 0f4123f..0000000 --- a/hcp/doxygen/html/structfpc__com__chain.js +++ /dev/null @@ -1,27 +0,0 @@ -var structfpc__com__chain = -[ - [ "app_mtu_buffer", "structfpc__com__chain.html#a7e8d84ccc4f808b0b95a4968f8445793", null ], - [ "app_mtu_size", "structfpc__com__chain.html#aacb377d52218056953552b9528654e75", null ], - [ "app_overhead_get", "structfpc__com__chain.html#a0059f42e6687eb0f82e5ee1de6b7236b", null ], - [ "app_packet_size", "structfpc__com__chain.html#aa60e372908d633b665e2ee4e3f220eac", null ], - [ "app_rx", "structfpc__com__chain.html#adc6a3bbad06589291a9441417cbb48c5", null ], - [ "app_tx", "structfpc__com__chain.html#a3498d443baffb40cb1201380423a753d", null ], - [ "argument_allocator", "structfpc__com__chain.html#a6e99f2fce0216d384bfba272cfba56b9", null ], - [ "argument_free", "structfpc__com__chain.html#af2a276eb2ccc79b6165584d97e798874", null ], - [ "channel", "structfpc__com__chain.html#aa42c6bf7052b0047c8b91635a13674d8", null ], - [ "context", "structfpc__com__chain.html#a6b907ebf3aeb09944baae1fd72a7abf9", null ], - [ "crc_calc", "structfpc__com__chain.html#ac697aca7a789065170e24d18647df0e7", null ], - [ "initialized", "structfpc__com__chain.html#a4a5f51c68263c56df53e3026d0959c4c", null ], - [ "link_overhead_get", "structfpc__com__chain.html#a055b5749b6e11042f39604bc7c7a33fe", null ], - [ "phy_mtu_buffer", "structfpc__com__chain.html#a63a02907c00e5443c7c3d4c0bd158d36", null ], - [ "phy_mtu_size", "structfpc__com__chain.html#ad135c2c04d54045141c2c3ffff09636d", null ], - [ "phy_rx", "structfpc__com__chain.html#ae0e4aa33099bfc0c9910c7b6bb30f915", null ], - [ "phy_timeout_rx", "structfpc__com__chain.html#a2e3f88e744ac92baecf22b8be8b8bdb2", null ], - [ "phy_timeout_tx", "structfpc__com__chain.html#a12a7599fb0f8ca779f6f5ac1df47bed2", null ], - [ "phy_tx", "structfpc__com__chain.html#a67cdb9c412d3478b46f9091d094c4faf", null ], - [ "private_vars", "structfpc__com__chain.html#a30701342d30047f48d0ec4f3f47f6ca3", null ], - [ "session", "structfpc__com__chain.html#a92eac8623fea4a4134d073233d25a63f", null ], - [ "tsp_overhead_get", "structfpc__com__chain.html#a319d3aa6f72ba5b04f6ac73bd09e860e", null ], - [ "tsp_rx", "structfpc__com__chain.html#a72f15dbe8cd7750f8f33346783404fb9", null ], - [ "tsp_tx", "structfpc__com__chain.html#aa9ee59b2a8c25a2cec027c078bb5db57", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/structfpc__com__chain__coll__graph.map b/hcp/doxygen/html/structfpc__com__chain__coll__graph.map deleted file mode 100644 index ae3a4a5..0000000 --- a/hcp/doxygen/html/structfpc__com__chain__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/hcp/doxygen/html/structfpc__com__chain__coll__graph.md5 b/hcp/doxygen/html/structfpc__com__chain__coll__graph.md5 deleted file mode 100644 index b582e7d..0000000 --- a/hcp/doxygen/html/structfpc__com__chain__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -62b5c96dd34d9372a91cd51284c482c6 \ No newline at end of file diff --git a/hcp/doxygen/html/structfpc__com__chain__coll__graph.svg b/hcp/doxygen/html/structfpc__com__chain__coll__graph.svg deleted file mode 100644 index 151441b..0000000 --- a/hcp/doxygen/html/structfpc__com__chain__coll__graph.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - -fpc_com_chain - - -Node1 - -fpc_com_chain - - -Node2 - - -fpc_com_chain_private - - - - -Node2->Node1 - - - private_vars - - -Node3 - - -fpc_hcp_packet - - - - -Node3->Node2 - - - hcp_packet - - -Node4 - - -fpc_hcp_arg_data - - - - -Node4->Node3 - - - arguments - - - diff --git a/hcp/doxygen/html/structfpc__com__chain__private.html b/hcp/doxygen/html/structfpc__com__chain__private.html deleted file mode 100644 index 6565d01..0000000 --- a/hcp/doxygen/html/structfpc__com__chain__private.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -Host Communication Protocol: fpc_com_chain_private Struct Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_com_chain_private Struct Reference
-
-
- -

#include <fpc_com_chain.h>

-
-Collaboration diagram for fpc_com_chain_private:
-
-
-
-
[legend]
- - - - - - - - -

-Data Fields

fpc_hcp_packet_thcp_packet
 
uint16_t hcp_seq_len
 
uint16_t hcp_seq_nr
 
-

Detailed Description

-

Communication chain private struct

- -

Definition at line 36 of file fpc_com_chain.h.

-

Field Documentation

- -
-
- - - - -
fpc_hcp_packet_t* fpc_com_chain_private::hcp_packet
-
-

HCP packet

- -

Definition at line 38 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint16_t fpc_com_chain_private::hcp_seq_len
-
-

HCP sequence length

- -

Definition at line 40 of file fpc_com_chain.h.

- -
-
- -
-
- - - - -
uint16_t fpc_com_chain_private::hcp_seq_nr
-
-

HCP sequence number

- -

Definition at line 42 of file fpc_com_chain.h.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - diff --git a/hcp/doxygen/html/structfpc__com__chain__private.js b/hcp/doxygen/html/structfpc__com__chain__private.js deleted file mode 100644 index ffa1f0b..0000000 --- a/hcp/doxygen/html/structfpc__com__chain__private.js +++ /dev/null @@ -1,6 +0,0 @@ -var structfpc__com__chain__private = -[ - [ "hcp_packet", "structfpc__com__chain__private.html#ab64b1b4bd3081ca3db41ffa0e81bc916", null ], - [ "hcp_seq_len", "structfpc__com__chain__private.html#af8ce1ceb9f2ce4cfca0c5db4112b66a0", null ], - [ "hcp_seq_nr", "structfpc__com__chain__private.html#ac3cc68074e460e7f02487f4fd3b0f72b", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/structfpc__com__chain__private__coll__graph.map b/hcp/doxygen/html/structfpc__com__chain__private__coll__graph.map deleted file mode 100644 index fc2dc95..0000000 --- a/hcp/doxygen/html/structfpc__com__chain__private__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/hcp/doxygen/html/structfpc__com__chain__private__coll__graph.md5 b/hcp/doxygen/html/structfpc__com__chain__private__coll__graph.md5 deleted file mode 100644 index ee40ef7..0000000 --- a/hcp/doxygen/html/structfpc__com__chain__private__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7c008b78ccb55fb4de6e98769ef6f843 \ No newline at end of file diff --git a/hcp/doxygen/html/structfpc__com__chain__private__coll__graph.svg b/hcp/doxygen/html/structfpc__com__chain__private__coll__graph.svg deleted file mode 100644 index 6d344fc..0000000 --- a/hcp/doxygen/html/structfpc__com__chain__private__coll__graph.svg +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - -fpc_com_chain_private - - -Node1 - -fpc_com_chain_private - - -Node2 - - -fpc_hcp_packet - - - - -Node2->Node1 - - - hcp_packet - - -Node3 - - -fpc_hcp_arg_data - - - - -Node3->Node2 - - - arguments - - - diff --git a/hcp/doxygen/html/structfpc__com__packet__link.html b/hcp/doxygen/html/structfpc__com__packet__link.html deleted file mode 100644 index e845432..0000000 --- a/hcp/doxygen/html/structfpc__com__packet__link.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - -Host Communication Protocol: fpc_com_packet_link Struct Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_com_packet_link Struct Reference
-
-
- -

#include <fpc_com_packets.h>

- - - - - - - - - - -

-Data Fields

fpc_com_channel_t channel
 
uint16_t size
 
uint8_t * data
 
uint32_t crc
 
-

Detailed Description

-

Link layer packet

- -

Definition at line 61 of file fpc_com_packets.h.

-

Field Documentation

- -
-
- - - - -
fpc_com_channel_t fpc_com_packet_link::channel
-
-

Communication channel

- -

Definition at line 63 of file fpc_com_packets.h.

- -
-
- -
-
- - - - -
uint32_t fpc_com_packet_link::crc
-
-

CRC of data

- -

Definition at line 69 of file fpc_com_packets.h.

- -
-
- -
-
- - - - -
uint8_t* fpc_com_packet_link::data
-
-

Packet data

- -

Definition at line 67 of file fpc_com_packets.h.

- -
-
- -
-
- - - - -
uint16_t fpc_com_packet_link::size
-
-

Size of packet

- -

Definition at line 65 of file fpc_com_packets.h.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - diff --git a/hcp/doxygen/html/structfpc__com__packet__link.js b/hcp/doxygen/html/structfpc__com__packet__link.js deleted file mode 100644 index 7b35e09..0000000 --- a/hcp/doxygen/html/structfpc__com__packet__link.js +++ /dev/null @@ -1,7 +0,0 @@ -var structfpc__com__packet__link = -[ - [ "channel", "structfpc__com__packet__link.html#aa90708dd6d842b318723cb70d6939c2a", null ], - [ "crc", "structfpc__com__packet__link.html#a2b36a249ee8d192688f2a5f3cce8cde4", null ], - [ "data", "structfpc__com__packet__link.html#ac5412a399ecd825e331b560c1ec078fd", null ], - [ "size", "structfpc__com__packet__link.html#a7305e6e32039579c1258ccb42513049b", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/structfpc__com__packet__transport.html b/hcp/doxygen/html/structfpc__com__packet__transport.html deleted file mode 100644 index e30f80d..0000000 --- a/hcp/doxygen/html/structfpc__com__packet__transport.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - -Host Communication Protocol: fpc_com_packet_transport Struct Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_com_packet_transport Struct Reference
-
-
- -

#include <fpc_com_packets.h>

- - - - - - - - - - -

-Data Fields

uint16_t size
 
uint16_t seq_len
 
uint16_t seq_nr
 
uint8_t * data
 
-

Detailed Description

-

Transport layer packet.

- -

Definition at line 37 of file fpc_com_packets.h.

-

Field Documentation

- -
-
- - - - -
uint8_t* fpc_com_packet_transport::data
-
-

Packet data

- -

Definition at line 45 of file fpc_com_packets.h.

- -
-
- -
-
- - - - -
uint16_t fpc_com_packet_transport::seq_len
-
-

Sequence length

- -

Definition at line 41 of file fpc_com_packets.h.

- -
-
- -
-
- - - - -
uint16_t fpc_com_packet_transport::seq_nr
-
-

Sequence number

- -

Definition at line 43 of file fpc_com_packets.h.

- -
-
- -
-
- - - - -
uint16_t fpc_com_packet_transport::size
-
-

Size of packet

- -

Definition at line 39 of file fpc_com_packets.h.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - diff --git a/hcp/doxygen/html/structfpc__com__packet__transport.js b/hcp/doxygen/html/structfpc__com__packet__transport.js deleted file mode 100644 index 6fef708..0000000 --- a/hcp/doxygen/html/structfpc__com__packet__transport.js +++ /dev/null @@ -1,7 +0,0 @@ -var structfpc__com__packet__transport = -[ - [ "data", "structfpc__com__packet__transport.html#a701682a127995ad73fd3d945faa0e6d0", null ], - [ "seq_len", "structfpc__com__packet__transport.html#af72d4eb7fdaf84b87dd369b348eafc6d", null ], - [ "seq_nr", "structfpc__com__packet__transport.html#a41944ffde2478be8fca892e84bd633c0", null ], - [ "size", "structfpc__com__packet__transport.html#a9c0d37a137ba70a8d0ecd17802e3810a", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/structfpc__hcp__arg__data.html b/hcp/doxygen/html/structfpc__hcp__arg__data.html deleted file mode 100644 index b542592..0000000 --- a/hcp/doxygen/html/structfpc__hcp__arg__data.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - -Host Communication Protocol: fpc_hcp_arg_data Struct Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_hcp_arg_data Struct Reference
-
-
- -

Command Argument. - More...

- -

#include <fpc_hcp_common.h>

- - - - - - - - - - -

-Data Fields

fpc_hcp_arg_t arg
 
uint16_t size
 
bool free_data
 
uint8_t * data
 
-

Detailed Description

-

Command Argument.

- -

Definition at line 196 of file fpc_hcp_common.h.

-

Field Documentation

- -
-
- - - - -
fpc_hcp_arg_t fpc_hcp_arg_data::arg
-
-

Argument

- -

Definition at line 198 of file fpc_hcp_common.h.

- -
-
- -
-
- - - - -
uint8_t* fpc_hcp_arg_data::data
-
-

Pointer to data

- -

Definition at line 204 of file fpc_hcp_common.h.

- -
-
- -
-
- - - - -
bool fpc_hcp_arg_data::free_data
-
-

Free data inside HCP

- -

Definition at line 202 of file fpc_hcp_common.h.

- -
-
- -
-
- - - - -
uint16_t fpc_hcp_arg_data::size
-
-

Size of data

- -

Definition at line 200 of file fpc_hcp_common.h.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - diff --git a/hcp/doxygen/html/structfpc__hcp__arg__data.js b/hcp/doxygen/html/structfpc__hcp__arg__data.js deleted file mode 100644 index bed4817..0000000 --- a/hcp/doxygen/html/structfpc__hcp__arg__data.js +++ /dev/null @@ -1,7 +0,0 @@ -var structfpc__hcp__arg__data = -[ - [ "arg", "structfpc__hcp__arg__data.html#ad10d9a131410e8832ee545e38c2957f0", null ], - [ "data", "structfpc__hcp__arg__data.html#a96b9e7812ba72f1c27355f8896079c2e", null ], - [ "free_data", "structfpc__hcp__arg__data.html#a2b1579dabe9af25ac70ba5c9345bec6a", null ], - [ "size", "structfpc__hcp__arg__data.html#aaee76f9b7bf53b5b9095ae68a8dbe4ec", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/structfpc__hcp__packet.html b/hcp/doxygen/html/structfpc__hcp__packet.html deleted file mode 100644 index f6befcd..0000000 --- a/hcp/doxygen/html/structfpc__hcp__packet.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -Host Communication Protocol: fpc_hcp_packet Struct Reference - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - - -
-
- -
-
-
- -
-
- -
-
fpc_hcp_packet Struct Reference
-
-
- -

Application Command Packet. - More...

- -

#include <fpc_hcp_common.h>

-
-Collaboration diagram for fpc_hcp_packet:
-
-
-
-
[legend]
- - - - - - - - -

-Data Fields

fpc_hcp_cmd_t id
 
uint16_t num_args
 
fpc_hcp_arg_data_targuments
 
-

Detailed Description

-

Application Command Packet.

- -

Definition at line 210 of file fpc_hcp_common.h.

-

Field Documentation

- -
-
- - - - -
fpc_hcp_arg_data_t* fpc_hcp_packet::arguments
-
-

Pointer to argument data

- -

Definition at line 216 of file fpc_hcp_common.h.

- -
-
- -
-
- - - - -
fpc_hcp_cmd_t fpc_hcp_packet::id
-
-

Command ID

- -

Definition at line 212 of file fpc_hcp_common.h.

- -
-
- -
-
- - - - -
uint16_t fpc_hcp_packet::num_args
-
-

Number of arguments

- -

Definition at line 214 of file fpc_hcp_common.h.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - diff --git a/hcp/doxygen/html/structfpc__hcp__packet.js b/hcp/doxygen/html/structfpc__hcp__packet.js deleted file mode 100644 index 2e725bc..0000000 --- a/hcp/doxygen/html/structfpc__hcp__packet.js +++ /dev/null @@ -1,6 +0,0 @@ -var structfpc__hcp__packet = -[ - [ "arguments", "structfpc__hcp__packet.html#a12c84e4603123d4a7b7968c1a408ac8a", null ], - [ "id", "structfpc__hcp__packet.html#a048db38d843571e797e3768b7e28691d", null ], - [ "num_args", "structfpc__hcp__packet.html#a43efbc11424d711b82fe5dde8d8da393", null ] -]; \ No newline at end of file diff --git a/hcp/doxygen/html/structfpc__hcp__packet__coll__graph.map b/hcp/doxygen/html/structfpc__hcp__packet__coll__graph.map deleted file mode 100644 index 542b000..0000000 --- a/hcp/doxygen/html/structfpc__hcp__packet__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/hcp/doxygen/html/structfpc__hcp__packet__coll__graph.md5 b/hcp/doxygen/html/structfpc__hcp__packet__coll__graph.md5 deleted file mode 100644 index 8db2ba9..0000000 --- a/hcp/doxygen/html/structfpc__hcp__packet__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -bb44f25e236a810c642564aa21997983 \ No newline at end of file diff --git a/hcp/doxygen/html/structfpc__hcp__packet__coll__graph.svg b/hcp/doxygen/html/structfpc__hcp__packet__coll__graph.svg deleted file mode 100644 index 9a08ef3..0000000 --- a/hcp/doxygen/html/structfpc__hcp__packet__coll__graph.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -fpc_hcp_packet - - -Node1 - -fpc_hcp_packet - - -Node2 - - -fpc_hcp_arg_data - - - - -Node2->Node1 - - - arguments - - - diff --git a/hcp/doxygen/html/sync_off.png b/hcp/doxygen/html/sync_off.png deleted file mode 100644 index 3b443fc..0000000 Binary files a/hcp/doxygen/html/sync_off.png and /dev/null differ diff --git a/hcp/doxygen/html/sync_on.png b/hcp/doxygen/html/sync_on.png deleted file mode 100644 index e08320f..0000000 Binary files a/hcp/doxygen/html/sync_on.png and /dev/null differ diff --git a/hcp/doxygen/html/tab_a.png b/hcp/doxygen/html/tab_a.png deleted file mode 100644 index 3b725c4..0000000 Binary files a/hcp/doxygen/html/tab_a.png and /dev/null differ diff --git a/hcp/doxygen/html/tab_b.png b/hcp/doxygen/html/tab_b.png deleted file mode 100644 index e2b4a86..0000000 Binary files a/hcp/doxygen/html/tab_b.png and /dev/null differ diff --git a/hcp/doxygen/html/tab_h.png b/hcp/doxygen/html/tab_h.png deleted file mode 100644 index fd5cb70..0000000 Binary files a/hcp/doxygen/html/tab_h.png and /dev/null differ diff --git a/hcp/doxygen/html/tab_s.png b/hcp/doxygen/html/tab_s.png deleted file mode 100644 index ab478c9..0000000 Binary files a/hcp/doxygen/html/tab_s.png and /dev/null differ diff --git a/hcp/doxygen/html/tabs.css b/hcp/doxygen/html/tabs.css deleted file mode 100644 index 9cf578f..0000000 --- a/hcp/doxygen/html/tabs.css +++ /dev/null @@ -1,60 +0,0 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} diff --git a/hcp/doxygen/html/template.html b/hcp/doxygen/html/template.html deleted file mode 100644 index d1eb80e..0000000 --- a/hcp/doxygen/html/template.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - -Host Communication Protocol: Template handling - - - - - - - - - - - -
-
- - - - - - -
-
Host Communication Protocol -  2.0 -
-
-
- - - -
-
- -
-
-
- -
-
-
-
Template handling
-
-
-

-Upload

-
-

-Download

-
-

-Save

-
-
-
- - - - diff --git a/hcp/hcp.doxyfile b/hcp/hcp.doxyfile deleted file mode 100644 index 8ba9142..0000000 --- a/hcp/hcp.doxyfile +++ /dev/null @@ -1,2446 +0,0 @@ -# Doxyfile 1.8.13 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "Host Communication Protocol" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = 2.0 - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = doxygen - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up -# to that level are automatically included in the table of contents, even if -# they do not have an id attribute. -# Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -TOC_INCLUDE_HEADINGS = 0 - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = YES - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = YES - -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. -# The default value is: NO. - -WARN_AS_ERROR = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = doxygen\doxygen_error.log - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = inc \ - src \ - hcp.md \ - doc/md - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. - -FILE_PATTERNS = *.c \ - *.h \ - *.md - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = inc/fpc_host_cmd.h \ - src/fpc_host_cmd.c - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = */test/* - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = doc/md - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = doc/img - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = hcp.md - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = YES - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 1 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /