Initial commit

Change-Id: If8b9b540c22ba2c72ec05e9f0fac8dc4499ded0b
This commit is contained in:
Andrey Perminov 2020-04-16 15:17:23 -07:00
commit ee1de8e94d
296 changed files with 28379 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
out
.vscode

93
BMLite_example/Makefile Normal file
View File

@ -0,0 +1,93 @@
# 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.
# Make sure that 'all' target become default target
.DEFAULT_GOAL := all
PRODUCT := bmlite_demo
PATH := /work/devtools/gcc-arm-hf/bin:$(PATH)
CC := arm-linux-gnueabihf-gcc
# Setup paths
OUT := out
DEPTH :=
HCP_PATH := ../hcp
RPIHAL_PATH := ../HAL_Driver
# Main target
TARGET := $(OUT)/$(PRODUCT)
# Common flags
CFLAGS +=\
-std=c99\
-D_DEFAULT_SOURCE \
-g3\
-Og\
-Wall\
-Werror\
-fdata-sections\
-ffunction-sections\
-MMD\
-MP\
-Wno-unused-result
# C source files
C_SRCS = $(wildcard src/*.c)
# Include directories
PATH_INC += inc
C_INC = $(addprefix -I,$(PATH_INC))
# Include HCP
include $(HCP_PATH)/hcp.mk
include $(RPIHAL_PATH)/raspberry.mk
# Object files and search paths
VPATH += $(sort $(dir $(C_SRCS)))
OBJECTS = $(patsubst %.c,$(OUT)/obj/%.o,$(notdir $(C_SRCS)))
# Dependency files
DEP := $(OBJECTS:.o=.d)
DEP_CFLAGS=$(OUT)/dep_cflags.txt
all: $(TARGET)
# Create binary from object files and external libraries
$(TARGET): $(OBJECTS) $(DEP_CFLAGS)
@mkdir -p $(@D)
$(CC) $(CFLAGS) $(C_INC) $(OBJECTS) $(LDFLAGS) -o $@
# Compile source files
$(OUT)/obj/%.o: %.c $(DEP_CFLAGS)
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) $(C_INC) -o $@ -c $<
# Detect changes in CFLAGS
$(DEP_CFLAGS): force
@mkdir -p $(dir $@)
@echo '$(CFLAGS)' | cmp -s - $@ || echo '$(CFLAGS)' > $@
-include $(DEP)
# Empty rule for dep files, they will be created when compiling
%.d: ;
clean:
rm -rf $(OUT)
.PHONY: clean force

View File

@ -0,0 +1,176 @@
/*
* 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);
#endif /* BEP_HOST_IF_H */

View 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 */

View 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 */

View File

@ -0,0 +1,92 @@
/*
* 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 FPC_BEP_TYPES_H
#define FPC_BEP_TYPES_H
#include <stdbool.h>
/**
* @file fpc_bep_types.h
* @brief Biometric Embedded Platform types.
*
* This is the common types used by Biometric Embedded Platform (BEP) library.
*
* @note This is a work-in-progress specification. Implementers are informed
* that this API may change without providing any backward compatibility.
* However it is FPC's ambition that the API shall remain compatible between
* releases.
*/
/** @brief Common result returned by BEP functions. */
typedef enum {
/** No errors occurred. */
FPC_BEP_RESULT_OK = 0,
/** General error. */
FPC_BEP_RESULT_GENERAL_ERROR = -1,
/** Internal error. */
FPC_BEP_RESULT_INTERNAL_ERROR = -2,
/** Invalid argument. */
FPC_BEP_RESULT_INVALID_ARGUMENT = -3,
/** The functionality is not implemented. */
FPC_BEP_RESULT_NOT_IMPLEMENTED = -4,
/** The operation was cancelled. */
FPC_BEP_RESULT_CANCELLED = -5,
/** Out of memory. */
FPC_BEP_RESULT_NO_MEMORY = -6,
/** Resources are not available. */
FPC_BEP_RESULT_NO_RESOURCE = -7,
/** An I/O error occurred. */
FPC_BEP_RESULT_IO_ERROR = -8,
/** Sensor is broken. */
FPC_BEP_RESULT_BROKEN_SENSOR = -9,
/** The operation cannot be performed in the current state. */
FPC_BEP_RESULT_WRONG_STATE = -10,
/** The operation timed out. */
FPC_BEP_RESULT_TIMEOUT = -11,
/** The ID is not unique. */
FPC_BEP_RESULT_ID_NOT_UNIQUE = -12,
/** The ID is not found. */
FPC_BEP_RESULT_ID_NOT_FOUND = -13,
/** The format is invalid. */
FPC_BEP_RESULT_INVALID_FORMAT = -14,
/** An image capture error occurred. */
FPC_BEP_RESULT_IMAGE_CAPTURE_ERROR = -15,
/** Sensor hardware id or sensor configuration mismatch. */
FPC_BEP_RESULT_SENSOR_MISMATCH = -16,
/** Invalid parameter. */
FPC_BEP_RESULT_INVALID_PARAMETER = -17,
/** Missing Template. */
FPC_BEP_RESULT_MISSING_TEMPLATE = -18,
/** Invalid Calibration.*/
FPC_BEP_RESULT_INVALID_CALIBRATION = -19,
/** Calibration/template storage not formatted.*/
FPC_BEP_RESULT_STORAGE_NOT_FORMATTED = -20,
/** Sensor hasn't been initialized. */
FPC_BEP_RESULT_SENSOR_NOT_INITIALIZED = -21,
/** Enroll fail after too many bad images. */
FPC_BEP_RESULT_TOO_MANY_BAD_IMAGES = -22,
/** Cryptographic operation failed. */
FPC_BEP_RESULT_CRYPTO_ERROR = -23,
/** The functionality is not supported. */
FPC_BEP_RESULT_NOT_SUPPORTED = -24,
/** Finger not stable during image capture. */
FPC_BEP_FINGER_NOT_STABLE = -25,
/** The functionality could not be used before it's initialized. */
FPC_BEP_RESULT_NOT_INITIALIZED = -26,
} fpc_bep_result_t;
#endif /* FPC_BEP_TYPES_H */

View File

@ -0,0 +1,37 @@
/*
* 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 FPC_CRC_H
#define FPC_CRC_H
/**
* @file fpc_crc.h
* @brief Functionality for calculating CRC-32.
*/
#include <stdint.h>
/**
* @brief Calculates CRC-32 value for the data in the buffer.
*
* @param crc Accumulated CRC-32 value, must be 0 on first call.
* @param buf Buffer with data to calculate CRC-32 for.
* @param size Size of buffer in number of bytes.
* @return CRC-32 value for the data in buffer.
*/
uint32_t fpc_crc(uint32_t crc, const void *buf, uint32_t size);
#endif /* FPC_CRC_H */

View File

@ -0,0 +1,104 @@
/*
* 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 PLATFORM_H
#define PLATFORM_H
/**
* @file platform.h
* @brief Platform specific function interface
*/
#include <stdint.h>
#include <stdbool.h>
/**
* @brief Initializes COM Physical layer.
*
* @param[in] port tty port to use.
* @param[in] baudrate Baudrate.
* @param[in] timeout Timeout in ms. Use 0 for infinity.
*/
bool platform_com_init(char *port, int baudrate, int timeout);
/**
* @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_com_result_t platform_com_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_com_result_t platform_com_receive(uint16_t size, uint8_t *data, uint32_t timeout,
void *session);
/**
* @brief Initializes SPI Physical layer.
*
* @param[in] speed_hz Baudrate.
*/
bool platform_spi_init(uint32_t speed_hz);
/**
* @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_com_result_t platform_spi_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_com_result_t platform_spi_receive(uint16_t size, uint8_t *data, uint32_t timeout,
void *session);
/**
* @brief Get time in micro seconds
*
* @return time in us.
*/
uint64_t platform_get_time(void);
/**
* @brief Clear console screen
*/
void platform_clear_screen(void);
#endif /* PLATFORM_H */

View 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 */

View File

@ -0,0 +1,533 @@
/*
* 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(fpc_com_chain_t *chain,
fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length,
fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length)
{
fpc_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) {
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) {
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_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);
}

View 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;
}

View 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;
}

View File

@ -0,0 +1,88 @@
/*
* 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 fpc_crc.c
* @brief CRC32 calculation.
*/
#include <stdint.h>
#include "fpc_crc.h"
/**
* The constants here are for the CRC-32 generator polynomial, as defined in
* the Microsoft Systems Journal, March 1995, pp. 107-108.
*/
static const uint32_t crc32_table[] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
};
uint32_t fpc_crc(uint32_t crc, const void *buf, uint32_t size)
{
const uint8_t *p;
p = buf;
crc = crc ^ ~0U;
while (size--) {
crc = crc32_table[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
}
return crc ^ ~0U;
}

227
BMLite_example/src/main.c Normal file
View File

@ -0,0 +1,227 @@
/*
* 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 main.c
* @brief Main file for FPC BM-Lite Communication example.
*/
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
#include <string.h>
#include "bep_host_if.h"
#include "com_common.h"
#include "platform.h"
static void help(void)
{
fprintf(stderr, "BEP Host Communication Application\n");
fprintf(stderr, "Syntax: bep_host_com [-s] [-p port] [-b baudrate] [-t timeout]\n");
}
int main (int argc, char **argv)
{
char *port = NULL;
int baudrate = 921600;
int timeout = 5;
int index;
int c;
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':
iface = SPI_INTERFACE;
if(baudrate == 921600)
baudrate = 1000000;
break;
case 'b':
baudrate = atoi(optarg);
break;
case 'p':
port = optarg;
break;
case 't':
timeout = atoi(optarg);
break;
case '?':
if (optopt == 'b')
fprintf(stderr, "Option -%c requires an argument.\n", optopt);
else if (isprint (optopt))
fprintf(stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf(stderr,
"Unknown option character `\\x%x'.\n",
optopt);
return 1;
default:
help();
exit(1);
}
}
if (iface == COM_INTERFACE && port == NULL) {
printf("port must be specified\n");
help();
exit(1);
}
for (index = optind; index < argc; index++) {
printf ("Non-option argument %s\n", argv[index]);
}
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;
platform_clear_screen();
printf("BM-Lite Interface\n");
if (iface == SPI_INTERFACE)
printf("SPI port: speed %d Hz\n", baudrate);
else
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");
printf("b: Capture and identify finger\n");
printf("c: Remove all templates\n");
printf("d: Save template\n");
printf("e: Remove template\n");
printf("f: Capture image\n");
printf("g: Image upload\n");
printf("h: Get version\n");
printf("q: Exit program\n");
printf("\nOption>> ");
fgets(cmd, sizeof(cmd), stdin);
switch (cmd[0]) {
case 'a':
res = bep_enroll_finger(&hcp_chain);
break;
case 'b':
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);
} else {
printf("No match\n");
}
}
break;
case 'c':
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_save_template(&hcp_chain, template_id);
break;
case 'e':
printf("Template id: ");
fgets(cmd, sizeof(cmd), stdin);
template_id = atoi(cmd);
res = bep_delete_template(&hcp_chain, template_id);
break;
case 'f':
printf("Timeout (ms): ");
fgets(cmd, sizeof(cmd), stdin);
res = bep_capture(&hcp_chain, atoi(cmd));
break;
case 'g': {
uint32_t size;
res = bep_image_get_size(&hcp_chain, &size);
if (res == FPC_BEP_RESULT_OK) {
uint8_t *buf = malloc(size);
if (buf) {
res = bep_image_get(&hcp_chain, buf, size);
if (res == FPC_BEP_RESULT_OK) {
FILE *f = fopen("image.raw", "wb");
if (f) {
fwrite(buf, 1, size, f);
fclose(f);
printf("Image saved as image.raw\n");
}
}
}
}
break;
}
case 'h': {
char version[100];
memset(version, 0, 100);
res = bep_version(&hcp_chain, version, 99);
if (res == FPC_BEP_RESULT_OK) {
printf("%s\n", version);
}
break;
}
case 'q':
return 0;
default:
printf("\nUnknown command\n");
}
if (res == FPC_BEP_RESULT_OK) {
printf("\nCommand succeded\n");
} else {
printf("\nCommand failed with error code %d\n", res);
}
printf("Press any key to continue...");
fgets(cmd, sizeof(cmd), stdin);
}
return 0;
}

