Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b4e6aef2c8 |
@ -27,7 +27,6 @@ OUT := out
|
||||
DEPTH :=
|
||||
HCP_PATH := ../hcp
|
||||
RPIHAL_PATH := ../HAL_Driver
|
||||
BMLITE_PATH := ../BMLite_sdk
|
||||
|
||||
# Main target
|
||||
TARGET := $(OUT)/$(PRODUCT)
|
||||
@ -46,11 +45,6 @@ CFLAGS +=\
|
||||
-MP\
|
||||
-Wno-unused-result
|
||||
|
||||
CFLAGS +=\
|
||||
-DBMLITE_USE_CALLBACK \
|
||||
-DDEBUG
|
||||
|
||||
|
||||
# C source files
|
||||
C_SRCS = $(wildcard src/*.c)
|
||||
|
||||
@ -59,9 +53,8 @@ PATH_INC += inc
|
||||
|
||||
C_INC = $(addprefix -I,$(PATH_INC))
|
||||
|
||||
# Include BM-Lite SDK
|
||||
include $(BMLITE_PATH)/bmlite.mk
|
||||
# Include HAL driver
|
||||
# Include HCP
|
||||
include $(HCP_PATH)/hcp.mk
|
||||
include $(RPIHAL_PATH)/raspberry.mk
|
||||
|
||||
# Object files and search paths
|
||||
|
||||
179
BMLite_example/inc/bep_host_if.h
Normal file
@ -0,0 +1,179 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef BEP_HOST_IF_H
|
||||
#define BEP_HOST_IF_H
|
||||
|
||||
/**
|
||||
* @file bep_host_if.h
|
||||
* @brief BEP Host Interface API
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "fpc_bep_types.h"
|
||||
#include "fpc_com_chain.h"
|
||||
|
||||
#define REMOVE_ID_ALL_TEMPLATES 0U
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for capturing an image in Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for enrolling a finger in Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_enroll_finger(fpc_com_chain_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for identifying a finger in Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @param[out] template_id Template id that was identified (only valid if match is true)
|
||||
* @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);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for saving template of an enrolled finger in Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @brief Remove template(s) stored
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @brief Gets all template ids from Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @param[out] template_ids Should be allocated by the caller for storing template ids and should
|
||||
* have capacity to hold bio_get_template_count
|
||||
* @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,
|
||||
uint32_t nof_templates);
|
||||
|
||||
/**
|
||||
* @brief Get the number of templates in Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @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);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for extracting a template from a previously capture image in Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_image_extract(fpc_com_chain_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for getting the image size of a previously capture image in Bio MCU
|
||||
*
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for getting the image data of a previously capture image in Bio MCU
|
||||
*
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for fetching the version of the Bio MCU FW
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @param[out] version Version string buffer
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for resetting the Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_reset(fpc_com_chain_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for calibrating the sensor in the Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_sensor_calibrate(fpc_com_chain_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for removing the sensor calibration in the Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_sensor_calibrate_remove(fpc_com_chain_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands for setting the sensor in sleep and waiting for finger in the Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com 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);
|
||||
|
||||
/**
|
||||
* @brief Sends HCP commands that returns when finger is not on the sensor in the Bio MCU
|
||||
*
|
||||
* @param[in] chain HCP com chain
|
||||
* @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_template_get(fpc_com_chain_t *chain, uint16_t template_id, uint8_t *data, uint32_t size, uint16_t *tmplsize);
|
||||
fpc_bep_result_t bep_template_put(fpc_com_chain_t *chain, uint16_t template_id, uint8_t *data, uint16_t size);
|
||||
|
||||
#endif /* BEP_HOST_IF_H */
|
||||
59
BMLite_example/inc/com_app_cleartext.h
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* 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 */
|
||||
103
BMLite_example/inc/com_common.h
Normal file
@ -0,0 +1,103 @@
|
||||
/*
|
||||
* 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 <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#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 */
|
||||
@ -17,9 +17,8 @@
|
||||
#ifndef FPC_BEP_TYPES_H
|
||||
#define FPC_BEP_TYPES_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
/**
|
||||
* @file fpc_bep_types.h
|
||||
* @brief Biometric Embedded Platform types.
|
||||
@ -12,13 +12,10 @@
|
||||
* 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.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for FPC BM-Lite applications
|
||||
*/
|
||||
|
||||
#ifndef PLATFORM_RPI_H
|
||||
#define PLATFORM_RPI_H
|
||||
#ifndef PLATFORM_H
|
||||
#define PLATFORM_H
|
||||
|
||||
/**
|
||||
* @file platform.h
|
||||
@ -28,29 +25,6 @@
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "fpc_bep_types.h"
|
||||
#include "hcp_tiny.h"
|
||||
|
||||
typedef enum {
|
||||
COM_INTERFACE = 0,
|
||||
SPI_INTERFACE
|
||||
} interface_t;
|
||||
|
||||
typedef struct {
|
||||
interface_t iface;
|
||||
char *port;
|
||||
uint32_t baudrate;
|
||||
uint32_t timeout;
|
||||
HCP_comm_t *hcp_comm;
|
||||
} rpi_initparams_t;
|
||||
|
||||
/*
|
||||
* Pin definitions for RPI 3
|
||||
*/
|
||||
#define BMLITE_RESET_PIN 0
|
||||
#define BMLITE_IRQ_PIN 22
|
||||
#define SPI_CHANNEL 0
|
||||
|
||||
/**
|
||||
* @brief Initializes COM Physical layer.
|
||||
*
|
||||
@ -58,7 +32,7 @@ typedef struct {
|
||||
* @param[in] baudrate Baudrate.
|
||||
* @param[in] timeout Timeout in ms. Use 0 for infinity.
|
||||
*/
|
||||
bool rpi_com_init(char *port, int baudrate, int timeout);
|
||||
bool platform_com_init(char *port, int baudrate, int timeout);
|
||||
|
||||
/**
|
||||
* @brief Sends data over communication port in blocking mode.
|
||||
@ -67,9 +41,9 @@ bool rpi_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_bep_result_t
|
||||
* @return ::fpc_com_result_t
|
||||
*/
|
||||
fpc_bep_result_t rpi_com_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
fpc_com_result_t platform_com_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
void *session);
|
||||
|
||||
/**
|
||||
@ -79,9 +53,9 @@ fpc_bep_result_t rpi_com_send(uint16_t size, const uint8_t *data, uint32_t timeo
|
||||
* @param[in, out] data Data buffer to fill.
|
||||
* @param[in] timeout Timeout in ms. Use 0 for infinity.
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
* @return ::fpc_com_result_t
|
||||
*/
|
||||
fpc_bep_result_t rpi_com_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
fpc_com_result_t platform_com_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
void *session);
|
||||
|
||||
/**
|
||||
@ -89,7 +63,7 @@ fpc_bep_result_t rpi_com_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
*
|
||||
* @param[in] speed_hz Baudrate.
|
||||
*/
|
||||
bool rpi_spi_init(uint32_t speed_hz);
|
||||
bool platform_spi_init(uint32_t speed_hz);
|
||||
|
||||
/**
|
||||
* @brief Sends data over communication port in blocking mode.
|
||||
@ -98,9 +72,9 @@ bool rpi_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_bep_result_t
|
||||
* @return ::fpc_com_result_t
|
||||
*/
|
||||
fpc_bep_result_t platform_spi_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
fpc_com_result_t platform_spi_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
void *session);
|
||||
|
||||
/**
|
||||
@ -110,9 +84,9 @@ fpc_bep_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_bep_result_t
|
||||
* @return ::fpc_com_result_t
|
||||
*/
|
||||
fpc_bep_result_t platform_spi_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
fpc_com_result_t platform_spi_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
void *session);
|
||||
|
||||
/**
|
||||
@ -120,21 +94,11 @@ fpc_bep_result_t platform_spi_receive(uint16_t size, uint8_t *data, uint32_t tim
|
||||
*
|
||||
* @return time in us.
|
||||
*/
|
||||
// uint64_t platform_get_time(void);
|
||||
uint64_t platform_get_time(void);
|
||||
|
||||
/**
|
||||
* @brief Clear console screen
|
||||
*/
|
||||
void rpi_clear_screen(void);
|
||||
void platform_clear_screen(void);
|
||||
|
||||
/**
|
||||
* @brief Busy wait.
|
||||
*
|
||||
* @param[in] ms Time to wait [ms].
|
||||
* 0 => return immediately
|
||||
* 1 => wait at least 1ms etc.
|
||||
*/
|
||||
void hal_timebase_busy_wait(uint32_t ms);
|
||||
|
||||
|
||||
#endif /* PLATFORM_RPI_H */
|
||||
#endif /* PLATFORM_H */
|
||||
32
BMLite_example/inc/raspberry_pi_hal.h
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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 Raspberry_pi_hal.h
|
||||
* @brief Raspberry Pi HAL.
|
||||
*/
|
||||
|
||||
#ifndef RASPBERRYPI_HAL_H
|
||||
#define RASPBERRYPI_HAL_H
|
||||
|
||||
/*
|
||||
* Pin definitions for RPI 3
|
||||
*/
|
||||
#define BMLITE_RESET_PIN 0
|
||||
#define BMLITE_IRQ_PIN 22
|
||||
#define SPI_CHANNEL 0
|
||||
|
||||
#endif /* RASPBERRYPI_HAL_H */
|
||||
592
BMLite_example/src/bep_host_if.c
Normal file
@ -0,0 +1,592 @@
|
||||
/*
|
||||
* 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 bep_host_if.c
|
||||
* @brief BEP Host Interface implementation.
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#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 "bep_host_if.h"
|
||||
|
||||
/** Returns the number of elements in an array. */
|
||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
||||
|
||||
#define RECEIVE_TIMEOUT 10
|
||||
|
||||
#ifdef DEBUG
|
||||
#define log_debug(format, ...) printf(format, ##__VA_ARGS__)
|
||||
#else
|
||||
#define log_debug(format, ...)
|
||||
#endif
|
||||
#define log_info(format, ...) printf(format, ##__VA_ARGS__)
|
||||
#define log_error(format, ...) printf(format, ##__VA_ARGS__)
|
||||
|
||||
/** Maximum attempts for capture image */
|
||||
static const uint8_t MAX_CAPTURE_ATTEMPTS = 15U;
|
||||
static const uint16_t CAPTURE_TIMEOUT = 3000;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Helper function for sending HCP commands
|
||||
*
|
||||
* @param chain HCP communication chain
|
||||
* @param command_id command to send
|
||||
* @param arg_key1 first key to add to the command
|
||||
* @param arg_data1 first argument data to add
|
||||
* @param arg_data1_length first data length of argument data
|
||||
* @param arg_key2 second key to add to the command
|
||||
* @param arg_data2 second argument data to add
|
||||
* @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,
|
||||
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_hcp_arg_data_t args_tx[10] = {{ 0 }};
|
||||
|
||||
memset(&command, 0x0, sizeof(command));
|
||||
command.arguments = args_tx;
|
||||
command.num_args = ARRAY_SIZE(args_tx);
|
||||
command.id = command_id;
|
||||
|
||||
if (arg_key1 != ARG_NONE) {
|
||||
if (!fpc_hcp_arg_add(&command, arg_key1, arg_data1_length, false, arg_data1)) {
|
||||
log_error("%s:%u Could not add arg:%u\n", __func__, __LINE__, arg_key1);
|
||||
bep_result = FPC_BEP_RESULT_NO_MEMORY;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (arg_key2 != ARG_NONE) {
|
||||
if (!fpc_hcp_arg_add(&command, arg_key2, arg_data2_length, false, arg_data2)) {
|
||||
log_error("%s:%u Could not add arg:%u\n", __func__, __LINE__, arg_key2);
|
||||
bep_result = FPC_BEP_RESULT_NO_MEMORY;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
com_result = fpc_hcp_transmit(&command, chain);
|
||||
bep_result = com_to_bep_result(com_result);
|
||||
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u ERROR %d\n", __func__, __LINE__, bep_result);
|
||||
}
|
||||
|
||||
exit:
|
||||
fpc_hcp_free(chain, &command);
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
static fpc_bep_result_t send_command_no_args(fpc_com_chain_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,
|
||||
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,
|
||||
ARG_NONE, NULL, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Helper function for receiving HCP commands
|
||||
|
||||
* @param command_id command to send
|
||||
* @param arg_key1 first key to receive
|
||||
* @param arg_data1 first argument data
|
||||
* @param arg_data1_length first argument data length
|
||||
* @param arg_key2 second key to receive
|
||||
* @param arg_data2 second argument data
|
||||
* @param arg_data2_length second argument
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
static fpc_bep_result_t receive_result_args2_sizes(fpc_com_chain_t *chain,
|
||||
fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, uint16_t *arg1_size,
|
||||
fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length, uint16_t *arg2_size)
|
||||
{
|
||||
fpc_hcp_packet_t response;
|
||||
fpc_hcp_arg_data_t args_rx[10] = {{ 0 }};
|
||||
fpc_bep_result_t bep_result = FPC_BEP_RESULT_GENERAL_ERROR;
|
||||
fpc_hcp_arg_data_t *arg_data;
|
||||
|
||||
memset(&response, 0x0, sizeof(fpc_hcp_cmd_t));
|
||||
response.arguments = args_rx;
|
||||
response.num_args = ARRAY_SIZE(args_rx);
|
||||
|
||||
do {
|
||||
fpc_com_result_t com_result = fpc_hcp_receive(&response, chain);
|
||||
bep_result = com_to_bep_result(com_result);
|
||||
} while (bep_result == FPC_BEP_RESULT_TIMEOUT);
|
||||
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Check bep result first */
|
||||
arg_data = fpc_hcp_arg_get(&response, ARG_RESULT);
|
||||
if (arg_data) {
|
||||
bep_result = *(int8_t *)arg_data->data;
|
||||
} else {
|
||||
log_error("%s Result argument missing\n", __func__);
|
||||
bep_result = FPC_BEP_RESULT_INVALID_ARGUMENT;
|
||||
}
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Get first argument */
|
||||
if (arg_key1 != ARG_NONE) {
|
||||
arg_data = fpc_hcp_arg_get(&response, arg_key1);
|
||||
if (arg_data && arg_data->size <= arg_data1_length) {
|
||||
*arg1_size = arg_data->size;
|
||||
memcpy(arg_data1, arg_data->data, arg_data->size);
|
||||
} else {
|
||||
log_error("%s %d argument missing\n", __func__, arg_key1);
|
||||
bep_result = FPC_BEP_RESULT_INVALID_ARGUMENT;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
/* Get second argument */
|
||||
if (arg_key2 != ARG_NONE) {
|
||||
arg_data = fpc_hcp_arg_get(&response, arg_key2);
|
||||
if (arg_data && arg_data->size <= arg_data2_length) {
|
||||
*arg2_size = arg_data->size;
|
||||
memcpy(arg_data2, arg_data->data, arg_data->size);
|
||||
} else {
|
||||
/* Not an error since the second argument is optional */
|
||||
log_debug("%s %d argument missing\n", __func__, arg_key2);
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
fpc_hcp_free(chain, &response);
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
static 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)
|
||||
{
|
||||
uint16_t arg_size1;
|
||||
uint16_t arg_size2;
|
||||
return receive_result_args2_sizes(chain, arg_key1, arg_data1, arg_data1_length, &arg_size1,
|
||||
arg_key2, arg_data2, arg_data2_length, &arg_size2);
|
||||
}
|
||||
|
||||
static fpc_bep_result_t receive_result_no_args(fpc_com_chain_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,
|
||||
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_result;
|
||||
|
||||
log_info("Put finger on sensor\n");
|
||||
|
||||
/* Capture finger down */
|
||||
bep_result = send_command(chain, CMD_CAPTURE, ARG_TIMEOUT, &timeout, sizeof(timeout));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u Error transmitting CMD_CAPTURE\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
return receive_result_no_args(chain);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_enroll_finger(fpc_com_chain_t *chain)
|
||||
{
|
||||
uint32_t samples_remaining = 0;
|
||||
fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK;
|
||||
bool enroll_done = false;
|
||||
|
||||
/* Enroll start */
|
||||
bep_result = send_command(chain, CMD_ENROLL, ARG_START, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s, ERROR line:%u\n", __func__, __LINE__);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
bep_result = receive_result_no_args(chain);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR receiving status=%d\n", __func__, __LINE__, bep_result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < MAX_CAPTURE_ATTEMPTS; ++i) {
|
||||
|
||||
bep_result = bep_capture(chain, CAPTURE_TIMEOUT);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("Capture failed\n");
|
||||
break;
|
||||
}
|
||||
|
||||
log_info("Capture done. Remove finger from sensor\n");
|
||||
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR receiving, result=%d\n", __func__, __LINE__, bep_result);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Enroll add */
|
||||
bep_result = send_command(chain, CMD_ENROLL, ARG_ADD, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
continue;
|
||||
}
|
||||
|
||||
bep_result = receive_result_args1(chain, ARG_COUNT, &samples_remaining,
|
||||
sizeof(samples_remaining));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR receiving status=%d\n", __func__, __LINE__, bep_result);
|
||||
continue;
|
||||
}
|
||||
|
||||
log_info("Enroll samples remaining: %d\n", samples_remaining);
|
||||
|
||||
if (samples_remaining == 0U) {
|
||||
enroll_done = true;
|
||||
break;
|
||||
}
|
||||
|
||||
bep_result = send_command(chain, CMD_WAIT, ARG_FINGER_UP, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Wait for finger to be lifted from sensor */
|
||||
bep_result = receive_result_no_args(chain);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR receiving status=%d\n", __func__, __LINE__, bep_result);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
bep_result = send_command(chain, CMD_ENROLL, ARG_FINISH, NULL, 0);
|
||||
if (bep_result == FPC_BEP_RESULT_OK) {
|
||||
bep_result = receive_result_no_args(chain);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR receiving status=%d\n", __func__, __LINE__, bep_result);
|
||||
}
|
||||
}
|
||||
|
||||
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_result = FPC_BEP_RESULT_OK;
|
||||
|
||||
*match = false;
|
||||
|
||||
bep_result = bep_capture(chain, CAPTURE_TIMEOUT);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("Capture failed result=%d\n", bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
log_info("Capture done. Remove finger from sensor\n");
|
||||
|
||||
bep_result = bep_image_extract(chain);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("Extract failed\n");
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
bep_result = send_command(chain, CMD_IDENTIFY, ARG_NONE, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("Identify failed\n");
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
bep_result = receive_result_args2(chain, ARG_MATCH, match, sizeof(bool),
|
||||
ARG_ID, template_id, sizeof(uint16_t));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("Identify failed\n");
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_save_template(fpc_com_chain_t *chain, uint16_t template_id)
|
||||
{
|
||||
fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK;
|
||||
|
||||
bep_result = send_command_args2(chain, CMD_TEMPLATE, ARG_SAVE, NULL, 0, ARG_ID, &template_id,
|
||||
sizeof(template_id));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
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_result = FPC_BEP_RESULT_OK;
|
||||
|
||||
if (template_id == REMOVE_ID_ALL_TEMPLATES) {
|
||||
bep_result = send_command_args2(chain, CMD_STORAGE_TEMPLATE, ARG_DELETE, NULL, 0,
|
||||
ARG_ALL, NULL, 0);
|
||||
} else {
|
||||
bep_result = send_command_args2(chain, CMD_STORAGE_TEMPLATE, ARG_DELETE, NULL, 0,
|
||||
ARG_ID, &template_id, sizeof(template_id));
|
||||
}
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
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_result = FPC_BEP_RESULT_OK;
|
||||
|
||||
bep_result = send_command(chain, CMD_STORAGE_TEMPLATE, ARG_COUNT, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u ERROR sending CMD_STORAGE_TEMPLATE\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
bep_result = receive_result_args1(chain, ARG_COUNT, template_count, sizeof(template_count[0]));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR receiving status=%d\n", __func__, __LINE__, bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_get_template_ids(fpc_com_chain_t *chain, uint16_t *template_ids,
|
||||
uint32_t nof_templates)
|
||||
{
|
||||
fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK;
|
||||
|
||||
bep_result = send_command(chain, CMD_STORAGE_TEMPLATE, ARG_ID, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u ERROR sending CMD_STORAGE_TEMPLATE\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
bep_result = receive_result_args1(chain, ARG_DATA, template_ids, nof_templates *
|
||||
sizeof(template_ids[0]));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR receiving status=%d\n", __func__, __LINE__, bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_image_extract(fpc_com_chain_t *chain)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
|
||||
bep_result = send_command(chain, CMD_IMAGE, ARG_EXTRACT, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("Extract failed\n");
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
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_result;
|
||||
|
||||
bep_result = send_command(chain, CMD_IMAGE, ARG_SIZE, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("Extract failed\n");
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
log_info("Downloading image data...\n");
|
||||
|
||||
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_result;
|
||||
|
||||
bep_result = send_command(chain, CMD_IMAGE, ARG_UPLOAD, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("Extract failed\n");
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
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_result;
|
||||
|
||||
bep_result = send_command_args2(chain, CMD_INFO, ARG_GET, NULL, 0, ARG_VERSION, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s, ERROR line:%u\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
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_result;
|
||||
|
||||
bep_result = send_command_no_args(chain, CMD_RESET);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
return receive_result_no_args(chain);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_sensor_calibrate(fpc_com_chain_t *chain)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
|
||||
bep_result = send_command_no_args(chain, CMD_STORAGE_CALIBRATION);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
return receive_result_no_args(chain);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_sensor_calibrate_remove(fpc_com_chain_t *chain)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
|
||||
bep_result = send_command(chain, CMD_STORAGE_CALIBRATION, ARG_DELETE, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
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_result;
|
||||
|
||||
bep_result = send_command(chain, CMD_WAIT, ARG_FINGER_DOWN, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
/* Wait for finger on sensor */
|
||||
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_result;
|
||||
|
||||
bep_result = send_command(chain, CMD_WAIT, ARG_FINGER_UP, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
/* Wait for finger to be lifted from sensor */
|
||||
return receive_result_no_args(chain);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_get(fpc_com_chain_t *chain, uint16_t template_id, uint8_t *data, uint32_t size, uint16_t *tmplsize)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
uint16_t tmpl_id = template_id;
|
||||
|
||||
|
||||
bep_result = send_command_args2(chain, CMD_STORAGE_TEMPLATE, ARG_UPLOAD, 0, 0, ARG_ID, &tmpl_id,
|
||||
sizeof(tmpl_id));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
bep_result = receive_result_no_args(chain);
|
||||
if(bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
bep_result = send_command(chain, CMD_TEMPLATE, ARG_UPLOAD, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("Template download failed\n");
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
return receive_result_args2_sizes(chain, ARG_DATA, data, size, tmplsize, ARG_NONE, 0, 0, 0);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_put(fpc_com_chain_t *chain, uint16_t template_id, uint8_t *data, uint16_t size)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
|
||||
bep_result = send_command_args2(chain, CMD_TEMPLATE, ARG_DOWNLOAD, 0, 0, ARG_DATA, data, size);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
bep_result = receive_result_no_args(chain);
|
||||
if(bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
return bep_save_template(chain, template_id);
|
||||
}
|
||||
|
||||
66
BMLite_example/src/com_app_cleartext.c
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* 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 <stddef.h>
|
||||
#include <string.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
204
BMLite_example/src/com_common.c
Normal file
@ -0,0 +1,204 @@
|
||||
/*
|
||||
* 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 <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
@ -12,11 +12,10 @@
|
||||
* 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.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for FPC BM-Lite applications
|
||||
*
|
||||
* 04/14/2020: Added SPI interface support
|
||||
*/
|
||||
|
||||
/*
|
||||
* 04/14/2020: Added SPI interfcae support
|
||||
*/
|
||||
|
||||
|
||||
@ -32,25 +31,9 @@
|
||||
#include <getopt.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "bmlite_if.h"
|
||||
#include "hcp_tiny.h"
|
||||
#include "bep_host_if.h"
|
||||
#include "com_common.h"
|
||||
#include "platform.h"
|
||||
#include "bmlite_hal.h"
|
||||
#include "platform_rpi.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_bmlite_receive,
|
||||
.write = platform_bmlite_send,
|
||||
.pkt_buffer = hcp_data_buffer,
|
||||
.txrx_buffer = hcp_txrx_buffer,
|
||||
.pkt_size = 0,
|
||||
.pkt_size_max = sizeof(hcp_data_buffer),
|
||||
.phy_rx_timeout = 2000,
|
||||
};
|
||||
|
||||
static void help(void)
|
||||
{
|
||||
@ -58,85 +41,35 @@ static void help(void)
|
||||
fprintf(stderr, "Syntax: bep_host_com [-s] [-p port] [-b baudrate] [-t timeout]\n");
|
||||
}
|
||||
|
||||
void bmlite_on_error(bmlite_error_t error, int32_t value)
|
||||
{
|
||||
printf("Error: %d, return code %d\n", error, (int16_t)value);
|
||||
}
|
||||
|
||||
void bmlite_on_start_capture()
|
||||
{
|
||||
printf("Put finger on the sensor\n");
|
||||
}
|
||||
void bmlite_on_finish_capture()
|
||||
{
|
||||
printf("Remove finger from the sensor\n");
|
||||
}
|
||||
|
||||
void bmlite_on_start_enroll()
|
||||
{
|
||||
printf("Start enrolling\n");
|
||||
}
|
||||
|
||||
void bmlite_on_finish_enroll()
|
||||
{
|
||||
printf("Finish enrolling\n");
|
||||
}
|
||||
|
||||
void bmlite_on_start_enrollcapture() {}
|
||||
void bmlite_on_finish_enrollcapture() {}
|
||||
|
||||
void bmlite_on_identify_start()
|
||||
{
|
||||
printf("Start Identifying\n");
|
||||
}
|
||||
void bmlite_on_identify_finish()
|
||||
{
|
||||
printf("Finish Identifying\n");
|
||||
}
|
||||
|
||||
void save_to_pgm(FILE *f, uint8_t *image, int res_x, int res_y)
|
||||
{
|
||||
/* Print 8-bpp PGM ASCII header */
|
||||
fprintf(f, "P2\n%d %d\n255\n", res_x, res_y);
|
||||
for (int y = 0; y < res_y; y++) {
|
||||
for (int x = 0; x < res_x; x++, image++)
|
||||
fprintf(f,"%d ", *image);
|
||||
fprintf(f,"\n");
|
||||
}
|
||||
|
||||
fprintf(f,"\x04"); /* End Of Transmission */
|
||||
}
|
||||
|
||||
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
char *port = NULL;
|
||||
int baudrate = 921600;
|
||||
int timeout = 5;
|
||||
int index;
|
||||
int c;
|
||||
rpi_initparams_t rpi_params;
|
||||
|
||||
rpi_params.iface = COM_INTERFACE;
|
||||
rpi_params.hcp_comm = &hcp_chain;
|
||||
rpi_params.baudrate = 921600;
|
||||
rpi_params.timeout = 5;
|
||||
rpi_params.port = NULL;
|
||||
uint8_t buffer[512];
|
||||
uint16_t size[2] = { 256, 256 };
|
||||
fpc_com_chain_t hcp_chain;
|
||||
interface_t iface = COM_INTERFACE;
|
||||
|
||||
opterr = 0;
|
||||
|
||||
while ((c = getopt (argc, argv, "sb:p:t:")) != -1) {
|
||||
switch (c) {
|
||||
case 's':
|
||||
rpi_params.iface = SPI_INTERFACE;
|
||||
if(rpi_params.baudrate == 921600)
|
||||
rpi_params.baudrate = 1000000;
|
||||
iface = SPI_INTERFACE;
|
||||
if(baudrate == 921600)
|
||||
baudrate = 1000000;
|
||||
break;
|
||||
case 'b':
|
||||
rpi_params.baudrate = atoi(optarg);
|
||||
baudrate = atoi(optarg);
|
||||
break;
|
||||
case 'p':
|
||||
rpi_params.port = optarg;
|
||||
port = optarg;
|
||||
break;
|
||||
case 't':
|
||||
rpi_params.timeout = atoi(optarg);
|
||||
timeout = atoi(optarg);
|
||||
break;
|
||||
case '?':
|
||||
if (optopt == 'b')
|
||||
@ -154,7 +87,7 @@ int main (int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if (rpi_params.iface == COM_INTERFACE && rpi_params.port == NULL) {
|
||||
if (iface == COM_INTERFACE && port == NULL) {
|
||||
printf("port must be specified\n");
|
||||
help();
|
||||
exit(1);
|
||||
@ -164,24 +97,41 @@ int main (int argc, char **argv)
|
||||
printf ("Non-option argument %s\n", argv[index]);
|
||||
}
|
||||
|
||||
if(platform_init(&rpi_params) != FPC_BEP_RESULT_OK) {
|
||||
switch (iface) {
|
||||
case SPI_INTERFACE:
|
||||
if(!platform_spi_init(baudrate)) {
|
||||
printf("SPI initialization failed\n");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case COM_INTERFACE:
|
||||
if (!platform_com_init(port, baudrate, timeout)) {
|
||||
printf("Com initialization failed\n");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("Interface not specified'n");
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
init_com_chain(&hcp_chain, buffer, size, NULL, iface);
|
||||
hcp_chain.channel = 1;
|
||||
|
||||
while(1) {
|
||||
char cmd[100];
|
||||
fpc_bep_result_t res = FPC_BEP_RESULT_OK;
|
||||
uint16_t template_id;
|
||||
bool match;
|
||||
|
||||
rpi_clear_screen();
|
||||
platform_clear_screen();
|
||||
printf("BM-Lite Interface\n");
|
||||
if (rpi_params.iface == SPI_INTERFACE)
|
||||
printf("SPI port: speed %d Hz\n", rpi_params.baudrate);
|
||||
if (iface == SPI_INTERFACE)
|
||||
printf("SPI port: speed %d Hz\n", baudrate);
|
||||
else
|
||||
printf("Com port: %s [speed: %d]\n", rpi_params.port, rpi_params.baudrate);
|
||||
printf("Timeout: %ds\n", rpi_params.timeout);
|
||||
printf("Com port: %s [speed: %d]\n", port, baudrate);
|
||||
printf("Timeout: %ds\n", timeout);
|
||||
printf("-------------------\n\n");
|
||||
printf("Possible options:\n");
|
||||
printf("a: Enroll finger\n");
|
||||
@ -189,13 +139,11 @@ int main (int argc, char **argv)
|
||||
printf("c: Remove all templates\n");
|
||||
printf("d: Save template\n");
|
||||
printf("e: Remove template\n");
|
||||
printf("l: List of templates\n");
|
||||
printf("t: Save template to file\n");
|
||||
printf("T: Push template from file\n");
|
||||
printf("t: Get template\n");
|
||||
printf("T: Put template\n");
|
||||
printf("f: Capture image\n");
|
||||
printf("g: Pull captured image\n");
|
||||
printf("g: Image upload\n");
|
||||
printf("h: Get version\n");
|
||||
printf("r: SW Reset\n");
|
||||
printf("q: Exit program\n");
|
||||
printf("\nOption>> ");
|
||||
fgets(cmd, sizeof(cmd), stdin);
|
||||
@ -204,7 +152,7 @@ int main (int argc, char **argv)
|
||||
res = bep_enroll_finger(&hcp_chain);
|
||||
break;
|
||||
case 'b':
|
||||
res = bep_identify_finger(&hcp_chain, 0, &template_id, &match);
|
||||
res = bep_identify_finger(&hcp_chain, &template_id, &match);
|
||||
if (res == FPC_BEP_RESULT_OK) {
|
||||
if (match) {
|
||||
printf("Match with template id: %d\n", template_id);
|
||||
@ -214,40 +162,63 @@ int main (int argc, char **argv)
|
||||
}
|
||||
break;
|
||||
case 'c':
|
||||
res = bep_template_remove_all(&hcp_chain);
|
||||
res = bep_delete_template(&hcp_chain, REMOVE_ID_ALL_TEMPLATES);
|
||||
break;
|
||||
case 'd':
|
||||
printf("Template id: ");
|
||||
fgets(cmd, sizeof(cmd), stdin);
|
||||
template_id = atoi(cmd);
|
||||
res = bep_template_save(&hcp_chain, template_id);
|
||||
// res = bep_template_remove_ram(&hcp_chain);
|
||||
res = bep_save_template(&hcp_chain, template_id);
|
||||
break;
|
||||
case 't': {
|
||||
printf("Template id: ");
|
||||
fgets(cmd, sizeof(cmd), stdin);
|
||||
template_id = atoi(cmd);
|
||||
uint8_t *buf = malloc(10240);
|
||||
memset(buf,0,10240);
|
||||
uint16_t tmpl_size = 0;
|
||||
res = bep_template_get(&hcp_chain, template_id, buf, 10240, &tmpl_size);
|
||||
printf("Template size: %d\n", tmpl_size);
|
||||
if (res == FPC_BEP_RESULT_OK) {
|
||||
FILE *f = fopen("tmpl.raw", "wb");
|
||||
if (f) {
|
||||
fwrite(buf, tmpl_size, 1, f);
|
||||
fclose(f);
|
||||
printf("Template saved as tmpl.raw\n");
|
||||
}
|
||||
}
|
||||
free(buf);
|
||||
break;
|
||||
}
|
||||
case 'T': {
|
||||
printf("Template id: ");
|
||||
fgets(cmd, sizeof(cmd), stdin);
|
||||
template_id = atoi(cmd);
|
||||
uint8_t *buf = malloc(10240);
|
||||
memset(buf,0,10240);
|
||||
uint16_t tmpl_size = 0;
|
||||
FILE *f = fopen("tmpl.raw", "rb");
|
||||
if (f) {
|
||||
printf("Read template from tmpl.raw\n");
|
||||
tmpl_size = fread(buf, 1, 10240, f);
|
||||
printf("Template size: %d\n", tmpl_size);
|
||||
fclose(f);
|
||||
}
|
||||
res = bep_template_put(&hcp_chain, template_id, buf, tmpl_size);
|
||||
free(buf);
|
||||
break;
|
||||
}
|
||||
case 'e':
|
||||
printf("Template id: ");
|
||||
fgets(cmd, sizeof(cmd), stdin);
|
||||
template_id = atoi(cmd);
|
||||
res = bep_template_remove(&hcp_chain, template_id);
|
||||
res = bep_delete_template(&hcp_chain, template_id);
|
||||
break;
|
||||
case 'l':
|
||||
res = bep_template_get_ids(&hcp_chain);
|
||||
if (hcp_chain.bep_result == FPC_BEP_RESULT_OK) {
|
||||
printf("Template list\n");
|
||||
for(int i=0; i < hcp_chain.arg.size/2; i++) {
|
||||
printf("%d ", *(uint16_t *)(hcp_chain.arg.data+i*2));
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
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);
|
||||
@ -256,69 +227,16 @@ int main (int argc, char **argv)
|
||||
if (buf) {
|
||||
res = bep_image_get(&hcp_chain, buf, size);
|
||||
if (res == FPC_BEP_RESULT_OK) {
|
||||
// if(size != hcp_chain.arg.size) {
|
||||
printf("Image size: %d. Received %d bytes\n", size, hcp_chain.arg.size);
|
||||
// }
|
||||
FILE *f = fopen("image.raw", "wb");
|
||||
if (f) {
|
||||
fwrite(buf, 1, size, f);
|
||||
fclose(f);
|
||||
printf("Image saved as image.raw\n");
|
||||
}
|
||||
f = fopen("image.pgm", "wb");
|
||||
if(f) {
|
||||
save_to_pgm(f, buf, 160, 160);
|
||||
fclose(f);
|
||||
printf("Image saved as image.pgm\n");
|
||||
}
|
||||
free(buf);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'T': {
|
||||
uint32_t size;
|
||||
printf("Read template from file: ");
|
||||
fscanf(stdin, "%s", cmd);
|
||||
uint8_t *buf = malloc(102400);
|
||||
FILE *f = fopen(cmd, "rb");
|
||||
if (f) {
|
||||
size = fread(buf, 1, 102400, f);
|
||||
fclose(f);
|
||||
if(size > 0) {
|
||||
printf("Pushing template size %d\n", size);
|
||||
res = bep_template_put(&hcp_chain, buf, size);
|
||||
if (res != FPC_BEP_RESULT_OK) {
|
||||
printf("Pushing template error: %d\n", res);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
printf("Can't open %s\n", cmd);
|
||||
}
|
||||
free(buf);
|
||||
|
||||
break;
|
||||
}
|
||||
case 't': {
|
||||
uint8_t *buf = malloc(102400);
|
||||
printf("Save template to file: ");
|
||||
fscanf(stdin, "%s", cmd);
|
||||
if (buf) {
|
||||
res = bep_template_get(&hcp_chain, buf, 102400);
|
||||
if (res == FPC_BEP_RESULT_OK) {
|
||||
// if(size != hcp_chain.arg.size) {
|
||||
printf("Template size received %d bytes\n", hcp_chain.arg.size);
|
||||
// }
|
||||
FILE *f = fopen(cmd, "wb");
|
||||
if (f) {
|
||||
fwrite(buf, 1, hcp_chain.arg.size, f);
|
||||
fclose(f);
|
||||
printf("Image saved as %s\n", cmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
free(buf);
|
||||
break;
|
||||
}
|
||||
case 'h': {
|
||||
@ -331,26 +249,16 @@ int main (int argc, char **argv)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'r':
|
||||
bep_sw_reset(&hcp_chain);
|
||||
break;
|
||||
case 'q':
|
||||
return 0;
|
||||
default:
|
||||
printf("\nUnknown command\n");
|
||||
}
|
||||
if (hcp_chain.bep_result == FPC_BEP_RESULT_OK) {
|
||||
if (res == FPC_BEP_RESULT_OK) {
|
||||
printf("\nCommand succeded\n");
|
||||
} else {
|
||||
printf("\nCommand failed with error code %d\n", hcp_chain.bep_result);
|
||||
printf("\nCommand failed with error code %d\n", res);
|
||||
}
|
||||
|
||||
if (res == FPC_BEP_RESULT_OK) {
|
||||
printf("Transfer succeded\n");
|
||||
} else {
|
||||
printf("Transfer failed with error code %d\n", res);
|
||||
}
|
||||
|
||||
printf("Press any key to continue...");
|
||||
fgets(cmd, sizeof(cmd), stdin);
|
||||
}
|
||||
|
||||
@ -29,7 +29,8 @@
|
||||
#include <termios.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "platform_rpi.h"
|
||||
#include "fpc_com_result.h"
|
||||
#include "platform.h"
|
||||
|
||||
static int fd = -1;
|
||||
|
||||
@ -63,7 +64,7 @@ static int set_interface_attribs(int fd, int speed, int timeout)
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool rpi_com_init(char *port, int baudrate, int timeout)
|
||||
bool platform_com_init(char *port, int baudrate, int timeout)
|
||||
{
|
||||
|
||||
int baud;
|
||||
@ -84,30 +85,30 @@ bool rpi_com_init(char *port, int baudrate, int timeout)
|
||||
return true;
|
||||
}
|
||||
|
||||
fpc_bep_result_t rpi_com_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
fpc_com_result_t platform_com_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
void *session)
|
||||
{
|
||||
fpc_bep_result_t res = FPC_BEP_RESULT_OK;
|
||||
fpc_com_result_t res = FPC_COM_RESULT_OK;
|
||||
int n;
|
||||
|
||||
if (fd < 0) {
|
||||
fprintf(stderr, "error invalid file descriptor");
|
||||
return FPC_BEP_RESULT_INVALID_ARGUMENT;
|
||||
return FPC_COM_RESULT_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
n = write(fd, data, size);
|
||||
|
||||
if (n != size) {
|
||||
res = FPC_BEP_RESULT_IO_ERROR;
|
||||
res = FPC_COM_RESULT_IO_ERROR;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
fpc_bep_result_t rpi_com_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
fpc_com_result_t platform_com_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
void *session)
|
||||
{
|
||||
fpc_bep_result_t res = FPC_BEP_RESULT_OK;
|
||||
fpc_com_result_t res = FPC_COM_RESULT_OK;
|
||||
int n_read = 0;
|
||||
int n = 0;
|
||||
fd_set rfds;
|
||||
@ -116,7 +117,7 @@ fpc_bep_result_t rpi_com_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
|
||||
if (fd < 0) {
|
||||
fprintf(stderr, "error invalid file descriptor");
|
||||
return FPC_BEP_RESULT_INVALID_ARGUMENT;
|
||||
return FPC_COM_RESULT_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
FD_ZERO(&rfds);
|
||||
50
BMLite_example/src/platform_linux.c
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* 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 platform_linux.c
|
||||
* @brief Linux platform specific functions
|
||||
*/
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <termios.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "fpc_com_result.h"
|
||||
#include "platform.h"
|
||||
|
||||
uint64_t platform_get_time(void)
|
||||
{
|
||||
struct timeval current_time;
|
||||
uint64_t time_in_ms;
|
||||
|
||||
gettimeofday(¤t_time, NULL);
|
||||
/* Seconds and microseconds are converted to milliseconds */
|
||||
time_in_ms = current_time.tv_usec / 1000 + current_time.tv_sec * 1000;
|
||||
|
||||
return time_in_ms;
|
||||
}
|
||||
|
||||
void platform_clear_screen(void)
|
||||
{
|
||||
system("clear");
|
||||
}
|
||||
@ -12,9 +12,6 @@
|
||||
* 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.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for FPC BM-Lite applications
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -34,6 +31,7 @@
|
||||
#include <termios.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "fpc_com_result.h"
|
||||
#include "platform.h"
|
||||
|
||||
#include <linux/spi/spidev.h>
|
||||
@ -42,7 +40,7 @@
|
||||
|
||||
#include "wiringPi.h"
|
||||
#include "wiringPiSPI.h"
|
||||
#include "platform_rpi.h"
|
||||
#include "raspberry_pi_hal.h"
|
||||
|
||||
#define SPI_BUF_MIN_SIZE 40000
|
||||
// This path is used to determine the SPI buffer size.
|
||||
@ -55,7 +53,7 @@ uint32_t speed_hz_int;
|
||||
|
||||
void fpc_sensor_spi_reset(bool state);
|
||||
|
||||
static void raspberryPi_init()
|
||||
void raspberryPi_init()
|
||||
{
|
||||
/* Start wiringPi functions. */
|
||||
wiringPiSetup();
|
||||
@ -69,7 +67,15 @@ static void raspberryPi_init()
|
||||
|
||||
}
|
||||
|
||||
void hal_bmlite_reset(bool state)
|
||||
void platform_spi_sensor_reset(void)
|
||||
{
|
||||
fpc_sensor_spi_reset(true);
|
||||
usleep(100);
|
||||
fpc_sensor_spi_reset(false);
|
||||
usleep(10);
|
||||
}
|
||||
|
||||
void fpc_sensor_spi_reset(bool state)
|
||||
{
|
||||
/* The reset pin is controlled by WiringPis digitalWrite function*/
|
||||
if (state) {
|
||||
@ -79,13 +85,13 @@ void hal_bmlite_reset(bool state)
|
||||
}
|
||||
}
|
||||
|
||||
bool hal_bmlite_get_status(void)
|
||||
bool fpc_sensor_spi_read_irq(void)
|
||||
{
|
||||
return digitalRead(BMLITE_IRQ_PIN);
|
||||
}
|
||||
|
||||
|
||||
bool rpi_spi_init(uint32_t speed_hz)
|
||||
bool platform_spi_init(uint32_t speed_hz)
|
||||
{
|
||||
raspberryPi_init();
|
||||
|
||||
@ -138,7 +144,7 @@ bool rpi_spi_init(uint32_t speed_hz)
|
||||
return true;
|
||||
}
|
||||
|
||||
fpc_bep_result_t hal_bmlite_spi_write_read(const uint8_t *write, uint8_t *read, size_t size,
|
||||
static fpc_com_result_t platform_spi_write_read(const uint8_t *write, uint8_t *read, size_t size,
|
||||
bool leave_cs_asserted)
|
||||
{
|
||||
/*
|
||||
@ -168,34 +174,33 @@ fpc_bep_result_t hal_bmlite_spi_write_read(const uint8_t *write, uint8_t *read,
|
||||
* from the the number of bytes written an error has occured.
|
||||
*/
|
||||
if (status == size) {
|
||||
return FPC_BEP_RESULT_OK;
|
||||
return FPC_COM_RESULT_OK;
|
||||
}
|
||||
return FPC_BEP_RESULT_IO_ERROR;
|
||||
return FPC_COM_RESULT_IO_ERROR;
|
||||
|
||||
}
|
||||
|
||||
// fpc_bep_result_t platform_spi_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
// void *session)
|
||||
// {
|
||||
// uint8_t buff[size];
|
||||
fpc_com_result_t platform_spi_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
void *session)
|
||||
{
|
||||
uint8_t buff[size];
|
||||
|
||||
// return platform_spi_write_read(data, buff, size, false);
|
||||
// }
|
||||
return platform_spi_write_read(data, buff, size, false);
|
||||
}
|
||||
|
||||
// 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 indefinitely if timeout is 0
|
||||
// while (!hal_bmlite_get_status() &&
|
||||
// (!timeout || (curr_time = platform_get_time()) - start_time < timeout)) {
|
||||
// //usleep(1);
|
||||
// }
|
||||
// if(timeout && curr_time - start_time >= timeout) {
|
||||
// return FPC_BEP_RESULT_TIMEOUT;
|
||||
// }
|
||||
fpc_com_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;
|
||||
while (!fpc_sensor_spi_read_irq() &&
|
||||
(curr_time = platform_get_time()) - start_time < timeout) {
|
||||
//usleep(1);
|
||||
}
|
||||
if(curr_time - start_time >= timeout) {
|
||||
return FPC_COM_RESULT_TIMEOUT;
|
||||
}
|
||||
|
||||
// uint8_t buff[size];
|
||||
// return platform_spi_write_read(buff, data, size, false);
|
||||
// }
|
||||
uint8_t buff[size];
|
||||
return platform_spi_write_read(buff, data, size, false);
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
# Binary sources
|
||||
|
||||
BMLITE_SDK = $(DEPTH)../BMLite_sdk
|
||||
|
||||
VPATH += $(BMLITE_SDK)
|
||||
|
||||
C_INC += -I$(BMLITE_SDK)/inc
|
||||
|
||||
# Source Folders
|
||||
VPATH += $(BMLITE_SDK)/src/
|
||||
|
||||
# C Sources
|
||||
C_SRCS += $(notdir $(wildcard $(BMLITE_SDK)/src/*.c))
|
||||
@ -1,132 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* 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 bmlite_hal.h
|
||||
* @brief BM-Lite HAL functions.
|
||||
*
|
||||
* All functions must be implemented in order to support BM-Lite on a Board
|
||||
*/
|
||||
|
||||
#ifndef BMLITE_H
|
||||
#define BMLITE_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "fpc_bep_types.h"
|
||||
|
||||
#ifdef __arm__
|
||||
typedef uint32_t hal_tick_t;
|
||||
#else
|
||||
typedef uint64_t hal_tick_t;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief LED status.
|
||||
*
|
||||
* Different LED status.
|
||||
*/
|
||||
typedef enum {
|
||||
BMLITE_LED_STATUS_READY = 0,
|
||||
BMLITE_LED_STATUS_MATCH,
|
||||
BMLITE_LED_STATUS_WAITTOUCH,
|
||||
BMLITE_LED_STATUS_ENROLL,
|
||||
BMLITE_LED_STATUS_DELETE_TEMPLATES,
|
||||
BMLITE_LED_STATUS_ERROR,
|
||||
} platform_led_status_t;
|
||||
|
||||
|
||||
/*
|
||||
* @brief Board initialization
|
||||
* @param[in] params - pointer to additional parameters
|
||||
*/
|
||||
|
||||
fpc_bep_result_t hal_board_init(void *params);
|
||||
|
||||
/*
|
||||
* @brief Control BM-Lite Reset pin
|
||||
* @param[in] True - Activate RESET
|
||||
* False - Deactivate RESET
|
||||
*/
|
||||
void hal_bmlite_reset(bool state);
|
||||
|
||||
/*
|
||||
* @brief SPI write-read
|
||||
* @param[in] Write buffer
|
||||
* @param[in] Read buffer
|
||||
* @param[in] Size
|
||||
* @param[in] Leave CS asserted
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t hal_bmlite_spi_write_read(uint8_t *write, uint8_t *read, size_t size,
|
||||
bool leave_cs_asserted);
|
||||
|
||||
/*
|
||||
* @brief Check if BM-Lite IRQ pin is set
|
||||
* @return ::bool
|
||||
*/
|
||||
bool hal_bmlite_get_status(void);
|
||||
|
||||
/**
|
||||
* @brief Initializes timebase. Starts system tick counter.
|
||||
*/
|
||||
void hal_timebase_init(void);
|
||||
|
||||
/**
|
||||
* @brief Reads the system tick counter.
|
||||
*
|
||||
* @return Tick count since hal_timebase_init() call. [ms]
|
||||
*/
|
||||
hal_tick_t hal_timebase_get_tick(void);
|
||||
|
||||
/**
|
||||
* @brief Busy wait.
|
||||
*
|
||||
* @param[in] ms Time to wait [ms].
|
||||
* 0 => return immediately
|
||||
* 1 => wait at least 1ms etc.
|
||||
*/
|
||||
void hal_timebase_busy_wait(uint32_t ms);
|
||||
|
||||
/**
|
||||
* Optional functions for Buttons & Leds control
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Get button press time (msec)
|
||||
*
|
||||
* @return ::uint32_t
|
||||
*/
|
||||
uint32_t hal_get_button_press_time(void);
|
||||
|
||||
/**
|
||||
* @brief Check if button was pressed and released.
|
||||
*
|
||||
* @return Button press time in milli seconds.
|
||||
*/
|
||||
uint32_t hal_check_button_pressed(void);
|
||||
|
||||
/**
|
||||
* @brief Set LED(s) status
|
||||
* @param[in] Status
|
||||
* @param[in] Status modifier
|
||||
*/
|
||||
void hal_set_leds(platform_led_status_t status, uint16_t mode);
|
||||
|
||||
|
||||
#endif /* BMLITE_H */
|
||||
@ -1,365 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef BMLITE_IF_H
|
||||
#define BMLITE_IF_H
|
||||
|
||||
#include "hcp_tiny.h"
|
||||
#include "bmlite_if_callbacks.h"
|
||||
|
||||
/**
|
||||
* @brief Enroll finger. Created template must be saved to FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_enroll_finger(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Capture and identify finger against existing templates in Flash storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] timeout - timeout (msec). Maximum timeout 65535 msec
|
||||
* set to 0 for waiting indefinitely
|
||||
*
|
||||
* @param[out] template_id - pointer for matched template ID
|
||||
* @param[out] match - pointer to match result
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_identify_finger(HCP_comm_t *chain, uint32_t timeout,
|
||||
uint16_t *template_id, bool *match);
|
||||
|
||||
/**
|
||||
* @brief Wait for finger present on sensor"
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] timeout - timeout (msec). Maximum timeout 65535 msec
|
||||
* set to 0 for waiting indefinitely
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t sensor_wait_finger_present(HCP_comm_t *chain, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* @brief Wait for finger not present on sensor"
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] timeout - timeout (msec). Maximum timeout 65535 msec
|
||||
* set to 0 for waiting indefinitely
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t sensor_wait_finger_not_present(HCP_comm_t *chain, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* @brief Wait for finger present on sensor and capture image"
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] timeout - timeout (msec). Maximum timeout 65535 msec
|
||||
* set to 0 for waiting indefinitely
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_capture(HCP_comm_t *chain, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* @brief Get size of captured image
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @param[out] size
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_image_get_size(HCP_comm_t *chain, uint32_t *size);
|
||||
|
||||
/**
|
||||
* @brief Allocates image buffer on FPC BM-LIte
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t image_create(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Deletes image buffer on FPC BM-LIte
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t image_delete(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Pull captured image from FPC BM-Lite
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @param[in] data - pointer to image buffer
|
||||
* @param[in] size - size of the image buffer
|
||||
* if buffer size is not enough the image
|
||||
* will be truncated
|
||||
* chain->arg.size will contain real size of the image
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_image_get(HCP_comm_t *chain, uint8_t *data, uint32_t size);
|
||||
|
||||
/**
|
||||
* @brief Push image to FPC BM-Lite
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @param[in] data - pointer to image buffer
|
||||
* @param[in] size - size of the image buffer
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_image_put(HCP_comm_t *chain, uint8_t *data, uint32_t size);
|
||||
|
||||
/**
|
||||
* @brief Extract image features to prepare image for enrolling or matching
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_image_extract(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Identify prepared image against existing templates in Flash storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_identify(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Save template after enroll is finished to FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[out] template_id - template ID
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_save(HCP_comm_t *chain, uint16_t template_id);
|
||||
|
||||
/**
|
||||
* @brief Remove template from RAM
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] template_id - template ID
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_remove_ram(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Pull template stored in RAM from FPC BM-Lite
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @param[in] data - pointer to template buffer
|
||||
* @param[in] size - size of the template buffer
|
||||
* if buffer size is not enough the template
|
||||
* will be truncated
|
||||
* chain->arg.size will contain real size of the template
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_get(HCP_comm_t *chain, uint8_t *data, uint32_t size);
|
||||
|
||||
/**
|
||||
* @brief Push template to FPC BM-Lite and stored it to RAM
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @param[in] data - pointer to template buffer
|
||||
* @param[in] size - size of the template buffer
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_put(HCP_comm_t *chain, uint8_t *data, uint16_t length);
|
||||
|
||||
/**
|
||||
* @brief Remove template from FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] template_id - template ID
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_remove(HCP_comm_t *chain, uint16_t template_id);
|
||||
|
||||
/**
|
||||
* @brief Remove all templates from FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_remove_all(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Copy template from FLASH storage to RAM
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] template_id - template ID
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_load_storage(HCP_comm_t *chain, uint16_t template_id);
|
||||
|
||||
/**
|
||||
* @brief Remove template from FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[out] template_id - template ID
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_get_count(HCP_comm_t *chain, uint16_t *count);
|
||||
|
||||
/**
|
||||
* @brief Get array of template ID stored on FPC BM-LIte
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @return ::fpc_bep_result_t
|
||||
* chain->arg.data - pointer to array of uint16_t of IDs
|
||||
* chain->arg.size - length of the array (in bytes). For calculating
|
||||
* number of templates divide the arg.size by 2
|
||||
*/
|
||||
fpc_bep_result_t bep_template_get_ids(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Software reset of FCP BM-Lite
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_sw_reset(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Calibrate FPC BM-LIte sensor and store calibration data to FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*
|
||||
* FPC BM-Lite must be restarted to activate new calibration data
|
||||
*/
|
||||
fpc_bep_result_t bep_sensor_calibrate(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Remove FPC BM-LIte sensor calibration data from FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*
|
||||
* FPC BM-Lite must be restarted to activate
|
||||
*/
|
||||
fpc_bep_result_t bep_sensor_calibrate_remove(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Get version of FPC BM-LIte firmware
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] version - pointer to data buffer
|
||||
* @param[in] size - size of the data buffer
|
||||
* if buffer size is not enough the data
|
||||
* will be truncated
|
||||
* chain->arg.size will contain real size of the data
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_version(HCP_comm_t *chain, char *version, int len);
|
||||
|
||||
/**
|
||||
* @brief Get version of FPC BM-LIte firmware
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] unique_id - pointer to data buffer
|
||||
* chain->arg.size will contain real size of the data
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_unique_id_get(HCP_comm_t *chain, uint8_t *unique_id);
|
||||
|
||||
/**
|
||||
* @brief Set requested UART communication speed
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] speed - UART speed
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_uart_speed_set(HCP_comm_t *chain, uint32_t speed);
|
||||
|
||||
/**
|
||||
* @brief Get current UART communication speed
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[out] speed - UART speed
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_uart_speed_get(HCP_comm_t *chain, uint32_t *speed);
|
||||
|
||||
/**
|
||||
* @brief Reset FPC BM-Lite fingerprint sensor
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_sensor_reset(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Build and send command to FPC BM-Lite and receive answer
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] cmd - BM-Lite command
|
||||
* @param[in] arg_type - Argument without parameters
|
||||
* set to ARG_NONE if the command has no argument
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_send_cmd(HCP_comm_t *chain, uint16_t cmd, uint16_t arg_type);
|
||||
|
||||
/**
|
||||
* @brief Build and send command with additiona argument with parameters
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] cmd - BM-Lite command
|
||||
* @param[in] arg1_type - argument 1 without parameters
|
||||
* set to ARG_NONE if the command has no argument without paramener
|
||||
* @param[in] arg2_type - argument 2
|
||||
* @param[in] arg2_data - data pointer for argument 2
|
||||
* set to 0 if argument 2 has no parameter
|
||||
* @param[in] arg2_length - length of data for argument 2
|
||||
* set to 0 if argument 2 has no parameter
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_send_cmd_arg(HCP_comm_t *chain, uint16_t cmd, uint16_t arg1_type, uint16_t arg2_type, void *arg2_data, uint16_t arg2_length);
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@ -1,108 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef BMLITE_IF_CALLBACKS_H
|
||||
#define BMLITE_IF_CALLBACKS_H
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef BMLITE_USE_CALLBACK
|
||||
#define bmlite_on_error(error, value)
|
||||
#define bmlite_on_start_capture()
|
||||
#define bmlite_on_finish_capture()
|
||||
#define bmlite_on_finish_enroll()
|
||||
#define bmlite_on_start_enroll()
|
||||
#define bmlite_on_start_enrollcapture()
|
||||
#define bmlite_on_finish_enrollcapture()
|
||||
#define bmlite_on_identify_start()
|
||||
#define bmlite_on_identify_finish()
|
||||
|
||||
#else
|
||||
|
||||
typedef enum {
|
||||
BMLITE_ERROR_OK = 0,
|
||||
BMLITE_ERROR_CAPTURE,
|
||||
BMLITE_ERROR_CAPTURE_START,
|
||||
BMLITE_ERROR_ENROLL_START,
|
||||
BMLITE_ERROR_ENROLL_ADD,
|
||||
BMLITE_ERROR_ENROLL_FINISH,
|
||||
BMLITE_ERROR_WRONG_ANSWER,
|
||||
BMLITE_ERROR_FINGER_WAIT,
|
||||
BMLITE_ERROR_IDENTYFY,
|
||||
BMLITE_ERROR_TEMPLATE_SAVE,
|
||||
BMLITE_ERROR_TEMPLATE_DELETE,
|
||||
BMLITE_ERROR_TEMPLATE_COUNT,
|
||||
BMLITE_ERROR_TEMPLATE_GETIDS,
|
||||
BMLITE_ERROR_IMAGE_EXTRACT,
|
||||
BMLITE_ERROR_IMAGE_GETSIZE,
|
||||
BMLITE_ERROR_IMAGE_GET,
|
||||
BMLITE_ERROR_GETVERSION,
|
||||
BMLITE_ERROR_SW_RESET,
|
||||
BMLITE_ERROR_CALIBRATE,
|
||||
BMLITE_ERROR_CALIBRATE_DELETE,
|
||||
BMLITE_ERROR_SEND_CMD,
|
||||
BMLITE_ERROR_GET_ARG,
|
||||
} bmlite_error_t;
|
||||
|
||||
/**
|
||||
* @brief Error Callback function
|
||||
*
|
||||
* @param[in] Callback Error Code
|
||||
* @param[in] BEP result code
|
||||
*/
|
||||
void bmlite_on_error(bmlite_error_t error, int32_t value);
|
||||
|
||||
/**
|
||||
* @brief Starting Capture Callback function
|
||||
*/
|
||||
void bmlite_on_start_capture();
|
||||
|
||||
/**
|
||||
* @brief Finishing Capture Callback function
|
||||
*/
|
||||
void bmlite_on_finish_capture();
|
||||
|
||||
/**
|
||||
* @brief Starting Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_start_enroll();
|
||||
|
||||
/**
|
||||
* @brief Finishing Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_finish_enroll();
|
||||
|
||||
/**
|
||||
* @brief Starting Capture for Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_start_enrollcapture();
|
||||
|
||||
/**
|
||||
* @brief Finishing Capture for Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_finish_enrollcapture();
|
||||
|
||||
/**
|
||||
* @brief Starting Identify Callback function
|
||||
*/
|
||||
void bmlite_on_identify_start();
|
||||
|
||||
/**
|
||||
* @brief Finishing Identify Callback function
|
||||
*/
|
||||
void bmlite_on_identify_finish();
|
||||
#endif // BMLITE_USE_CALLBACK
|
||||
|
||||
#endif
|
||||
@ -1,146 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#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 {
|
||||
uint32_t size;
|
||||
uint8_t *data;
|
||||
} HCP_arg_t;
|
||||
|
||||
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 *pkt_buffer;
|
||||
/** Size of data buffer */
|
||||
uint32_t pkt_size_max;
|
||||
/** Current size of incoming or outcoming command packet */
|
||||
uint32_t pkt_size;
|
||||
/** Buffer of MTU size for transport layer */
|
||||
uint8_t *txrx_buffer;
|
||||
/** Values of last argument pulled by bmlite_get_arg
|
||||
Values are valid only right after bmlite_get_arg() call */
|
||||
HCP_arg_t arg;
|
||||
/** Result of execution command on BM-Lite */
|
||||
fpc_bep_result_t bep_result;
|
||||
} HCP_comm_t;
|
||||
|
||||
/**
|
||||
* @brief Send prepared command packet to FPC BM-LIte
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_send(HCP_comm_t *hcp_comm);
|
||||
|
||||
/**
|
||||
* @brief Receive answer from FPC BM-LIte
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_receive(HCP_comm_t *hcp_comm);
|
||||
|
||||
/**
|
||||
* @brief Send prepared command packet to FPC BM-LIte and receive answer
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
*
|
||||
* Returns result of executing command in BM-LIte in hcp_comm->bep_result
|
||||
* if communication with BM-Lite was successful.
|
||||
* Please not that some BM-Lite command does not return result in ARG_RESULT.
|
||||
* They return data with some other argument instead.
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_tranceive(HCP_comm_t *hcp_comm);
|
||||
|
||||
/**
|
||||
* @brief Initialize new command for BM-Lite
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
* @param[in] cmd - command to send
|
||||
* @param[in] arg - Argument for the command without parameterd
|
||||
* Use ARG_NONE and add arguments by bmlite_add_arg() if
|
||||
* you need to add argument with parameter
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_init_cmd(HCP_comm_t *hcp_comm, uint16_t cmd, uint16_t arg);
|
||||
|
||||
/**
|
||||
* @brief Add argument to command.
|
||||
* Must be used only after command buffer is initialized by bmlite_init_cmd()
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
* @param[in] arg_type - argument key
|
||||
* @param[in] arg_data - argument data
|
||||
* @param[in] arg_size - argument data length
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_add_arg(HCP_comm_t *hcp_comm, uint16_t arg_type, void *arg_data, uint16_t arg_size);
|
||||
|
||||
/**
|
||||
* @brief Search for argument in received answer.
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
* @param[in] arg_type - argument key
|
||||
*
|
||||
* If found, place pointer to argument data in receiving buffer to hcp_comm->arg.data
|
||||
* and size of the argument in hcp_comm->arg.size
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_get_arg(HCP_comm_t *hcp_comm, uint16_t arg_type);
|
||||
|
||||
/**
|
||||
* @brief Search for argument in received answer and copy argument's data
|
||||
* to arg_data
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
* @param[in] arg_type - argument key
|
||||
* @param[out] arg_data - pointer for memory to copy argument value
|
||||
* @param[out] arg_data_size - size of data area for copying argument value
|
||||
*
|
||||
* If found, argument's data will be copyed to arg_data
|
||||
* If received argument's size greater that arg_data_size, the copyed data will be
|
||||
* truncated to arg_data_size.
|
||||
* Still hcp_comm->arg.data will be pointed to argument's data in receiving buffer
|
||||
* and real size of the argument will be hcp_comm->arg.size
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_copy_arg(HCP_comm_t *hcp_comm, uint16_t arg_key, void *arg_data, uint16_t arg_data_size);
|
||||
|
||||
#endif
|
||||
@ -1,82 +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.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for FPC BM-Lite applications
|
||||
*/
|
||||
|
||||
|
||||
#ifndef PLATFORM_H
|
||||
#define PLATFORM_H
|
||||
|
||||
/**
|
||||
* @file platform.h
|
||||
* @brief Platform specific function interface
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "fpc_bep_types.h"
|
||||
|
||||
/**
|
||||
* @brief Initializes board
|
||||
*
|
||||
* @param[in] params - pointer to additional parameters.
|
||||
*/
|
||||
fpc_bep_result_t platform_init(void *params);
|
||||
|
||||
/**
|
||||
* @brief Does BM-Lite HW Reset
|
||||
*
|
||||
*/
|
||||
void platform_bmlite_reset(void);
|
||||
|
||||
/**
|
||||
* @brief Sends data over communication port in blocking mode.
|
||||
*
|
||||
* @param[in] size Number of bytes to send.
|
||||
* @param[in] data Data buffer to send.
|
||||
* @param[in] timeout Timeout in ms. Use 0 for infinity.
|
||||
*
|
||||
* @return ::fpc_com_result_t
|
||||
*/
|
||||
fpc_bep_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
void *session);
|
||||
|
||||
/**
|
||||
* @brief Receives data from communication port in blocking mode.
|
||||
*
|
||||
* @param[in] size Number of bytes to receive.
|
||||
* @param[in, out] data Data buffer to fill.
|
||||
* @param[in] timeout Timeout in ms. Use 0 for infinity.
|
||||
*
|
||||
* @return ::fpc_com_result_t
|
||||
*/
|
||||
fpc_bep_result_t platform_bmlite_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
void *session);
|
||||
|
||||
/**
|
||||
* @brief Stops execution if a debug interface is attached.
|
||||
*/
|
||||
void platform_halt_if_debug(void);
|
||||
|
||||
/**
|
||||
* @brief Performs a software reset.
|
||||
*/
|
||||
void platform_sw_reset(void) __attribute__((__noreturn__));
|
||||
|
||||
#endif /* PLATFORM_H */
|
||||
@ -1,325 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "hcp_tiny.h"
|
||||
#include "bmlite_if.h"
|
||||
#include "bmlite_hal.h"
|
||||
#include "platform.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "bmlite_if_callbacks.h"
|
||||
|
||||
#define MAX_CAPTURE_ATTEMPTS 15
|
||||
#define MAX_SINGLE_CAPTURE_ATTEMPTS 3
|
||||
#define CAPTURE_TIMEOUT 3000
|
||||
|
||||
#define exit_if_err(c) { bep_result = c; if(bep_result || chain->bep_result) goto exit; }
|
||||
|
||||
#define assert(c) { fpc_bep_result_t res = c; if(res) return res; }
|
||||
|
||||
#ifdef BMLITE_USE_CALLBACK
|
||||
/**
|
||||
* @brief Mock callback functions
|
||||
*/
|
||||
__attribute__((weak)) void bmlite_on_error(bmlite_error_t error, int32_t value) { (void)error; (void)value; }
|
||||
|
||||
__attribute__((weak)) void bmlite_on_start_capture() {}
|
||||
__attribute__((weak)) void bmlite_on_finish_capture() {}
|
||||
|
||||
__attribute__((weak)) void bmlite_on_start_enroll() {}
|
||||
__attribute__((weak)) void bmlite_on_finish_enroll() {}
|
||||
|
||||
__attribute__((weak)) void bmlite_on_start_enrollcapture() {}
|
||||
__attribute__((weak)) void bmlite_on_finish_enrollcapture() {}
|
||||
|
||||
__attribute__((weak)) void bmlite_on_identify_start() {}
|
||||
__attribute__((weak)) void bmlite_on_identify_finish() {}
|
||||
#endif
|
||||
|
||||
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;
|
||||
bool enroll_done = false;
|
||||
|
||||
bmlite_on_start_enroll();
|
||||
/* Enroll start */
|
||||
exit_if_err(bmlite_send_cmd(chain, CMD_ENROLL, ARG_START));
|
||||
|
||||
for (uint8_t i = 0; i < MAX_CAPTURE_ATTEMPTS; ++i) {
|
||||
|
||||
bmlite_on_start_enrollcapture();
|
||||
bep_result = bep_capture(chain, CAPTURE_TIMEOUT);
|
||||
bmlite_on_finish_enrollcapture();
|
||||
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Enroll add */
|
||||
bep_result = bmlite_send_cmd(chain, CMD_ENROLL, ARG_ADD);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
continue;
|
||||
}
|
||||
|
||||
bmlite_get_arg(chain, ARG_COUNT);
|
||||
samples_remaining = *(uint32_t *)chain->arg.data;
|
||||
// DEBUG("Enroll samples remaining: %d\n", samples_remaining);
|
||||
|
||||
/* Break enrolling if we can't collect enough correct images for enroll*/
|
||||
if (samples_remaining == 0U) {
|
||||
enroll_done = true;
|
||||
break;
|
||||
}
|
||||
|
||||
sensor_wait_finger_not_present(chain, 0);
|
||||
}
|
||||
|
||||
bep_result = bmlite_send_cmd(chain, CMD_ENROLL, ARG_FINISH);
|
||||
|
||||
exit:
|
||||
bmlite_on_finish_enroll();
|
||||
return (!enroll_done) ? FPC_BEP_RESULT_GENERAL_ERROR : bep_result;
|
||||
}
|
||||
|
||||
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;
|
||||
*match = false;
|
||||
|
||||
bmlite_on_identify_start();
|
||||
|
||||
exit_if_err(bep_capture(chain, timeout));
|
||||
exit_if_err(bep_image_extract(chain));
|
||||
exit_if_err(bep_identify(chain));
|
||||
exit_if_err(bmlite_get_arg(chain, ARG_MATCH));
|
||||
*match = *(bool *)chain->arg.data;
|
||||
if(*match) {
|
||||
bmlite_get_arg(chain, ARG_ID);
|
||||
*template_id = *(uint16_t *)chain->arg.data;
|
||||
// Delay for possible updating template on BM-Lite
|
||||
hal_timebase_busy_wait(50);
|
||||
}
|
||||
exit:
|
||||
bmlite_on_identify_finish();
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t sensor_wait_finger_present(HCP_comm_t *chain, uint16_t timeout)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
uint32_t prev_timeout = chain->phy_rx_timeout;
|
||||
|
||||
bmlite_on_start_capture();
|
||||
chain->phy_rx_timeout = timeout;
|
||||
bep_result = bmlite_send_cmd_arg(chain, CMD_WAIT, ARG_FINGER_DOWN, ARG_TIMEOUT, &timeout, sizeof(timeout));
|
||||
chain->phy_rx_timeout = prev_timeout;
|
||||
bmlite_on_finish_capture();
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t sensor_wait_finger_not_present(HCP_comm_t *chain, uint16_t timeout)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
uint32_t prev_timeout = chain->phy_rx_timeout;
|
||||
|
||||
chain->phy_rx_timeout = timeout;
|
||||
bep_result = bmlite_send_cmd_arg(chain, CMD_WAIT, ARG_FINGER_UP, ARG_TIMEOUT, &timeout, sizeof(timeout));
|
||||
chain->phy_rx_timeout = prev_timeout;
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_capture(HCP_comm_t *chain, uint16_t timeout)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
uint32_t prev_timeout = chain->phy_rx_timeout;
|
||||
|
||||
bmlite_on_start_capture();
|
||||
chain->phy_rx_timeout = timeout;
|
||||
for(int i=0; i< MAX_SINGLE_CAPTURE_ATTEMPTS; i++) {
|
||||
bep_result = bmlite_send_cmd_arg(chain, CMD_CAPTURE, ARG_NONE, ARG_TIMEOUT, &timeout, sizeof(timeout));
|
||||
if( !(bep_result || chain->bep_result))
|
||||
break;
|
||||
}
|
||||
chain->phy_rx_timeout = prev_timeout;
|
||||
bmlite_on_finish_capture();
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_image_get_size(HCP_comm_t *chain, uint32_t *size)
|
||||
{
|
||||
assert(bmlite_send_cmd(chain, CMD_IMAGE, ARG_SIZE));
|
||||
assert(bmlite_get_arg(chain, ARG_SIZE));
|
||||
|
||||
*size = *(uint32_t*)chain->arg.data;
|
||||
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
fpc_bep_result_t image_create(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_IMAGE, ARG_CREATE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t image_delete(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_IMAGE, ARG_DELETE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_image_get(HCP_comm_t *chain, uint8_t *data, uint32_t size)
|
||||
{
|
||||
assert(bmlite_send_cmd(chain, CMD_IMAGE, ARG_UPLOAD));
|
||||
return bmlite_copy_arg(chain, ARG_DATA, data, size);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_image_put(HCP_comm_t *chain, uint8_t *data, uint32_t size)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_IMAGE, ARG_DOWNLOAD, ARG_DATA, data, size);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_image_extract(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_IMAGE, ARG_EXTRACT);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_identify(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_IDENTIFY, ARG_NONE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_save(HCP_comm_t *chain, uint16_t template_id)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_TEMPLATE, ARG_SAVE, ARG_ID, &template_id, sizeof(template_id));
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_remove_ram(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_TEMPLATE, ARG_DELETE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_get(HCP_comm_t *chain, uint8_t *data, uint32_t size)
|
||||
{
|
||||
assert(bmlite_send_cmd(chain, CMD_TEMPLATE, ARG_UPLOAD));
|
||||
return bmlite_copy_arg(chain, ARG_DATA, data, size);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_put(HCP_comm_t *chain, uint8_t *data, uint16_t length)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_TEMPLATE, ARG_DOWNLOAD,
|
||||
ARG_DATA, data, length);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_remove(HCP_comm_t *chain, uint16_t template_id)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_STORAGE_TEMPLATE, ARG_DELETE,
|
||||
ARG_ID, &template_id, sizeof(template_id));
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_remove_all(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_STORAGE_TEMPLATE, ARG_DELETE,
|
||||
ARG_ALL, 0, 0);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_load_storage(HCP_comm_t *chain, uint16_t template_id)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_STORAGE_TEMPLATE, ARG_UPLOAD,
|
||||
ARG_ID, &template_id, sizeof(template_id));
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_get_count(HCP_comm_t *chain, uint16_t *count)
|
||||
{
|
||||
assert(bmlite_send_cmd(chain, CMD_STORAGE_TEMPLATE, ARG_COUNT));
|
||||
assert(bmlite_get_arg(chain, ARG_COUNT));
|
||||
*count = *(uint16_t*)chain->arg.data;
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_get_ids(HCP_comm_t *chain)
|
||||
{
|
||||
assert(bmlite_send_cmd(chain, CMD_STORAGE_TEMPLATE, ARG_ID));
|
||||
return bmlite_get_arg(chain, ARG_DATA);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_sw_reset(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_RESET, ARG_NONE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_sensor_calibrate(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_STORAGE_CALIBRATION, ARG_NONE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_sensor_calibrate_remove(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_STORAGE_CALIBRATION, ARG_DELETE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_version(HCP_comm_t *chain, char *version, int len)
|
||||
{
|
||||
assert(bmlite_send_cmd_arg(chain, CMD_INFO, ARG_GET, ARG_VERSION, 0, 0));
|
||||
return bmlite_copy_arg(chain, ARG_VERSION, version, len);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_unique_id_get(HCP_comm_t *chain, uint8_t *unique_id)
|
||||
{
|
||||
assert(bmlite_send_cmd_arg(chain, CMD_INFO, ARG_GET, ARG_UNIQUE_ID, 0, 0));
|
||||
return bmlite_copy_arg(chain, ARG_UNIQUE_ID, unique_id, 12);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_uart_speed_set(HCP_comm_t *chain, uint32_t speed)
|
||||
{
|
||||
assert(bmlite_init_cmd(chain, CMD_COMMUNICATION, ARG_SPEED));
|
||||
assert(bmlite_add_arg(chain, ARG_SET, 0, 0));
|
||||
assert(bmlite_add_arg(chain, ARG_DATA, (uint8_t*)&speed, sizeof(speed)));
|
||||
return bmlite_tranceive(chain);
|
||||
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_uart_speed_get(HCP_comm_t *chain, uint32_t *speed)
|
||||
{
|
||||
assert(bmlite_init_cmd(chain, CMD_COMMUNICATION, ARG_SPEED));
|
||||
assert(bmlite_add_arg(chain, ARG_GET, 0, 0));
|
||||
assert(bmlite_tranceive(chain));
|
||||
return bmlite_copy_arg(chain, ARG_DATA, speed, sizeof(speed));
|
||||
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_sensor_reset(HCP_comm_t *chain)
|
||||
{
|
||||
// Delay for possible updating template on BM-Lite
|
||||
hal_timebase_busy_wait(50);
|
||||
|
||||
return bmlite_send_cmd(chain, CMD_SENSOR, ARG_RESET);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_send_cmd(HCP_comm_t *chain, uint16_t cmd, uint16_t arg_type)
|
||||
{
|
||||
assert(bmlite_init_cmd(chain, cmd, arg_type));
|
||||
return bmlite_tranceive(chain);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_send_cmd_arg(HCP_comm_t *chain, uint16_t cmd, uint16_t arg1_type, uint16_t arg2_type, void *arg2_data, uint16_t arg2_length)
|
||||
{
|
||||
assert(bmlite_init_cmd(chain, cmd, arg1_type));
|
||||
assert(bmlite_add_arg(chain, arg2_type, arg2_data, arg2_length));
|
||||
|
||||
return bmlite_tranceive(chain);
|
||||
}
|
||||
@ -1,307 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "platform.h"
|
||||
#include "fpc_crc.h"
|
||||
#include "fpc_hcp_common.h"
|
||||
#include "hcp_tiny.h"
|
||||
|
||||
#include "bmlite_if_callbacks.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#define LOG_DEBUG(...) printf(__VA_ARGS__)
|
||||
#else
|
||||
#define LOG_DEBUG(...)
|
||||
#endif
|
||||
|
||||
static uint32_t fpc_com_ack = FPC_BEP_ACK;
|
||||
|
||||
static fpc_bep_result_t _rx_link(HCP_comm_t *hcp_comm);
|
||||
static fpc_bep_result_t _tx_link(HCP_comm_t *hcp_comm);
|
||||
|
||||
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 bmlite_init_cmd(HCP_comm_t *hcp_comm, uint16_t cmd, uint16_t arg_key)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
|
||||
_HCP_cmd_t *out = (_HCP_cmd_t *)hcp_comm->pkt_buffer;
|
||||
out->cmd = cmd;
|
||||
out->args_nr = 0;
|
||||
hcp_comm->pkt_size = 4;
|
||||
|
||||
if(arg_key != ARG_NONE) {
|
||||
bep_result = bmlite_add_arg(hcp_comm, arg_key, NULL, 0);
|
||||
if(bep_result) {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
}
|
||||
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_add_arg(HCP_comm_t *hcp_comm, uint16_t arg_type, void *arg_data, uint16_t arg_size)
|
||||
{
|
||||
if(hcp_comm->pkt_size + 4 + arg_size > hcp_comm->pkt_size_max) {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, FPC_BEP_RESULT_NO_MEMORY);
|
||||
return FPC_BEP_RESULT_NO_MEMORY;
|
||||
}
|
||||
|
||||
((_HCP_cmd_t *)hcp_comm->pkt_buffer)->args_nr++;
|
||||
_CMD_arg_t *args = (_CMD_arg_t *)(&hcp_comm->pkt_buffer[hcp_comm->pkt_size]);
|
||||
args->arg = arg_type;
|
||||
args->size = arg_size;
|
||||
if(arg_size) {
|
||||
memcpy(&args->pld, arg_data, arg_size);
|
||||
}
|
||||
hcp_comm->pkt_size += 4 + arg_size;
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_get_arg(HCP_comm_t *hcp_comm, uint16_t arg_type)
|
||||
{
|
||||
uint16_t i = 0;
|
||||
uint8_t *buffer = hcp_comm->pkt_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 && (uint32_t)(pdata - buffer) <= hcp_comm->pkt_size) {
|
||||
_CMD_arg_t *parg = (_CMD_arg_t *)pdata;
|
||||
if(parg->arg == arg_type) {
|
||||
hcp_comm->arg.size = parg->size;
|
||||
hcp_comm->arg.data = parg->pld;
|
||||
return FPC_BEP_RESULT_OK;
|
||||
} else {
|
||||
i++;
|
||||
pdata += 4 + parg->size;
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore missing ARG_RESULT because some command return result other way
|
||||
// if (arg_type != ARG_RESULT) {
|
||||
bmlite_on_error(BMLITE_ERROR_GET_ARG, FPC_BEP_RESULT_INVALID_ARGUMENT);
|
||||
// }
|
||||
return FPC_BEP_RESULT_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_copy_arg(HCP_comm_t *hcp_comm, uint16_t arg_key, void *arg_data, uint16_t arg_data_size)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
bep_result = bmlite_get_arg(hcp_comm, arg_key);
|
||||
if(bep_result == FPC_BEP_RESULT_OK) {
|
||||
if(arg_data == NULL) {
|
||||
bmlite_on_error(BMLITE_ERROR_GET_ARG, FPC_BEP_RESULT_NO_MEMORY);
|
||||
return FPC_BEP_RESULT_NO_MEMORY;
|
||||
}
|
||||
memcpy(arg_data, hcp_comm->arg.data, HCP_MIN(arg_data_size, hcp_comm->arg.size));
|
||||
} else {
|
||||
bmlite_on_error(BMLITE_ERROR_GET_ARG, FPC_BEP_RESULT_INVALID_ARGUMENT);
|
||||
return FPC_BEP_RESULT_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_tranceive(HCP_comm_t *hcp_comm)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
|
||||
bep_result = bmlite_send(hcp_comm);
|
||||
if (bep_result == FPC_BEP_RESULT_OK) {
|
||||
bep_result = bmlite_receive(hcp_comm);
|
||||
|
||||
if (bmlite_get_arg(hcp_comm, ARG_RESULT) == FPC_BEP_RESULT_OK) {
|
||||
hcp_comm->bep_result = *(int8_t*)hcp_comm->arg.data;
|
||||
} else {
|
||||
hcp_comm->bep_result = FPC_BEP_RESULT_OK;
|
||||
}
|
||||
}
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_receive(HCP_comm_t *hcp_comm)
|
||||
{
|
||||
fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK;
|
||||
fpc_bep_result_t com_result = FPC_BEP_RESULT_OK;
|
||||
uint16_t seq_nr = 0;
|
||||
uint16_t seq_len = 1;
|
||||
uint8_t *p = hcp_comm->pkt_buffer;
|
||||
_HPC_pkt_t *pkt = (_HPC_pkt_t *)hcp_comm->txrx_buffer;
|
||||
uint16_t buf_len = 0;
|
||||
|
||||
while(seq_nr < seq_len) {
|
||||
bep_result = _rx_link(hcp_comm);
|
||||
|
||||
if (!bep_result) {
|
||||
seq_nr = pkt->t_seq_nr;
|
||||
seq_len = pkt->t_seq_len;
|
||||
if(pkt->t_size != pkt->lnk_size - 6) {
|
||||
com_result = FPC_BEP_RESULT_IO_ERROR;
|
||||
continue;
|
||||
}
|
||||
if(buf_len + pkt->t_size < hcp_comm->pkt_size_max) {
|
||||
memcpy(p, &pkt->t_pld, pkt->t_size);
|
||||
p += pkt->t_size;
|
||||
buf_len += pkt->t_size;
|
||||
} else {
|
||||
com_result = FPC_BEP_RESULT_NO_MEMORY;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
if (seq_len > 1)
|
||||
LOG_DEBUG("Received data chunk %d of %d\n", seq_nr, seq_len);
|
||||
#endif
|
||||
} else {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
}
|
||||
|
||||
hcp_comm->pkt_size = buf_len;
|
||||
if(com_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, com_result);
|
||||
}
|
||||
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) {
|
||||
LOG_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) {
|
||||
// LOG_DEBUG("S: Invalid size %d, larger than MTU %d.\n", size, MTU);
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, FPC_BEP_RESULT_IO_ERROR);
|
||||
return FPC_BEP_RESULT_IO_ERROR;
|
||||
}
|
||||
|
||||
hcp_comm->read(size + 4, hcp_comm->txrx_buffer + 4, 100, NULL);
|
||||
|
||||
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) {
|
||||
LOG_DEBUG("CRC mismatch. Calculated %08X, received %08X\n", crc_calc, crc);
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, FPC_BEP_RESULT_IO_ERROR);
|
||||
return FPC_BEP_RESULT_IO_ERROR;
|
||||
}
|
||||
|
||||
// Send Ack
|
||||
hcp_comm->write(4, (uint8_t *)&fpc_com_ack, 0, NULL);
|
||||
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_send(HCP_comm_t *hcp_comm)
|
||||
{
|
||||
uint16_t seq_nr = 1;
|
||||
fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK;
|
||||
uint16_t data_left = hcp_comm->pkt_size;
|
||||
uint8_t *p = hcp_comm->pkt_buffer;
|
||||
|
||||
_HPC_pkt_t *phy_frm = (_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;
|
||||
|
||||
phy_frm->lnk_chn = 0;
|
||||
phy_frm->t_seq_len = seq_len;
|
||||
|
||||
for (seq_nr = 1; seq_nr <= seq_len && !bep_result; seq_nr++) {
|
||||
phy_frm->t_seq_nr = seq_nr;
|
||||
if (data_left < app_mtu) {
|
||||
phy_frm->t_size = data_left;
|
||||
} else {
|
||||
phy_frm->t_size = app_mtu;
|
||||
}
|
||||
memcpy(&phy_frm->t_pld, p, phy_frm->t_size);
|
||||
phy_frm->lnk_size = phy_frm->t_size + 6;
|
||||
p += phy_frm->t_size;
|
||||
data_left -= phy_frm->t_size;
|
||||
|
||||
bep_result = _tx_link(hcp_comm);
|
||||
}
|
||||
|
||||
if(bep_result) {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, bep_result);
|
||||
}
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
static fpc_bep_result_t _tx_link(HCP_comm_t *hcp_comm)
|
||||
{
|
||||
fpc_bep_result_t bep_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 + pkt->lnk_size + 4) = crc_calc;
|
||||
uint16_t size = pkt->lnk_size + 8;
|
||||
|
||||
bep_result = hcp_comm->write(size, hcp_comm->txrx_buffer, 0, NULL);
|
||||
|
||||
// Wait for ACK
|
||||
uint32_t ack;
|
||||
bep_result = hcp_comm->read(4, (uint8_t *)&ack, 500, NULL);
|
||||
if (bep_result == FPC_BEP_RESULT_TIMEOUT) {
|
||||
LOG_DEBUG("ASK read timeout\n");
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, FPC_BEP_RESULT_TIMEOUT);
|
||||
return FPC_BEP_RESULT_IO_ERROR;
|
||||
}
|
||||
|
||||
if(ack != fpc_com_ack) {
|
||||
return FPC_BEP_RESULT_IO_ERROR;
|
||||
}
|
||||
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
@ -1,102 +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.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for BM-Lite applications
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file platform.c
|
||||
* @brief Platform specific functions
|
||||
*/
|
||||
#ifdef DEBUG_COMM
|
||||
#include <stdio.h>
|
||||
#define LOG_DEBUG(...) printf(__VA_ARGS__)
|
||||
#else
|
||||
#define LOG_DEBUG(...)
|
||||
#endif
|
||||
|
||||
#include "fpc_bep_types.h"
|
||||
#include "platform.h"
|
||||
#include "bmlite_hal.h"
|
||||
|
||||
fpc_bep_result_t platform_init(void *params)
|
||||
{
|
||||
fpc_bep_result_t result;
|
||||
result = hal_board_init(params);
|
||||
if(result == FPC_BEP_RESULT_OK) {
|
||||
hal_timebase_init();
|
||||
platform_bmlite_reset();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void platform_bmlite_reset(void)
|
||||
{
|
||||
hal_bmlite_reset(true);
|
||||
hal_timebase_busy_wait(100);
|
||||
hal_bmlite_reset(false);
|
||||
hal_timebase_busy_wait(100);
|
||||
}
|
||||
|
||||
fpc_bep_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
void *session)
|
||||
{
|
||||
uint8_t buff[size];
|
||||
#ifdef DEBUG_COMM
|
||||
LOG_DEBUG("-> ");
|
||||
for (int i=0; i<size; i++)
|
||||
LOG_DEBUG("%02X ", data[i]);
|
||||
LOG_DEBUG("\n");
|
||||
#endif
|
||||
|
||||
return hal_bmlite_spi_write_read((uint8_t *)data, buff, size, false);
|
||||
}
|
||||
|
||||
fpc_bep_result_t platform_bmlite_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
void *session)
|
||||
{
|
||||
volatile uint32_t start_time = hal_timebase_get_tick();
|
||||
volatile uint32_t curr_time = start_time;
|
||||
// Wait for BM_Lite Ready for timeout or indefinitely if timeout is 0
|
||||
while (!hal_bmlite_get_status() &&
|
||||
(!timeout || (curr_time = hal_timebase_get_tick()) - start_time < timeout)) {
|
||||
if(hal_check_button_pressed()) {
|
||||
return FPC_BEP_RESULT_TIMEOUT;
|
||||
}
|
||||
}
|
||||
if(timeout && curr_time - start_time >= timeout) {
|
||||
return FPC_BEP_RESULT_TIMEOUT;
|
||||
}
|
||||
|
||||
uint8_t buff[size];
|
||||
fpc_bep_result_t res = hal_bmlite_spi_write_read(buff, data, size, false);
|
||||
|
||||
#ifdef DEBUG_COMM
|
||||
LOG_DEBUG("<- ");
|
||||
for (int i=0; i<size; i++)
|
||||
LOG_DEBUG("%02X ", data[i]);
|
||||
LOG_DEBUG("\n");
|
||||
#endif
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
__attribute__((weak)) uint32_t hal_check_button_pressed()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1,15 +1,6 @@
|
||||
# Binary sources
|
||||
VPATH += $(DEPTH)../HAL_Driver
|
||||
|
||||
NHAL = $(DEPTH)../HAL_Driver
|
||||
C_INC += -I$(DEPTH)../HAL_Driver/inc
|
||||
|
||||
VPATH += $(NHAL)
|
||||
|
||||
C_INC += -I$(NHAL)/inc
|
||||
|
||||
LDFLAGS += -lwiringPi -L$(NHAL)/lib/
|
||||
|
||||
# Source Folders
|
||||
VPATH += $(NHAL)/src/
|
||||
|
||||
# C Sources
|
||||
C_SRCS += $(notdir $(wildcard $(NHAL)/src/*.c))
|
||||
LDFLAGS += -lwiringPi -L$(DEPTH)../HAL_Driver/lib/
|
||||
|
||||
@ -1,98 +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.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for FPC BM-Lite applications
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file platform_linux.c
|
||||
* @brief Linux platform specific functions
|
||||
*/
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <termios.h>
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "bmlite_hal.h"
|
||||
#include "platform_rpi.h"
|
||||
#include "platform.h"
|
||||
|
||||
hal_tick_t hal_timebase_get_tick(void)
|
||||
{
|
||||
struct timeval current_time;
|
||||
uint64_t time_in_ms;
|
||||
|
||||
gettimeofday(¤t_time, NULL);
|
||||
/* Seconds and microseconds are converted to milliseconds */
|
||||
time_in_ms = current_time.tv_usec / 1000 + current_time.tv_sec * 1000;
|
||||
|
||||
return time_in_ms;
|
||||
}
|
||||
|
||||
void hal_timebase_busy_wait(uint32_t ms)
|
||||
{
|
||||
usleep(ms * 1000);
|
||||
}
|
||||
|
||||
void rpi_clear_screen(void)
|
||||
{
|
||||
system("clear");
|
||||
}
|
||||
|
||||
void hal_timebase_init()
|
||||
{
|
||||
}
|
||||
|
||||
fpc_bep_result_t hal_board_init(void *params)
|
||||
{
|
||||
rpi_initparams_t *p = (rpi_initparams_t *)params;
|
||||
switch (p->iface) {
|
||||
case SPI_INTERFACE:
|
||||
if(!rpi_spi_init(p->baudrate)) {
|
||||
printf("SPI initialization failed\n");
|
||||
return FPC_BEP_RESULT_INTERNAL_ERROR;
|
||||
}
|
||||
break;
|
||||
case COM_INTERFACE:
|
||||
if (!rpi_com_init(p->port, p->baudrate, p->timeout)) {
|
||||
printf("Com initialization failed\n");
|
||||
return FPC_BEP_RESULT_INTERNAL_ERROR;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("Interface not specified'n");
|
||||
return FPC_BEP_RESULT_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
if (p->iface == COM_INTERFACE) {
|
||||
p->hcp_comm->read = rpi_com_receive;
|
||||
p->hcp_comm->write = rpi_com_send;
|
||||
} else {
|
||||
p->hcp_comm->read = platform_bmlite_receive;
|
||||
p->hcp_comm->write = platform_bmlite_send;
|
||||
}
|
||||
|
||||
p->hcp_comm->phy_rx_timeout = p->timeout*1000;
|
||||
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
174
hcp/LICENSE.txt
Normal file
@ -0,0 +1,174 @@
|
||||
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.
|
||||
1733
hcp/doc/img/hcp.eps
Normal file
BIN
hcp/doc/img/hcp.pdf
Normal file
247
hcp/doc/img/hcp.svg
Normal file
@ -0,0 +1,247 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Genererad av Microsoft Visio, SVG-export hcp.svg Command -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
|
||||
xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="7.20333in" height="3.1672in"
|
||||
viewBox="0 0 518.64 228.038" xml:space="preserve" color-interpolation-filters="sRGB" class="st6">
|
||||
<v:documentProperties v:langID="1053" v:metric="true" v:viewMarkup="false">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
|
||||
</v:userDefs>
|
||||
</v:documentProperties>
|
||||
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
.st1 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
|
||||
.st2 {fill:#f9c499;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
|
||||
.st3 {fill:#000000;font-family:Calibri Light;font-size:0.916672em}
|
||||
.st4 {fill:#fbd7bb;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
|
||||
.st5 {font-size:1em}
|
||||
.st6 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
|
||||
]]>
|
||||
</style>
|
||||
|
||||
<g v:mID="10" v:index="3" v:groupContext="foregroundPage">
|
||||
<title>HCP 2.0</title>
|
||||
<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
|
||||
v:shadowOffsetY="-8.50394"/>
|
||||
<v:layer v:name="Koppling" v:index="0"/>
|
||||
<g id="shape1054-1" v:mID="1054" v:groupContext="shape" transform="translate(18.375,323.765) scale(1,-1)">
|
||||
<title>Side brace</title>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="TxtW" v:val="VT0(0.55555555555556):29"/>
|
||||
<v:ud v:nameU="TxtA" v:val="VT0(1.5707963267949):37"/>
|
||||
<v:ud v:nameU="TxtAState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="TxtWState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:val="VT0(0.19685039370079):24"/>
|
||||
<v:ud v:nameU="PosCH1" v:prompt="Constrains X postion of Control Handle #1" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="PosCH2" v:prompt="Constrains Y postion of Control Handle #2" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="Scale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="AntiScale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
<v:ud v:nameU="TxtW" v:prompt="" v:val="VT0(0.76388888888889):29"/>
|
||||
<v:ud v:nameU="MaxRadius" v:prompt="" v:val="VT0(0.40135476746623):1"/>
|
||||
</v:userDefs>
|
||||
<path d="M0 199.14 L0 209.61 A18.4249 18.4249 -180 0 0 18.43 228.04 L318.9 228.04 A18.4249 18.4249 0 0 1 337.32 246.46
|
||||
A18.4249 18.4249 0 0 1 355.75 228.04 L463.46 228.04 A18.4249 18.4249 -180 0 0 481.89 209.61 L481.89 199.14"
|
||||
class="st1"/>
|
||||
</g>
|
||||
<g id="group1056-4" transform="translate(18.375,-18.375)" v:mID="1056" v:groupContext="group">
|
||||
<title>Ark.1056</title>
|
||||
<g id="shape1020-5" v:mID="1020" v:groupContext="shape" transform="translate(0,-56.6929)">
|
||||
<title>Ark.1020</title>
|
||||
<desc>Argument 1</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="80.315" cy="213.865" width="160.63" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="160.63" height="28.3465" class="st2"/>
|
||||
<text x="54.12" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Argument 1</text> </g>
|
||||
<g id="shape1028-8" v:mID="1028" v:groupContext="shape" transform="translate(53.5433,-2.30713E-06)">
|
||||
<title>Ark.1028</title>
|
||||
<desc>2 Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="10.72" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>2 Bytes</text> </g>
|
||||
<g id="shape1030-11" v:mID="1030" v:groupContext="shape" transform="translate(107.087,-2.30713E-06)">
|
||||
<title>Ark.1030</title>
|
||||
<desc>Size Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="4.92" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Size Bytes</text> </g>
|
||||
<g id="shape1031-14" v:mID="1031" v:groupContext="shape" transform="translate(2.87601E-14,-2.30713E-06)">
|
||||
<title>Ark.1031</title>
|
||||
<desc>2 Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="10.72" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>2 Bytes</text> </g>
|
||||
<g id="shape1032-17" v:mID="1032" v:groupContext="shape" transform="translate(53.5433,-28.3465)">
|
||||
<title>Ark.1032</title>
|
||||
<desc>Data Size</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="6.62" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Data Size</text> </g>
|
||||
<g id="shape1033-20" v:mID="1033" v:groupContext="shape" transform="translate(107.087,-28.3465)">
|
||||
<title>Ark.1033</title>
|
||||
<desc>Data</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="16.45" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Data</text> </g>
|
||||
<g id="shape1034-23" v:mID="1034" v:groupContext="shape" transform="translate(0,-28.3465)">
|
||||
<title>Ark.1034</title>
|
||||
<desc>Key</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="18.85" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Key</text> </g>
|
||||
<g id="shape1035-26" v:mID="1035" v:groupContext="shape" transform="translate(160.63,-56.6929)">
|
||||
<title>Ark.1035</title>
|
||||
<desc>Argument 2</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="80.315" cy="213.865" width="160.63" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="160.63" height="28.3465" class="st2"/>
|
||||
<text x="54.12" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Argument 2</text> </g>
|
||||
<g id="shape1036-29" v:mID="1036" v:groupContext="shape" transform="translate(214.173,0)">
|
||||
<title>Ark.1036</title>
|
||||
<desc>2 Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="10.72" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>2 Bytes</text> </g>
|
||||
<g id="shape1037-32" v:mID="1037" v:groupContext="shape" transform="translate(267.717,0)">
|
||||
<title>Ark.1037</title>
|
||||
<desc>Size Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="4.92" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Size Bytes</text> </g>
|
||||
<g id="shape1038-35" v:mID="1038" v:groupContext="shape" transform="translate(160.63,0)">
|
||||
<title>Ark.1038</title>
|
||||
<desc>2 Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="10.72" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>2 Bytes</text> </g>
|
||||
<g id="shape1039-38" v:mID="1039" v:groupContext="shape" transform="translate(214.173,-28.3465)">
|
||||
<title>Ark.1039</title>
|
||||
<desc>Data Size</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="6.62" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Data Size</text> </g>
|
||||
<g id="shape1040-41" v:mID="1040" v:groupContext="shape" transform="translate(267.717,-28.3465)">
|
||||
<title>Ark.1040</title>
|
||||
<desc>Data</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="16.45" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Data</text> </g>
|
||||
<g id="shape1041-44" v:mID="1041" v:groupContext="shape" transform="translate(160.63,-28.3465)">
|
||||
<title>Ark.1041</title>
|
||||
<desc>Key</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="18.85" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Key</text> </g>
|
||||
<g id="shape1042-47" v:mID="1042" v:groupContext="shape" transform="translate(321.26,-56.6929)">
|
||||
<title>Ark.1042</title>
|
||||
<desc>Argument N</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="80.315" cy="213.865" width="160.63" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="160.63" height="28.3465" class="st2"/>
|
||||
<text x="53.4" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Argument N</text> </g>
|
||||
<g id="shape1043-50" v:mID="1043" v:groupContext="shape" transform="translate(374.803,0)">
|
||||
<title>Ark.1043</title>
|
||||
<desc>2 Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="10.72" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>2 Bytes</text> </g>
|
||||
<g id="shape1044-53" v:mID="1044" v:groupContext="shape" transform="translate(428.346,0)">
|
||||
<title>Ark.1044</title>
|
||||
<desc>Size Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="4.92" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Size Bytes</text> </g>
|
||||
<g id="shape1045-56" v:mID="1045" v:groupContext="shape" transform="translate(321.26,0)">
|
||||
<title>Ark.1045</title>
|
||||
<desc>2 Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="10.72" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>2 Bytes</text> </g>
|
||||
<g id="shape1046-59" v:mID="1046" v:groupContext="shape" transform="translate(374.803,-28.3465)">
|
||||
<title>Ark.1046</title>
|
||||
<desc>Data Size</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="6.62" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Data Size</text> </g>
|
||||
<g id="shape1047-62" v:mID="1047" v:groupContext="shape" transform="translate(428.346,-28.3465)">
|
||||
<title>Ark.1047</title>
|
||||
<desc>Data</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="16.45" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Data</text> </g>
|
||||
<g id="shape1048-65" v:mID="1048" v:groupContext="shape" transform="translate(321.26,-28.3465)">
|
||||
<title>Ark.1048</title>
|
||||
<desc>Key</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="26.7717" cy="213.865" width="53.55" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="53.5433" height="28.3465" class="st4"/>
|
||||
<text x="18.85" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Key</text> </g>
|
||||
</g>
|
||||
<g id="group1057-68" transform="translate(78.8947,-152.97)" v:mID="1057" v:groupContext="group">
|
||||
<title>Ark.1057</title>
|
||||
<g id="shape1000-69" v:mID="1000" v:groupContext="shape">
|
||||
<title>Ark.1000</title>
|
||||
<desc>2 Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="213.865" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="85.0394" height="28.3465" class="st4"/>
|
||||
<text x="26.47" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>2 Bytes</text> </g>
|
||||
<g id="shape1001-72" v:mID="1001" v:groupContext="shape" transform="translate(85.0394,0)">
|
||||
<title>Ark.1001</title>
|
||||
<desc>2 Byte</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="213.865" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="85.0394" height="28.3465" class="st4"/>
|
||||
<text x="28.6" y="217.17" class="st3" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>2<tspan
|
||||
class="st5" v:langID="1053"> </tspan><tspan class="st5" v:langID="1053">Byte</tspan></text> </g>
|
||||
<g id="shape1003-77" v:mID="1003" v:groupContext="shape" transform="translate(3.19744E-14,-28.3465)">
|
||||
<title>Ark.1003</title>
|
||||
<desc>Command</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="213.865" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="85.0394" height="28.3465" class="st2"/>
|
||||
<text x="19.7" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Command</text> </g>
|
||||
<g id="shape1004-80" v:mID="1004" v:groupContext="shape" transform="translate(85.0394,-28.3465)">
|
||||
<title>Ark.1004</title>
|
||||
<desc>Number of Arguments</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="213.865" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="85.0394" height="28.3465" class="st2"/>
|
||||
<text x="18.58" y="210.57" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Number of <tspan
|
||||
x="18.23" dy="1.2em" class="st5">Arguments</tspan></text> </g>
|
||||
<g id="shape1007-84" v:mID="1007" v:groupContext="shape" transform="translate(170.079,-28.3465)">
|
||||
<title>Ark.1007</title>
|
||||
<desc>Payload</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="106.299" cy="213.865" width="212.6" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="212.598" height="28.3465" class="st2"/>
|
||||
<text x="88.96" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Payload</text> </g>
|
||||
<g id="shape1055-87" v:mID="1055" v:groupContext="shape" transform="translate(170.079,0)">
|
||||
<title>Ark.1055</title>
|
||||
<desc>0-65526 (16363 for TLS) Bytes</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="106.299" cy="213.865" width="212.6" height="28.3465"/>
|
||||
<rect x="0" y="199.692" width="212.598" height="28.3465" class="st4"/>
|
||||
<text x="39.81" y="217.17" class="st3" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>0-65526 (16363 for TLS) Bytes</text> </g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 16 KiB |
1019
hcp/doc/img/stack.eps
Normal file
BIN
hcp/doc/img/stack.pdf
Normal file
236
hcp/doc/img/stack.svg
Normal file
@ -0,0 +1,236 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Genererad av Microsoft Visio, SVG-export stack.svg BEP Stack -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
|
||||
xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="9.41488in" height="2.47892in"
|
||||
viewBox="0 0 677.871 178.482" xml:space="preserve" color-interpolation-filters="sRGB" class="st8">
|
||||
<v:documentProperties v:langID="1053" v:metric="true" v:viewMarkup="false">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
|
||||
</v:userDefs>
|
||||
</v:documentProperties>
|
||||
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
.st1 {stroke:#7c7c7c;stroke-width:0.25}
|
||||
.st2 {fill:#000000;font-family:Calibri Light;font-size:0.916672em}
|
||||
.st3 {fill:#ffd965;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
|
||||
.st4 {fill:#92cddc;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
|
||||
.st5 {fill:#f9c499;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
|
||||
.st6 {fill:#c4d6a0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
|
||||
.st7 {fill:#bfbfbf;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
|
||||
.st8 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
|
||||
]]>
|
||||
</style>
|
||||
|
||||
<g v:mID="5" v:index="2" v:groupContext="foregroundPage">
|
||||
<title>Layer Structure</title>
|
||||
<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
|
||||
v:shadowOffsetY="-8.50394"/>
|
||||
<v:layer v:name="Koppling" v:index="0"/>
|
||||
<g id="shape23-1" v:mID="23" v:groupContext="shape" transform="translate(364.302,131.761) rotate(-90) scale(-1,1)">
|
||||
<title>Side brace.23</title>
|
||||
<desc>Physical Layer</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="TxtW" v:val="VT0(0.55555555555556):29"/>
|
||||
<v:ud v:nameU="TxtA" v:val="VT0(1.5707963267949):37"/>
|
||||
<v:ud v:nameU="TxtAState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="TxtWState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:val="VT0(0.19685039370079):24"/>
|
||||
<v:ud v:nameU="PosCH1" v:prompt="Constrains X postion of Control Handle #1" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="PosCH2" v:prompt="Constrains Y postion of Control Handle #2" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="Scale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="AntiScale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
<v:ud v:nameU="TxtW" v:prompt="" v:val="VT0(1.5277777777778):3"/>
|
||||
<v:ud v:nameU="TxtWState" v:prompt="" v:val="VT0(2):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:prompt="" v:val="VT0(0.098425196850393):1"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
|
||||
<v:textRect cx="14.1607" cy="240.563" width="110.01" height="21.204" transform="rotate(90)"/>
|
||||
<path d="M0 135.96 L0 171.4 A7.08022 7.08022 -180 0 0 7.08 178.48 A7.08022 7.08022 0 0 1 14.16 185.56 A7.08022 7.08022
|
||||
0 0 1 21.24 178.48 L21.27 178.48 A7.08022 7.08022 -180 0 0 28.35 171.4 L28.35 135.96" class="st1"/>
|
||||
<text x="189.56" y="17.46" transform="rotate(-90) scale(-1,1)" class="st2" v:langID="1053"><v:paragraph/><v:tabList/>Physical Layer</text> </g>
|
||||
<g id="shape24-5" v:mID="24" v:groupContext="shape" transform="translate(364.302,103.414) rotate(-90) scale(-1,1)">
|
||||
<title>Side brace.24</title>
|
||||
<desc>Link Layer</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="TxtW" v:val="VT0(0.55555555555556):29"/>
|
||||
<v:ud v:nameU="TxtA" v:val="VT0(1.5707963267949):37"/>
|
||||
<v:ud v:nameU="TxtAState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="TxtWState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:val="VT0(0.19685039370079):24"/>
|
||||
<v:ud v:nameU="PosCH1" v:prompt="Constrains X postion of Control Handle #1" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="PosCH2" v:prompt="Constrains Y postion of Control Handle #2" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="Scale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="AntiScale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
<v:ud v:nameU="TxtW" v:prompt="" v:val="VT0(1.5277777777778):3"/>
|
||||
<v:ud v:nameU="TxtWState" v:prompt="" v:val="VT0(2):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:prompt="" v:val="VT0(0.098425196850393):1"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
|
||||
<v:textRect cx="14.1607" cy="240.563" width="110.01" height="21.204" transform="rotate(90)"/>
|
||||
<path d="M0 135.96 L0 171.4 A7.08022 7.08022 -180 0 0 7.08 178.48 A7.08022 7.08022 0 0 1 14.16 185.56 A7.08022 7.08022
|
||||
0 0 1 21.24 178.48 L21.27 178.48 A7.08022 7.08022 -180 0 0 28.35 171.4 L28.35 135.96" class="st1"/>
|
||||
<text x="189.56" y="17.46" transform="rotate(-90) scale(-1,1)" class="st2" v:langID="1053"><v:paragraph/><v:tabList/>Link Layer</text> </g>
|
||||
<g id="shape25-9" v:mID="25" v:groupContext="shape" transform="translate(364.302,75.0679) rotate(-90) scale(-1,1)">
|
||||
<title>Side brace.25</title>
|
||||
<desc>Transport Layer</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="TxtW" v:val="VT0(0.55555555555556):29"/>
|
||||
<v:ud v:nameU="TxtA" v:val="VT0(1.5707963267949):37"/>
|
||||
<v:ud v:nameU="TxtAState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="TxtWState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:val="VT0(0.19685039370079):24"/>
|
||||
<v:ud v:nameU="PosCH1" v:prompt="Constrains X postion of Control Handle #1" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="PosCH2" v:prompt="Constrains Y postion of Control Handle #2" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="Scale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="AntiScale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
<v:ud v:nameU="TxtW" v:prompt="" v:val="VT0(1.5277777777778):3"/>
|
||||
<v:ud v:nameU="TxtWState" v:prompt="" v:val="VT0(2):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:prompt="" v:val="VT0(0.098425196850393):1"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
|
||||
<v:textRect cx="14.1607" cy="240.563" width="110.01" height="21.204" transform="rotate(90)"/>
|
||||
<path d="M0 135.96 L0 171.4 A7.08022 7.08022 -180 0 0 7.08 178.48 A7.08022 7.08022 0 0 1 14.16 185.56 A7.08022 7.08022
|
||||
0 0 1 21.24 178.48 L21.27 178.48 A7.08022 7.08022 -180 0 0 28.35 171.4 L28.35 135.96" class="st1"/>
|
||||
<text x="189.56" y="17.46" transform="rotate(-90) scale(-1,1)" class="st2" v:langID="1053"><v:paragraph/><v:tabList/>Transport Layer</text> </g>
|
||||
<g id="shape26-13" v:mID="26" v:groupContext="shape" transform="translate(364.302,46.7215) rotate(-90) scale(-1,1)">
|
||||
<title>Side brace.26</title>
|
||||
<desc>Application Layer</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="TxtW" v:val="VT0(0.55555555555556):29"/>
|
||||
<v:ud v:nameU="TxtA" v:val="VT0(1.5707963267949):37"/>
|
||||
<v:ud v:nameU="TxtAState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="TxtWState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:val="VT0(0.19685039370079):24"/>
|
||||
<v:ud v:nameU="PosCH1" v:prompt="Constrains X postion of Control Handle #1" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="PosCH2" v:prompt="Constrains Y postion of Control Handle #2" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="Scale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="AntiScale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
<v:ud v:nameU="TxtW" v:prompt="" v:val="VT0(1.5277777777778):3"/>
|
||||
<v:ud v:nameU="TxtWState" v:prompt="" v:val="VT0(2):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:prompt="" v:val="VT0(0.098425196850393):1"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
|
||||
<v:textRect cx="14.1732" cy="240.569" width="110.01" height="21.204" transform="rotate(90)"/>
|
||||
<path d="M0 79.24 L0 171.4 A7.0865 7.0865 -180 0 0 7.09 178.48 A7.0865 7.0865 0 0 1 14.17 185.57 A7.0865 7.0865 0 0 1
|
||||
21.26 178.48 A7.0865 7.0865 -180 0 0 28.35 171.4 L28.35 79.24" class="st1"/>
|
||||
<text x="189.57" y="17.47" transform="rotate(-90) scale(-1,1)" class="st2" v:langID="1053"><v:paragraph/><v:tabList/>Application Layer</text> </g>
|
||||
<g id="group32-17" transform="translate(131.761,-75.0679)" v:mID="32" v:groupContext="group">
|
||||
<title>Ark.32</title>
|
||||
<g id="shape6-18" v:mID="6" v:groupContext="shape" transform="translate(113.386,0)">
|
||||
<title>Ark.6</title>
|
||||
<desc>Seq Len</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="28.3465" cy="164.309" width="56.7" height="28.3465"/>
|
||||
<rect x="0" y="150.136" width="56.6929" height="28.3465" class="st3"/>
|
||||
<text x="11.16" y="167.61" class="st2" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Seq Len</text> </g>
|
||||
<g id="shape7-21" v:mID="7" v:groupContext="shape" transform="translate(170.079,0)">
|
||||
<title>Ark.7</title>
|
||||
<desc>Payload</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="70.8661" cy="164.309" width="141.74" height="28.3465"/>
|
||||
<rect x="0" y="150.136" width="141.732" height="28.3465" class="st3"/>
|
||||
<text x="53.53" y="167.61" class="st2" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Payload</text> </g>
|
||||
<g id="shape30-24" v:mID="30" v:groupContext="shape" transform="translate(56.6929,0)">
|
||||
<title>Ark.30</title>
|
||||
<desc>Seq Nr</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="28.3465" cy="164.309" width="56.7" height="28.3465"/>
|
||||
<rect x="0" y="150.136" width="56.6929" height="28.3465" class="st3"/>
|
||||
<text x="13.63" y="167.61" class="st2" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Seq Nr</text> </g>
|
||||
<g id="shape31-27" v:mID="31" v:groupContext="shape">
|
||||
<title>Ark.31</title>
|
||||
<desc>Size</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="28.3465" cy="164.309" width="56.7" height="28.3465"/>
|
||||
<rect x="0" y="150.136" width="56.6929" height="28.3465" class="st3"/>
|
||||
<text x="19.76" y="167.61" class="st2" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Size</text> </g>
|
||||
</g>
|
||||
<g id="group33-30" transform="translate(18.375,-46.7215)" v:mID="33" v:groupContext="group">
|
||||
<title>Ark.33</title>
|
||||
<g id="shape3-31" v:mID="3" v:groupContext="shape" transform="translate(56.687,0)">
|
||||
<title>Ark.3</title>
|
||||
<desc>Size</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="28.3435" cy="164.322" width="56.69" height="28.3214"/>
|
||||
<rect x="0" y="150.161" width="56.687" height="28.3214" class="st4"/>
|
||||
<text x="19.76" y="167.62" class="st2" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Size</text> </g>
|
||||
<g id="shape4-34" v:mID="4" v:groupContext="shape" transform="translate(113.374,0)">
|
||||
<title>Ark.4</title>
|
||||
<desc>Payload</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="155.889" cy="164.322" width="311.78" height="28.3214"/>
|
||||
<rect x="0" y="150.161" width="311.779" height="28.3214" class="st4"/>
|
||||
<text x="138.55" y="167.62" class="st2" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Payload</text> </g>
|
||||
<g id="shape5-37" v:mID="5" v:groupContext="shape" transform="translate(425.153,0)">
|
||||
<title>Ark.5</title>
|
||||
<desc>CRC</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="28.3435" cy="164.322" width="56.69" height="28.3214"/>
|
||||
<rect x="0" y="150.161" width="56.687" height="28.3214" class="st4"/>
|
||||
<text x="19.53" y="167.62" class="st2" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>CRC</text> </g>
|
||||
<g id="shape29-40" v:mID="29" v:groupContext="shape" transform="translate(0,-1.21527E-07)">
|
||||
<title>Ark.29</title>
|
||||
<desc>Channel</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="28.3435" cy="164.322" width="56.69" height="28.3214"/>
|
||||
<rect x="0" y="150.161" width="56.687" height="28.3214" class="st4"/>
|
||||
<text x="10.31" y="167.62" class="st2" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Channel</text> </g>
|
||||
</g>
|
||||
<g id="shape34-43" v:mID="34" v:groupContext="shape" transform="translate(301.84,-131.761)">
|
||||
<title>Ark.34</title>
|
||||
<desc>HCP</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="70.8661" cy="164.309" width="141.74" height="28.3465"/>
|
||||
<rect x="0" y="150.136" width="141.732" height="28.3465" class="st5"/>
|
||||
<text x="61.72" y="167.61" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>HCP</text> </g>
|
||||
<g id="shape35-46" v:mID="35" v:groupContext="shape" transform="translate(364.302,18.375) rotate(-90) scale(-1,1)">
|
||||
<title>Side brace.35</title>
|
||||
<desc>HCP</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="TxtW" v:val="VT0(0.55555555555556):29"/>
|
||||
<v:ud v:nameU="TxtA" v:val="VT0(1.5707963267949):37"/>
|
||||
<v:ud v:nameU="TxtAState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="TxtWState" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:val="VT0(0.19685039370079):24"/>
|
||||
<v:ud v:nameU="PosCH1" v:prompt="Constrains X postion of Control Handle #1" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="PosCH2" v:prompt="Constrains Y postion of Control Handle #2" v:val="VT0(0):26"/>
|
||||
<v:ud v:nameU="Scale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="AntiScale" v:val="VT0(1):26"/>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
<v:ud v:nameU="TxtW" v:prompt="" v:val="VT0(1.5277777777778):3"/>
|
||||
<v:ud v:nameU="TxtWState" v:prompt="" v:val="VT0(2):26"/>
|
||||
<v:ud v:nameU="MaxRadius" v:prompt="" v:val="VT0(0.098425196850393):1"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
|
||||
<v:textRect cx="14.1732" cy="240.569" width="110.01" height="21.204" transform="rotate(90)"/>
|
||||
<path d="M0 79.24 L0 171.4 A7.0865 7.0865 -180 0 0 7.09 178.48 A7.0865 7.0865 0 0 1 14.17 185.57 A7.0865 7.0865 0 0 1
|
||||
21.26 178.48 A7.0865 7.0865 -180 0 0 28.35 171.4 L28.35 79.24" class="st1"/>
|
||||
<text x="189.57" y="17.47" transform="rotate(-90) scale(-1,1)" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>HCP</text> </g>
|
||||
<g id="group37-50" transform="translate(18.375,-18.375)" v:mID="37" v:groupContext="group">
|
||||
<title>Ark.37</title>
|
||||
<g id="shape2-51" v:mID="2" v:groupContext="shape">
|
||||
<title>Ark.2</title>
|
||||
<desc>Link Data</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="240.945" cy="164.309" width="481.89" height="28.3465"/>
|
||||
<rect x="0" y="150.136" width="481.89" height="28.3465" class="st6"/>
|
||||
<text x="220.58" y="167.61" class="st2" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Link Data</text> </g>
|
||||
</g>
|
||||
<g id="group38-54" transform="translate(301.84,-103.414)" v:mID="38" v:groupContext="group">
|
||||
<title>Ark.38</title>
|
||||
<g id="shape1-55" v:mID="1" v:groupContext="shape">
|
||||
<title>Ark.1</title>
|
||||
<desc>Cleartext / Security</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="70.8661" cy="164.309" width="141.74" height="28.3465"/>
|
||||
<rect x="0" y="150.136" width="141.732" height="28.3465" class="st7"/>
|
||||
<text x="28.65" y="167.61" class="st2" v:langID="1053"><v:paragraph v:horizAlign="1"/><v:tabList/>Cleartext / Security</text> </g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
49
hcp/doc/md/1_stack.md
Normal file
@ -0,0 +1,49 @@
|
||||
\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.
|
||||
28
hcp/doc/md/2_hcpframe.md
Normal file
@ -0,0 +1,28 @@
|
||||
\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.
|
||||
89
hcp/doc/md/4_biometrics.md
Normal file
@ -0,0 +1,89 @@
|
||||
\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
|
||||
***
|
||||
36
hcp/doc/md/5_image.md
Normal file
@ -0,0 +1,36 @@
|
||||
\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
|
||||
***
|
||||
40
hcp/doc/md/6_template.md
Normal file
@ -0,0 +1,40 @@
|
||||
\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
|
||||
***
|
||||
69
hcp/doc/md/7_storage.md
Normal file
@ -0,0 +1,69 @@
|
||||
\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
|
||||
***
|
||||
28
hcp/doc/md/8_sensor.md
Normal file
@ -0,0 +1,28 @@
|
||||
\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
|
||||
***
|
||||
10
hcp/doc/md/9_device.md
Normal file
@ -0,0 +1,10 @@
|
||||
\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
|
||||
***
|
||||
13
hcp/doxygen/HCP.html
Normal file
@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<script type='text/javascript'>
|
||||
location.replace('html/index.html');
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<p>You will be redirected automatically, otherwise please
|
||||
<a href="html/index.html">click here</a>.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
BIN
hcp/doxygen/HCP.pdf
Normal file
86
hcp/doxygen/html/1__stack_8md.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/1_stack.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('1__stack_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/1_stack.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="1__stack_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="1__stack_8md.html">1_stack.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
hcp/doxygen/html/1__stack_8md_source.html
Normal file
86
hcp/doxygen/html/2__hcpframe_8md.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/2_hcpframe.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('2__hcpframe_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/2_hcpframe.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="2__hcpframe_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="2__hcpframe_8md.html">2_hcpframe.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
hcp/doxygen/html/2__hcpframe_8md_source.html
Normal file
@ -0,0 +1,84 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/2_hcpframe.md Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('2__hcpframe_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/2_hcpframe.md</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="2__hcpframe_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> \page hcpf HCP frame format</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> The Host Communication Protocol (HCP) describes a general way of sending commands and information</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> between devices.</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> \image html hcp.svg "HCP frame format"</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> \image latex hcp.eps "HCP frame format"</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> \section cmd Command</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> The Commands define the general action that is going to be executed. However, each command</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> can have several Arguments each with data attached.</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> | CMD | Num Args | Payload |</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> | ------- | -------- | -------- |</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> | 2 bytes | 2 bytes | xx bytes |</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> All fields are using unsigned data types.</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> \section arg Argument</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> The Argument is used as a complement to the command if it is needed and can contain arbitrary data.</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> | ARG | Size | Data |</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> | ------- | --------| ---------- |</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> | 2 bytes | 2 bytes | size bytes |</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> All fields are using unsigned data types.</div></div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="2__hcpframe_8md.html">2_hcpframe.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
86
hcp/doxygen/html/4__biometrics_8md.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/4_biometrics.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('4__biometrics_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/4_biometrics.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="4__biometrics_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="4__biometrics_8md.html">4_biometrics.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
hcp/doxygen/html/4__biometrics_8md_source.html
Normal file
86
hcp/doxygen/html/5__image_8md.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/5_image.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('5__image_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/5_image.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="5__image_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="5__image_8md.html">5_image.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
hcp/doxygen/html/5__image_8md_source.html
Normal file
@ -0,0 +1,84 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/5_image.md Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('5__image_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/5_image.md</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="5__image_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> \page image Image handling</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> \section create_i Create</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> @startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> Host --> BioMcu: CMD_IMAGE \nARG_CREATE</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> hnote over BioMcu : image</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> @enduml</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> ***</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> \section upload_i Upload</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> @startuml</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> participant Host</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> participant BioMcu</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> hnote over BioMcu : image</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> Host --> BioMcu: CMD_IMAGE \nARG_UPLOAD</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result] \nARG_DATA[image]</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> hnote over Host : image</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> @enduml</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> ***</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> \section download_i Download</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> @startuml</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> participant Host</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> participant BioMcu</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> hnote over Host : image</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> Host --> BioMcu: CMD_IMAGE \nARG_DOWNLOAD \nARG_DATA[image]</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> hnote over BioMcu : image</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> @enduml</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> ***</div></div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="5__image_8md.html">5_image.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
86
hcp/doxygen/html/6__template_8md.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/6_template.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('6__template_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/6_template.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="6__template_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="6__template_8md.html">6_template.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
hcp/doxygen/html/6__template_8md_source.html
Normal file
@ -0,0 +1,84 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/6_template.md Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('6__template_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/6_template.md</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="6__template_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> \page template Template handling</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> \section upload_t Upload</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> @startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> participant Host</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> participant BioMcu</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> hnote over BioMcu : template</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> Host --> BioMcu: CMD_TEMPLATE \nARG_UPLOAD</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result] \nARG_DATA[template]</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> hnote over Host : template</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> @enduml</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> ***</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> \section download_t Download</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> @startuml</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> participant Host</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> participant BioMcu</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> hnote over Host : template</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> Host --> BioMcu: CMD_TEMPLATE \nARG_DOWNLOAD \nARG_DATA[template]</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> hnote over BioMcu : template</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> @enduml</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> ***</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> \section save_t Save</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> @startuml</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> participant Host</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> participant BioMcu</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> hnote over BioMcu : template</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> Host --> BioMcu: CMD_TEMPLATE \nARG_SAVE \nARG_ID[id]</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> hnote over BioMcu : template[id] (nvm)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> @enduml</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> ***</div></div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="6__template_8md.html">6_template.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
86
hcp/doxygen/html/7__storage_8md.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/7_storage.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('7__storage_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/7_storage.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="7__storage_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="7__storage_8md.html">7_storage.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
hcp/doxygen/html/7__storage_8md_source.html
Normal file
86
hcp/doxygen/html/8__sensor_8md.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/8_sensor.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('8__sensor_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/8_sensor.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="8__sensor_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="8__sensor_8md.html">8_sensor.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
hcp/doxygen/html/8__sensor_8md_source.html
Normal file
@ -0,0 +1,84 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/8_sensor.md Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('8__sensor_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/8_sensor.md</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="8__sensor_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> \page sensor Sensor operations</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> \section wait_up_s Wait for finger up</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> @startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> Host --> BioMcu: CMD_WAIT \nARG_FINGER_UP \nARG_TIMEOUT[timeout]</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> ... Wait for finger up...</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result]</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> @enduml</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> ***</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> \section wait_down_s Wait for finger down</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> @startuml</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> Host --> BioMcu: CMD_WAIT \nARG_FINGER_DOWN \nARG_TIMEOUT[timeout]</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> ... Wait for finger down...</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result]</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> @enduml</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> ***</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> \section sensor_reset_s Reset sensor</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> @startuml</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> Host --> BioMcu : CMD_SENSOR \nARG_RESET</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> rnote over BioMcu : fpc_bep_sensor_reset</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> BioMcu --> Host : CMD_SENSOR \nARG_RESULT[bep_result]</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> @enduml</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> ***</div></div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="8__sensor_8md.html">8_sensor.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
86
hcp/doxygen/html/9__device_8md.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/9_device.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('9__device_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/9_device.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="9__device_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="9__device_8md.html">9_device.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
hcp/doxygen/html/9__device_8md_source.html
Normal file
@ -0,0 +1,84 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/9_device.md Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('9__device_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/9_device.md</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="9__device_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> \page device Device operations</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> \section reset_d Reset device</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> @startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> Host --> BioMcu: CMD_RESET</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> BioMcu --> Host: CMD_RESET \nARG_RESULT[bep_result]</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> rnote over BioMcu: Reset</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> @enduml</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> ***</div></div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="9__device_8md.html">9_device.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
94
hcp/doxygen/html/annotated.html
Normal file
@ -0,0 +1,94 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: Data Structures</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="classes.html"><span>Data Structure Index</span></a></li>
|
||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('annotated.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Data Structures</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
|
||||
<table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__com__chain.html" target="_self">fpc_com_chain</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__com__chain__private.html" target="_self">fpc_com_chain_private</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__com__packet__link.html" target="_self">fpc_com_packet_link</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__com__packet__transport.html" target="_self">fpc_com_packet_transport</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__hcp__arg__data.html" target="_self">fpc_hcp_arg_data</a></td><td class="desc">Command Argument </td></tr>
|
||||
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__hcp__packet.html" target="_self">fpc_hcp_packet</a></td><td class="desc">Application Command Packet </td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
9
hcp/doxygen/html/annotated_dup.js
Normal file
@ -0,0 +1,9 @@
|
||||
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" ]
|
||||
];
|
||||
BIN
hcp/doxygen/html/arrowdown.png
Normal file
|
After Width: | Height: | Size: 246 B |
BIN
hcp/doxygen/html/arrowright.png
Normal file
|
After Width: | Height: | Size: 229 B |
BIN
hcp/doxygen/html/bc_s.png
Normal file
|
After Width: | Height: | Size: 676 B |
BIN
hcp/doxygen/html/bdwn.png
Normal file
|
After Width: | Height: | Size: 147 B |
90
hcp/doxygen/html/bio.html
Normal file
@ -0,0 +1,90 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: Biometrics</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('bio.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Biometrics </div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><h1><a class="anchor" id="capture_b"></a>
|
||||
Capture</h1>
|
||||
<hr/>
|
||||
<h1><a class="anchor" id="extract_b"></a>
|
||||
Extract</h1>
|
||||
<hr/>
|
||||
<h1><a class="anchor" id="enroll_b"></a>
|
||||
Enroll</h1>
|
||||
<hr/>
|
||||
<h1><a class="anchor" id="identify_b"></a>
|
||||
Identify</h1>
|
||||
<hr/>
|
||||
</div></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="index.html">Main</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
93
hcp/doxygen/html/classes.html
Normal file
@ -0,0 +1,93 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: Data Structure Index</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="classes.html"><span>Data Structure Index</span></a></li>
|
||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('classes.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Data Structure Index</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="qindex"><a class="qindex" href="#letter_F">F</a></div>
|
||||
<table class="classindex">
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_f"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  f  </div></td></tr></table>
|
||||
</td><td valign="top"><a class="el" href="structfpc__com__chain__private.html">fpc_com_chain_private</a>   </td><td valign="top"><a class="el" href="structfpc__com__packet__transport.html">fpc_com_packet_transport</a>   </td><td valign="top"><a class="el" href="structfpc__hcp__packet.html">fpc_hcp_packet</a>   </td></tr>
|
||||
<tr><td valign="top"><a class="el" href="structfpc__com__packet__link.html">fpc_com_packet_link</a>   </td><td valign="top"><a class="el" href="structfpc__hcp__arg__data.html">fpc_hcp_arg_data</a>   </td><td></td></tr>
|
||||
<tr><td valign="top"><a class="el" href="structfpc__com__chain.html">fpc_com_chain</a>   </td><td></td><td></td><td></td></tr>
|
||||
<tr><td></td><td></td><td></td><td></td></tr>
|
||||
</table>
|
||||
<div class="qindex"><a class="qindex" href="#letter_F">F</a></div>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
BIN
hcp/doxygen/html/closed.png
Normal file
|
After Width: | Height: | Size: 132 B |
81
hcp/doxygen/html/device.html
Normal file
@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: Device operations</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('device.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Device operations </div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><h1><a class="anchor" id="reset_d"></a>
|
||||
Reset device</h1>
|
||||
<hr/>
|
||||
</div></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="index.html">Main</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
74
hcp/doxygen/html/dir_000001_000000.html
Normal file
@ -0,0 +1,74 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: src -> inc Relation</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_68267d1309a1af8e8297ef4c3efbcdba.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="contents">
|
||||
<h3>src → inc Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in src</th><th class="dirtab">Includes file in inc</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="fpc__com__link_8c.html">fpc_com_link.c</a></td><td class="dirtab"><a class="el" href="fpc__com__link_8h.html">fpc_com_link.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="fpc__com__transport_8c.html">fpc_com_transport.c</a></td><td class="dirtab"><a class="el" href="fpc__com__link_8h.html">fpc_com_link.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="fpc__com__transport_8c.html">fpc_com_transport.c</a></td><td class="dirtab"><a class="el" href="fpc__com__transport_8h.html">fpc_com_transport.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="fpc__hcp_8c.html">fpc_hcp.c</a></td><td class="dirtab"><a class="el" href="fpc__hcp_8h.html">fpc_hcp.h</a></td></tr></table></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
103
hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
Normal file
@ -0,0 +1,103 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: src Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li class="current"><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_68267d1309a1af8e8297ef4c3efbcdba.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">src Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for src:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg" width="83" height="155"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:fpc__com__link_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__link_8c.html">fpc_com_link.c</a> <a href="fpc__com__link_8c_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__link_8c"><td class="mdescLeft"> </td><td class="mdescRight">Communication link layer implementation. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__com__transport_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__transport_8c.html">fpc_com_transport.c</a> <a href="fpc__com__transport_8c_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__transport_8c"><td class="mdescLeft"> </td><td class="mdescRight">Communication transport layer implementation. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__hcp_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__hcp_8c.html">fpc_hcp.c</a> <a href="fpc__hcp_8c_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__hcp_8c"><td class="mdescLeft"> </td><td class="mdescRight">Host Communication Protocol implementation. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
6
hcp/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js
Normal file
@ -0,0 +1,6 @@
|
||||
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" ]
|
||||
];
|
||||
@ -0,0 +1,5 @@
|
||||
<map id="src" name="src">
|
||||
<area shape="rect" id="node1" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" title="src" alt="" coords="5,5,77,53"/>
|
||||
<area shape="rect" id="node2" href="dir_bfccd401955b95cf8c75461437045ac0.html" title="inc" alt="" coords="5,101,77,149"/>
|
||||
<area shape="rect" id="edge1-headlabel" href="dir_000001_000000.html" title="4" alt="" coords="46,76,54,90"/>
|
||||
</map>
|
||||
@ -0,0 +1 @@
|
||||
078edd713872194e35fdc26e1b4695d3
|
||||
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
|
||||
-->
|
||||
<!-- Title: src Pages: 1 -->
|
||||
<svg width="62pt" height="116pt"
|
||||
viewBox="0.00 0.00 62.00 116.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 112)">
|
||||
<title>src</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-112 58,-112 58,4 -4,4"/>
|
||||
<!-- dir_68267d1309a1af8e8297ef4c3efbcdba -->
|
||||
<g id="node1" class="node"><title>dir_68267d1309a1af8e8297ef4c3efbcdba</title>
|
||||
<g id="a_node1"><a xlink:href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_top" xlink:title="src">
|
||||
<polygon fill="#eeeeff" stroke="black" points="54,-108 0,-108 0,-72 54,-72 54,-108"/>
|
||||
<text text-anchor="middle" x="27" y="-87.5" font-family="Helvetica,sans-Serif" font-size="10.00">src</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- dir_bfccd401955b95cf8c75461437045ac0 -->
|
||||
<g id="node2" class="node"><title>dir_bfccd401955b95cf8c75461437045ac0</title>
|
||||
<g id="a_node2"><a xlink:href="dir_bfccd401955b95cf8c75461437045ac0.html" target="_top" xlink:title="inc">
|
||||
<polygon fill="none" stroke="black" points="54,-36 0,-36 0,-0 54,-0 54,-36"/>
|
||||
<text text-anchor="middle" x="27" y="-15.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- dir_68267d1309a1af8e8297ef4c3efbcdba->dir_bfccd401955b95cf8c75461437045ac0 -->
|
||||
<g id="edge1" class="edge"><title>dir_68267d1309a1af8e8297ef4c3efbcdba->dir_bfccd401955b95cf8c75461437045ac0</title>
|
||||
<path fill="none" stroke="black" d="M27,-71.6966C27,-63.9827 27,-54.7125 27,-46.1124"/>
|
||||
<polygon fill="black" stroke="black" points="30.5001,-46.1043 27,-36.1043 23.5001,-46.1044 30.5001,-46.1043"/>
|
||||
<g id="a_edge1-headlabel"><a xlink:href="dir_000001_000000.html" target="_top" xlink:title="4">
|
||||
<text text-anchor="middle" x="33.3393" y="-47.199" font-family="Helvetica,sans-Serif" font-size="10.00">4</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
109
hcp/doxygen/html/dir_bfccd401955b95cf8c75461437045ac0.html
Normal file
@ -0,0 +1,109 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: inc Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li class="current"><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_bfccd401955b95cf8c75461437045ac0.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">inc Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:fpc__com__chain_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__chain_8h.html">fpc_com_chain.h</a> <a href="fpc__com__chain_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__chain_8h"><td class="mdescLeft"> </td><td class="mdescRight">Communication chain type definitions. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__com__link_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__link_8h.html">fpc_com_link.h</a> <a href="fpc__com__link_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__link_8h"><td class="mdescLeft"> </td><td class="mdescRight">Communication link interface. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__com__packets_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__packets_8h.html">fpc_com_packets.h</a> <a href="fpc__com__packets_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__packets_8h"><td class="mdescLeft"> </td><td class="mdescRight">Communication packet type definitions. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__com__result_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__result_8h.html">fpc_com_result.h</a> <a href="fpc__com__result_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__result_8h"><td class="mdescLeft"> </td><td class="mdescRight">Communication result type definitions. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__com__transport_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__transport_8h.html">fpc_com_transport.h</a> <a href="fpc__com__transport_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__transport_8h"><td class="mdescLeft"> </td><td class="mdescRight">Communication transport interface. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__hcp_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__hcp_8h.html">fpc_hcp.h</a> <a href="fpc__hcp_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__hcp_8h"><td class="mdescLeft"> </td><td class="mdescRight">Host Communication Protocol interface. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__hcp__common_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__hcp__common_8h.html">fpc_hcp_common.h</a> <a href="fpc__hcp__common_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__hcp__common_8h"><td class="mdescLeft"> </td><td class="mdescRight">Host Communication Protocol common type definitions. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_bfccd401955b95cf8c75461437045ac0.html">inc</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
10
hcp/doxygen/html/dir_bfccd401955b95cf8c75461437045ac0.js
Normal file
@ -0,0 +1,10 @@
|
||||
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" ]
|
||||
];
|
||||
BIN
hcp/doxygen/html/doc.png
Normal file
|
After Width: | Height: | Size: 746 B |
1475
hcp/doxygen/html/doxygen.css
Normal file
BIN
hcp/doxygen/html/doxygen.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
104
hcp/doxygen/html/dynsections.js
Normal file
@ -0,0 +1,104 @@
|
||||
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<level+1) {
|
||||
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||
a.html('▼');
|
||||
$(this).show();
|
||||
} else if (l==level+1) {
|
||||
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||
a.html('►');
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
function toggleFolder(id)
|
||||
{
|
||||
// the clicked row
|
||||
var currentRow = $('#row_'+id);
|
||||
|
||||
// all rows after the clicked row
|
||||
var rows = currentRow.nextAll("tr");
|
||||
|
||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||
|
||||
// only match elements AFTER this one (can't hide elements before)
|
||||
var childRows = rows.filter(function() { return this.id.match(re); });
|
||||
|
||||
// first row is visible we are HIDING
|
||||
if (childRows.filter(':first').is(':visible')===true) {
|
||||
// replace down arrow by right arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
currentRowSpans.filter(".arrow").html('►');
|
||||
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||
} else { // we are SHOWING
|
||||
// replace right arrow by down arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||
currentRowSpans.filter(".arrow").html('▼');
|
||||
// replace down arrows by right arrows for child rows
|
||||
var childRowsSpans = childRows.find("span");
|
||||
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
childRowsSpans.filter(".arrow").html('►');
|
||||
childRows.show(); //show all children
|
||||
}
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
|
||||
function toggleInherit(id)
|
||||
{
|
||||
var rows = $('tr.inherit.'+id);
|
||||
var img = $('tr.inherit_header.'+id+' img');
|
||||
var src = $(img).attr('src');
|
||||
if (rows.filter(':first').is(':visible')===true) {
|
||||
rows.css('display','none');
|
||||
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
rows.css('display','table-row'); // using show() causes jump in firefox
|
||||
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
$('.code,.codeRef').each(function() {
|
||||
$(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
|
||||
$(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
|
||||
});
|
||||
});
|
||||
99
hcp/doxygen/html/files.html
Normal file
@ -0,0 +1,99 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: File List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li class="current"><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('files.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">File List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
|
||||
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')"> </span><a class="el" href="dir_bfccd401955b95cf8c75461437045ac0.html" target="_self">inc</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__chain_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__chain_8h.html" target="_self">fpc_com_chain.h</a></td><td class="desc">Communication chain type definitions </td></tr>
|
||||
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__link_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__link_8h.html" target="_self">fpc_com_link.h</a></td><td class="desc">Communication link interface </td></tr>
|
||||
<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__packets_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__packets_8h.html" target="_self">fpc_com_packets.h</a></td><td class="desc">Communication packet type definitions </td></tr>
|
||||
<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__result_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__result_8h.html" target="_self">fpc_com_result.h</a></td><td class="desc">Communication result type definitions </td></tr>
|
||||
<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__transport_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__transport_8h.html" target="_self">fpc_com_transport.h</a></td><td class="desc">Communication transport interface </td></tr>
|
||||
<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__hcp_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__hcp_8h.html" target="_self">fpc_hcp.h</a></td><td class="desc">Host Communication Protocol interface </td></tr>
|
||||
<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__hcp__common_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__hcp__common_8h.html" target="_self">fpc_hcp_common.h</a></td><td class="desc">Host Communication Protocol common type definitions </td></tr>
|
||||
<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')"> </span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__link_8c_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__link_8c.html" target="_self">fpc_com_link.c</a></td><td class="desc">Communication link layer implementation </td></tr>
|
||||
<tr id="row_1_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__transport_8c_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__transport_8c.html" target="_self">fpc_com_transport.c</a></td><td class="desc">Communication transport layer implementation </td></tr>
|
||||
<tr id="row_1_2_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__hcp_8c_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__hcp_8c.html" target="_self">fpc_hcp.c</a></td><td class="desc">Host Communication Protocol implementation </td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
5
hcp/doxygen/html/files.js
Normal file
@ -0,0 +1,5 @@
|
||||
var files =
|
||||
[
|
||||
[ "inc", "dir_bfccd401955b95cf8c75461437045ac0.html", "dir_bfccd401955b95cf8c75461437045ac0" ],
|
||||
[ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ]
|
||||
];
|
||||
BIN
hcp/doxygen/html/folderclosed.png
Normal file
|
After Width: | Height: | Size: 616 B |
BIN
hcp/doxygen/html/folderopen.png
Normal file
|
After Width: | Height: | Size: 597 B |
197
hcp/doxygen/html/fpc__com__chain_8h.html
Normal file
@ -0,0 +1,197 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: inc/fpc_com_chain.h File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('fpc__com__chain_8h.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#nested-classes">Data Structures</a> |
|
||||
<a href="#typedef-members">Typedefs</a> |
|
||||
<a href="#enum-members">Enumerations</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">fpc_com_chain.h File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>Communication chain type definitions.
|
||||
<a href="#details">More...</a></p>
|
||||
<div class="textblock"><code>#include <stdint.h></code><br />
|
||||
<code>#include "<a class="el" href="fpc__com__result_8h_source.html">fpc_com_result.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="fpc__hcp__common_8h_source.html">fpc_hcp_common.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="fpc__com__packets_8h_source.html">fpc_com_packets.h</a>"</code><br />
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
Include dependency graph for fpc_com_chain.h:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="fpc__com__chain_8h__incl.svg" width="472" height="187"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
This graph shows which files directly or indirectly include this file:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="fpc__com__chain_8h__dep__incl.svg" width="456" height="187"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p><a href="fpc__com__chain_8h_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||
Data Structures</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpc__com__chain__private.html">fpc_com_chain_private</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpc__com__chain.html">fpc_com_chain</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
|
||||
Typedefs</h2></td></tr>
|
||||
<tr class="memitem:a0983b70df0d560f35537acc24ecc0d0d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structfpc__com__chain__private.html">fpc_com_chain_private</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__chain_8h.html#a0983b70df0d560f35537acc24ecc0d0d">fpc_com_chain_private_t</a></td></tr>
|
||||
<tr class="memdesc:a0983b70df0d560f35537acc24ecc0d0d"><td class="mdescLeft"> </td><td class="mdescRight">Communication chain private variables. <a href="#a0983b70df0d560f35537acc24ecc0d0d">More...</a><br /></td></tr>
|
||||
<tr class="separator:a0983b70df0d560f35537acc24ecc0d0d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a1530dd4e8729e5f546a96abc5ac0a6de"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structfpc__com__chain.html">fpc_com_chain</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a></td></tr>
|
||||
<tr class="memdesc:a1530dd4e8729e5f546a96abc5ac0a6de"><td class="mdescLeft"> </td><td class="mdescRight">Communication chain. <a href="#a1530dd4e8729e5f546a96abc5ac0a6de">More...</a><br /></td></tr>
|
||||
<tr class="separator:a1530dd4e8729e5f546a96abc5ac0a6de"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
|
||||
Enumerations</h2></td></tr>
|
||||
<tr class="memitem:aed3b93f1297ab69d5bd87603d4d00005"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005">fpc_com_chain_dir_t</a> { <br />
|
||||
  <a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005afe8870bc644ab21ffad73d3045febd4d">FPC_COM_CHAIN_TX</a> = 0,
|
||||
<br />
|
||||
  <a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005aa50bc934637a1ceea907810ccdd36e1c">FPC_COM_CHAIN_RX</a> = 1
|
||||
<br />
|
||||
}<tr class="memdesc:aed3b93f1297ab69d5bd87603d4d00005"><td class="mdescLeft"> </td><td class="mdescRight">Communication chain direction type. <a href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005">More...</a><br /></td></tr>
|
||||
</td></tr>
|
||||
<tr class="separator:aed3b93f1297ab69d5bd87603d4d00005"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Communication chain type definitions. </p>
|
||||
|
||||
<p>Definition in file <a class="el" href="fpc__com__chain_8h_source.html">fpc_com_chain.h</a>.</p>
|
||||
</div><h2 class="groupheader">Typedef Documentation</h2>
|
||||
<a class="anchor" id="a0983b70df0d560f35537acc24ecc0d0d"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">typedef struct <a class="el" href="structfpc__com__chain__private.html">fpc_com_chain_private</a> <a class="el" href="fpc__com__chain_8h.html#a0983b70df0d560f35537acc24ecc0d0d">fpc_com_chain_private_t</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Communication chain private variables. </p>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__chain_8h_source.html#l00034">34</a> of file <a class="el" href="fpc__com__chain_8h_source.html">fpc_com_chain.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a1530dd4e8729e5f546a96abc5ac0a6de"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">typedef struct <a class="el" href="structfpc__com__chain.html">fpc_com_chain</a> <a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Communication chain. </p>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__chain_8h_source.html#l00048">48</a> of file <a class="el" href="fpc__com__chain_8h_source.html">fpc_com_chain.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<h2 class="groupheader">Enumeration Type Documentation</h2>
|
||||
<a class="anchor" id="aed3b93f1297ab69d5bd87603d4d00005"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">enum <a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005">fpc_com_chain_dir_t</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Communication chain direction type. </p>
|
||||
<table class="fieldtable">
|
||||
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="aed3b93f1297ab69d5bd87603d4d00005afe8870bc644ab21ffad73d3045febd4d"></a>FPC_COM_CHAIN_TX </td><td class="fielddoc">
|
||||
</td></tr>
|
||||
<tr><td class="fieldname"><a class="anchor" id="aed3b93f1297ab69d5bd87603d4d00005aa50bc934637a1ceea907810ccdd36e1c"></a>FPC_COM_CHAIN_RX </td><td class="fielddoc">
|
||||
</td></tr>
|
||||
</table>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__chain_8h_source.html#l00149">149</a> of file <a class="el" href="fpc__com__chain_8h_source.html">fpc_com_chain.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_bfccd401955b95cf8c75461437045ac0.html">inc</a></li><li class="navelem"><a class="el" href="fpc__com__chain_8h.html">fpc_com_chain.h</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
11
hcp/doxygen/html/fpc__com__chain_8h.js
Normal file
@ -0,0 +1,11 @@
|
||||
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 ]
|
||||
] ]
|
||||
];
|
||||
8
hcp/doxygen/html/fpc__com__chain_8h__dep__incl.map
Normal file
@ -0,0 +1,8 @@
|
||||
<map id="inc/fpc_com_chain.h" name="inc/fpc_com_chain.h">
|
||||
<area shape="rect" id="node2" href="$fpc__com__link_8h.html" title="Communication link interface. " alt="" coords="7,80,138,107"/>
|
||||
<area shape="rect" id="node5" href="$fpc__com__transport_8h.html" title="Communication transport interface. " alt="" coords="162,80,325,107"/>
|
||||
<area shape="rect" id="node6" href="$fpc__hcp_8h.html" title="Host Communication Protocol interface. " alt="" coords="349,80,449,107"/>
|
||||
<area shape="rect" id="node3" href="$fpc__com__link_8c.html" title="Communication link layer implementation. " alt="" coords="5,155,137,181"/>
|
||||
<area shape="rect" id="node4" href="$fpc__com__transport_8c.html" title="Communication transport layer implementation. " alt="" coords="162,155,325,181"/>
|
||||
<area shape="rect" id="node7" href="$fpc__hcp_8c.html" title="Host Communication Protocol implementation. " alt="" coords="349,155,450,181"/>
|
||||
</map>
|
||||
1
hcp/doxygen/html/fpc__com__chain_8h__dep__incl.md5
Normal file
@ -0,0 +1 @@
|
||||
1da3230b9ede79419647e0f9db2fcf4a
|
||||
101
hcp/doxygen/html/fpc__com__chain_8h__dep__incl.svg
Normal file
@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
|
||||
-->
|
||||
<!-- Title: inc/fpc_com_chain.h Pages: 1 -->
|
||||
<svg width="342pt" height="140pt"
|
||||
viewBox="0.00 0.00 341.50 140.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 136)">
|
||||
<title>inc/fpc_com_chain.h</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-136 337.5,-136 337.5,4 -4,4"/>
|
||||
<!-- Node1 -->
|
||||
<g id="node1" class="node"><title>Node1</title>
|
||||
<polygon fill="#bfbfbf" stroke="black" points="125,-112.5 125,-131.5 232,-131.5 232,-112.5 125,-112.5"/>
|
||||
<text text-anchor="middle" x="178.5" y="-119.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc/fpc_com_chain.h</text>
|
||||
</g>
|
||||
<!-- Node2 -->
|
||||
<g id="node2" class="node"><title>Node2</title>
|
||||
<g id="a_node2"><a xlink:href="fpc__com__link_8h.html" target="_top" xlink:title="Communication link interface. ">
|
||||
<polygon fill="white" stroke="black" points="1.5,-56.5 1.5,-75.5 99.5,-75.5 99.5,-56.5 1.5,-56.5"/>
|
||||
<text text-anchor="middle" x="50.5" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc/fpc_com_link.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node2 -->
|
||||
<g id="edge1" class="edge"><title>Node1->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M148.877,-108.503C124.881,-98.3795 91.716,-84.388 70.6871,-75.5164"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="147.644,-111.781 158.218,-112.444 150.365,-105.332 147.644,-111.781"/>
|
||||
</g>
|
||||
<!-- Node5 -->
|
||||
<g id="node5" class="node"><title>Node5</title>
|
||||
<g id="a_node5"><a xlink:href="fpc__com__transport_8h.html" target="_top" xlink:title="Communication transport interface. ">
|
||||
<polygon fill="white" stroke="black" points="117.5,-56.5 117.5,-75.5 239.5,-75.5 239.5,-56.5 117.5,-56.5"/>
|
||||
<text text-anchor="middle" x="178.5" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc/fpc_com_transport.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node5 -->
|
||||
<g id="edge4" class="edge"><title>Node1->Node5</title>
|
||||
<path fill="none" stroke="midnightblue" d="M178.5,-101.805C178.5,-92.9102 178.5,-82.7798 178.5,-75.7511"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="175,-102.083 178.5,-112.083 182,-102.083 175,-102.083"/>
|
||||
</g>
|
||||
<!-- Node6 -->
|
||||
<g id="node6" class="node"><title>Node6</title>
|
||||
<g id="a_node6"><a xlink:href="fpc__hcp_8h.html" target="_top" xlink:title="Host Communication Protocol interface. ">
|
||||
<polygon fill="white" stroke="black" points="258,-56.5 258,-75.5 333,-75.5 333,-56.5 258,-56.5"/>
|
||||
<text text-anchor="middle" x="295.5" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc/fpc_hcp.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node6 -->
|
||||
<g id="edge6" class="edge"><title>Node1->Node6</title>
|
||||
<path fill="none" stroke="midnightblue" d="M206.164,-108.232C228.049,-98.1312 257.997,-84.3091 277.048,-75.5164"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="204.652,-105.075 197.039,-112.444 207.585,-111.431 204.652,-105.075"/>
|
||||
</g>
|
||||
<!-- Node3 -->
|
||||
<g id="node3" class="node"><title>Node3</title>
|
||||
<g id="a_node3"><a xlink:href="fpc__com__link_8c.html" target="_top" xlink:title="Communication link layer implementation. ">
|
||||
<polygon fill="white" stroke="black" points="0,-0.5 0,-19.5 99,-19.5 99,-0.5 0,-0.5"/>
|
||||
<text text-anchor="middle" x="49.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">src/fpc_com_link.c</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node2->Node3 -->
|
||||
<g id="edge2" class="edge"><title>Node2->Node3</title>
|
||||
<path fill="none" stroke="midnightblue" d="M50.1445,-45.8045C49.9798,-36.9102 49.7922,-26.7798 49.6621,-19.7511"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="46.6502,-46.1495 50.3349,-56.083 53.649,-46.0199 46.6502,-46.1495"/>
|
||||
</g>
|
||||
<!-- Node4 -->
|
||||
<g id="node4" class="node"><title>Node4</title>
|
||||
<g id="a_node4"><a xlink:href="fpc__com__transport_8c.html" target="_top" xlink:title="Communication transport layer implementation. ">
|
||||
<polygon fill="white" stroke="black" points="117.5,-0.5 117.5,-19.5 239.5,-19.5 239.5,-0.5 117.5,-0.5"/>
|
||||
<text text-anchor="middle" x="178.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">src/fpc_com_transport.c</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node2->Node4 -->
|
||||
<g id="edge3" class="edge"><title>Node2->Node4</title>
|
||||
<path fill="none" stroke="midnightblue" d="M80.1226,-52.503C104.119,-42.3795 137.284,-28.388 158.313,-19.5164"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="78.6352,-49.3317 70.782,-56.4435 81.3561,-55.7813 78.6352,-49.3317"/>
|
||||
</g>
|
||||
<!-- Node5->Node4 -->
|
||||
<g id="edge5" class="edge"><title>Node5->Node4</title>
|
||||
<path fill="none" stroke="midnightblue" d="M178.5,-45.8045C178.5,-36.9102 178.5,-26.7798 178.5,-19.7511"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="175,-46.083 178.5,-56.083 182,-46.083 175,-46.083"/>
|
||||
</g>
|
||||
<!-- Node7 -->
|
||||
<g id="node7" class="node"><title>Node7</title>
|
||||
<g id="a_node7"><a xlink:href="fpc__hcp_8c.html" target="_top" xlink:title="Host Communication Protocol implementation. ">
|
||||
<polygon fill="white" stroke="black" points="257.5,-0.5 257.5,-19.5 333.5,-19.5 333.5,-0.5 257.5,-0.5"/>
|
||||
<text text-anchor="middle" x="295.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">src/fpc_hcp.c</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node6->Node7 -->
|
||||
<g id="edge7" class="edge"><title>Node6->Node7</title>
|
||||
<path fill="none" stroke="midnightblue" d="M295.5,-45.8045C295.5,-36.9102 295.5,-26.7798 295.5,-19.7511"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="292,-46.083 295.5,-56.083 299,-46.083 292,-46.083"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.7 KiB |
5
hcp/doxygen/html/fpc__com__chain_8h__incl.map
Normal file
@ -0,0 +1,5 @@
|
||||
<map id="inc/fpc_com_chain.h" name="inc/fpc_com_chain.h">
|
||||
<area shape="rect" id="node3" href="$fpc__com__result_8h.html" title="Communication result type definitions. " alt="" coords="24,80,147,107"/>
|
||||
<area shape="rect" id="node4" href="$fpc__hcp__common_8h.html" title="Host Communication Protocol common type definitions. " alt="" coords="331,80,467,107"/>
|
||||
<area shape="rect" id="node6" href="$fpc__com__packets_8h.html" title="Communication packet type definitions. " alt="" coords="171,80,307,107"/>
|
||||
</map>
|
||||
1
hcp/doxygen/html/fpc__com__chain_8h__incl.md5
Normal file
@ -0,0 +1 @@
|
||||
f3463291a698aa7de197e31a9e7ef155
|
||||
92
hcp/doxygen/html/fpc__com__chain_8h__incl.svg
Normal file
@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
|
||||
-->
|
||||
<!-- Title: inc/fpc_com_chain.h Pages: 1 -->
|
||||
<svg width="354pt" height="140pt"
|
||||
viewBox="0.00 0.00 353.98 140.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 136)">
|
||||
<title>inc/fpc_com_chain.h</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-136 349.98,-136 349.98,4 -4,4"/>
|
||||
<!-- Node1 -->
|
||||
<g id="node1" class="node"><title>Node1</title>
|
||||
<polygon fill="#bfbfbf" stroke="black" points="63.4799,-112.5 63.4799,-131.5 170.48,-131.5 170.48,-112.5 63.4799,-112.5"/>
|
||||
<text text-anchor="middle" x="116.98" y="-119.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc/fpc_com_chain.h</text>
|
||||
</g>
|
||||
<!-- Node2 -->
|
||||
<g id="node2" class="node"><title>Node2</title>
|
||||
<polygon fill="white" stroke="#bfbfbf" points="92.4799,-0.5 92.4799,-19.5 141.48,-19.5 141.48,-0.5 92.4799,-0.5"/>
|
||||
<text text-anchor="middle" x="116.98" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">stdint.h</text>
|
||||
</g>
|
||||
<!-- Node1->Node2 -->
|
||||
<g id="edge1" class="edge"><title>Node1->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M63.3021,-112.844C41.4095,-106.587 18.1815,-95.5315 4.9799,-76 -16.8395,-43.7186 42.2178,-25.3548 82.645,-16.8597"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="83.3345,-20.2912 92.4611,-14.9101 81.9708,-13.4253 83.3345,-20.2912"/>
|
||||
</g>
|
||||
<!-- Node3 -->
|
||||
<g id="node3" class="node"><title>Node3</title>
|
||||
<g id="a_node3"><a xlink:href="fpc__com__result_8h.html" target="_top" xlink:title="Communication result type definitions. ">
|
||||
<polygon fill="white" stroke="black" points="13.9799,-56.5 13.9799,-75.5 105.98,-75.5 105.98,-56.5 13.9799,-56.5"/>
|
||||
<text text-anchor="middle" x="59.9799" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_com_result.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node3 -->
|
||||
<g id="edge2" class="edge"><title>Node1->Node3</title>
|
||||
<path fill="none" stroke="midnightblue" d="M107.822,-112.324C99.4784,-104.42 86.9475,-92.5482 76.803,-82.9377"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="78.9712,-80.1705 69.3046,-75.8339 74.157,-85.2522 78.9712,-80.1705"/>
|
||||
</g>
|
||||
<!-- Node4 -->
|
||||
<g id="node4" class="node"><title>Node4</title>
|
||||
<g id="a_node4"><a xlink:href="fpc__hcp__common_8h.html" target="_top" xlink:title="Host Communication Protocol common type definitions. ">
|
||||
<polygon fill="white" stroke="black" points="243.98,-56.5 243.98,-75.5 345.98,-75.5 345.98,-56.5 243.98,-56.5"/>
|
||||
<text text-anchor="middle" x="294.98" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_hcp_common.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node4 -->
|
||||
<g id="edge4" class="edge"><title>Node1->Node4</title>
|
||||
<path fill="none" stroke="midnightblue" d="M145.185,-112.444C175.39,-103.28 223.491,-88.6876 257.009,-78.5192"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="258.354,-81.7688 266.907,-75.5164 256.322,-75.0703 258.354,-81.7688"/>
|
||||
</g>
|
||||
<!-- Node6 -->
|
||||
<g id="node6" class="node"><title>Node6</title>
|
||||
<g id="a_node6"><a xlink:href="fpc__com__packets_8h.html" target="_top" xlink:title="Communication packet type definitions. ">
|
||||
<polygon fill="white" stroke="black" points="123.98,-56.5 123.98,-75.5 225.98,-75.5 225.98,-56.5 123.98,-56.5"/>
|
||||
<text text-anchor="middle" x="174.98" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_com_packets.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node6 -->
|
||||
<g id="edge7" class="edge"><title>Node1->Node6</title>
|
||||
<path fill="none" stroke="midnightblue" d="M126.299,-112.324C134.872,-104.341 147.792,-92.3128 158.168,-82.6529"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="160.558,-85.2098 165.492,-75.8339 155.788,-80.0865 160.558,-85.2098"/>
|
||||
</g>
|
||||
<!-- Node3->Node2 -->
|
||||
<g id="edge3" class="edge"><title>Node3->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M69.1379,-56.324C77.4814,-48.4196 90.0123,-36.5482 100.157,-26.9377"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="102.803,-29.2522 107.655,-19.8339 97.9886,-24.1705 102.803,-29.2522"/>
|
||||
</g>
|
||||
<!-- Node4->Node2 -->
|
||||
<g id="edge5" class="edge"><title>Node4->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M266.775,-56.4435C235.504,-46.9567 185.051,-31.6507 151.458,-21.4595"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="152.199,-18.0269 141.613,-18.473 150.166,-24.7254 152.199,-18.0269"/>
|
||||
</g>
|
||||
<!-- Node5 -->
|
||||
<g id="node5" class="node"><title>Node5</title>
|
||||
<polygon fill="white" stroke="#bfbfbf" points="266.98,-0.5 266.98,-19.5 322.98,-19.5 322.98,-0.5 266.98,-0.5"/>
|
||||
<text text-anchor="middle" x="294.98" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">stdbool.h</text>
|
||||
</g>
|
||||
<!-- Node4->Node5 -->
|
||||
<g id="edge6" class="edge"><title>Node4->Node5</title>
|
||||
<path fill="none" stroke="midnightblue" d="M294.98,-56.083C294.98,-49.0059 294.98,-38.8611 294.98,-29.9865"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="298.48,-29.751 294.98,-19.7511 291.48,-29.7511 298.48,-29.751"/>
|
||||
</g>
|
||||
<!-- Node6->Node2 -->
|
||||
<g id="edge8" class="edge"><title>Node6->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M165.661,-56.324C157.087,-48.3414 144.168,-36.3128 133.792,-26.6529"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="136.172,-24.0865 126.468,-19.8339 131.402,-29.2098 136.172,-24.0865"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
109
hcp/doxygen/html/fpc__com__chain_8h_source.html
Normal file
235
hcp/doxygen/html/fpc__com__link_8c.html
Normal file
@ -0,0 +1,235 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: src/fpc_com_link.c File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('fpc__com__link_8c.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#func-members">Functions</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">fpc_com_link.c File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>Communication link layer implementation.
|
||||
<a href="#details">More...</a></p>
|
||||
<div class="textblock"><code>#include <string.h></code><br />
|
||||
<code>#include <stdlib.h></code><br />
|
||||
<code>#include "<a class="el" href="fpc__com__link_8h_source.html">fpc_com_link.h</a>"</code><br />
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
Include dependency graph for fpc_com_link.c:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="fpc__com__link_8c__incl.svg" width="551" height="336"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p><a href="fpc__com__link_8c_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
||||
Functions</h2></td></tr>
|
||||
<tr class="memitem:a43a8a308255ea41e7b7cdefd63a90d14"><td class="memItemLeft" align="right" valign="top"><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__link_8c.html#a43a8a308255ea41e7b7cdefd63a90d14">fpc_com_link_transmit</a> (<a class="el" href="fpc__com__packets_8h.html#af6fc3a46c87f1ad2a452eb822f2a0942">fpc_com_packet_link_t</a> *packet, <a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a> *chain)</td></tr>
|
||||
<tr class="memdesc:a43a8a308255ea41e7b7cdefd63a90d14"><td class="mdescLeft"> </td><td class="mdescRight">Sends a packet over the physical link in blocking mode. <a href="#a43a8a308255ea41e7b7cdefd63a90d14">More...</a><br /></td></tr>
|
||||
<tr class="separator:a43a8a308255ea41e7b7cdefd63a90d14"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ae64b80cd91fbfe44abc06dc52eacf739"><td class="memItemLeft" align="right" valign="top"><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__link_8c.html#ae64b80cd91fbfe44abc06dc52eacf739">fpc_com_link_receive</a> (<a class="el" href="fpc__com__packets_8h.html#af6fc3a46c87f1ad2a452eb822f2a0942">fpc_com_packet_link_t</a> *packet, <a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a> *chain)</td></tr>
|
||||
<tr class="memdesc:ae64b80cd91fbfe44abc06dc52eacf739"><td class="mdescLeft"> </td><td class="mdescRight">Receives a packet from the physical link. <a href="#ae64b80cd91fbfe44abc06dc52eacf739">More...</a><br /></td></tr>
|
||||
<tr class="separator:ae64b80cd91fbfe44abc06dc52eacf739"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a3e60e21a5ac4ad4881e4929de2f3c2f4"><td class="memItemLeft" align="right" valign="top">uint16_t </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__link_8c.html#a3e60e21a5ac4ad4881e4929de2f3c2f4">fpc_com_link_get_overhead</a> (uint16_t *offset)</td></tr>
|
||||
<tr class="memdesc:a3e60e21a5ac4ad4881e4929de2f3c2f4"><td class="mdescLeft"> </td><td class="mdescRight">Returns the overhead of the layer. <a href="#a3e60e21a5ac4ad4881e4929de2f3c2f4">More...</a><br /></td></tr>
|
||||
<tr class="separator:a3e60e21a5ac4ad4881e4929de2f3c2f4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Communication link layer implementation. </p>
|
||||
|
||||
<p>Definition in file <a class="el" href="fpc__com__link_8c_source.html">fpc_com_link.c</a>.</p>
|
||||
</div><h2 class="groupheader">Function Documentation</h2>
|
||||
<a class="anchor" id="a3e60e21a5ac4ad4881e4929de2f3c2f4"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">uint16_t fpc_com_link_get_overhead </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">uint16_t * </td>
|
||||
<td class="paramname"><em>offset</em></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Returns the overhead of the layer. </p>
|
||||
<dl class="params"><dt>Parameters</dt><dd>
|
||||
<table class="params">
|
||||
<tr><td class="paramdir">[out]</td><td class="paramname">offset</td><td>The offset to the packet data. </td></tr>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>Overhead size in bytes. </dd></dl>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__link_8c_source.html#l00126">126</a> of file <a class="el" href="fpc__com__link_8c_source.html">fpc_com_link.c</a>.</p>
|
||||
|
||||
<p>References <a class="el" href="fpc__com__packets_8h_source.html#l00063">fpc_com_packet_link::channel</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00069">fpc_com_packet_link::crc</a>, and <a class="el" href="fpc__com__packets_8h_source.html#l00065">fpc_com_packet_link::size</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="ae64b80cd91fbfe44abc06dc52eacf739"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> fpc_com_link_receive </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"><a class="el" href="fpc__com__packets_8h.html#af6fc3a46c87f1ad2a452eb822f2a0942">fpc_com_packet_link_t</a> * </td>
|
||||
<td class="paramname"><em>packet</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype"><a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a> * </td>
|
||||
<td class="paramname"><em>chain</em> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Receives a packet from the physical link. </p>
|
||||
<dl class="params"><dt>Parameters</dt><dd>
|
||||
<table class="params">
|
||||
<tr><td class="paramdir">[in,out]</td><td class="paramname">packet</td><td>Packet to populate. </td></tr>
|
||||
<tr><td class="paramdir">[in]</td><td class="paramname">chain</td><td>The communication chain to use. </td></tr>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> </dd></dl>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__link_8c_source.html#l00073">73</a> of file <a class="el" href="fpc__com__link_8c_source.html">fpc_com_link.c</a>.</p>
|
||||
|
||||
<p>References <a class="el" href="fpc__com__packets_8h_source.html#l00063">fpc_com_packet_link::channel</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00069">fpc_com_packet_link::crc</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00066">fpc_com_chain::crc_calc</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00067">fpc_com_packet_link::data</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00032">FPC_COM_ACK</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00151">FPC_COM_CHAIN_RX</a>, <a class="el" href="fpc__com__result_8h_source.html#l00035">FPC_COM_RESULT_INVALID_ARGUMENT</a>, <a class="el" href="fpc__com__result_8h_source.html#l00037">FPC_COM_RESULT_IO_ERROR</a>, <a class="el" href="fpc__com__result_8h_source.html#l00033">FPC_COM_RESULT_OK</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00121">fpc_com_chain::phy_mtu_buffer</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00119">fpc_com_chain::phy_mtu_size</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00116">fpc_com_chain::phy_rx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00125">fpc_com_chain::phy_timeout_rx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00123">fpc_com_chain::phy_timeout_tx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00113">fpc_com_chain::phy_tx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00137">fpc_com_chain::session</a>, and <a class="el" href="fpc__com__packets_8h_source.html#l00065">fpc_com_packet_link::size</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a43a8a308255ea41e7b7cdefd63a90d14"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> fpc_com_link_transmit </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"><a class="el" href="fpc__com__packets_8h.html#af6fc3a46c87f1ad2a452eb822f2a0942">fpc_com_packet_link_t</a> * </td>
|
||||
<td class="paramname"><em>packet</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype"><a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a> * </td>
|
||||
<td class="paramname"><em>chain</em> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Sends a packet over the physical link in blocking mode. </p>
|
||||
<dl class="params"><dt>Parameters</dt><dd>
|
||||
<table class="params">
|
||||
<tr><td class="paramdir">[in]</td><td class="paramname">packet</td><td>Packet to transmit. </td></tr>
|
||||
<tr><td class="paramdir">[in]</td><td class="paramname">chain</td><td>The communication chain to use. </td></tr>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> </dd></dl>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__link_8c_source.html#l00027">27</a> of file <a class="el" href="fpc__com__link_8c_source.html">fpc_com_link.c</a>.</p>
|
||||
|
||||
<p>References <a class="el" href="fpc__com__packets_8h_source.html#l00063">fpc_com_packet_link::channel</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00069">fpc_com_packet_link::crc</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00066">fpc_com_chain::crc_calc</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00067">fpc_com_packet_link::data</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00032">FPC_COM_ACK</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00150">FPC_COM_CHAIN_TX</a>, <a class="el" href="fpc__com__link_8c_source.html#l00126">fpc_com_link_get_overhead()</a>, <a class="el" href="fpc__com__result_8h_source.html#l00035">FPC_COM_RESULT_INVALID_ARGUMENT</a>, <a class="el" href="fpc__com__result_8h_source.html#l00037">FPC_COM_RESULT_IO_ERROR</a>, <a class="el" href="fpc__com__result_8h_source.html#l00033">FPC_COM_RESULT_OK</a>, <a class="el" href="fpc__com__result_8h_source.html#l00038">FPC_COM_RESULT_TIMEOUT</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00121">fpc_com_chain::phy_mtu_buffer</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00116">fpc_com_chain::phy_rx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00125">fpc_com_chain::phy_timeout_rx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00123">fpc_com_chain::phy_timeout_tx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00113">fpc_com_chain::phy_tx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00137">fpc_com_chain::session</a>, and <a class="el" href="fpc__com__packets_8h_source.html#l00065">fpc_com_packet_link::size</a>.</p>
|
||||
|
||||
<p><div class="dynheader">
|
||||
Here is the call graph for this function:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.svg" width="396" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="fpc__com__link_8c.html">fpc_com_link.c</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
6
hcp/doxygen/html/fpc__com__link_8c.js
Normal file
@ -0,0 +1,6 @@
|
||||
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 ]
|
||||
];
|
||||
7
hcp/doxygen/html/fpc__com__link_8c__incl.map
Normal file
@ -0,0 +1,7 @@
|
||||
<map id="src/fpc_com_link.c" name="src/fpc_com_link.c">
|
||||
<area shape="rect" id="node4" href="$fpc__com__link_8h.html" title="Communication link interface. " alt="" coords="315,80,426,107"/>
|
||||
<area shape="rect" id="node7" href="$fpc__com__result_8h.html" title="Communication result type definitions. " alt="" coords="399,229,521,256"/>
|
||||
<area shape="rect" id="node8" href="$fpc__com__chain_8h.html" title="Communication chain type definitions. " alt="" coords="246,155,367,181"/>
|
||||
<area shape="rect" id="node9" href="$fpc__hcp__common_8h.html" title="Host Communication Protocol common type definitions. " alt="" coords="28,229,164,256"/>
|
||||
<area shape="rect" id="node10" href="$fpc__com__packets_8h.html" title="Communication packet type definitions. " alt="" coords="239,229,375,256"/>
|
||||
</map>
|
||||
1
hcp/doxygen/html/fpc__com__link_8c__incl.md5
Normal file
@ -0,0 +1 @@
|
||||
5ae4569dea06540c6706ee9e9b27db36
|
||||
153
hcp/doxygen/html/fpc__com__link_8c__incl.svg
Normal file
@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
|
||||
-->
|
||||
<!-- Title: src/fpc_com_link.c Pages: 1 -->
|
||||
<svg width="413pt" height="252pt"
|
||||
viewBox="0.00 0.00 412.65 252.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 248)">
|
||||
<title>src/fpc_com_link.c</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-248 408.652,-248 408.652,4 -4,4"/>
|
||||
<!-- Node1 -->
|
||||
<g id="node1" class="node"><title>Node1</title>
|
||||
<polygon fill="#bfbfbf" stroke="black" points="140.5,-224.5 140.5,-243.5 239.5,-243.5 239.5,-224.5 140.5,-224.5"/>
|
||||
<text text-anchor="middle" x="190" y="-231.5" font-family="Helvetica,sans-Serif" font-size="10.00">src/fpc_com_link.c</text>
|
||||
</g>
|
||||
<!-- Node2 -->
|
||||
<g id="node2" class="node"><title>Node2</title>
|
||||
<polygon fill="white" stroke="#bfbfbf" points="98.5,-168.5 98.5,-187.5 147.5,-187.5 147.5,-168.5 98.5,-168.5"/>
|
||||
<text text-anchor="middle" x="123" y="-175.5" font-family="Helvetica,sans-Serif" font-size="10.00">string.h</text>
|
||||
</g>
|
||||
<!-- Node1->Node2 -->
|
||||
<g id="edge1" class="edge"><title>Node1->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M179.235,-224.324C169.234,-216.263 154.113,-204.077 142.07,-194.369"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="143.943,-191.384 133.961,-187.834 139.55,-196.834 143.943,-191.384"/>
|
||||
</g>
|
||||
<!-- Node3 -->
|
||||
<g id="node3" class="node"><title>Node3</title>
|
||||
<polygon fill="white" stroke="#bfbfbf" points="166,-168.5 166,-187.5 214,-187.5 214,-168.5 166,-168.5"/>
|
||||
<text text-anchor="middle" x="190" y="-175.5" font-family="Helvetica,sans-Serif" font-size="10.00">stdlib.h</text>
|
||||
</g>
|
||||
<!-- Node1->Node3 -->
|
||||
<g id="edge2" class="edge"><title>Node1->Node3</title>
|
||||
<path fill="none" stroke="midnightblue" d="M190,-224.083C190,-217.006 190,-206.861 190,-197.986"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="193.5,-197.751 190,-187.751 186.5,-197.751 193.5,-197.751"/>
|
||||
</g>
|
||||
<!-- Node4 -->
|
||||
<g id="node4" class="node"><title>Node4</title>
|
||||
<g id="a_node4"><a xlink:href="fpc__com__link_8h.html" target="_top" xlink:title="Communication link interface. ">
|
||||
<polygon fill="white" stroke="black" points="232.5,-168.5 232.5,-187.5 315.5,-187.5 315.5,-168.5 232.5,-168.5"/>
|
||||
<text text-anchor="middle" x="274" y="-175.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_com_link.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node4 -->
|
||||
<g id="edge3" class="edge"><title>Node1->Node4</title>
|
||||
<path fill="none" stroke="midnightblue" d="M203.496,-224.324C216.6,-215.9 236.712,-202.971 252.107,-193.074"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="254.018,-196.006 260.537,-187.655 250.233,-190.118 254.018,-196.006"/>
|
||||
</g>
|
||||
<!-- Node5 -->
|
||||
<g id="node5" class="node"><title>Node5</title>
|
||||
<polygon fill="white" stroke="#bfbfbf" points="0,-0.5 0,-19.5 56,-19.5 56,-0.5 0,-0.5"/>
|
||||
<text text-anchor="middle" x="28" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">stdbool.h</text>
|
||||
</g>
|
||||
<!-- Node4->Node5 -->
|
||||
<g id="edge4" class="edge"><title>Node4->Node5</title>
|
||||
<path fill="none" stroke="midnightblue" d="M237.227,-168.474C170.736,-152.232 34.8958,-114.982 8,-76 -1.91522,-61.6293 6.29763,-42.1725 15.004,-28.3004"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="18.1201,-29.9454 20.8937,-19.7201 12.3488,-25.984 18.1201,-29.9454"/>
|
||||
</g>
|
||||
<!-- Node6 -->
|
||||
<g id="node6" class="node"><title>Node6</title>
|
||||
<polygon fill="white" stroke="#bfbfbf" points="201.5,-0.5 201.5,-19.5 250.5,-19.5 250.5,-0.5 201.5,-0.5"/>
|
||||
<text text-anchor="middle" x="226" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">stdint.h</text>
|
||||
</g>
|
||||
<!-- Node4->Node6 -->
|
||||
<g id="edge5" class="edge"><title>Node4->Node6</title>
|
||||
<path fill="none" stroke="midnightblue" d="M295.497,-168.389C339.344,-149.592 432.028,-102.806 396,-56 379.622,-34.7223 305.492,-21.4395 260.705,-15.2105"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="260.921,-11.7082 250.544,-13.8479 259.99,-18.646 260.921,-11.7082"/>
|
||||
</g>
|
||||
<!-- Node7 -->
|
||||
<g id="node7" class="node"><title>Node7</title>
|
||||
<g id="a_node7"><a xlink:href="fpc__com__result_8h.html" target="_top" xlink:title="Communication result type definitions. ">
|
||||
<polygon fill="white" stroke="black" points="295,-56.5 295,-75.5 387,-75.5 387,-56.5 295,-56.5"/>
|
||||
<text text-anchor="middle" x="341" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_com_result.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node4->Node7 -->
|
||||
<g id="edge6" class="edge"><title>Node4->Node7</title>
|
||||
<path fill="none" stroke="midnightblue" d="M279.257,-168.368C290.265,-150.296 315.92,-108.176 330.458,-84.3074"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="333.554,-85.9526 335.767,-75.5914 327.576,-82.3112 333.554,-85.9526"/>
|
||||
</g>
|
||||
<!-- Node8 -->
|
||||
<g id="node8" class="node"><title>Node8</title>
|
||||
<g id="a_node8"><a xlink:href="fpc__com__chain_8h.html" target="_top" xlink:title="Communication chain type definitions. ">
|
||||
<polygon fill="white" stroke="black" points="180.5,-112.5 180.5,-131.5 271.5,-131.5 271.5,-112.5 180.5,-112.5"/>
|
||||
<text text-anchor="middle" x="226" y="-119.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_com_chain.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node4->Node8 -->
|
||||
<g id="edge8" class="edge"><title>Node4->Node8</title>
|
||||
<path fill="none" stroke="midnightblue" d="M266.074,-168.083C259.154,-160.298 248.935,-148.801 240.548,-139.367"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="243.038,-136.9 233.779,-131.751 237.806,-141.55 243.038,-136.9"/>
|
||||
</g>
|
||||
<!-- Node7->Node6 -->
|
||||
<g id="edge7" class="edge"><title>Node7->Node6</title>
|
||||
<path fill="none" stroke="midnightblue" d="M322.778,-56.4435C304.104,-47.6751 274.844,-33.9355 253.383,-23.8579"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="254.676,-20.5988 244.137,-19.5164 251.701,-26.935 254.676,-20.5988"/>
|
||||
</g>
|
||||
<!-- Node8->Node6 -->
|
||||
<g id="edge9" class="edge"><title>Node8->Node6</title>
|
||||
<path fill="none" stroke="midnightblue" d="M206.704,-112.48C192.571,-105.081 174.443,-92.887 166,-76 155.65,-55.2997 178.277,-36.4462 198.643,-24.4384"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="200.371,-27.4821 207.422,-19.5735 196.978,-21.3594 200.371,-27.4821"/>
|
||||
</g>
|
||||
<!-- Node8->Node7 -->
|
||||
<g id="edge10" class="edge"><title>Node8->Node7</title>
|
||||
<path fill="none" stroke="midnightblue" d="M244.222,-112.444C262.896,-103.675 292.156,-89.9355 313.617,-79.8579"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="315.299,-82.935 322.863,-75.5164 312.324,-76.5988 315.299,-82.935"/>
|
||||
</g>
|
||||
<!-- Node9 -->
|
||||
<g id="node9" class="node"><title>Node9</title>
|
||||
<g id="a_node9"><a xlink:href="fpc__hcp__common_8h.html" target="_top" xlink:title="Host Communication Protocol common type definitions. ">
|
||||
<polygon fill="white" stroke="black" points="17,-56.5 17,-75.5 119,-75.5 119,-56.5 17,-56.5"/>
|
||||
<text text-anchor="middle" x="68" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_hcp_common.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node8->Node9 -->
|
||||
<g id="edge11" class="edge"><title>Node8->Node9</title>
|
||||
<path fill="none" stroke="midnightblue" d="M200.964,-112.444C174.384,-103.359 132.191,-88.9388 102.477,-78.7831"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="103.513,-75.4386 92.9184,-75.5164 101.249,-82.0625 103.513,-75.4386"/>
|
||||
</g>
|
||||
<!-- Node10 -->
|
||||
<g id="node10" class="node"><title>Node10</title>
|
||||
<g id="a_node10"><a xlink:href="fpc__com__packets_8h.html" target="_top" xlink:title="Communication packet type definitions. ">
|
||||
<polygon fill="white" stroke="black" points="175,-56.5 175,-75.5 277,-75.5 277,-56.5 175,-56.5"/>
|
||||
<text text-anchor="middle" x="226" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_com_packets.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node8->Node10 -->
|
||||
<g id="edge14" class="edge"><title>Node8->Node10</title>
|
||||
<path fill="none" stroke="midnightblue" d="M226,-112.083C226,-105.006 226,-94.8611 226,-85.9865"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="229.5,-85.751 226,-75.7511 222.5,-85.7511 229.5,-85.751"/>
|
||||
</g>
|
||||
<!-- Node9->Node5 -->
|
||||
<g id="edge13" class="edge"><title>Node9->Node5</title>
|
||||
<path fill="none" stroke="midnightblue" d="M61.3948,-56.083C55.7448,-48.4554 47.4552,-37.2645 40.5488,-27.9408"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="43.2471,-25.7034 34.4823,-19.7511 37.6221,-29.87 43.2471,-25.7034"/>
|
||||
</g>
|
||||
<!-- Node9->Node6 -->
|
||||
<g id="edge12" class="edge"><title>Node9->Node6</title>
|
||||
<path fill="none" stroke="midnightblue" d="M93.0356,-56.4435C119.694,-47.3324 162.057,-32.8539 191.785,-22.6936"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="193.011,-25.9736 201.342,-19.4275 190.747,-19.3497 193.011,-25.9736"/>
|
||||
</g>
|
||||
<!-- Node10->Node6 -->
|
||||
<g id="edge15" class="edge"><title>Node10->Node6</title>
|
||||
<path fill="none" stroke="midnightblue" d="M226,-56.083C226,-49.0059 226,-38.8611 226,-29.9865"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="229.5,-29.751 226,-19.7511 222.5,-29.7511 229.5,-29.751"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.1 KiB |