View File

@ -0,0 +1,145 @@
/*
* 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_com.c
* @brief Linux COM 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"
static int fd = -1;
static int set_interface_attribs(int fd, int speed, int timeout)
{
struct termios tty;
memset(&tty, 0, sizeof tty);
if (tcgetattr (fd, &tty) != 0) {
fprintf(stderr, "error %d from tcgetattr", errno);
return -1;
}
cfsetospeed(&tty, speed);
cfsetispeed(&tty, speed);
tty.c_iflag = 0; // Clear input modes
tty.c_oflag = 0; // Clear output modes
tty.c_cflag = 0; // Clear control modes
tty.c_lflag = 0; // Clear local modes
tty.c_cflag |= CS8; // Set size mask to 8 bits
tty.c_cflag |= CREAD; // Enable receiver
tty.c_cflag |= HUPCL; // Lower modem control lines after last process closes the device (hang up)
tty.c_cflag |= CLOCAL; // Ignore modem control lines
tty.c_cc[VMIN] = 0; // Minimum number of characters for non-canonical read
tty.c_cc[VTIME] = 0; // Timeout in deciseconds for non-canonical read
tcsetattr(fd, TCSANOW, &tty);
return 0;
}
bool platform_com_init(char *port, int baudrate, int timeout)
{
int baud;
fd = open(port, O_RDWR | O_NOCTTY | O_SYNC);
if (fd < 0) {
fprintf(stderr, "error %d opening %s: %s", errno, port, strerror (errno));
return false;
}
if (baudrate == 921600) {
baud = B921600;
} else {
baud = B115200;
}
set_interface_attribs(fd, baud, timeout);
return true;
}
fpc_com_result_t platform_com_send(uint16_t size, const uint8_t *data, uint32_t timeout,
void *session)
{
fpc_com_result_t res = FPC_COM_RESULT_OK;
int n;
if (fd < 0) {
fprintf(stderr, "error invalid file descriptor");
return FPC_COM_RESULT_INVALID_ARGUMENT;
}
n = write(fd, data, size);
if (n != size) {
res = FPC_COM_RESULT_IO_ERROR;
}
return res;
}
fpc_com_result_t platform_com_receive(uint16_t size, uint8_t *data, uint32_t timeout,
void *session)
{
fpc_com_result_t res = FPC_COM_RESULT_OK;
int n_read = 0;
int n = 0;
fd_set rfds;
int retval;
unsigned char c;
if (fd < 0) {
fprintf(stderr, "error invalid file descriptor");
return FPC_COM_RESULT_INVALID_ARGUMENT;
}
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
while (n_read < size) {
retval = select(fd + 1, &rfds, NULL, NULL, NULL);
if (retval == -1) {
perror("select()");
exit(EXIT_FAILURE);
} else if (retval != 0) {
n = read(fd, &c, sizeof(c));
if (n > 0) {
*data = c;
data++;
n_read++;
}
}
}
return res;
}

View 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(&current_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");
}

View File

@ -0,0 +1,206 @@
/*
* 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 SPI platform specific functions
*/
#define _BSD_SOURCE
#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"
#include <linux/spi/spidev.h>
#include <sys/ioctl.h>
#include <asm/ioctl.h>
#include "wiringPi.h"
#include "wiringPiSPI.h"
#include "raspberry_pi_hal.h"
#define SPI_BUF_MIN_SIZE 40000
// This path is used to determine the SPI buffer size.
static char SPIBufPath[] = "/sys/module/spidev/parameters/bufsiz";
static const uint16_t spiDelay = 0;
static const uint8_t spiBPW = 8;
uint32_t speed_hz_int;
void fpc_sensor_spi_reset(bool state);
void raspberryPi_init()
{
/* Start wiringPi functions. */
wiringPiSetup();
/* Set correct pin modes */
pinMode(BMLITE_IRQ_PIN, INPUT);
pinMode(BMLITE_RESET_PIN, OUTPUT);
/* Set reset high */
digitalWrite(BMLITE_RESET_PIN, 1);
}
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) {
digitalWrite(BMLITE_RESET_PIN, 0);
} else {
digitalWrite(BMLITE_RESET_PIN, 1);
}
}
bool fpc_sensor_spi_read_irq(void)
{
return digitalRead(BMLITE_IRQ_PIN);
}
bool platform_spi_init(uint32_t speed_hz)
{
raspberryPi_init();
/* In standard the SPI drivers buffer is 4096 bytes, the current buffer
* size is read and compared to minimum required size.
*/
FILE *fp;
fp = fopen(SPIBufPath, "r");
/* The file is opened, and if this failed the program exits. */
if (fp == NULL) {
printf("Could not open %s to get buffersize\n", SPIBufPath);
exit(1);
}
/* The size of the file is determined, then the whole file is read. */
fseek(fp, 0, SEEK_END); // Seek to end of file.
size_t filesize = ftell(fp); // Get current file pointer.
fseek(fp, 0, SEEK_SET); // Seek back to beginning of file.
char buffersize[filesize];
if (fread(buffersize, 1, filesize, fp) == filesize) {
printf("Failed to read data from %s.\n", SPIBufPath);
exit(1);
}
fclose(fp);
/* Verify that SPI buffer meets minimum size. */
if (atoi(buffersize) < SPI_BUF_MIN_SIZE) {
printf("SPI buffer size is too small, if the standard RPI driver is "
"used, this can be changed by adding \"spidev.bufsiz=<size>\" "
"to /boot/cmdline.txt. <size> needs to be larger than %d for this "
"sensor.\n",
SPI_BUF_MIN_SIZE);
exit(1);
}
/*
* If the buffer has been verified as large enough the SPI will initialize,
* the reset and IRQ pin will also be set up.
*/
int SpiRef;
SpiRef = wiringPiSPISetup(SPI_CHANNEL, speed_hz);
speed_hz_int = speed_hz;
if (SpiRef == -1) {
printf("WiringPi GPIO setup failed with error %d", errno);
return false;
}
return true;
}
static fpc_com_result_t platform_spi_write_read(const uint8_t *write, uint8_t *read, size_t size,
bool leave_cs_asserted)
{
/*
* SPI data is transmitted using an edited version of wiringPiSPIDataRW,
* since the original function does not have support for holding the CS
* signal low after a transmission which is needed by bep-lib.
*/
int status;
struct spi_ioc_transfer spi;
memset (&spi, 0, sizeof (spi));
/* The file descriptor is fetched from wiringPi. */
int spiFds = wiringPiSPIGetFd(SPI_CHANNEL);
spi.tx_buf = (unsigned long)write;
spi.rx_buf = (unsigned long)read;
spi.len = size;
spi.delay_usecs = spiDelay;
spi.speed_hz = speed_hz_int;
spi.bits_per_word = spiBPW;
spi.cs_change = leave_cs_asserted;
status = ioctl(spiFds, SPI_IOC_MESSAGE(1), &spi);
/*
* Status returns the number of bytes sent, if this number is different
* from the the number of bytes written an error has occured.
*/
if (status == size) {
return FPC_COM_RESULT_OK;
}
return FPC_COM_RESULT_IO_ERROR;
}
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);
}
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);
}

256
HAL_Driver/inc/wiringPi.h Normal file
View File

@ -0,0 +1,256 @@
/*
* wiringPi.h:
* Arduino like Wiring library for the Raspberry Pi.
* Copyright (c) 2012-2017 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
*
* wiringPi is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* wiringPi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
*/
#ifndef __WIRING_PI_H__
#define __WIRING_PI_H__
// C doesn't have true/false by default and I can never remember which
// way round they are, so ...
// (and yes, I know about stdbool.h but I like capitals for these and I'm old)
#ifndef TRUE
# define TRUE (1==1)
# define FALSE (!TRUE)
#endif
// GCC warning suppressor
#define UNU __attribute__((unused))
// Mask for the bottom 64 pins which belong to the Raspberry Pi
// The others are available for the other devices
#define PI_GPIO_MASK (0xFFFFFFC0)
// Handy defines
// wiringPi modes
#define WPI_MODE_PINS 0
#define WPI_MODE_GPIO 1
#define WPI_MODE_GPIO_SYS 2
#define WPI_MODE_PHYS 3
#define WPI_MODE_PIFACE 4
#define WPI_MODE_UNINITIALISED -1
// Pin modes
#define INPUT 0
#define OUTPUT 1
#define PWM_OUTPUT 2
#define GPIO_CLOCK 3
#define SOFT_PWM_OUTPUT 4
#define SOFT_TONE_OUTPUT 5
#define PWM_TONE_OUTPUT 6
#define LOW 0
#define HIGH 1
// Pull up/down/none
#define PUD_OFF 0
#define PUD_DOWN 1
#define PUD_UP 2
// PWM
#define PWM_MODE_MS 0
#define PWM_MODE_BAL 1
// Interrupt levels
#define INT_EDGE_SETUP 0
#define INT_EDGE_FALLING 1
#define INT_EDGE_RISING 2
#define INT_EDGE_BOTH 3
// Pi model types and version numbers
// Intended for the GPIO program Use at your own risk.
#define PI_MODEL_A 0
#define PI_MODEL_B 1
#define PI_MODEL_AP 2
#define PI_MODEL_BP 3
#define PI_MODEL_2 4
#define PI_ALPHA 5
#define PI_MODEL_CM 6
#define PI_MODEL_07 7
#define PI_MODEL_3 8
#define PI_MODEL_ZERO 9
#define PI_MODEL_CM3 10
#define PI_MODEL_ZERO_W 12
#define PI_VERSION_1 0
#define PI_VERSION_1_1 1
#define PI_VERSION_1_2 2
#define PI_VERSION_2 3
#define PI_MAKER_SONY 0
#define PI_MAKER_EGOMAN 1
#define PI_MAKER_EMBEST 2
#define PI_MAKER_UNKNOWN 3
extern const char *piModelNames [16] ;
extern const char *piRevisionNames [16] ;
extern const char *piMakerNames [16] ;
extern const int piMemorySize [ 8] ;
// Intended for the GPIO program Use at your own risk.
// Threads
#define PI_THREAD(X) void *X (UNU void *dummy)
// Failure modes
#define WPI_FATAL (1==1)
#define WPI_ALMOST (1==2)
// wiringPiNodeStruct:
// This describes additional device nodes in the extended wiringPi
// 2.0 scheme of things.
// It's a simple linked list for now, but will hopefully migrate to
// a binary tree for efficiency reasons - but then again, the chances
// of more than 1 or 2 devices being added are fairly slim, so who
// knows....
struct wiringPiNodeStruct
{
int pinBase ;
int pinMax ;
int fd ; // Node specific
unsigned int data0 ; // ditto
unsigned int data1 ; // ditto
unsigned int data2 ; // ditto
unsigned int data3 ; // ditto
void (*pinMode) (struct wiringPiNodeStruct *node, int pin, int mode) ;
void (*pullUpDnControl) (struct wiringPiNodeStruct *node, int pin, int mode) ;
int (*digitalRead) (struct wiringPiNodeStruct *node, int pin) ;
//unsigned int (*digitalRead8) (struct wiringPiNodeStruct *node, int pin) ;
void (*digitalWrite) (struct wiringPiNodeStruct *node, int pin, int value) ;
// void (*digitalWrite8) (struct wiringPiNodeStruct *node, int pin, int value) ;
void (*pwmWrite) (struct wiringPiNodeStruct *node, int pin, int value) ;
int (*analogRead) (struct wiringPiNodeStruct *node, int pin) ;
void (*analogWrite) (struct wiringPiNodeStruct *node, int pin, int value) ;
struct wiringPiNodeStruct *next ;
} ;
extern struct wiringPiNodeStruct *wiringPiNodes ;
// Function prototypes
// c++ wrappers thanks to a comment by Nick Lott
// (and others on the Raspberry Pi forums)
#ifdef __cplusplus
extern "C" {
#endif
// Data
// Internal
extern int wiringPiFailure (int fatal, const char *message, ...) ;
// Core wiringPi functions
extern struct wiringPiNodeStruct *wiringPiFindNode (int pin) ;
extern struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins) ;
extern void wiringPiVersion (int *major, int *minor) ;
extern int wiringPiSetup (void) ;
extern int wiringPiSetupSys (void) ;
extern int wiringPiSetupGpio (void) ;
extern int wiringPiSetupPhys (void) ;
extern void pinModeAlt (int pin, int mode) ;
extern void pinMode (int pin, int mode) ;
extern void pullUpDnControl (int pin, int pud) ;
extern int digitalRead (int pin) ;
extern void digitalWrite (int pin, int value) ;
extern unsigned int digitalRead8 (int pin) ;
extern void digitalWrite8 (int pin, int value) ;
extern void pwmWrite (int pin, int value) ;
extern int analogRead (int pin) ;
extern void analogWrite (int pin, int value) ;
// PiFace specifics
// (Deprecated)
extern int wiringPiSetupPiFace (void) ;
extern int wiringPiSetupPiFaceForGpioProg (void) ; // Don't use this - for gpio program only
// On-Board Raspberry Pi hardware specific stuff
extern int piGpioLayout (void) ;
extern int piBoardRev (void) ; // Deprecated
extern void piBoardId (int *model, int *rev, int *mem, int *maker, int *overVolted) ;
extern int wpiPinToGpio (int wpiPin) ;
extern int physPinToGpio (int physPin) ;
extern void setPadDrive (int group, int value) ;
extern int getAlt (int pin) ;
extern void pwmToneWrite (int pin, int freq) ;
extern void pwmSetMode (int mode) ;
extern void pwmSetRange (unsigned int range) ;
extern void pwmSetClock (int divisor) ;
extern void gpioClockSet (int pin, int freq) ;
extern unsigned int digitalReadByte (void) ;
extern unsigned int digitalReadByte2 (void) ;
extern void digitalWriteByte (int value) ;
extern void digitalWriteByte2 (int value) ;
// Interrupts
// (Also Pi hardware specific)
extern int waitForInterrupt (int pin, int mS) ;
extern int wiringPiISR (int pin, int mode, void (*function)(void)) ;
// Threads
extern int piThreadCreate (void *(*fn)(void *)) ;
extern void piLock (int key) ;
extern void piUnlock (int key) ;
// Schedulling priority
extern int piHiPri (const int pri) ;
// Extras from arduino land
extern void delay (unsigned int howLong) ;
/*Headerfile was missing the hard delay.*/
extern void delayMicrosecondsHard (unsigned int howLong) ;
extern void delayMicroseconds (unsigned int howLong) ;
extern unsigned int millis (void) ;
extern unsigned int micros (void) ;
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,36 @@
/*
* wiringPiSPI.h:
* Simplified SPI access routines
* Copyright (c) 2012-2015 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
*
* wiringPi is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* wiringPi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with wiringPi.
* If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
*/
#ifdef __cplusplus
extern "C" {
#endif
int wiringPiSPIGetFd (int channel) ;
int wiringPiSPIDataRW (int channel, unsigned char *data, int len) ;
int wiringPiSPISetupMode (int channel, int speed, int mode) ;
int wiringPiSPISetup (int channel, int speed) ;
#ifdef __cplusplus
}
#endif

View File

@ -0,0 +1 @@
libwiringPi.so.2.46

Binary file not shown.

6
HAL_Driver/raspberry.mk Normal file
View File

@ -0,0 +1,6 @@
# Binary sources
VPATH += $(DEPTH)../HAL_Driver
C_INC += -I$(DEPTH)../HAL_Driver/inc
LDFLAGS += -lwiringPi -L$(DEPTH)../HAL_Driver/lib/

13
README.md Normal file
View File

@ -0,0 +1,13 @@
# BM-Lite Raspberry PI example
BM-Lite example for Raspberry Pi 3.
Based on [BM-LIte Development Kit](https://www.fingerprints.com/solutions/access/bm-lite-development-kit/ "BM-LIte Development Kit")
### HW configuration
| | PIN # |
| :------------ | :------------: |
| BMLITE_RESET | 0 |
| BMLITE_IRQ | 22 |
| SPI_CHANNEL | 1 |
HW configuration can be changed in **BMLite_example/inc/raspberry_pi_hal.h**

174
hcp/LICENSE.txt Normal file
View 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

File diff suppressed because it is too large Load Diff

BIN
hcp/doc/img/hcp.pdf Normal file

Binary file not shown.

247
hcp/doc/img/hcp.svg Normal file
View 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

File diff suppressed because it is too large Load Diff

BIN
hcp/doc/img/stack.pdf Normal file

Binary file not shown.

236
hcp/doc/img/stack.svg Normal file
View 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
View 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
View 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.

View 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
View 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
View 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
View 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
View 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
View 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
View 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

Binary file not shown.

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>

File diff suppressed because one or more lines are too long

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>&#160;\page hcpf HCP frame format</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;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>&#160;between devices.</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;\image html hcp.svg &quot;HCP frame format&quot;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;\image latex hcp.eps &quot;HCP frame format&quot;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;\section cmd Command</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;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>&#160;can have several Arguments each with data attached.</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;| CMD | Num Args | Payload |</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;| ------- | -------- | -------- |</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;| 2 bytes | 2 bytes | xx bytes |</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;All fields are using unsigned data types.</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;\section arg Argument</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;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>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;| ARG | Size | Data |</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;| ------- | --------| ---------- |</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;| 2 bytes | 2 bytes | size bytes |</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>

File diff suppressed because one or more lines are too long

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>&#160;\page image Image handling</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;\section create_i Create</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;@startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;Host --&gt; BioMcu: CMD_IMAGE \nARG_CREATE</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;hnote over BioMcu : image</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;BioMcu --&gt; Host: CMD_IMAGE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;@enduml</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;***</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;\section upload_i Upload</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;@startuml</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;participant Host</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;participant BioMcu</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;hnote over BioMcu : image</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;Host --&gt; BioMcu: CMD_IMAGE \nARG_UPLOAD</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;BioMcu --&gt; Host: CMD_IMAGE \nARG_RESULT[bep_result] \nARG_DATA[image]</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;hnote over Host : image</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;@enduml</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;***</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;\section download_i Download</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;@startuml</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;participant Host</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;participant BioMcu</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;hnote over Host : image</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;Host --&gt; BioMcu: CMD_IMAGE \nARG_DOWNLOAD \nARG_DATA[image]</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;hnote over BioMcu : image</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;BioMcu --&gt; Host: CMD_IMAGE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;@enduml</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;***</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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>&#160;\page template Template handling</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;\section upload_t Upload</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;@startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;participant Host</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;participant BioMcu</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;hnote over BioMcu : template</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;Host --&gt; BioMcu: CMD_TEMPLATE \nARG_UPLOAD</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;BioMcu --&gt; Host: CMD_TEMPLATE \nARG_RESULT[bep_result] \nARG_DATA[template]</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;hnote over Host : template</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;@enduml</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;***</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;\section download_t Download</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;@startuml</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;participant Host</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;participant BioMcu</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;hnote over Host : template</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;Host --&gt; BioMcu: CMD_TEMPLATE \nARG_DOWNLOAD \nARG_DATA[template]</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;hnote over BioMcu : template</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;BioMcu --&gt; Host: CMD_TEMPLATE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;@enduml</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;***</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;\section save_t Save</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;@startuml</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;participant Host</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;participant BioMcu</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;hnote over BioMcu : template</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;Host --&gt; BioMcu: CMD_TEMPLATE \nARG_SAVE \nARG_ID[id]</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;hnote over BioMcu : template[id] (nvm)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;BioMcu --&gt; Host: CMD_TEMPLATE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;@enduml</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;***</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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>

File diff suppressed because one or more lines are too long

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>&#160;\page sensor Sensor operations</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;\section wait_up_s Wait for finger up</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;@startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;Host --&gt; BioMcu: CMD_WAIT \nARG_FINGER_UP \nARG_TIMEOUT[timeout]</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;... Wait for finger up...</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;BioMcu --&gt; Host: CMD_WAIT \nARG_RESULT[bep_result]</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;@enduml</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;***</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;\section wait_down_s Wait for finger down</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;@startuml</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;Host --&gt; BioMcu: CMD_WAIT \nARG_FINGER_DOWN \nARG_TIMEOUT[timeout]</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;... Wait for finger down...</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;BioMcu --&gt; Host: CMD_WAIT \nARG_RESULT[bep_result]</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;@enduml</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;***</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;\section sensor_reset_s Reset sensor</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;@startuml</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;Host --&gt; BioMcu : CMD_SENSOR \nARG_RESET</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;rnote over BioMcu : fpc_bep_sensor_reset</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;BioMcu --&gt; Host : CMD_SENSOR \nARG_RESULT[bep_result]</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;@enduml</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;***</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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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>&#160;\page device Device operations</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;\section reset_d Reset device</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;@startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;Host --&gt; BioMcu: CMD_RESET</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;BioMcu --&gt; Host: CMD_RESET \nARG_RESULT[bep_result]</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;rnote over BioMcu: Reset</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;@enduml</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;***</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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;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&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="functions.html"><span>Data&#160;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;">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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>

View 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" ]
];

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

BIN
hcp/doxygen/html/bc_s.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
hcp/doxygen/html/bdwn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

90
hcp/doxygen/html/bio.html Normal file
View 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
&#160;<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&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;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&#160;Structures</span></a></li>
<li class="current"><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="functions.html"><span>Data&#160;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">&#160;&#160;f&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structfpc__com__chain__private.html">fpc_com_chain_private</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structfpc__com__packet__transport.html">fpc_com_packet_transport</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structfpc__hcp__packet.html">fpc_hcp_packet</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structfpc__com__packet__link.html">fpc_com_packet_link</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structfpc__hcp__arg__data.html">fpc_hcp_arg_data</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="structfpc__com__chain.html">fpc_com_chain</a>&#160;&#160;&#160;</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

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

View 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
&#160;<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&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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>

View 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 -&gt; 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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 &rarr; 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>

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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 &#160;</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">&#160;</td><td class="mdescRight">Communication link layer implementation. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:fpc__com__transport_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</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">&#160;</td><td class="mdescRight">Communication transport layer implementation. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:fpc__hcp_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</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">&#160;</td><td class="mdescRight">Host Communication Protocol implementation. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</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>

View 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" ]
];

View File

@ -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>

View File

@ -0,0 +1 @@
078edd713872194e35fdc26e1b4695d3

View File

@ -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&#45;&gt;dir_bfccd401955b95cf8c75461437045ac0 -->
<g id="edge1" class="edge"><title>dir_68267d1309a1af8e8297ef4c3efbcdba&#45;&gt;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&#45;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

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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 &#160;</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">&#160;</td><td class="mdescRight">Communication chain type definitions. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:fpc__com__link_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</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">&#160;</td><td class="mdescRight">Communication link interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:fpc__com__packets_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</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">&#160;</td><td class="mdescRight">Communication packet type definitions. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:fpc__com__result_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</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">&#160;</td><td class="mdescRight">Communication result type definitions. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:fpc__com__transport_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</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">&#160;</td><td class="mdescRight">Communication transport interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:fpc__hcp_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</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">&#160;</td><td class="mdescRight">Host Communication Protocol interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:fpc__hcp__common_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</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">&#160;</td><td class="mdescRight">Host Communication Protocol common type definitions. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</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>

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

1475
hcp/doxygen/html/doxygen.css Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View 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('&#9660;');
$(this).show();
} else if (l==level+1) {
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
a.html('&#9658;');
$(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('&#9658;');
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('&#9660;');
// 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('&#9658;');
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 });
});
});

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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>

View File

@ -0,0 +1,5 @@
var files =
[
[ "inc", "dir_bfccd401955b95cf8c75461437045ac0.html", "dir_bfccd401955b95cf8c75461437045ac0" ],
[ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ]
];

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<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 &lt;stdint.h&gt;</code><br />
<code>#include &quot;<a class="el" href="fpc__com__result_8h_source.html">fpc_com_result.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="fpc__hcp__common_8h_source.html">fpc_hcp_common.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="fpc__com__packets_8h_source.html">fpc_com_packets.h</a>&quot;</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 &#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</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">&#160;</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>&#160;</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">&#160;</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">&#160;</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>&#160;</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">&#160;</td><td class="mdescRight">Communication chain. <a href="#a1530dd4e8729e5f546a96abc5ac0a6de">More...</a><br /></td></tr>
<tr class="separator:a1530dd4e8729e5f546a96abc5ac0a6de"><td class="memSeparator" colspan="2">&#160;</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 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005">fpc_com_chain_dir_t</a> { <br />
&#160;&#160;<a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005afe8870bc644ab21ffad73d3045febd4d">FPC_COM_CHAIN_TX</a> = 0,
<br />
&#160;&#160;<a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005aa50bc934637a1ceea907810ccdd36e1c">FPC_COM_CHAIN_RX</a> = 1
<br />
}<tr class="memdesc:aed3b93f1297ab69d5bd87603d4d00005"><td class="mdescLeft">&#160;</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">&#160;</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&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="aed3b93f1297ab69d5bd87603d4d00005aa50bc934637a1ceea907810ccdd36e1c"></a>FPC_COM_CHAIN_RX&#160;</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>

View 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 ]
] ]
];

View 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>

View File

@ -0,0 +1 @@
1da3230b9ede79419647e0f9db2fcf4a

View 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&#45;&gt;Node2 -->
<g id="edge1" class="edge"><title>Node1&#45;&gt;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&#45;&gt;Node5 -->
<g id="edge4" class="edge"><title>Node1&#45;&gt;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&#45;&gt;Node6 -->
<g id="edge6" class="edge"><title>Node1&#45;&gt;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&#45;&gt;Node3 -->
<g id="edge2" class="edge"><title>Node2&#45;&gt;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&#45;&gt;Node4 -->
<g id="edge3" class="edge"><title>Node2&#45;&gt;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&#45;&gt;Node4 -->
<g id="edge5" class="edge"><title>Node5&#45;&gt;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&#45;&gt;Node7 -->
<g id="edge7" class="edge"><title>Node6&#45;&gt;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

View 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>

View File

@ -0,0 +1 @@
f3463291a698aa7de197e31a9e7ef155

View 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&#45;&gt;Node2 -->
<g id="edge1" class="edge"><title>Node1&#45;&gt;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&#45;&gt;Node3 -->
<g id="edge2" class="edge"><title>Node1&#45;&gt;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&#45;&gt;Node4 -->
<g id="edge4" class="edge"><title>Node1&#45;&gt;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&#45;&gt;Node6 -->
<g id="edge7" class="edge"><title>Node1&#45;&gt;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&#45;&gt;Node2 -->
<g id="edge3" class="edge"><title>Node3&#45;&gt;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&#45;&gt;Node2 -->
<g id="edge5" class="edge"><title>Node4&#45;&gt;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&#45;&gt;Node5 -->
<g id="edge6" class="edge"><title>Node4&#45;&gt;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&#45;&gt;Node2 -->
<g id="edge8" class="edge"><title>Node6&#45;&gt;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

File diff suppressed because one or more lines are too long

View 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
&#160;<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&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;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 &lt;string.h&gt;</code><br />
<code>#include &lt;stdlib.h&gt;</code><br />
<code>#include &quot;<a class="el" href="fpc__com__link_8h_source.html">fpc_com_link.h</a>&quot;</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>&#160;</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">&#160;</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">&#160;</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>&#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:a3e60e21a5ac4ad4881e4929de2f3c2f4"><td class="memItemLeft" align="right" valign="top">uint16_t&#160;</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">&#160;</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">&#160;</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 *&#160;</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> *&#160;</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> *&#160;</td>
<td class="paramname"><em>chain</em>&#160;</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> *&#160;</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> *&#160;</td>
<td class="paramname"><em>chain</em>&#160;</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>

View 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 ]
];

View 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>

View File

@ -0,0 +1 @@
5ae4569dea06540c6706ee9e9b27db36

View 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&#45;&gt;Node2 -->
<g id="edge1" class="edge"><title>Node1&#45;&gt;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&#45;&gt;Node3 -->
<g id="edge2" class="edge"><title>Node1&#45;&gt;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&#45;&gt;Node4 -->
<g id="edge3" class="edge"><title>Node1&#45;&gt;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&#45;&gt;Node5 -->
<g id="edge4" class="edge"><title>Node4&#45;&gt;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&#45;&gt;Node6 -->
<g id="edge5" class="edge"><title>Node4&#45;&gt;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&#45;&gt;Node7 -->
<g id="edge6" class="edge"><title>Node4&#45;&gt;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&#45;&gt;Node8 -->
<g id="edge8" class="edge"><title>Node4&#45;&gt;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&#45;&gt;Node6 -->
<g id="edge7" class="edge"><title>Node7&#45;&gt;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&#45;&gt;Node6 -->
<g id="edge9" class="edge"><title>Node8&#45;&gt;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&#45;&gt;Node7 -->
<g id="edge10" class="edge"><title>Node8&#45;&gt;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&#45;&gt;Node9 -->
<g id="edge11" class="edge"><title>Node8&#45;&gt;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&#45;&gt;Node10 -->
<g id="edge14" class="edge"><title>Node8&#45;&gt;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&#45;&gt;Node5 -->
<g id="edge13" class="edge"><title>Node9&#45;&gt;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&#45;&gt;Node6 -->
<g id="edge12" class="edge"><title>Node9&#45;&gt;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&#45;&gt;Node6 -->
<g id="edge15" class="edge"><title>Node10&#45;&gt;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

View File

@ -0,0 +1,3 @@
<map id="fpc_com_link_transmit" name="fpc_com_link_transmit">
<area shape="rect" id="node2" href="$fpc__com__link_8c.html#a3e60e21a5ac4ad4881e4929de2f3c2f4" title="Returns the overhead of the layer. " alt="" coords="207,5,391,32"/>
</map>

View File

@ -0,0 +1 @@
1079db44f9fcfecbed78b0a2bbb98b54

View File

@ -0,0 +1,31 @@
<?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: fpc_com_link_transmit Pages: 1 -->
<svg width="297pt" height="28pt"
viewBox="0.00 0.00 297.00 28.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 24)">
<title>fpc_com_link_transmit</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-24 293,-24 293,4 -4,4"/>
<!-- Node1 -->
<g id="node1" class="node"><title>Node1</title>
<polygon fill="#bfbfbf" stroke="black" points="0,-0.5 0,-19.5 115,-19.5 115,-0.5 0,-0.5"/>
<text text-anchor="middle" x="57.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_com_link_transmit</text>
</g>
<!-- Node2 -->
<g id="node2" class="node"><title>Node2</title>
<g id="a_node2"><a xlink:href="fpc__com__link_8c.html#a3e60e21a5ac4ad4881e4929de2f3c2f4" target="_top" xlink:title="Returns the overhead of the layer. ">
<polygon fill="white" stroke="black" points="151,-0.5 151,-19.5 289,-19.5 289,-0.5 151,-0.5"/>
<text text-anchor="middle" x="220" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_com_link_get_overhead</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node2 -->
<g id="edge1" class="edge"><title>Node1&#45;&gt;Node2</title>
<path fill="none" stroke="midnightblue" d="M115.086,-10C123.389,-10 132.064,-10 140.708,-10"/>
<polygon fill="midnightblue" stroke="midnightblue" points="140.817,-13.5001 150.817,-10 140.817,-6.5001 140.817,-13.5001"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More