Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a96545ddb1 | |||
| 8d1c2ff0e4 | |||
| d40202553f | |||
| 02bf23c840 | |||
| 630568b4d1 | |||
| 66be660f6d | |||
| 6bdc768fbc | |||
| 764c9e3796 | |||
| 9ec34a39ef | |||
| 00d00350ab | |||
| 10e32cc38d |
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
out
|
||||
.cproject
|
||||
.project
|
||||
.cortex-debug.*.json
|
||||
|
||||
4
.vscode/c_cpp_properties.json
vendored
@ -2,7 +2,7 @@
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"defines": ["NRF52840_XXAA", "BOARD_PCA10056"],
|
||||
"defines": ["NRF52840_XXAA", "BOARD_PCA10056", "BMLITE_USE_CALLBACK"],
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++17",
|
||||
"intelliSenseMode": "${default}",
|
||||
@ -20,7 +20,7 @@
|
||||
"/usr/arm-none-eabi/include/c++/7.3.1/arm-none-eabi",
|
||||
"/usr/arm-none-eabi/include/c++/7.3.1/backward",
|
||||
"${workspaceFolder}/BMLite_example/inc",
|
||||
"${workspaceFolder}/hcp/inc",
|
||||
"${workspaceFolder}/BMLite_sdk/inc",
|
||||
"${workspaceFolder}/HAL_Driver/CMSIS/Include",
|
||||
"${workspaceFolder}/HAL_Driver/inc",
|
||||
"${workspaceFolder}/HAL_Driver/sdk",
|
||||
|
||||
29
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Cortex Debug",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"executable": "${workspaceRoot}/BMLite_example/out/bmlite_demo",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "jlink",
|
||||
"device": "nRF52840_xxAA",
|
||||
"interface": "swd",
|
||||
"runToMain": true,
|
||||
|
||||
// "postLaunchCommands": [
|
||||
// "flush regs",
|
||||
// "load"
|
||||
// ],
|
||||
// "postRestartCommands": [
|
||||
// "flush regs",
|
||||
// "load"
|
||||
// ],
|
||||
"gdbTarget": "/opt/SEGGER/JLink/JLinkGDBServer"
|
||||
}
|
||||
]
|
||||
}
|
||||
3
.vscode/tasks.json
vendored
@ -13,7 +13,8 @@
|
||||
},
|
||||
"problemMatcher": {
|
||||
"base": "$gcc",
|
||||
"fileLocation": ["relative", "${workspaceFolder}/BMLite_example", "absolute"]
|
||||
// "fileLocation": ["absolute", "${workspaceFolder}/MBLite_exapmle"]
|
||||
"fileLocation": ["relative", "${workspaceFolder}/BMLite_example"]
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
|
||||
@ -27,6 +27,7 @@ OUT := out
|
||||
DEPTH :=
|
||||
HCP_PATH := ../hcp
|
||||
MCUHAL_PATH := ../HAL_Driver
|
||||
BMLITE_PATH := ../BMLite_sdk
|
||||
|
||||
# Main target
|
||||
TARGET := $(OUT)/$(PRODUCT)
|
||||
@ -45,6 +46,9 @@ CFLAGS +=\
|
||||
-mthumb \
|
||||
-g \
|
||||
|
||||
CFLAGS +=\
|
||||
-DBMLITE_USE_CALLBACK
|
||||
|
||||
#-Og\
|
||||
|
||||
# -g3\
|
||||
@ -69,8 +73,9 @@ PATH_INC += inc
|
||||
|
||||
C_INC = $(addprefix -I,$(PATH_INC))
|
||||
|
||||
# Include HCP
|
||||
include $(HCP_PATH)/hcp.mk
|
||||
# Include BM-Lite SDK
|
||||
include $(BMLITE_PATH)/bmlite.mk
|
||||
# Include HAL
|
||||
include $(MCUHAL_PATH)/nordic.mk
|
||||
|
||||
# Object files and search paths
|
||||
|
||||
@ -1,250 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Fingerprint Cards AB
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#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
|
||||
|
||||
|
||||
typedef enum {
|
||||
BMLITE_ERROR_OK = 0,
|
||||
BMLITE_ERROR_CAPTURE,
|
||||
BMLITE_ERROR_CAPTURE_START,
|
||||
BMLITE_ERROR_ENROLL_START,
|
||||
BMLITE_ERROR_ENROLL_ADD,
|
||||
BMLITE_ERROR_ENROLL_FINISH,
|
||||
BMLITE_ERROR_WRONG_ANSWER,
|
||||
BMLITE_ERROR_FINGER_WAIT,
|
||||
BMLITE_ERROR_IDENTYFY,
|
||||
BMLITE_ERROR_TEMPLATE_SAVE,
|
||||
BMLITE_ERROR_TEMPLATE_DELETE,
|
||||
BMLITE_ERROR_TEMPLATE_COUNT,
|
||||
BMLITE_ERROR_TEMPLATE_GETIDS,
|
||||
BMLITE_ERROR_IMAGE_EXTRACT,
|
||||
BMLITE_ERROR_IMAGE_GETSIZE,
|
||||
BMLITE_ERROR_IMAGE_GET,
|
||||
BMLITE_ERROR_GETVERSION,
|
||||
BMLITE_ERROR_SW_RESET,
|
||||
BMLITE_ERROR_CALIBRATE,
|
||||
BMLITE_ERROR_CALIBRATE_DELETE,
|
||||
BMLITE_ERROR_SEND_CMD
|
||||
} bmlite_error_t;
|
||||
|
||||
/**
|
||||
* @brief Error Callback function
|
||||
*
|
||||
* @param[in] Callback Error Code
|
||||
* @param[in] BEP result code
|
||||
*/
|
||||
void bmlite_on_error(bmlite_error_t error, int32_t value);
|
||||
|
||||
/**
|
||||
* @brief Starting Capture Callback function
|
||||
*/
|
||||
void bmlite_on_start_capture();
|
||||
|
||||
/**
|
||||
* @brief Finishing Capture Callback function
|
||||
*/
|
||||
void bmlite_on_finish_capture();
|
||||
|
||||
/**
|
||||
* @brief Starting Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_start_enroll();
|
||||
|
||||
/**
|
||||
* @brief Finishing Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_finish_enroll();
|
||||
|
||||
/**
|
||||
* @brief Starting Capture for Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_start_enrollcapture();
|
||||
|
||||
/**
|
||||
* @brief Finishing Capture for Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_finish_enrollcapture();
|
||||
|
||||
/**
|
||||
* @brief Starting Identify Callback function
|
||||
*/
|
||||
void bmlite_on_identify_start();
|
||||
|
||||
/**
|
||||
* @brief Finishing Identify Callback function
|
||||
*/
|
||||
void bmlite_on_identify_finish();
|
||||
|
||||
|
||||
/**
|
||||
* @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 */
|
||||
@ -1,59 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Fingerprint Cards AB
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file com_app_cleartext.h
|
||||
* @brief TODO
|
||||
*/
|
||||
|
||||
#ifndef COM_APP_CLEARTEXT_H
|
||||
#define COM_APP_CLEARTEXT_H
|
||||
|
||||
#include "fpc_com_chain.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/**
|
||||
* Sends a packet over the physical link in blocking mode.
|
||||
*
|
||||
* @param packet Packet to transmit.
|
||||
* @param chain The transmit chain to use.
|
||||
* @return ::fpc_com_result_t
|
||||
*/
|
||||
fpc_com_result_t com_app_clr_transmit(fpc_com_chain_t *chain);
|
||||
|
||||
/**
|
||||
* Receives a packet from the physical link.
|
||||
*
|
||||
* @param packet Packet to populate.
|
||||
* @param chain The transmit chain to use.
|
||||
* @return ::fpc_com_result_t
|
||||
*/
|
||||
fpc_com_result_t com_app_clr_receive(fpc_com_chain_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Returns the overhead of the layer.
|
||||
* @return Overhead size in bytes.
|
||||
*/
|
||||
uint16_t com_app_clr_get_overhead(uint16_t *offset);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* COM_APP_CLEARTEXT_H */
|
||||
@ -1,98 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Fingerprint Cards AB
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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"
|
||||
|
||||
/**
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @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 */
|
||||
@ -1,534 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Fingerprint Cards AB
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file 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
|
||||
|
||||
/** Maximum attempts for capture image */
|
||||
static const uint8_t MAX_CAPTURE_ATTEMPTS = 15U;
|
||||
static const uint16_t CAPTURE_TIMEOUT = 3000;
|
||||
|
||||
/**
|
||||
* @brief Mock callback functions
|
||||
*/
|
||||
__attribute__((weak)) void bmlite_on_error(bmlite_error_t error, int32_t value) { (void)error; (void)value; }
|
||||
|
||||
__attribute__((weak)) void bmlite_on_start_capture() {}
|
||||
__attribute__((weak)) void bmlite_on_finish_capture() {}
|
||||
|
||||
__attribute__((weak)) void bmlite_on_finish_enroll() {}
|
||||
__attribute__((weak)) void bmlite_on_start_enroll() {}
|
||||
|
||||
__attribute__((weak)) void bmlite_on_start_enrollcapture() {}
|
||||
__attribute__((weak)) void bmlite_on_finish_enrollcapture() {}
|
||||
|
||||
__attribute__((weak)) void bmlite_on_identify_start() {}
|
||||
__attribute__((weak)) void bmlite_on_identify_finish() {}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @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)) {
|
||||
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)) {
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, 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 {
|
||||
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 {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
/* Capture finger down */
|
||||
bep_result = send_command(chain, CMD_CAPTURE, ARG_TIMEOUT, &timeout, sizeof(timeout));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_CAPTURE_START, bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
bmlite_on_start_capture();
|
||||
bep_result = receive_result_no_args(chain);
|
||||
bmlite_on_finish_capture();
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
bmlite_on_start_enroll();
|
||||
|
||||
/* Enroll start */
|
||||
bep_result = send_command(chain, CMD_ENROLL, ARG_START, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_ENROLL_START, bep_result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
bep_result = receive_result_no_args(chain);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_WRONG_ANSWER, bep_result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < MAX_CAPTURE_ATTEMPTS; ++i) {
|
||||
|
||||
bmlite_on_start_enrollcapture();
|
||||
bep_result = bep_capture(chain, CAPTURE_TIMEOUT);
|
||||
bmlite_on_finish_enrollcapture();
|
||||
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_CAPTURE, bep_result);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Enroll add */
|
||||
bep_result = send_command(chain, CMD_ENROLL, ARG_ADD, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_ENROLL_ADD, bep_result);
|
||||
continue;
|
||||
}
|
||||
|
||||
bep_result = receive_result_args1(chain, ARG_COUNT, &samples_remaining,
|
||||
sizeof(samples_remaining));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_WRONG_ANSWER, bep_result);
|
||||
continue;
|
||||
}
|
||||
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_FINGER_WAIT, bep_result);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Wait for finger to be lifted from sensor */
|
||||
bep_result = receive_result_no_args(chain);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_WRONG_ANSWER, 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) {
|
||||
bmlite_on_error(BMLITE_ERROR_ENROLL_FINISH, bep_result);
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
bmlite_on_finish_enroll();
|
||||
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;
|
||||
|
||||
bmlite_on_identify_start();
|
||||
bep_result = bep_capture(chain, CAPTURE_TIMEOUT);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_CAPTURE, bep_result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
bep_result = bep_image_extract(chain);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
bep_result = send_command(chain, CMD_IDENTIFY, ARG_NONE, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_IDENTYFY, bep_result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_WRONG_ANSWER, bep_result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
exit:
|
||||
bmlite_on_identify_finish();
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_TEMPLATE_SAVE, bep_result);
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_TEMPLATE_DELETE, bep_result);
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_TEMPLATE_COUNT, bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
bep_result = receive_result_args1(chain, ARG_COUNT, template_count, sizeof(template_count[0]));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_WRONG_ANSWER, 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) {
|
||||
bmlite_on_error(BMLITE_ERROR_TEMPLATE_GETIDS, bep_result);
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_WRONG_ANSWER, 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) {
|
||||
bmlite_on_error(BMLITE_ERROR_IMAGE_EXTRACT, bep_result);
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_IMAGE_GETSIZE, bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_IMAGE_GET, bep_result);
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_GETVERSION, bep_result);
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_SW_RESET, bep_result);
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_CALIBRATE, bep_result);
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_CALIBRATE_DELETE, bep_result);
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_FINGER_WAIT, bep_result);
|
||||
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) {
|
||||
bmlite_on_error(BMLITE_ERROR_FINGER_WAIT, bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
/* Wait for finger to be lifted from sensor */
|
||||
return receive_result_no_args(chain);
|
||||
}
|
||||
@ -1,66 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Fingerprint Cards AB
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file com_app_cleartext.c
|
||||
* @brief TODO
|
||||
*/
|
||||
|
||||
#include <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;
|
||||
}
|
||||
@ -1,193 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Fingerprint Cards AB
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 04/14/2020: Added SPI interfcae support
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file com_common.c
|
||||
* @brief TODO
|
||||
*/
|
||||
|
||||
#include <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)
|
||||
{
|
||||
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 */
|
||||
chain->phy_tx = platform_bmlite_send;
|
||||
chain->phy_rx = platform_bmlite_receive;
|
||||
|
||||
chain->phy_mtu_size[FPC_COM_CHAIN_TX] = size[FPC_COM_CHAIN_TX];
|
||||
chain->phy_mtu_size[FPC_COM_CHAIN_RX] = size[FPC_COM_CHAIN_RX];
|
||||
chain->phy_mtu_buffer[FPC_COM_CHAIN_TX] = buffer;
|
||||
chain->phy_mtu_buffer[FPC_COM_CHAIN_RX] = buffer + size[FPC_COM_CHAIN_TX];
|
||||
chain->phy_timeout_tx = 2000;
|
||||
chain->phy_timeout_rx = 2000;
|
||||
|
||||
chain->session = NULL;
|
||||
chain->context = context;
|
||||
}
|
||||
|
||||
fpc_bep_result_t com_to_bep_result(fpc_com_result_t result)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
switch (result) {
|
||||
case FPC_COM_RESULT_OK :
|
||||
bep_result = FPC_BEP_RESULT_OK;
|
||||
break;
|
||||
case FPC_COM_RESULT_NO_MEMORY:
|
||||
bep_result = FPC_BEP_RESULT_NO_MEMORY;
|
||||
break;
|
||||
case FPC_COM_RESULT_INVALID_ARGUMENT:
|
||||
bep_result = FPC_BEP_RESULT_INVALID_ARGUMENT;
|
||||
break;
|
||||
case FPC_COM_RESULT_NOT_IMPLEMENTED:
|
||||
bep_result = FPC_BEP_RESULT_NOT_IMPLEMENTED;
|
||||
break;
|
||||
case FPC_COM_RESULT_IO_ERROR:
|
||||
bep_result = FPC_BEP_RESULT_IO_ERROR;
|
||||
break;
|
||||
case FPC_COM_RESULT_TIMEOUT:
|
||||
bep_result = FPC_BEP_RESULT_TIMEOUT;
|
||||
break;
|
||||
default:
|
||||
bep_result = FPC_BEP_RESULT_GENERAL_ERROR;
|
||||
break;
|
||||
}
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t arg_add(fpc_hcp_packet_t *cmd, fpc_hcp_arg_t arg, const void *data, uint16_t size)
|
||||
{
|
||||
fpc_bep_result_t result = FPC_BEP_RESULT_OK;
|
||||
uint32_t *pointer;
|
||||
|
||||
if (cmd == NULL || data == NULL || size == 0) {
|
||||
result = FPC_BEP_RESULT_INVALID_ARGUMENT;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
pointer = malloc(size);
|
||||
if (pointer == NULL) {
|
||||
result = FPC_BEP_RESULT_NO_MEMORY;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
memcpy(pointer, data, size);
|
||||
if (fpc_hcp_arg_add(cmd, arg, size, true, pointer) == false) {
|
||||
free(pointer);
|
||||
result = FPC_BEP_RESULT_NO_RESOURCE;
|
||||
}
|
||||
|
||||
exit:
|
||||
return result;
|
||||
}
|
||||
@ -12,10 +12,9 @@
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by Andrey Perminov for running on microcontrollers
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for running on microcontrollers
|
||||
*/
|
||||
|
||||
|
||||
@ -27,11 +26,25 @@
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "bep_host_if.h"
|
||||
#include "com_common.h"
|
||||
#include "bmlite_if.h"
|
||||
#include "hcp_tiny.h"
|
||||
#include "platform.h"
|
||||
#include "bmlite_hal.h"
|
||||
|
||||
#define DATA_BUFFER_SIZE (1024*5)
|
||||
static uint8_t hcp_txrx_buffer[MTU];
|
||||
static uint8_t hcp_data_buffer[DATA_BUFFER_SIZE];
|
||||
|
||||
static HCP_comm_t hcp_chain = {
|
||||
.read = platform_bmlite_receive,
|
||||
.write = platform_bmlite_send,
|
||||
.pkt_buffer = hcp_data_buffer,
|
||||
.txrx_buffer = hcp_txrx_buffer,
|
||||
.pkt_size = 0,
|
||||
.pkt_size_max = sizeof(hcp_data_buffer),
|
||||
.phy_rx_timeout = 2000,
|
||||
};
|
||||
|
||||
void bmlite_on_error(bmlite_error_t error, int32_t value)
|
||||
{
|
||||
if(value != FPC_BEP_RESULT_TIMEOUT) {
|
||||
@ -75,15 +88,7 @@ void bmlite_on_identify_start()
|
||||
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
int baudrate = 4000000;
|
||||
uint8_t buffer[512];
|
||||
uint16_t size[2] = { 256, 256 };
|
||||
fpc_com_chain_t hcp_chain;
|
||||
|
||||
platform_init(baudrate);
|
||||
|
||||
init_com_chain(&hcp_chain, buffer, size, NULL);
|
||||
hcp_chain.channel = 1;
|
||||
platform_init(NULL);
|
||||
|
||||
{
|
||||
char version[100];
|
||||
@ -97,23 +102,29 @@ int main (int argc, char **argv)
|
||||
|
||||
while (1)
|
||||
{
|
||||
uint32_t btn_time = platform_get_button_press_time();
|
||||
uint32_t btn_time = hal_get_button_press_time();
|
||||
hal_set_leds(BMLITE_LED_STATUS_READY,0);
|
||||
if (btn_time < 200) {
|
||||
// nothing hapened
|
||||
} else if (btn_time < 5000) {
|
||||
// Enroll
|
||||
res = bep_enroll_finger(&hcp_chain);
|
||||
res = bep_save_template(&hcp_chain, current_id++);
|
||||
res = bep_template_save(&hcp_chain, current_id++);
|
||||
} else {
|
||||
// Erase All templates
|
||||
hal_set_leds(BMLITE_LED_STATUS_DELETE_TEMPLATES, true);
|
||||
res = bep_delete_template(&hcp_chain, REMOVE_ID_ALL_TEMPLATES);
|
||||
res = bep_template_remove_all(&hcp_chain);
|
||||
current_id = 0;
|
||||
}
|
||||
res = bep_identify_finger(&hcp_chain, &template_id, &match);
|
||||
if (res != FPC_BEP_RESULT_OK)
|
||||
res = bep_identify_finger(&hcp_chain, 0, &template_id, &match);
|
||||
if (res == FPC_BEP_RESULT_TIMEOUT) {
|
||||
platform_bmlite_reset();
|
||||
} else if (res != FPC_BEP_RESULT_OK) {
|
||||
continue;
|
||||
}
|
||||
hal_set_leds(BMLITE_LED_STATUS_MATCH, match);
|
||||
res = sensor_wait_finger_not_present(&hcp_chain, 0);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
13
BMLite_sdk/bmlite.mk
Normal file
@ -0,0 +1,13 @@
|
||||
# Binary sources
|
||||
|
||||
BMLITE_SDK = $(DEPTH)../BMLite_sdk
|
||||
|
||||
VPATH += $(BMLITE_SDK)
|
||||
|
||||
C_INC += -I$(BMLITE_SDK)/inc
|
||||
|
||||
# Source Folders
|
||||
VPATH += $(BMLITE_SDK)/src/
|
||||
|
||||
# C Sources
|
||||
C_SRCS += $(notdir $(wildcard $(BMLITE_SDK)/src/*.c))
|
||||
@ -1,5 +1,21 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bmlite.h
|
||||
* @file bmlite_hal.h
|
||||
* @brief BM-Lite HAL functions.
|
||||
*
|
||||
* All functions must be implemented in order to support BM-Lite on a Board
|
||||
@ -8,15 +24,39 @@
|
||||
#ifndef BMLITE_H
|
||||
#define BMLITE_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "fpc_bep_types.h"
|
||||
#include "platform.h"
|
||||
|
||||
#ifdef __arm__
|
||||
typedef uint32_t hal_tick_t;
|
||||
#else
|
||||
typedef uint64_t hal_tick_t;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief LED status.
|
||||
*
|
||||
* Different LED status.
|
||||
*/
|
||||
typedef enum {
|
||||
BMLITE_LED_STATUS_READY = 0,
|
||||
BMLITE_LED_STATUS_MATCH,
|
||||
BMLITE_LED_STATUS_WAITTOUCH,
|
||||
BMLITE_LED_STATUS_ENROLL,
|
||||
BMLITE_LED_STATUS_DELETE_TEMPLATES,
|
||||
BMLITE_LED_STATUS_ERROR,
|
||||
} platform_led_status_t;
|
||||
|
||||
|
||||
/*
|
||||
* @brief Board initialization
|
||||
* @param[in] SPI CLK speed
|
||||
* @param[in] params - pointer to additional parameters
|
||||
*/
|
||||
|
||||
void hal_board_init(uint32_t speed_hz);
|
||||
fpc_bep_result_t hal_board_init(void *params);
|
||||
|
||||
/*
|
||||
* @brief Control BM-Lite Reset pin
|
||||
@ -52,7 +92,7 @@ void hal_timebase_init(void);
|
||||
*
|
||||
* @return Tick count since hal_timebase_init() call. [ms]
|
||||
*/
|
||||
uint32_t hal_timebase_get_tick(void);
|
||||
hal_tick_t hal_timebase_get_tick(void);
|
||||
|
||||
/**
|
||||
* @brief Busy wait.
|
||||
@ -63,17 +103,25 @@ uint32_t hal_timebase_get_tick(void);
|
||||
*/
|
||||
void hal_timebase_busy_wait(uint32_t ms);
|
||||
|
||||
/*
|
||||
/**
|
||||
* Optional functions for Buttons & Leds control
|
||||
*/
|
||||
|
||||
/*
|
||||
/**
|
||||
* @brief Get button press time (msec)
|
||||
*
|
||||
* @return ::uint32_t
|
||||
*/
|
||||
uint32_t hal_get_button_press_time();
|
||||
uint32_t hal_get_button_press_time(void);
|
||||
|
||||
/*
|
||||
/**
|
||||
* @brief Check if button was pressed and released.
|
||||
*
|
||||
* @return Button press time in milli seconds.
|
||||
*/
|
||||
uint32_t hal_check_button_pressed(void);
|
||||
|
||||
/**
|
||||
* @brief Set LED(s) status
|
||||
* @param[in] Status
|
||||
* @param[in] Status modifier
|
||||
365
BMLite_sdk/inc/bmlite_if.h
Normal file
@ -0,0 +1,365 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef BMLITE_IF_H
|
||||
#define BMLITE_IF_H
|
||||
|
||||
#include "hcp_tiny.h"
|
||||
#include "bmlite_if_callbacks.h"
|
||||
|
||||
/**
|
||||
* @brief Enroll finger. Created template must be saved to FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_enroll_finger(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Capture and identify finger against existing templates in Flash storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] timeout - timeout (msec). Maximum timeout 65535 msec
|
||||
* set to 0 for waiting indefinitely
|
||||
*
|
||||
* @param[out] template_id - pointer for matched template ID
|
||||
* @param[out] match - pointer to match result
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_identify_finger(HCP_comm_t *chain, uint32_t timeout,
|
||||
uint16_t *template_id, bool *match);
|
||||
|
||||
/**
|
||||
* @brief Wait for finger present on sensor"
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] timeout - timeout (msec). Maximum timeout 65535 msec
|
||||
* set to 0 for waiting indefinitely
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t sensor_wait_finger_present(HCP_comm_t *chain, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* @brief Wait for finger not present on sensor"
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] timeout - timeout (msec). Maximum timeout 65535 msec
|
||||
* set to 0 for waiting indefinitely
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t sensor_wait_finger_not_present(HCP_comm_t *chain, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* @brief Wait for finger present on sensor and capture image"
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] timeout - timeout (msec). Maximum timeout 65535 msec
|
||||
* set to 0 for waiting indefinitely
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_capture(HCP_comm_t *chain, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* @brief Get size of captured image
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @param[out] size
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_image_get_size(HCP_comm_t *chain, uint32_t *size);
|
||||
|
||||
/**
|
||||
* @brief Allocates image buffer on FPC BM-LIte
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t image_create(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Deletes image buffer on FPC BM-LIte
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t image_delete(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Pull captured image from FPC BM-Lite
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @param[in] data - pointer to image buffer
|
||||
* @param[in] size - size of the image buffer
|
||||
* if buffer size is not enough the image
|
||||
* will be truncated
|
||||
* chain->arg.size will contain real size of the image
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_image_get(HCP_comm_t *chain, uint8_t *data, uint32_t size);
|
||||
|
||||
/**
|
||||
* @brief Push image to FPC BM-Lite
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @param[in] data - pointer to image buffer
|
||||
* @param[in] size - size of the image buffer
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_image_put(HCP_comm_t *chain, uint8_t *data, uint32_t size);
|
||||
|
||||
/**
|
||||
* @brief Extract image features to prepare image for enrolling or matching
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_image_extract(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Identify prepared image against existing templates in Flash storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_identify(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Save template after enroll is finished to FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[out] template_id - template ID
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_save(HCP_comm_t *chain, uint16_t template_id);
|
||||
|
||||
/**
|
||||
* @brief Remove template from RAM
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] template_id - template ID
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_remove_ram(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Pull template stored in RAM from FPC BM-Lite
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @param[in] data - pointer to template buffer
|
||||
* @param[in] size - size of the template buffer
|
||||
* if buffer size is not enough the template
|
||||
* will be truncated
|
||||
* chain->arg.size will contain real size of the template
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_get(HCP_comm_t *chain, uint8_t *data, uint32_t size);
|
||||
|
||||
/**
|
||||
* @brief Push template to FPC BM-Lite and stored it to RAM
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @param[in] data - pointer to template buffer
|
||||
* @param[in] size - size of the template buffer
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_put(HCP_comm_t *chain, uint8_t *data, uint16_t length);
|
||||
|
||||
/**
|
||||
* @brief Remove template from FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] template_id - template ID
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_remove(HCP_comm_t *chain, uint16_t template_id);
|
||||
|
||||
/**
|
||||
* @brief Remove all templates from FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_remove_all(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Copy template from FLASH storage to RAM
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] template_id - template ID
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_load_storage(HCP_comm_t *chain, uint16_t template_id);
|
||||
|
||||
/**
|
||||
* @brief Remove template from FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[out] template_id - template ID
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_template_get_count(HCP_comm_t *chain, uint16_t *count);
|
||||
|
||||
/**
|
||||
* @brief Get array of template ID stored on FPC BM-LIte
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @return ::fpc_bep_result_t
|
||||
* chain->arg.data - pointer to array of uint16_t of IDs
|
||||
* chain->arg.size - length of the array (in bytes). For calculating
|
||||
* number of templates divide the arg.size by 2
|
||||
*/
|
||||
fpc_bep_result_t bep_template_get_ids(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Software reset of FCP BM-Lite
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_sw_reset(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Calibrate FPC BM-LIte sensor and store calibration data to FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*
|
||||
* FPC BM-Lite must be restarted to activate new calibration data
|
||||
*/
|
||||
fpc_bep_result_t bep_sensor_calibrate(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Remove FPC BM-LIte sensor calibration data from FLASH storage
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*
|
||||
* FPC BM-Lite must be restarted to activate
|
||||
*/
|
||||
fpc_bep_result_t bep_sensor_calibrate_remove(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Get version of FPC BM-LIte firmware
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] version - pointer to data buffer
|
||||
* @param[in] size - size of the data buffer
|
||||
* if buffer size is not enough the data
|
||||
* will be truncated
|
||||
* chain->arg.size will contain real size of the data
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_version(HCP_comm_t *chain, char *version, int len);
|
||||
|
||||
/**
|
||||
* @brief Get version of FPC BM-LIte firmware
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] unique_id - pointer to data buffer
|
||||
* chain->arg.size will contain real size of the data
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_unique_id_get(HCP_comm_t *chain, uint8_t *unique_id);
|
||||
|
||||
/**
|
||||
* @brief Set requested UART communication speed
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] speed - UART speed
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_uart_speed_set(HCP_comm_t *chain, uint32_t speed);
|
||||
|
||||
/**
|
||||
* @brief Get current UART communication speed
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[out] speed - UART speed
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_uart_speed_get(HCP_comm_t *chain, uint32_t *speed);
|
||||
|
||||
/**
|
||||
* @brief Reset FPC BM-Lite fingerprint sensor
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bep_sensor_reset(HCP_comm_t *chain);
|
||||
|
||||
/**
|
||||
* @brief Build and send command to FPC BM-Lite and receive answer
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] cmd - BM-Lite command
|
||||
* @param[in] arg_type - Argument without parameters
|
||||
* set to ARG_NONE if the command has no argument
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_send_cmd(HCP_comm_t *chain, uint16_t cmd, uint16_t arg_type);
|
||||
|
||||
/**
|
||||
* @brief Build and send command with additiona argument with parameters
|
||||
*
|
||||
* @param[in] chain - HCP com chain
|
||||
* @param[in] cmd - BM-Lite command
|
||||
* @param[in] arg1_type - argument 1 without parameters
|
||||
* set to ARG_NONE if the command has no argument without paramener
|
||||
* @param[in] arg2_type - argument 2
|
||||
* @param[in] arg2_data - data pointer for argument 2
|
||||
* set to 0 if argument 2 has no parameter
|
||||
* @param[in] arg2_length - length of data for argument 2
|
||||
* set to 0 if argument 2 has no parameter
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_send_cmd_arg(HCP_comm_t *chain, uint16_t cmd, uint16_t arg1_type, uint16_t arg2_type, void *arg2_data, uint16_t arg2_length);
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
108
BMLite_sdk/inc/bmlite_if_callbacks.h
Normal file
@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef BMLITE_IF_CALLBACKS_H
|
||||
#define BMLITE_IF_CALLBACKS_H
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef BMLITE_USE_CALLBACK
|
||||
#define bmlite_on_error(error, value)
|
||||
#define bmlite_on_start_capture()
|
||||
#define bmlite_on_finish_capture()
|
||||
#define bmlite_on_finish_enroll()
|
||||
#define bmlite_on_start_enroll()
|
||||
#define bmlite_on_start_enrollcapture()
|
||||
#define bmlite_on_finish_enrollcapture()
|
||||
#define bmlite_on_identify_start()
|
||||
#define bmlite_on_identify_finish()
|
||||
|
||||
#else
|
||||
|
||||
typedef enum {
|
||||
BMLITE_ERROR_OK = 0,
|
||||
BMLITE_ERROR_CAPTURE,
|
||||
BMLITE_ERROR_CAPTURE_START,
|
||||
BMLITE_ERROR_ENROLL_START,
|
||||
BMLITE_ERROR_ENROLL_ADD,
|
||||
BMLITE_ERROR_ENROLL_FINISH,
|
||||
BMLITE_ERROR_WRONG_ANSWER,
|
||||
BMLITE_ERROR_FINGER_WAIT,
|
||||
BMLITE_ERROR_IDENTYFY,
|
||||
BMLITE_ERROR_TEMPLATE_SAVE,
|
||||
BMLITE_ERROR_TEMPLATE_DELETE,
|
||||
BMLITE_ERROR_TEMPLATE_COUNT,
|
||||
BMLITE_ERROR_TEMPLATE_GETIDS,
|
||||
BMLITE_ERROR_IMAGE_EXTRACT,
|
||||
BMLITE_ERROR_IMAGE_GETSIZE,
|
||||
BMLITE_ERROR_IMAGE_GET,
|
||||
BMLITE_ERROR_GETVERSION,
|
||||
BMLITE_ERROR_SW_RESET,
|
||||
BMLITE_ERROR_CALIBRATE,
|
||||
BMLITE_ERROR_CALIBRATE_DELETE,
|
||||
BMLITE_ERROR_SEND_CMD,
|
||||
BMLITE_ERROR_GET_ARG,
|
||||
} bmlite_error_t;
|
||||
|
||||
/**
|
||||
* @brief Error Callback function
|
||||
*
|
||||
* @param[in] Callback Error Code
|
||||
* @param[in] BEP result code
|
||||
*/
|
||||
void bmlite_on_error(bmlite_error_t error, int32_t value);
|
||||
|
||||
/**
|
||||
* @brief Starting Capture Callback function
|
||||
*/
|
||||
void bmlite_on_start_capture();
|
||||
|
||||
/**
|
||||
* @brief Finishing Capture Callback function
|
||||
*/
|
||||
void bmlite_on_finish_capture();
|
||||
|
||||
/**
|
||||
* @brief Starting Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_start_enroll();
|
||||
|
||||
/**
|
||||
* @brief Finishing Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_finish_enroll();
|
||||
|
||||
/**
|
||||
* @brief Starting Capture for Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_start_enrollcapture();
|
||||
|
||||
/**
|
||||
* @brief Finishing Capture for Enroll Callback function
|
||||
*/
|
||||
void bmlite_on_finish_enrollcapture();
|
||||
|
||||
/**
|
||||
* @brief Starting Identify Callback function
|
||||
*/
|
||||
void bmlite_on_identify_start();
|
||||
|
||||
/**
|
||||
* @brief Finishing Identify Callback function
|
||||
*/
|
||||
void bmlite_on_identify_finish();
|
||||
#endif // BMLITE_USE_CALLBACK
|
||||
|
||||
#endif
|
||||
@ -17,8 +17,9 @@
|
||||
#ifndef FPC_BEP_TYPES_H
|
||||
#define FPC_BEP_TYPES_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <stddef.h>
|
||||
/**
|
||||
* @file fpc_bep_types.h
|
||||
* @brief Biometric Embedded Platform types.
|
||||
146
BMLite_sdk/inc/hcp_tiny.h
Normal file
@ -0,0 +1,146 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef HCP_H
|
||||
#define HCP_H
|
||||
|
||||
#include "fpc_bep_types.h"
|
||||
#include "fpc_hcp_common.h"
|
||||
|
||||
/** MTU for HCP physical layer */
|
||||
#define MTU 256
|
||||
|
||||
/** Communication acknowledge definition */
|
||||
#define FPC_BEP_ACK 0x7f01ff7f
|
||||
|
||||
typedef struct {
|
||||
uint32_t size;
|
||||
uint8_t *data;
|
||||
} HCP_arg_t;
|
||||
|
||||
typedef struct {
|
||||
/** Send data to BM-Lite */
|
||||
fpc_bep_result_t (*write) (uint16_t, const uint8_t *, uint32_t, void *);
|
||||
/** Receive data from BM-Lite */
|
||||
fpc_bep_result_t (*read)(uint16_t, uint8_t *, uint32_t, void *);
|
||||
/** Receive timeout (msec). Applys ONLY to receiving packet from BM-Lite on physical layer */
|
||||
uint32_t phy_rx_timeout;
|
||||
/** Data buffer for application layer */
|
||||
uint8_t *pkt_buffer;
|
||||
/** Size of data buffer */
|
||||
uint32_t pkt_size_max;
|
||||
/** Current size of incoming or outcoming command packet */
|
||||
uint32_t pkt_size;
|
||||
/** Buffer of MTU size for transport layer */
|
||||
uint8_t *txrx_buffer;
|
||||
/** Values of last argument pulled by bmlite_get_arg
|
||||
Values are valid only right after bmlite_get_arg() call */
|
||||
HCP_arg_t arg;
|
||||
/** Result of execution command on BM-Lite */
|
||||
fpc_bep_result_t bep_result;
|
||||
} HCP_comm_t;
|
||||
|
||||
/**
|
||||
* @brief Send prepared command packet to FPC BM-LIte
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_send(HCP_comm_t *hcp_comm);
|
||||
|
||||
/**
|
||||
* @brief Receive answer from FPC BM-LIte
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_receive(HCP_comm_t *hcp_comm);
|
||||
|
||||
/**
|
||||
* @brief Send prepared command packet to FPC BM-LIte and receive answer
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
*
|
||||
* Returns result of executing command in BM-LIte in hcp_comm->bep_result
|
||||
* if communication with BM-Lite was successful.
|
||||
* Please not that some BM-Lite command does not return result in ARG_RESULT.
|
||||
* They return data with some other argument instead.
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_tranceive(HCP_comm_t *hcp_comm);
|
||||
|
||||
/**
|
||||
* @brief Initialize new command for BM-Lite
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
* @param[in] cmd - command to send
|
||||
* @param[in] arg - Argument for the command without parameterd
|
||||
* Use ARG_NONE and add arguments by bmlite_add_arg() if
|
||||
* you need to add argument with parameter
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_init_cmd(HCP_comm_t *hcp_comm, uint16_t cmd, uint16_t arg);
|
||||
|
||||
/**
|
||||
* @brief Add argument to command.
|
||||
* Must be used only after command buffer is initialized by bmlite_init_cmd()
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
* @param[in] arg_type - argument key
|
||||
* @param[in] arg_data - argument data
|
||||
* @param[in] arg_size - argument data length
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_add_arg(HCP_comm_t *hcp_comm, uint16_t arg_type, void *arg_data, uint16_t arg_size);
|
||||
|
||||
/**
|
||||
* @brief Search for argument in received answer.
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
* @param[in] arg_type - argument key
|
||||
*
|
||||
* If found, place pointer to argument data in receiving buffer to hcp_comm->arg.data
|
||||
* and size of the argument in hcp_comm->arg.size
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_get_arg(HCP_comm_t *hcp_comm, uint16_t arg_type);
|
||||
|
||||
/**
|
||||
* @brief Search for argument in received answer and copy argument's data
|
||||
* to arg_data
|
||||
*
|
||||
* @param[in] hcp_comm - pointer to HCP_comm struct
|
||||
* @param[in] arg_type - argument key
|
||||
* @param[out] arg_data - pointer for memory to copy argument value
|
||||
* @param[out] arg_data_size - size of data area for copying argument value
|
||||
*
|
||||
* If found, argument's data will be copyed to arg_data
|
||||
* If received argument's size greater that arg_data_size, the copyed data will be
|
||||
* truncated to arg_data_size.
|
||||
* Still hcp_comm->arg.data will be pointed to argument's data in receiving buffer
|
||||
* and real size of the argument will be hcp_comm->arg.size
|
||||
*
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
fpc_bep_result_t bmlite_copy_arg(HCP_comm_t *hcp_comm, uint16_t arg_key, void *arg_data, uint16_t arg_data_size);
|
||||
|
||||
#endif
|
||||
@ -12,8 +12,12 @@
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for FPC BM-Lite applications
|
||||
*/
|
||||
|
||||
|
||||
#ifndef PLATFORM_H
|
||||
#define PLATFORM_H
|
||||
|
||||
@ -26,28 +30,14 @@
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "fpc_com_result.h"
|
||||
|
||||
/**
|
||||
* @brief LED status.
|
||||
*
|
||||
* Different LED status.
|
||||
*/
|
||||
typedef enum {
|
||||
BMLITE_LED_STATUS_READY = 0,
|
||||
BMLITE_LED_STATUS_MATCH,
|
||||
BMLITE_LED_STATUS_WAITTOUCH,
|
||||
BMLITE_LED_STATUS_ENROLL,
|
||||
BMLITE_LED_STATUS_DELETE_TEMPLATES,
|
||||
BMLITE_LED_STATUS_ERROR,
|
||||
} platform_led_status_t;
|
||||
#include "fpc_bep_types.h"
|
||||
|
||||
/**
|
||||
* @brief Initializes board
|
||||
*
|
||||
* @param[in] speed_hz Baudrate.
|
||||
* @param[in] params - pointer to additional parameters.
|
||||
*/
|
||||
bool platform_init(uint32_t speed_hz);
|
||||
fpc_bep_result_t platform_init(void *params);
|
||||
|
||||
/**
|
||||
* @brief Does BM-Lite HW Reset
|
||||
@ -64,7 +54,7 @@ void platform_bmlite_reset(void);
|
||||
*
|
||||
* @return ::fpc_com_result_t
|
||||
*/
|
||||
fpc_com_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
fpc_bep_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
void *session);
|
||||
|
||||
/**
|
||||
@ -76,7 +66,7 @@ fpc_com_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32
|
||||
*
|
||||
* @return ::fpc_com_result_t
|
||||
*/
|
||||
fpc_com_result_t platform_bmlite_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
fpc_bep_result_t platform_bmlite_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
void *session);
|
||||
|
||||
/**
|
||||
@ -89,11 +79,4 @@ void platform_halt_if_debug(void);
|
||||
*/
|
||||
void platform_sw_reset(void) __attribute__((__noreturn__));
|
||||
|
||||
/**
|
||||
* @brief Get button press time.
|
||||
*
|
||||
* @return Button press time in milli seconds.
|
||||
*/
|
||||
uint32_t platform_get_button_press_time(void);
|
||||
|
||||
#endif /* PLATFORM_H */
|
||||
325
BMLite_sdk/src/bmlite_if.c
Normal file
@ -0,0 +1,325 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "hcp_tiny.h"
|
||||
#include "bmlite_if.h"
|
||||
#include "bmlite_hal.h"
|
||||
#include "platform.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "bmlite_if_callbacks.h"
|
||||
|
||||
#define MAX_CAPTURE_ATTEMPTS 15
|
||||
#define MAX_SINGLE_CAPTURE_ATTEMPTS 3
|
||||
#define CAPTURE_TIMEOUT 3000
|
||||
|
||||
#define exit_if_err(c) { bep_result = c; if(bep_result || chain->bep_result) goto exit; }
|
||||
|
||||
#define assert(c) { fpc_bep_result_t res = c; if(res) return res; }
|
||||
|
||||
#ifdef BMLITE_USE_CALLBACK
|
||||
/**
|
||||
* @brief Mock callback functions
|
||||
*/
|
||||
__attribute__((weak)) void bmlite_on_error(bmlite_error_t error, int32_t value) { (void)error; (void)value; }
|
||||
|
||||
__attribute__((weak)) void bmlite_on_start_capture() {}
|
||||
__attribute__((weak)) void bmlite_on_finish_capture() {}
|
||||
|
||||
__attribute__((weak)) void bmlite_on_start_enroll() {}
|
||||
__attribute__((weak)) void bmlite_on_finish_enroll() {}
|
||||
|
||||
__attribute__((weak)) void bmlite_on_start_enrollcapture() {}
|
||||
__attribute__((weak)) void bmlite_on_finish_enrollcapture() {}
|
||||
|
||||
__attribute__((weak)) void bmlite_on_identify_start() {}
|
||||
__attribute__((weak)) void bmlite_on_identify_finish() {}
|
||||
#endif
|
||||
|
||||
fpc_bep_result_t bep_enroll_finger(HCP_comm_t *chain)
|
||||
{
|
||||
uint32_t samples_remaining = 0;
|
||||
fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK;
|
||||
bool enroll_done = false;
|
||||
|
||||
bmlite_on_start_enroll();
|
||||
/* Enroll start */
|
||||
exit_if_err(bmlite_send_cmd(chain, CMD_ENROLL, ARG_START));
|
||||
|
||||
for (uint8_t i = 0; i < MAX_CAPTURE_ATTEMPTS; ++i) {
|
||||
|
||||
bmlite_on_start_enrollcapture();
|
||||
bep_result = bep_capture(chain, CAPTURE_TIMEOUT);
|
||||
bmlite_on_finish_enrollcapture();
|
||||
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Enroll add */
|
||||
bep_result = bmlite_send_cmd(chain, CMD_ENROLL, ARG_ADD);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
continue;
|
||||
}
|
||||
|
||||
bmlite_get_arg(chain, ARG_COUNT);
|
||||
samples_remaining = *(uint32_t *)chain->arg.data;
|
||||
// DEBUG("Enroll samples remaining: %d\n", samples_remaining);
|
||||
|
||||
/* Break enrolling if we can't collect enough correct images for enroll*/
|
||||
if (samples_remaining == 0U) {
|
||||
enroll_done = true;
|
||||
break;
|
||||
}
|
||||
|
||||
sensor_wait_finger_not_present(chain, 0);
|
||||
}
|
||||
|
||||
bep_result = bmlite_send_cmd(chain, CMD_ENROLL, ARG_FINISH);
|
||||
|
||||
exit:
|
||||
bmlite_on_finish_enroll();
|
||||
return (!enroll_done) ? FPC_BEP_RESULT_GENERAL_ERROR : bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_identify_finger(HCP_comm_t *chain, uint32_t timeout, uint16_t *template_id, bool *match)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
*match = false;
|
||||
|
||||
bmlite_on_identify_start();
|
||||
|
||||
exit_if_err(bep_capture(chain, timeout));
|
||||
exit_if_err(bep_image_extract(chain));
|
||||
exit_if_err(bep_identify(chain));
|
||||
exit_if_err(bmlite_get_arg(chain, ARG_MATCH));
|
||||
*match = *(bool *)chain->arg.data;
|
||||
if(*match) {
|
||||
bmlite_get_arg(chain, ARG_ID);
|
||||
*template_id = *(uint16_t *)chain->arg.data;
|
||||
// Delay for possible updating template on BM-Lite
|
||||
hal_timebase_busy_wait(50);
|
||||
}
|
||||
exit:
|
||||
bmlite_on_identify_finish();
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t sensor_wait_finger_present(HCP_comm_t *chain, uint16_t timeout)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
uint32_t prev_timeout = chain->phy_rx_timeout;
|
||||
|
||||
bmlite_on_start_capture();
|
||||
chain->phy_rx_timeout = timeout;
|
||||
bep_result = bmlite_send_cmd_arg(chain, CMD_WAIT, ARG_FINGER_DOWN, ARG_TIMEOUT, &timeout, sizeof(timeout));
|
||||
chain->phy_rx_timeout = prev_timeout;
|
||||
bmlite_on_finish_capture();
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t sensor_wait_finger_not_present(HCP_comm_t *chain, uint16_t timeout)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
uint32_t prev_timeout = chain->phy_rx_timeout;
|
||||
|
||||
chain->phy_rx_timeout = timeout;
|
||||
bep_result = bmlite_send_cmd_arg(chain, CMD_WAIT, ARG_FINGER_UP, ARG_TIMEOUT, &timeout, sizeof(timeout));
|
||||
chain->phy_rx_timeout = prev_timeout;
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_capture(HCP_comm_t *chain, uint16_t timeout)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
uint32_t prev_timeout = chain->phy_rx_timeout;
|
||||
|
||||
bmlite_on_start_capture();
|
||||
chain->phy_rx_timeout = timeout;
|
||||
for(int i=0; i< MAX_SINGLE_CAPTURE_ATTEMPTS; i++) {
|
||||
bep_result = bmlite_send_cmd_arg(chain, CMD_CAPTURE, ARG_NONE, ARG_TIMEOUT, &timeout, sizeof(timeout));
|
||||
if( !(bep_result || chain->bep_result))
|
||||
break;
|
||||
}
|
||||
chain->phy_rx_timeout = prev_timeout;
|
||||
bmlite_on_finish_capture();
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_image_get_size(HCP_comm_t *chain, uint32_t *size)
|
||||
{
|
||||
assert(bmlite_send_cmd(chain, CMD_IMAGE, ARG_SIZE));
|
||||
assert(bmlite_get_arg(chain, ARG_SIZE));
|
||||
|
||||
*size = *(uint32_t*)chain->arg.data;
|
||||
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
fpc_bep_result_t image_create(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_IMAGE, ARG_CREATE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t image_delete(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_IMAGE, ARG_DELETE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_image_get(HCP_comm_t *chain, uint8_t *data, uint32_t size)
|
||||
{
|
||||
assert(bmlite_send_cmd(chain, CMD_IMAGE, ARG_UPLOAD));
|
||||
return bmlite_copy_arg(chain, ARG_DATA, data, size);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_image_put(HCP_comm_t *chain, uint8_t *data, uint32_t size)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_IMAGE, ARG_DOWNLOAD, ARG_DATA, data, size);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_image_extract(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_IMAGE, ARG_EXTRACT);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_identify(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_IDENTIFY, ARG_NONE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_save(HCP_comm_t *chain, uint16_t template_id)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_TEMPLATE, ARG_SAVE, ARG_ID, &template_id, sizeof(template_id));
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_remove_ram(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_TEMPLATE, ARG_DELETE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_get(HCP_comm_t *chain, uint8_t *data, uint32_t size)
|
||||
{
|
||||
assert(bmlite_send_cmd(chain, CMD_TEMPLATE, ARG_UPLOAD));
|
||||
return bmlite_copy_arg(chain, ARG_DATA, data, size);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_put(HCP_comm_t *chain, uint8_t *data, uint16_t length)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_TEMPLATE, ARG_DOWNLOAD,
|
||||
ARG_DATA, data, length);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_remove(HCP_comm_t *chain, uint16_t template_id)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_STORAGE_TEMPLATE, ARG_DELETE,
|
||||
ARG_ID, &template_id, sizeof(template_id));
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_remove_all(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_STORAGE_TEMPLATE, ARG_DELETE,
|
||||
ARG_ALL, 0, 0);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_load_storage(HCP_comm_t *chain, uint16_t template_id)
|
||||
{
|
||||
return bmlite_send_cmd_arg(chain, CMD_STORAGE_TEMPLATE, ARG_UPLOAD,
|
||||
ARG_ID, &template_id, sizeof(template_id));
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_get_count(HCP_comm_t *chain, uint16_t *count)
|
||||
{
|
||||
assert(bmlite_send_cmd(chain, CMD_STORAGE_TEMPLATE, ARG_COUNT));
|
||||
assert(bmlite_get_arg(chain, ARG_COUNT));
|
||||
*count = *(uint16_t*)chain->arg.data;
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_get_ids(HCP_comm_t *chain)
|
||||
{
|
||||
assert(bmlite_send_cmd(chain, CMD_STORAGE_TEMPLATE, ARG_ID));
|
||||
return bmlite_get_arg(chain, ARG_DATA);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_sw_reset(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_RESET, ARG_NONE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_sensor_calibrate(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_STORAGE_CALIBRATION, ARG_NONE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_sensor_calibrate_remove(HCP_comm_t *chain)
|
||||
{
|
||||
return bmlite_send_cmd(chain, CMD_STORAGE_CALIBRATION, ARG_DELETE);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_version(HCP_comm_t *chain, char *version, int len)
|
||||
{
|
||||
assert(bmlite_send_cmd_arg(chain, CMD_INFO, ARG_GET, ARG_VERSION, 0, 0));
|
||||
return bmlite_copy_arg(chain, ARG_VERSION, version, len);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_unique_id_get(HCP_comm_t *chain, uint8_t *unique_id)
|
||||
{
|
||||
assert(bmlite_send_cmd_arg(chain, CMD_INFO, ARG_GET, ARG_UNIQUE_ID, 0, 0));
|
||||
return bmlite_copy_arg(chain, ARG_UNIQUE_ID, unique_id, 12);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_uart_speed_set(HCP_comm_t *chain, uint32_t speed)
|
||||
{
|
||||
assert(bmlite_init_cmd(chain, CMD_COMMUNICATION, ARG_SPEED));
|
||||
assert(bmlite_add_arg(chain, ARG_SET, 0, 0));
|
||||
assert(bmlite_add_arg(chain, ARG_DATA, (uint8_t*)&speed, sizeof(speed)));
|
||||
return bmlite_tranceive(chain);
|
||||
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_uart_speed_get(HCP_comm_t *chain, uint32_t *speed)
|
||||
{
|
||||
assert(bmlite_init_cmd(chain, CMD_COMMUNICATION, ARG_SPEED));
|
||||
assert(bmlite_add_arg(chain, ARG_GET, 0, 0));
|
||||
assert(bmlite_tranceive(chain));
|
||||
return bmlite_copy_arg(chain, ARG_DATA, speed, sizeof(speed));
|
||||
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_sensor_reset(HCP_comm_t *chain)
|
||||
{
|
||||
// Delay for possible updating template on BM-Lite
|
||||
hal_timebase_busy_wait(50);
|
||||
|
||||
return bmlite_send_cmd(chain, CMD_SENSOR, ARG_RESET);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_send_cmd(HCP_comm_t *chain, uint16_t cmd, uint16_t arg_type)
|
||||
{
|
||||
assert(bmlite_init_cmd(chain, cmd, arg_type));
|
||||
return bmlite_tranceive(chain);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_send_cmd_arg(HCP_comm_t *chain, uint16_t cmd, uint16_t arg1_type, uint16_t arg2_type, void *arg2_data, uint16_t arg2_length)
|
||||
{
|
||||
assert(bmlite_init_cmd(chain, cmd, arg1_type));
|
||||
assert(bmlite_add_arg(chain, arg2_type, arg2_data, arg2_length));
|
||||
|
||||
return bmlite_tranceive(chain);
|
||||
}
|
||||
307
BMLite_sdk/src/hcp_tiny.c
Normal file
@ -0,0 +1,307 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Andrey Perminov <andrey.ppp@gmail.com>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "platform.h"
|
||||
#include "fpc_crc.h"
|
||||
#include "fpc_hcp_common.h"
|
||||
#include "hcp_tiny.h"
|
||||
|
||||
#include "bmlite_if_callbacks.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#define LOG_DEBUG(...) printf(__VA_ARGS__)
|
||||
#else
|
||||
#define LOG_DEBUG(...)
|
||||
#endif
|
||||
|
||||
static uint32_t fpc_com_ack = FPC_BEP_ACK;
|
||||
|
||||
static fpc_bep_result_t _rx_link(HCP_comm_t *hcp_comm);
|
||||
static fpc_bep_result_t _tx_link(HCP_comm_t *hcp_comm);
|
||||
|
||||
typedef struct {
|
||||
uint16_t cmd;
|
||||
uint16_t args_nr;
|
||||
uint8_t args[];
|
||||
} _HCP_cmd_t;
|
||||
|
||||
typedef struct {
|
||||
uint16_t arg;
|
||||
uint16_t size;
|
||||
uint8_t pld[];
|
||||
} _CMD_arg_t;
|
||||
|
||||
typedef struct {
|
||||
uint16_t lnk_chn;
|
||||
uint16_t lnk_size;
|
||||
uint16_t t_size;
|
||||
uint16_t t_seq_nr;
|
||||
uint16_t t_seq_len;
|
||||
_HCP_cmd_t t_pld;
|
||||
} _HPC_pkt_t;
|
||||
|
||||
fpc_bep_result_t bmlite_init_cmd(HCP_comm_t *hcp_comm, uint16_t cmd, uint16_t arg_key)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
|
||||
_HCP_cmd_t *out = (_HCP_cmd_t *)hcp_comm->pkt_buffer;
|
||||
out->cmd = cmd;
|
||||
out->args_nr = 0;
|
||||
hcp_comm->pkt_size = 4;
|
||||
|
||||
if(arg_key != ARG_NONE) {
|
||||
bep_result = bmlite_add_arg(hcp_comm, arg_key, NULL, 0);
|
||||
if(bep_result) {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
}
|
||||
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_add_arg(HCP_comm_t *hcp_comm, uint16_t arg_type, void *arg_data, uint16_t arg_size)
|
||||
{
|
||||
if(hcp_comm->pkt_size + 4 + arg_size > hcp_comm->pkt_size_max) {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, FPC_BEP_RESULT_NO_MEMORY);
|
||||
return FPC_BEP_RESULT_NO_MEMORY;
|
||||
}
|
||||
|
||||
((_HCP_cmd_t *)hcp_comm->pkt_buffer)->args_nr++;
|
||||
_CMD_arg_t *args = (_CMD_arg_t *)(&hcp_comm->pkt_buffer[hcp_comm->pkt_size]);
|
||||
args->arg = arg_type;
|
||||
args->size = arg_size;
|
||||
if(arg_size) {
|
||||
memcpy(&args->pld, arg_data, arg_size);
|
||||
}
|
||||
hcp_comm->pkt_size += 4 + arg_size;
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_get_arg(HCP_comm_t *hcp_comm, uint16_t arg_type)
|
||||
{
|
||||
uint16_t i = 0;
|
||||
uint8_t *buffer = hcp_comm->pkt_buffer;
|
||||
uint16_t args_nr = ((_HCP_cmd_t *)(buffer))->args_nr;
|
||||
uint8_t *pdata = (uint8_t *)&((_HCP_cmd_t *)(buffer))->args;
|
||||
while (i < args_nr && (uint32_t)(pdata - buffer) <= hcp_comm->pkt_size) {
|
||||
_CMD_arg_t *parg = (_CMD_arg_t *)pdata;
|
||||
if(parg->arg == arg_type) {
|
||||
hcp_comm->arg.size = parg->size;
|
||||
hcp_comm->arg.data = parg->pld;
|
||||
return FPC_BEP_RESULT_OK;
|
||||
} else {
|
||||
i++;
|
||||
pdata += 4 + parg->size;
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore missing ARG_RESULT because some command return result other way
|
||||
// if (arg_type != ARG_RESULT) {
|
||||
bmlite_on_error(BMLITE_ERROR_GET_ARG, FPC_BEP_RESULT_INVALID_ARGUMENT);
|
||||
// }
|
||||
return FPC_BEP_RESULT_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_copy_arg(HCP_comm_t *hcp_comm, uint16_t arg_key, void *arg_data, uint16_t arg_data_size)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
bep_result = bmlite_get_arg(hcp_comm, arg_key);
|
||||
if(bep_result == FPC_BEP_RESULT_OK) {
|
||||
if(arg_data == NULL) {
|
||||
bmlite_on_error(BMLITE_ERROR_GET_ARG, FPC_BEP_RESULT_NO_MEMORY);
|
||||
return FPC_BEP_RESULT_NO_MEMORY;
|
||||
}
|
||||
memcpy(arg_data, hcp_comm->arg.data, HCP_MIN(arg_data_size, hcp_comm->arg.size));
|
||||
} else {
|
||||
bmlite_on_error(BMLITE_ERROR_GET_ARG, FPC_BEP_RESULT_INVALID_ARGUMENT);
|
||||
return FPC_BEP_RESULT_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_tranceive(HCP_comm_t *hcp_comm)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
|
||||
bep_result = bmlite_send(hcp_comm);
|
||||
if (bep_result == FPC_BEP_RESULT_OK) {
|
||||
bep_result = bmlite_receive(hcp_comm);
|
||||
|
||||
if (bmlite_get_arg(hcp_comm, ARG_RESULT) == FPC_BEP_RESULT_OK) {
|
||||
hcp_comm->bep_result = *(int8_t*)hcp_comm->arg.data;
|
||||
} else {
|
||||
hcp_comm->bep_result = FPC_BEP_RESULT_OK;
|
||||
}
|
||||
}
|
||||
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_receive(HCP_comm_t *hcp_comm)
|
||||
{
|
||||
fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK;
|
||||
fpc_bep_result_t com_result = FPC_BEP_RESULT_OK;
|
||||
uint16_t seq_nr = 0;
|
||||
uint16_t seq_len = 1;
|
||||
uint8_t *p = hcp_comm->pkt_buffer;
|
||||
_HPC_pkt_t *pkt = (_HPC_pkt_t *)hcp_comm->txrx_buffer;
|
||||
uint16_t buf_len = 0;
|
||||
|
||||
while(seq_nr < seq_len) {
|
||||
bep_result = _rx_link(hcp_comm);
|
||||
|
||||
if (!bep_result) {
|
||||
seq_nr = pkt->t_seq_nr;
|
||||
seq_len = pkt->t_seq_len;
|
||||
if(pkt->t_size != pkt->lnk_size - 6) {
|
||||
com_result = FPC_BEP_RESULT_IO_ERROR;
|
||||
continue;
|
||||
}
|
||||
if(buf_len + pkt->t_size < hcp_comm->pkt_size_max) {
|
||||
memcpy(p, &pkt->t_pld, pkt->t_size);
|
||||
p += pkt->t_size;
|
||||
buf_len += pkt->t_size;
|
||||
} else {
|
||||
com_result = FPC_BEP_RESULT_NO_MEMORY;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
if (seq_len > 1)
|
||||
LOG_DEBUG("Received data chunk %d of %d\n", seq_nr, seq_len);
|
||||
#endif
|
||||
} else {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, bep_result);
|
||||
return bep_result;
|
||||
}
|
||||
}
|
||||
|
||||
hcp_comm->pkt_size = buf_len;
|
||||
if(com_result != FPC_BEP_RESULT_OK) {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, com_result);
|
||||
}
|
||||
return com_result;
|
||||
}
|
||||
|
||||
static fpc_bep_result_t _rx_link(HCP_comm_t *hcp_comm)
|
||||
{
|
||||
// Get size, msg and CRC
|
||||
uint16_t result = hcp_comm->read(4, hcp_comm->txrx_buffer, hcp_comm->phy_rx_timeout, NULL);
|
||||
_HPC_pkt_t *pkt = (_HPC_pkt_t *)hcp_comm->txrx_buffer;
|
||||
uint16_t size;
|
||||
|
||||
if (result) {
|
||||
LOG_DEBUG("Timed out waiting for response.\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
size = pkt->lnk_size;
|
||||
|
||||
// Check if size plus header and crc is larger than max package size.
|
||||
if (MTU < size + 8) {
|
||||
// LOG_DEBUG("S: Invalid size %d, larger than MTU %d.\n", size, MTU);
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, FPC_BEP_RESULT_IO_ERROR);
|
||||
return FPC_BEP_RESULT_IO_ERROR;
|
||||
}
|
||||
|
||||
hcp_comm->read(size + 4, hcp_comm->txrx_buffer + 4, 100, NULL);
|
||||
|
||||
uint32_t crc = *(uint32_t *)(hcp_comm->txrx_buffer + 4 + size);
|
||||
uint32_t crc_calc = fpc_crc(0, hcp_comm->txrx_buffer+4, size);
|
||||
|
||||
if (crc_calc != crc) {
|
||||
LOG_DEBUG("CRC mismatch. Calculated %08X, received %08X\n", crc_calc, crc);
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, FPC_BEP_RESULT_IO_ERROR);
|
||||
return FPC_BEP_RESULT_IO_ERROR;
|
||||
}
|
||||
|
||||
// Send Ack
|
||||
hcp_comm->write(4, (uint8_t *)&fpc_com_ack, 0, NULL);
|
||||
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
fpc_bep_result_t bmlite_send(HCP_comm_t *hcp_comm)
|
||||
{
|
||||
uint16_t seq_nr = 1;
|
||||
fpc_bep_result_t bep_result = FPC_BEP_RESULT_OK;
|
||||
uint16_t data_left = hcp_comm->pkt_size;
|
||||
uint8_t *p = hcp_comm->pkt_buffer;
|
||||
|
||||
_HPC_pkt_t *phy_frm = (_HPC_pkt_t *)hcp_comm->txrx_buffer;
|
||||
|
||||
// Application MTU size is PHY MTU - (Transport and Link overhead)
|
||||
uint16_t app_mtu = MTU - 6 - 8;
|
||||
|
||||
// Calculate sequence length
|
||||
uint16_t seq_len = (data_left / app_mtu) + 1;
|
||||
|
||||
phy_frm->lnk_chn = 0;
|
||||
phy_frm->t_seq_len = seq_len;
|
||||
|
||||
for (seq_nr = 1; seq_nr <= seq_len && !bep_result; seq_nr++) {
|
||||
phy_frm->t_seq_nr = seq_nr;
|
||||
if (data_left < app_mtu) {
|
||||
phy_frm->t_size = data_left;
|
||||
} else {
|
||||
phy_frm->t_size = app_mtu;
|
||||
}
|
||||
memcpy(&phy_frm->t_pld, p, phy_frm->t_size);
|
||||
phy_frm->lnk_size = phy_frm->t_size + 6;
|
||||
p += phy_frm->t_size;
|
||||
data_left -= phy_frm->t_size;
|
||||
|
||||
bep_result = _tx_link(hcp_comm);
|
||||
}
|
||||
|
||||
if(bep_result) {
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, bep_result);
|
||||
}
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
static fpc_bep_result_t _tx_link(HCP_comm_t *hcp_comm)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
|
||||
_HPC_pkt_t *pkt = (_HPC_pkt_t *)hcp_comm->txrx_buffer;
|
||||
|
||||
uint32_t crc_calc = fpc_crc(0, &pkt->t_size, pkt->lnk_size);
|
||||
*(uint32_t *)(hcp_comm->txrx_buffer + pkt->lnk_size + 4) = crc_calc;
|
||||
uint16_t size = pkt->lnk_size + 8;
|
||||
|
||||
bep_result = hcp_comm->write(size, hcp_comm->txrx_buffer, 0, NULL);
|
||||
|
||||
// Wait for ACK
|
||||
uint32_t ack;
|
||||
bep_result = hcp_comm->read(4, (uint8_t *)&ack, 500, NULL);
|
||||
if (bep_result == FPC_BEP_RESULT_TIMEOUT) {
|
||||
LOG_DEBUG("ASK read timeout\n");
|
||||
bmlite_on_error(BMLITE_ERROR_SEND_CMD, FPC_BEP_RESULT_TIMEOUT);
|
||||
return FPC_BEP_RESULT_IO_ERROR;
|
||||
}
|
||||
|
||||
if(ack != fpc_com_ack) {
|
||||
return FPC_BEP_RESULT_IO_ERROR;
|
||||
}
|
||||
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
@ -12,25 +12,30 @@
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for BM-Lite applications
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file platform.c
|
||||
* @brief Platform specific functions
|
||||
*/
|
||||
|
||||
|
||||
#include "fpc_com_result.h"
|
||||
#include "fpc_bep_types.h"
|
||||
#include "platform.h"
|
||||
#include "bmlite_hal.h"
|
||||
|
||||
bool platform_init(uint32_t speed_hz)
|
||||
fpc_bep_result_t platform_init(void *params)
|
||||
{
|
||||
hal_board_init(4000000);
|
||||
hal_timebase_init();
|
||||
|
||||
platform_bmlite_reset();
|
||||
return true;
|
||||
fpc_bep_result_t result;
|
||||
result = hal_board_init(params);
|
||||
if(result == FPC_BEP_RESULT_OK) {
|
||||
hal_timebase_init();
|
||||
platform_bmlite_reset();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void platform_bmlite_reset(void)
|
||||
@ -41,7 +46,7 @@ void platform_bmlite_reset(void)
|
||||
hal_timebase_busy_wait(100);
|
||||
}
|
||||
|
||||
fpc_com_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
fpc_bep_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32_t timeout,
|
||||
void *session)
|
||||
{
|
||||
uint8_t buff[size];
|
||||
@ -49,19 +54,28 @@ fpc_com_result_t platform_bmlite_send(uint16_t size, const uint8_t *data, uint32
|
||||
return hal_bmlite_spi_write_read((uint8_t *)data, buff, size, false);
|
||||
}
|
||||
|
||||
fpc_com_result_t platform_bmlite_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
fpc_bep_result_t platform_bmlite_receive(uint16_t size, uint8_t *data, uint32_t timeout,
|
||||
void *session)
|
||||
{
|
||||
volatile uint32_t start_time = hal_timebase_get_tick();
|
||||
volatile uint32_t curr_time = start_time;
|
||||
// Wait for BM_Lite Ready for timeout or indefinitely if timeout is 0
|
||||
while (!hal_bmlite_get_status() &&
|
||||
(curr_time = hal_timebase_get_tick()) - start_time < timeout) {
|
||||
(!timeout || (curr_time = hal_timebase_get_tick()) - start_time < timeout)) {
|
||||
if(hal_check_button_pressed()) {
|
||||
return FPC_BEP_RESULT_TIMEOUT;
|
||||
}
|
||||
}
|
||||
if(curr_time - start_time >= timeout) {
|
||||
return FPC_COM_RESULT_TIMEOUT;
|
||||
if(timeout && curr_time - start_time >= timeout) {
|
||||
return FPC_BEP_RESULT_TIMEOUT;
|
||||
}
|
||||
|
||||
uint8_t buff[size];
|
||||
return hal_bmlite_spi_write_read(buff, data, size, false);
|
||||
}
|
||||
|
||||
__attribute__((weak)) uint32_t hal_check_button_pressed()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -13,6 +13,11 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
#
|
||||
# Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
# for FPC BM-Lite applications
|
||||
#
|
||||
|
||||
|
||||
CPU = cortex_m4
|
||||
LOG :=
|
||||
|
||||
@ -12,6 +12,9 @@
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for FPC BM-Lite applications
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -37,8 +40,9 @@ static void nordic_bmlite_gpio_init(void);
|
||||
void nordic_bmlite_spi_init(uint32_t speed_hz);
|
||||
|
||||
|
||||
void hal_board_init(uint32_t speed_hz)
|
||||
fpc_bep_result_t hal_board_init(void *params)
|
||||
{
|
||||
(void)params;
|
||||
|
||||
if (NRF_UICR->REGOUT0 != UICR_REGOUT0_VOUT_3V3)
|
||||
{
|
||||
@ -52,9 +56,10 @@ void hal_board_init(uint32_t speed_hz)
|
||||
NRF_USBD->ENABLE = 1;
|
||||
|
||||
nordic_bmlite_gpio_init();
|
||||
nordic_bmlite_spi_init(speed_hz);
|
||||
nordic_bmlite_spi_init(4000000);
|
||||
bsp_board_init(BSP_INIT_LEDS | BSP_INIT_BUTTONS);
|
||||
|
||||
return FPC_BEP_RESULT_OK;
|
||||
}
|
||||
|
||||
void hal_bmlite_reset(bool state)
|
||||
|
||||
@ -12,8 +12,12 @@
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for FPC BM-Lite applications
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file board_leds.c
|
||||
* @brief Leds control functions.
|
||||
|
||||
@ -12,6 +12,9 @@
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for FPC BM-Lite applications
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@ -12,6 +12,9 @@
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Modified by Andrey Perminov <andrey.ppp@gmail.com>
|
||||
* for FPC BM-Lite applications
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -115,9 +118,15 @@ static void check_buttons()
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t platform_get_button_press_time()
|
||||
uint32_t hal_get_button_press_time()
|
||||
{
|
||||
uint32_t time = button_pressed_time;
|
||||
button_pressed_time = 0;
|
||||
return time;
|
||||
}
|
||||
|
||||
uint32_t hal_check_button_pressed()
|
||||
{
|
||||
uint32_t time = button_pressed_time;
|
||||
return time;
|
||||
}
|
||||
18
README.md
@ -4,35 +4,35 @@ This is a port of [FPC BM-Lite Development Kit](https://www.fingerprints.com/sol
|
||||
|
||||
There are 3 main folders in the project:
|
||||
- [BMLite_example](BMLite_example) - main HW-independed application
|
||||
- [hcp](hcp) - implementation of HCP protocol
|
||||
- [BMLite_sdk](BMLite_sdk) - FPC BM-Lite SDK
|
||||
- [HAL_Driver](HAL_Driver) - implementation of HW-dependent functions
|
||||
|
||||
------------
|
||||
|
||||
### Platform-independent interface functions
|
||||
|
||||
Platform-independent interface implemented in [platform.c](BMLite_example/src/platform.c)
|
||||
Platform-independent interface implemented in [platform.c](BMLite_sdk/src/platform.c)
|
||||
|
||||
| Platform function | Description |
|
||||
| :-------- | :-------- |
|
||||
| bool **platform_init**(uint32_t speed_hz) | Initilalizes hardware |
|
||||
| fpc_bep_result_t **platform_init**(void *params) | Initilalizes hardware |
|
||||
| void **platform_bmlite_reset**(void) | Implements BM-Lite HW Reset |
|
||||
| fpc_com_result_t **platform_bmlite_send**(uint16_t size, const uint8_t *data, uint32_t timeout, void *session) | Send data packet to FPC BM-LIte (session parameter is for compatibility and can be safely ignored) |
|
||||
| fpc_com_result_t **platform_bmlite_receive**(uint16_t size, uint8_t *data, uint32_t timeout, void *session) | Receive data packet from FPC BM-LIte (session parameter is for compatibility and can be safely ignored) |
|
||||
| fpc_bep_result_t **platform_bmlite_send**(uint16_t size, const uint8_t *data, uint32_t timeout, void *session) | Send data packet to FPC BM-Lite |
|
||||
| fpc_bep_result_t **platform_bmlite_receive**(uint16_t size, uint8_t *data, uint32_t timeout, void *session) | Receive data packet from FPC BM-Lite. If timeout = **0**, the function will wait for data from BM-Lite indefinitely. The waiting loop will be breaked if **hal_check_button_pressed()** returns non-zero value. It is recommended to do HW or SW reset of BM-Lite if **platform_bmlite_receive()** returns **FPC_BEP_RESULT_TIMEOUT** in order to return is into known state. |
|
||||
|
||||
Currently **platform_bmlite_send()** and **platform_bmlite_receive()** are implemented for SPI interface. For UART interface there is no need to wait **IRQ** pin ready. However because in UART mode there is no signal from FPC-BM-LIte that it will send data, I would recommend to use UART interrupt or DMA to receive data from UART and store it to a separate buffer and read data in **platform_bmlite_receive()** from that buffer. Activation UART data reading only inside **platform_bmlite_receive()** could lead to loosing some incoming data and causing HCP protocol errors.
|
||||
Currently **platform_bmlite_send()** and **platform_bmlite_receive()** are implemented for SPI interface. For UART interface there is no need to wait for **IRQ** pin ready. However because in UART mode there is no signal from FPC-BM-LIte that it will send data, I would recommend to use UART interrupt or DMA to receive data from UART and store it to a separate buffer and read data in **platform_bmlite_receive()** from that buffer. Activation UART data reading only inside **platform_bmlite_receive()** could lead to loosing some incoming data and causing HCP protocol errors.
|
||||
|
||||
------------
|
||||
|
||||
### HAL implementation
|
||||
|
||||
For porting the project to a new microcontroller, all functions from [bmlite_hal.h](BMLite_example/inc/bmlite_hal.h) should be implemented.
|
||||
For porting the project to a new microcontroller, all functions from [bmlite_hal.h](BMLite_sdk/inc/bmlite_hal.h) should be implemented.
|
||||
|
||||
#### Functions must be implemented:
|
||||
|
||||
| HAL Function | Description |
|
||||
| :------------ | :------------ |
|
||||
| void **hal_board_init**(uint32_t speed_hz) | Initialize GPIO, System timer, SPI |
|
||||
| fpc_bep_result_t **hal_board_init**(void *params) | Initialize GPIO, System timer, SPI |
|
||||
| void **hal_bmlite_reset**(bool state) | Activate/Deactivate BM-Lite **RST_N** pin (***Active Low***) |
|
||||
| fpc_bep_result_t **hal_bmlite_spi_write_read**(uint8_t *write, uint8_t *read, size_t size, bool leave_cs_asserted) | SPI data exchange |
|
||||
| bool **hal_bmlite_get_status**(void) | Return status of BM-Lite **IRQ** pin (***Active High***) |
|
||||
@ -45,6 +45,7 @@ For porting the project to a new microcontroller, all functions from [bmlite_hal
|
||||
| HAL Function | Description |
|
||||
| :------------ | :------------ |
|
||||
| uint32_t **hal_get_button_press_time**(void) | How long UI button was pressed last time. Also it should reset button pressed time counter |
|
||||
| uint32_t **hal_check_button_pressed**(void) | Used for breaking waiting in **platform_bmlite_receive()** if returns non-zero |
|
||||
| void **hal_set_leds**(platform_led_status_t status, uint16_t mode) | Set LED(s) state according to status and mode. |
|
||||
|
||||
------------
|
||||
@ -53,3 +54,4 @@ For porting the project to a new microcontroller, all functions from [bmlite_hal
|
||||
|
||||
- BM-Lite support both UART and SPI communication interface. BM-Lite automatically detects the specific communication interface in use. However, it is not possible to use both interfaces at the same time!
|
||||
- **IRQ** pin is used in SPI mode only as FPC BM-Lite Ready-to-Transmit signal. The module set it to **High** when it has some data to send and set it to **Low** when data packet is sent.
|
||||
|
||||
|
||||
174
hcp/LICENSE.txt
@ -1,174 +0,0 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
1733
hcp/doc/img/hcp.eps
@ -1,247 +0,0 @@
|
||||
<?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>
|
||||
|
Before Width: | Height: | Size: 16 KiB |
@ -1,236 +0,0 @@
|
||||
<?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>
|
||||
|
Before Width: | Height: | Size: 15 KiB |
@ -1,49 +0,0 @@
|
||||
\page stack FPC embedded stack
|
||||
|
||||
The communication stack implemented on the embedded devices by FPC follows the following
|
||||
specification.
|
||||
|
||||
\image html stack.svg "HCP embedded stack"
|
||||
\image latex stack.eps "HCP embedded stack"
|
||||
|
||||
\section phy Physical
|
||||
|
||||
The physical layer have a fixed size buffer of 256 bytes.
|
||||
|
||||
\section link Link
|
||||
|
||||
The link layer handles packet consistency.
|
||||
|
||||
Each packet received is acknowledged on the link layer, if an error occurs no retransmission is
|
||||
done on this level, instead the error is propagated upwards.
|
||||
|
||||
Channel | Size | Payload | CRC |
|
||||
------- | ------- | ---------- | ------- |
|
||||
2 bytes | 2 bytes | size bytes | 4 bytes |
|
||||
|
||||
All fields are using unsigned data types.
|
||||
|
||||
\section tsp Transport
|
||||
|
||||
The transport layer handles packet segmentation.
|
||||
|
||||
As the PHY MTU is 256 bytes the maximum payload per segment is 242 bytes.
|
||||
|
||||
Errors are propagated upwards.
|
||||
|
||||
Size | Seq Nr | Seq Len | Payload |
|
||||
------- | ------- | ------- | ---------- |
|
||||
2 bytes | 2 bytes | 2 bytes | size bytes |
|
||||
|
||||
All fields are using unsigned data types.
|
||||
|
||||
\section app Application
|
||||
|
||||
The application layer is a optional security layer, the default implementation is clear text
|
||||
(unsecure).
|
||||
|
||||
If a security solution is used it will be part of that products documentation.
|
||||
|
||||
\section hcp HCP
|
||||
|
||||
The HCP frame is described in the \link hcpf HCP frame format section.
|
||||
@ -1,28 +0,0 @@
|
||||
\page hcpf HCP frame format
|
||||
|
||||
The Host Communication Protocol (HCP) describes a general way of sending commands and information
|
||||
between devices.
|
||||
|
||||
\image html hcp.svg "HCP frame format"
|
||||
\image latex hcp.eps "HCP frame format"
|
||||
|
||||
\section cmd Command
|
||||
|
||||
The Commands define the general action that is going to be executed. However, each command
|
||||
can have several Arguments each with data attached.
|
||||
|
||||
| CMD | Num Args | Payload |
|
||||
| ------- | -------- | -------- |
|
||||
| 2 bytes | 2 bytes | xx bytes |
|
||||
|
||||
All fields are using unsigned data types.
|
||||
|
||||
\section arg Argument
|
||||
|
||||
The Argument is used as a complement to the command if it is needed and can contain arbitrary data.
|
||||
|
||||
| ARG | Size | Data |
|
||||
| ------- | --------| ---------- |
|
||||
| 2 bytes | 2 bytes | size bytes |
|
||||
|
||||
All fields are using unsigned data types.
|
||||
@ -1,89 +0,0 @@
|
||||
\page bio Biometrics
|
||||
|
||||
\section capture_b Capture
|
||||
|
||||
@startuml
|
||||
Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout]
|
||||
... Wait for finger down...
|
||||
rnote over BioMcu : fpc_bep_capture
|
||||
hnote over BioMcu : image
|
||||
BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section extract_b Extract
|
||||
|
||||
@startuml
|
||||
group Capture
|
||||
Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout]
|
||||
... Wait for finger down...
|
||||
rnote over BioMcu : fpc_bep_capture
|
||||
hnote over BioMcu : image
|
||||
BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result]
|
||||
end
|
||||
Host --> BioMcu: CMD_IMAGE \nARG_EXTRACT
|
||||
rnote over BioMcu : fpc_bep_image_extract
|
||||
hnote over BioMcu : template
|
||||
BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section enroll_b Enroll
|
||||
|
||||
@startuml
|
||||
Host --> BioMcu: CMD_ENROLL \nARG_START
|
||||
rnote over BioMcu : fpc_bep_enroll_start
|
||||
hnote over BioMcu : session
|
||||
BioMcu --> Host: CMD_ENROLL \nARG_RESULT[bep_result]
|
||||
|||
|
||||
loop Enroll Image
|
||||
group Capture
|
||||
Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout]
|
||||
... Wait for finger down...
|
||||
rnote over BioMcu : fpc_bep_capture
|
||||
hnote over BioMcu : image
|
||||
BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result]
|
||||
end
|
||||
|||
|
||||
Host --> BioMcu: CMD_ENROLL \nARG_ADD
|
||||
rnote over BioMcu : fpc_bep_enroll
|
||||
rnote over BioMcu : count
|
||||
BioMcu --> Host: CMD_ENROLL \nARG_COUNT[count] \nARG_RESULT[bep_result]
|
||||
Host --> BioMcu: CMD_WAIT \nARG_FINGER_UP \nARG_TIMEOUT[timeout]
|
||||
... Wait for finger up...
|
||||
BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result]
|
||||
end
|
||||
|||
|
||||
Host --> BioMcu: CMD_ENROLL \nARG_FINISH
|
||||
rnote over BioMcu : fpc_bep_enroll_finish
|
||||
hnote over BioMcu : enroll template
|
||||
BioMcu --> Host: CMD_ENROLL \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section identify_b Identify
|
||||
|
||||
@startuml
|
||||
group Capture
|
||||
Host --> BioMcu: CMD_CAPTURE \nARG_TIMEOUT[timeout]
|
||||
... Wait for finger down...
|
||||
rnote over BioMcu : fpc_bep_capture
|
||||
hnote over BioMcu : image
|
||||
BioMcu --> Host: CMD_CAPTURE \nARG_RESULT[bep_result]
|
||||
end
|
||||
|||
|
||||
group Extract
|
||||
Host --> BioMcu: CMD_IMAGE \nARG_EXTRACT
|
||||
rnote over BioMcu : fpc_bep_image_extract
|
||||
hnote over BioMcu : template
|
||||
BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]
|
||||
end
|
||||
|||
|
||||
Host --> BioMcu: CMD_IDENTIFY
|
||||
rnote over BioMcu : fpc_template_storage_get_all
|
||||
rnote over BioMcu : fpc_bep_identify
|
||||
hnote over BioMcu : id
|
||||
BioMcu --> Host: CMD_IDENTIFY \nARG_MATCH \nARG_ID[id] \nARG_RESULT[bep_result]
|
||||
hnote over Host: id
|
||||
@enduml
|
||||
***
|
||||
@ -1,36 +0,0 @@
|
||||
\page image Image handling
|
||||
|
||||
\section create_i Create
|
||||
|
||||
@startuml
|
||||
Host --> BioMcu: CMD_IMAGE \nARG_CREATE
|
||||
hnote over BioMcu : image
|
||||
BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section upload_i Upload
|
||||
|
||||
@startuml
|
||||
participant Host
|
||||
participant BioMcu
|
||||
|
||||
hnote over BioMcu : image
|
||||
Host --> BioMcu: CMD_IMAGE \nARG_UPLOAD
|
||||
BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result] \nARG_DATA[image]
|
||||
hnote over Host : image
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section download_i Download
|
||||
|
||||
@startuml
|
||||
participant Host
|
||||
participant BioMcu
|
||||
|
||||
hnote over Host : image
|
||||
Host --> BioMcu: CMD_IMAGE \nARG_DOWNLOAD \nARG_DATA[image]
|
||||
hnote over BioMcu : image
|
||||
BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
@ -1,40 +0,0 @@
|
||||
\page template Template handling
|
||||
|
||||
\section upload_t Upload
|
||||
|
||||
@startuml
|
||||
participant Host
|
||||
participant BioMcu
|
||||
|
||||
hnote over BioMcu : template
|
||||
Host --> BioMcu: CMD_TEMPLATE \nARG_UPLOAD
|
||||
BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result] \nARG_DATA[template]
|
||||
hnote over Host : template
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section download_t Download
|
||||
|
||||
@startuml
|
||||
participant Host
|
||||
participant BioMcu
|
||||
|
||||
hnote over Host : template
|
||||
Host --> BioMcu: CMD_TEMPLATE \nARG_DOWNLOAD \nARG_DATA[template]
|
||||
hnote over BioMcu : template
|
||||
BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section save_t Save
|
||||
|
||||
@startuml
|
||||
participant Host
|
||||
participant BioMcu
|
||||
|
||||
hnote over BioMcu : template
|
||||
Host --> BioMcu: CMD_TEMPLATE \nARG_SAVE \nARG_ID[id]
|
||||
hnote over BioMcu : template[id] (nvm)
|
||||
BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
@ -1,69 +0,0 @@
|
||||
\page storage Storage handling
|
||||
|
||||
\section delete_id Delete ID
|
||||
|
||||
@startuml
|
||||
participant Host
|
||||
participant BioMcu
|
||||
|
||||
hnote over BioMcu : template[id] (nvm)
|
||||
Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_DELETE \nARG_ID[id]
|
||||
rnote over BioMcu : fpc_template_storage_remove
|
||||
BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section delete_all Delete All
|
||||
|
||||
@startuml
|
||||
participant Host
|
||||
participant BioMcu
|
||||
|
||||
hnote over BioMcu : template[] (nvm)
|
||||
Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_DELETE \nARG_ALL
|
||||
rnote over BioMcu : fpc_template_storage_remove_all
|
||||
BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section upload_s Upload
|
||||
|
||||
@startuml
|
||||
participant Host
|
||||
participant BioMcu
|
||||
|
||||
hnote over BioMcu : template[id] (nvm)
|
||||
Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_UPLOAD \nARG_ID[id]
|
||||
rnote over BioMcu : fpc_template_storage_get
|
||||
hnote over BioMcu : template (ram)
|
||||
BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result]
|
||||
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section count_s Count
|
||||
|
||||
@startuml
|
||||
participant Host
|
||||
participant BioMcu
|
||||
|
||||
Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_COUNT
|
||||
rnote over BioMcu : fpc_template_storage_get_count
|
||||
BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result] \nARG_COUNT[template_count]
|
||||
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section get_id Get IDs
|
||||
|
||||
@startuml
|
||||
participant Host
|
||||
participant BioMcu
|
||||
|
||||
hnote over BioMcu : ids[] (nvm)
|
||||
Host --> BioMcu: CMD_STORAGE_TEMPLATE \nARG_ID
|
||||
rnote over BioMcu : fpc_template_storage_get_all_ids
|
||||
BioMcu --> Host: CMD_STORAGE_TEMPLATE \nARG_RESULT[bep_result] \nARG_DATA[ids]
|
||||
|
||||
@enduml
|
||||
***
|
||||
@ -1,28 +0,0 @@
|
||||
\page sensor Sensor operations
|
||||
|
||||
\section wait_up_s Wait for finger up
|
||||
|
||||
@startuml
|
||||
Host --> BioMcu: CMD_WAIT \nARG_FINGER_UP \nARG_TIMEOUT[timeout]
|
||||
... Wait for finger up...
|
||||
BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section wait_down_s Wait for finger down
|
||||
|
||||
@startuml
|
||||
Host --> BioMcu: CMD_WAIT \nARG_FINGER_DOWN \nARG_TIMEOUT[timeout]
|
||||
... Wait for finger down...
|
||||
BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
|
||||
\section sensor_reset_s Reset sensor
|
||||
|
||||
@startuml
|
||||
Host --> BioMcu : CMD_SENSOR \nARG_RESET
|
||||
rnote over BioMcu : fpc_bep_sensor_reset
|
||||
BioMcu --> Host : CMD_SENSOR \nARG_RESULT[bep_result]
|
||||
@enduml
|
||||
***
|
||||
@ -1,10 +0,0 @@
|
||||
\page device Device operations
|
||||
|
||||
\section reset_d Reset device
|
||||
|
||||
@startuml
|
||||
Host --> BioMcu: CMD_RESET
|
||||
BioMcu --> Host: CMD_RESET \nARG_RESULT[bep_result]
|
||||
rnote over BioMcu: Reset
|
||||
@enduml
|
||||
***
|
||||
@ -1,13 +0,0 @@
|
||||
<!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>
|
||||
@ -1,86 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/1_stack.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('1__stack_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/1_stack.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="1__stack_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="1__stack_8md.html">1_stack.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,86 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/2_hcpframe.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('2__hcpframe_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/2_hcpframe.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="2__hcpframe_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="2__hcpframe_8md.html">2_hcpframe.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,84 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/2_hcpframe.md Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('2__hcpframe_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/2_hcpframe.md</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="2__hcpframe_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> \page hcpf HCP frame format</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> The Host Communication Protocol (HCP) describes a general way of sending commands and information</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> between devices.</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> \image html hcp.svg "HCP frame format"</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> \image latex hcp.eps "HCP frame format"</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> \section cmd Command</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> The Commands define the general action that is going to be executed. However, each command</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> can have several Arguments each with data attached.</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> | CMD | Num Args | Payload |</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> | ------- | -------- | -------- |</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> | 2 bytes | 2 bytes | xx bytes |</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> All fields are using unsigned data types.</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> \section arg Argument</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> The Argument is used as a complement to the command if it is needed and can contain arbitrary data.</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> | ARG | Size | Data |</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> | ------- | --------| ---------- |</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> | 2 bytes | 2 bytes | size bytes |</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> All fields are using unsigned data types.</div></div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="2__hcpframe_8md.html">2_hcpframe.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,86 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/4_biometrics.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('4__biometrics_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/4_biometrics.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="4__biometrics_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="4__biometrics_8md.html">4_biometrics.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,86 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/5_image.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('5__image_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/5_image.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="5__image_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="5__image_8md.html">5_image.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,84 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/5_image.md Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('5__image_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/5_image.md</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="5__image_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> \page image Image handling</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> \section create_i Create</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> @startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> Host --> BioMcu: CMD_IMAGE \nARG_CREATE</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> hnote over BioMcu : image</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> @enduml</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> ***</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> \section upload_i Upload</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> @startuml</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> participant Host</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> participant BioMcu</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> hnote over BioMcu : image</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> Host --> BioMcu: CMD_IMAGE \nARG_UPLOAD</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result] \nARG_DATA[image]</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> hnote over Host : image</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> @enduml</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> ***</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> \section download_i Download</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> @startuml</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> participant Host</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> participant BioMcu</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> hnote over Host : image</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> Host --> BioMcu: CMD_IMAGE \nARG_DOWNLOAD \nARG_DATA[image]</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> hnote over BioMcu : image</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> BioMcu --> Host: CMD_IMAGE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> @enduml</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> ***</div></div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="5__image_8md.html">5_image.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,86 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/6_template.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('6__template_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/6_template.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="6__template_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="6__template_8md.html">6_template.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,84 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/6_template.md Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('6__template_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/6_template.md</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="6__template_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> \page template Template handling</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> \section upload_t Upload</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> @startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> participant Host</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> participant BioMcu</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> hnote over BioMcu : template</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> Host --> BioMcu: CMD_TEMPLATE \nARG_UPLOAD</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result] \nARG_DATA[template]</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> hnote over Host : template</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> @enduml</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> ***</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> \section download_t Download</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> @startuml</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> participant Host</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> participant BioMcu</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> hnote over Host : template</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> Host --> BioMcu: CMD_TEMPLATE \nARG_DOWNLOAD \nARG_DATA[template]</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> hnote over BioMcu : template</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> @enduml</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> ***</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> \section save_t Save</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> @startuml</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> participant Host</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> participant BioMcu</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> hnote over BioMcu : template</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> Host --> BioMcu: CMD_TEMPLATE \nARG_SAVE \nARG_ID[id]</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> hnote over BioMcu : template[id] (nvm)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> BioMcu --> Host: CMD_TEMPLATE \nARG_RESULT[bep_result]</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> @enduml</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> ***</div></div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="6__template_8md.html">6_template.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,86 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/7_storage.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('7__storage_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/7_storage.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="7__storage_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="7__storage_8md.html">7_storage.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,86 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/8_sensor.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('8__sensor_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/8_sensor.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="8__sensor_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="8__sensor_8md.html">8_sensor.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,84 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/8_sensor.md Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('8__sensor_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/8_sensor.md</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="8__sensor_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> \page sensor Sensor operations</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> \section wait_up_s Wait for finger up</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> @startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> Host --> BioMcu: CMD_WAIT \nARG_FINGER_UP \nARG_TIMEOUT[timeout]</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> ... Wait for finger up...</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result]</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> @enduml</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> ***</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> \section wait_down_s Wait for finger down</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> @startuml</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> Host --> BioMcu: CMD_WAIT \nARG_FINGER_DOWN \nARG_TIMEOUT[timeout]</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> ... Wait for finger down...</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> BioMcu --> Host: CMD_WAIT \nARG_RESULT[bep_result]</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> @enduml</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> ***</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> \section sensor_reset_s Reset sensor</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> @startuml</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> Host --> BioMcu : CMD_SENSOR \nARG_RESET</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> rnote over BioMcu : fpc_bep_sensor_reset</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> BioMcu --> Host : CMD_SENSOR \nARG_RESULT[bep_result]</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> @enduml</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> ***</div></div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="8__sensor_8md.html">8_sensor.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,86 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/9_device.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('9__device_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/9_device.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="9__device_8md_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="9__device_8md.html">9_device.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,84 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: doc/md/9_device.md Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('9__device_8md.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">doc/md/9_device.md</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="9__device_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> \page device Device operations</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> \section reset_d Reset device</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> @startuml</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> Host --> BioMcu: CMD_RESET</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> BioMcu --> Host: CMD_RESET \nARG_RESULT[bep_result]</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> rnote over BioMcu: Reset</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> @enduml</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> ***</div></div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="9__device_8md.html">9_device.md</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,94 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: Data Structures</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="classes.html"><span>Data Structure Index</span></a></li>
|
||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('annotated.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Data Structures</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
|
||||
<table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__com__chain.html" target="_self">fpc_com_chain</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__com__chain__private.html" target="_self">fpc_com_chain_private</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__com__packet__link.html" target="_self">fpc_com_packet_link</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__com__packet__transport.html" target="_self">fpc_com_packet_transport</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__hcp__arg__data.html" target="_self">fpc_hcp_arg_data</a></td><td class="desc">Command Argument </td></tr>
|
||||
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfpc__hcp__packet.html" target="_self">fpc_hcp_packet</a></td><td class="desc">Application Command Packet </td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,9 +0,0 @@
|
||||
var annotated_dup =
|
||||
[
|
||||
[ "fpc_com_chain", "structfpc__com__chain.html", "structfpc__com__chain" ],
|
||||
[ "fpc_com_chain_private", "structfpc__com__chain__private.html", "structfpc__com__chain__private" ],
|
||||
[ "fpc_com_packet_link", "structfpc__com__packet__link.html", "structfpc__com__packet__link" ],
|
||||
[ "fpc_com_packet_transport", "structfpc__com__packet__transport.html", "structfpc__com__packet__transport" ],
|
||||
[ "fpc_hcp_arg_data", "structfpc__hcp__arg__data.html", "structfpc__hcp__arg__data" ],
|
||||
[ "fpc_hcp_packet", "structfpc__hcp__packet.html", "structfpc__hcp__packet" ]
|
||||
];
|
||||
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 229 B |
|
Before Width: | Height: | Size: 676 B |
|
Before Width: | Height: | Size: 147 B |
@ -1,90 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: Biometrics</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('bio.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Biometrics </div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><h1><a class="anchor" id="capture_b"></a>
|
||||
Capture</h1>
|
||||
<hr/>
|
||||
<h1><a class="anchor" id="extract_b"></a>
|
||||
Extract</h1>
|
||||
<hr/>
|
||||
<h1><a class="anchor" id="enroll_b"></a>
|
||||
Enroll</h1>
|
||||
<hr/>
|
||||
<h1><a class="anchor" id="identify_b"></a>
|
||||
Identify</h1>
|
||||
<hr/>
|
||||
</div></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="index.html">Main</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,93 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: Data Structure Index</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="classes.html"><span>Data Structure Index</span></a></li>
|
||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('classes.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Data Structure Index</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="qindex"><a class="qindex" href="#letter_F">F</a></div>
|
||||
<table class="classindex">
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_f"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  f  </div></td></tr></table>
|
||||
</td><td valign="top"><a class="el" href="structfpc__com__chain__private.html">fpc_com_chain_private</a>   </td><td valign="top"><a class="el" href="structfpc__com__packet__transport.html">fpc_com_packet_transport</a>   </td><td valign="top"><a class="el" href="structfpc__hcp__packet.html">fpc_hcp_packet</a>   </td></tr>
|
||||
<tr><td valign="top"><a class="el" href="structfpc__com__packet__link.html">fpc_com_packet_link</a>   </td><td valign="top"><a class="el" href="structfpc__hcp__arg__data.html">fpc_hcp_arg_data</a>   </td><td></td></tr>
|
||||
<tr><td valign="top"><a class="el" href="structfpc__com__chain.html">fpc_com_chain</a>   </td><td></td><td></td><td></td></tr>
|
||||
<tr><td></td><td></td><td></td><td></td></tr>
|
||||
</table>
|
||||
<div class="qindex"><a class="qindex" href="#letter_F">F</a></div>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
Before Width: | Height: | Size: 132 B |
@ -1,81 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: Device operations</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('device.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Device operations </div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><h1><a class="anchor" id="reset_d"></a>
|
||||
Reset device</h1>
|
||||
<hr/>
|
||||
</div></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="index.html">Main</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,74 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: src -> inc Relation</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_68267d1309a1af8e8297ef4c3efbcdba.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="contents">
|
||||
<h3>src → inc Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in src</th><th class="dirtab">Includes file in inc</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="fpc__com__link_8c.html">fpc_com_link.c</a></td><td class="dirtab"><a class="el" href="fpc__com__link_8h.html">fpc_com_link.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="fpc__com__transport_8c.html">fpc_com_transport.c</a></td><td class="dirtab"><a class="el" href="fpc__com__link_8h.html">fpc_com_link.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="fpc__com__transport_8c.html">fpc_com_transport.c</a></td><td class="dirtab"><a class="el" href="fpc__com__transport_8h.html">fpc_com_transport.h</a></td></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="fpc__hcp_8c.html">fpc_hcp.c</a></td><td class="dirtab"><a class="el" href="fpc__hcp_8h.html">fpc_hcp.h</a></td></tr></table></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,103 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: src Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li class="current"><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_68267d1309a1af8e8297ef4c3efbcdba.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">src Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for src:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg" width="83" height="155"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:fpc__com__link_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__link_8c.html">fpc_com_link.c</a> <a href="fpc__com__link_8c_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__link_8c"><td class="mdescLeft"> </td><td class="mdescRight">Communication link layer implementation. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__com__transport_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__transport_8c.html">fpc_com_transport.c</a> <a href="fpc__com__transport_8c_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__transport_8c"><td class="mdescLeft"> </td><td class="mdescRight">Communication transport layer implementation. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__hcp_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__hcp_8c.html">fpc_hcp.c</a> <a href="fpc__hcp_8c_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__hcp_8c"><td class="mdescLeft"> </td><td class="mdescRight">Host Communication Protocol implementation. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,6 +0,0 @@
|
||||
var dir_68267d1309a1af8e8297ef4c3efbcdba =
|
||||
[
|
||||
[ "fpc_com_link.c", "fpc__com__link_8c.html", "fpc__com__link_8c" ],
|
||||
[ "fpc_com_transport.c", "fpc__com__transport_8c.html", "fpc__com__transport_8c" ],
|
||||
[ "fpc_hcp.c", "fpc__hcp_8c.html", "fpc__hcp_8c" ]
|
||||
];
|
||||
@ -1,5 +0,0 @@
|
||||
<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>
|
||||
@ -1 +0,0 @@
|
||||
078edd713872194e35fdc26e1b4695d3
|
||||
@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
|
||||
-->
|
||||
<!-- Title: src Pages: 1 -->
|
||||
<svg width="62pt" height="116pt"
|
||||
viewBox="0.00 0.00 62.00 116.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 112)">
|
||||
<title>src</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-112 58,-112 58,4 -4,4"/>
|
||||
<!-- dir_68267d1309a1af8e8297ef4c3efbcdba -->
|
||||
<g id="node1" class="node"><title>dir_68267d1309a1af8e8297ef4c3efbcdba</title>
|
||||
<g id="a_node1"><a xlink:href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_top" xlink:title="src">
|
||||
<polygon fill="#eeeeff" stroke="black" points="54,-108 0,-108 0,-72 54,-72 54,-108"/>
|
||||
<text text-anchor="middle" x="27" y="-87.5" font-family="Helvetica,sans-Serif" font-size="10.00">src</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- dir_bfccd401955b95cf8c75461437045ac0 -->
|
||||
<g id="node2" class="node"><title>dir_bfccd401955b95cf8c75461437045ac0</title>
|
||||
<g id="a_node2"><a xlink:href="dir_bfccd401955b95cf8c75461437045ac0.html" target="_top" xlink:title="inc">
|
||||
<polygon fill="none" stroke="black" points="54,-36 0,-36 0,-0 54,-0 54,-36"/>
|
||||
<text text-anchor="middle" x="27" y="-15.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- dir_68267d1309a1af8e8297ef4c3efbcdba->dir_bfccd401955b95cf8c75461437045ac0 -->
|
||||
<g id="edge1" class="edge"><title>dir_68267d1309a1af8e8297ef4c3efbcdba->dir_bfccd401955b95cf8c75461437045ac0</title>
|
||||
<path fill="none" stroke="black" d="M27,-71.6966C27,-63.9827 27,-54.7125 27,-46.1124"/>
|
||||
<polygon fill="black" stroke="black" points="30.5001,-46.1043 27,-36.1043 23.5001,-46.1044 30.5001,-46.1043"/>
|
||||
<g id="a_edge1-headlabel"><a xlink:href="dir_000001_000000.html" target="_top" xlink:title="4">
|
||||
<text text-anchor="middle" x="33.3393" y="-47.199" font-family="Helvetica,sans-Serif" font-size="10.00">4</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,109 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: inc Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li class="current"><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_bfccd401955b95cf8c75461437045ac0.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">inc Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:fpc__com__chain_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__chain_8h.html">fpc_com_chain.h</a> <a href="fpc__com__chain_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__chain_8h"><td class="mdescLeft"> </td><td class="mdescRight">Communication chain type definitions. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__com__link_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__link_8h.html">fpc_com_link.h</a> <a href="fpc__com__link_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__link_8h"><td class="mdescLeft"> </td><td class="mdescRight">Communication link interface. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__com__packets_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__packets_8h.html">fpc_com_packets.h</a> <a href="fpc__com__packets_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__packets_8h"><td class="mdescLeft"> </td><td class="mdescRight">Communication packet type definitions. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__com__result_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__result_8h.html">fpc_com_result.h</a> <a href="fpc__com__result_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__result_8h"><td class="mdescLeft"> </td><td class="mdescRight">Communication result type definitions. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__com__transport_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__transport_8h.html">fpc_com_transport.h</a> <a href="fpc__com__transport_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__com__transport_8h"><td class="mdescLeft"> </td><td class="mdescRight">Communication transport interface. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__hcp_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__hcp_8h.html">fpc_hcp.h</a> <a href="fpc__hcp_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__hcp_8h"><td class="mdescLeft"> </td><td class="mdescRight">Host Communication Protocol interface. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:fpc__hcp__common_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__hcp__common_8h.html">fpc_hcp_common.h</a> <a href="fpc__hcp__common_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:fpc__hcp__common_8h"><td class="mdescLeft"> </td><td class="mdescRight">Host Communication Protocol common type definitions. <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_bfccd401955b95cf8c75461437045ac0.html">inc</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,10 +0,0 @@
|
||||
var dir_bfccd401955b95cf8c75461437045ac0 =
|
||||
[
|
||||
[ "fpc_com_chain.h", "fpc__com__chain_8h.html", "fpc__com__chain_8h" ],
|
||||
[ "fpc_com_link.h", "fpc__com__link_8h.html", "fpc__com__link_8h" ],
|
||||
[ "fpc_com_packets.h", "fpc__com__packets_8h.html", "fpc__com__packets_8h" ],
|
||||
[ "fpc_com_result.h", "fpc__com__result_8h.html", "fpc__com__result_8h" ],
|
||||
[ "fpc_com_transport.h", "fpc__com__transport_8h.html", "fpc__com__transport_8h" ],
|
||||
[ "fpc_hcp.h", "fpc__hcp_8h.html", "fpc__hcp_8h" ],
|
||||
[ "fpc_hcp_common.h", "fpc__hcp__common_8h.html", "fpc__hcp__common_8h" ]
|
||||
];
|
||||
|
Before Width: | Height: | Size: 746 B |
|
Before Width: | Height: | Size: 3.7 KiB |
@ -1,104 +0,0 @@
|
||||
function toggleVisibility(linkObj)
|
||||
{
|
||||
var base = $(linkObj).attr('id');
|
||||
var summary = $('#'+base+'-summary');
|
||||
var content = $('#'+base+'-content');
|
||||
var trigger = $('#'+base+'-trigger');
|
||||
var src=$(trigger).attr('src');
|
||||
if (content.is(':visible')===true) {
|
||||
content.hide();
|
||||
summary.show();
|
||||
$(linkObj).addClass('closed').removeClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
content.show();
|
||||
summary.hide();
|
||||
$(linkObj).removeClass('closed').addClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function updateStripes()
|
||||
{
|
||||
$('table.directory tr').
|
||||
removeClass('even').filter(':visible:even').addClass('even');
|
||||
}
|
||||
|
||||
function toggleLevel(level)
|
||||
{
|
||||
$('table.directory tr').each(function() {
|
||||
var l = this.id.split('_').length-1;
|
||||
var i = $('#img'+this.id.substring(3));
|
||||
var a = $('#arr'+this.id.substring(3));
|
||||
if (l<level+1) {
|
||||
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||
a.html('▼');
|
||||
$(this).show();
|
||||
} else if (l==level+1) {
|
||||
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||
a.html('►');
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
function toggleFolder(id)
|
||||
{
|
||||
// the clicked row
|
||||
var currentRow = $('#row_'+id);
|
||||
|
||||
// all rows after the clicked row
|
||||
var rows = currentRow.nextAll("tr");
|
||||
|
||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||
|
||||
// only match elements AFTER this one (can't hide elements before)
|
||||
var childRows = rows.filter(function() { return this.id.match(re); });
|
||||
|
||||
// first row is visible we are HIDING
|
||||
if (childRows.filter(':first').is(':visible')===true) {
|
||||
// replace down arrow by right arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
currentRowSpans.filter(".arrow").html('►');
|
||||
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||
} else { // we are SHOWING
|
||||
// replace right arrow by down arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||
currentRowSpans.filter(".arrow").html('▼');
|
||||
// replace down arrows by right arrows for child rows
|
||||
var childRowsSpans = childRows.find("span");
|
||||
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
childRowsSpans.filter(".arrow").html('►');
|
||||
childRows.show(); //show all children
|
||||
}
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
|
||||
function toggleInherit(id)
|
||||
{
|
||||
var rows = $('tr.inherit.'+id);
|
||||
var img = $('tr.inherit_header.'+id+' img');
|
||||
var src = $(img).attr('src');
|
||||
if (rows.filter(':first').is(':visible')===true) {
|
||||
rows.css('display','none');
|
||||
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
rows.css('display','table-row'); // using show() causes jump in firefox
|
||||
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
$('.code,.codeRef').each(function() {
|
||||
$(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
|
||||
$(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
|
||||
});
|
||||
});
|
||||
@ -1,99 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: File List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li class="current"><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('files.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">File List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
|
||||
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')"> </span><a class="el" href="dir_bfccd401955b95cf8c75461437045ac0.html" target="_self">inc</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__chain_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__chain_8h.html" target="_self">fpc_com_chain.h</a></td><td class="desc">Communication chain type definitions </td></tr>
|
||||
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__link_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__link_8h.html" target="_self">fpc_com_link.h</a></td><td class="desc">Communication link interface </td></tr>
|
||||
<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__packets_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__packets_8h.html" target="_self">fpc_com_packets.h</a></td><td class="desc">Communication packet type definitions </td></tr>
|
||||
<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__result_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__result_8h.html" target="_self">fpc_com_result.h</a></td><td class="desc">Communication result type definitions </td></tr>
|
||||
<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__transport_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__transport_8h.html" target="_self">fpc_com_transport.h</a></td><td class="desc">Communication transport interface </td></tr>
|
||||
<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__hcp_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__hcp_8h.html" target="_self">fpc_hcp.h</a></td><td class="desc">Host Communication Protocol interface </td></tr>
|
||||
<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__hcp__common_8h_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__hcp__common_8h.html" target="_self">fpc_hcp_common.h</a></td><td class="desc">Host Communication Protocol common type definitions </td></tr>
|
||||
<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')"> </span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__link_8c_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__link_8c.html" target="_self">fpc_com_link.c</a></td><td class="desc">Communication link layer implementation </td></tr>
|
||||
<tr id="row_1_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__com__transport_8c_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__com__transport_8c.html" target="_self">fpc_com_transport.c</a></td><td class="desc">Communication transport layer implementation </td></tr>
|
||||
<tr id="row_1_2_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="fpc__hcp_8c_source.html"><span class="icondoc"></span></a><a class="el" href="fpc__hcp_8c.html" target="_self">fpc_hcp.c</a></td><td class="desc">Host Communication Protocol implementation </td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:45 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,5 +0,0 @@
|
||||
var files =
|
||||
[
|
||||
[ "inc", "dir_bfccd401955b95cf8c75461437045ac0.html", "dir_bfccd401955b95cf8c75461437045ac0" ],
|
||||
[ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ]
|
||||
];
|
||||
|
Before Width: | Height: | Size: 616 B |
|
Before Width: | Height: | Size: 597 B |
@ -1,197 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: inc/fpc_com_chain.h File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('fpc__com__chain_8h.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#nested-classes">Data Structures</a> |
|
||||
<a href="#typedef-members">Typedefs</a> |
|
||||
<a href="#enum-members">Enumerations</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">fpc_com_chain.h File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>Communication chain type definitions.
|
||||
<a href="#details">More...</a></p>
|
||||
<div class="textblock"><code>#include <stdint.h></code><br />
|
||||
<code>#include "<a class="el" href="fpc__com__result_8h_source.html">fpc_com_result.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="fpc__hcp__common_8h_source.html">fpc_hcp_common.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="fpc__com__packets_8h_source.html">fpc_com_packets.h</a>"</code><br />
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
Include dependency graph for fpc_com_chain.h:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="fpc__com__chain_8h__incl.svg" width="472" height="187"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
This graph shows which files directly or indirectly include this file:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="fpc__com__chain_8h__dep__incl.svg" width="456" height="187"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p><a href="fpc__com__chain_8h_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||
Data Structures</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpc__com__chain__private.html">fpc_com_chain_private</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpc__com__chain.html">fpc_com_chain</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
|
||||
Typedefs</h2></td></tr>
|
||||
<tr class="memitem:a0983b70df0d560f35537acc24ecc0d0d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structfpc__com__chain__private.html">fpc_com_chain_private</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__chain_8h.html#a0983b70df0d560f35537acc24ecc0d0d">fpc_com_chain_private_t</a></td></tr>
|
||||
<tr class="memdesc:a0983b70df0d560f35537acc24ecc0d0d"><td class="mdescLeft"> </td><td class="mdescRight">Communication chain private variables. <a href="#a0983b70df0d560f35537acc24ecc0d0d">More...</a><br /></td></tr>
|
||||
<tr class="separator:a0983b70df0d560f35537acc24ecc0d0d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a1530dd4e8729e5f546a96abc5ac0a6de"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structfpc__com__chain.html">fpc_com_chain</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a></td></tr>
|
||||
<tr class="memdesc:a1530dd4e8729e5f546a96abc5ac0a6de"><td class="mdescLeft"> </td><td class="mdescRight">Communication chain. <a href="#a1530dd4e8729e5f546a96abc5ac0a6de">More...</a><br /></td></tr>
|
||||
<tr class="separator:a1530dd4e8729e5f546a96abc5ac0a6de"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
|
||||
Enumerations</h2></td></tr>
|
||||
<tr class="memitem:aed3b93f1297ab69d5bd87603d4d00005"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005">fpc_com_chain_dir_t</a> { <br />
|
||||
  <a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005afe8870bc644ab21ffad73d3045febd4d">FPC_COM_CHAIN_TX</a> = 0,
|
||||
<br />
|
||||
  <a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005aa50bc934637a1ceea907810ccdd36e1c">FPC_COM_CHAIN_RX</a> = 1
|
||||
<br />
|
||||
}<tr class="memdesc:aed3b93f1297ab69d5bd87603d4d00005"><td class="mdescLeft"> </td><td class="mdescRight">Communication chain direction type. <a href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005">More...</a><br /></td></tr>
|
||||
</td></tr>
|
||||
<tr class="separator:aed3b93f1297ab69d5bd87603d4d00005"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Communication chain type definitions. </p>
|
||||
|
||||
<p>Definition in file <a class="el" href="fpc__com__chain_8h_source.html">fpc_com_chain.h</a>.</p>
|
||||
</div><h2 class="groupheader">Typedef Documentation</h2>
|
||||
<a class="anchor" id="a0983b70df0d560f35537acc24ecc0d0d"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">typedef struct <a class="el" href="structfpc__com__chain__private.html">fpc_com_chain_private</a> <a class="el" href="fpc__com__chain_8h.html#a0983b70df0d560f35537acc24ecc0d0d">fpc_com_chain_private_t</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Communication chain private variables. </p>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__chain_8h_source.html#l00034">34</a> of file <a class="el" href="fpc__com__chain_8h_source.html">fpc_com_chain.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a1530dd4e8729e5f546a96abc5ac0a6de"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">typedef struct <a class="el" href="structfpc__com__chain.html">fpc_com_chain</a> <a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Communication chain. </p>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__chain_8h_source.html#l00048">48</a> of file <a class="el" href="fpc__com__chain_8h_source.html">fpc_com_chain.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<h2 class="groupheader">Enumeration Type Documentation</h2>
|
||||
<a class="anchor" id="aed3b93f1297ab69d5bd87603d4d00005"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">enum <a class="el" href="fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005">fpc_com_chain_dir_t</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Communication chain direction type. </p>
|
||||
<table class="fieldtable">
|
||||
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="aed3b93f1297ab69d5bd87603d4d00005afe8870bc644ab21ffad73d3045febd4d"></a>FPC_COM_CHAIN_TX </td><td class="fielddoc">
|
||||
</td></tr>
|
||||
<tr><td class="fieldname"><a class="anchor" id="aed3b93f1297ab69d5bd87603d4d00005aa50bc934637a1ceea907810ccdd36e1c"></a>FPC_COM_CHAIN_RX </td><td class="fielddoc">
|
||||
</td></tr>
|
||||
</table>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__chain_8h_source.html#l00149">149</a> of file <a class="el" href="fpc__com__chain_8h_source.html">fpc_com_chain.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_bfccd401955b95cf8c75461437045ac0.html">inc</a></li><li class="navelem"><a class="el" href="fpc__com__chain_8h.html">fpc_com_chain.h</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,11 +0,0 @@
|
||||
var fpc__com__chain_8h =
|
||||
[
|
||||
[ "fpc_com_chain_private", "structfpc__com__chain__private.html", "structfpc__com__chain__private" ],
|
||||
[ "fpc_com_chain", "structfpc__com__chain.html", "structfpc__com__chain" ],
|
||||
[ "fpc_com_chain_private_t", "fpc__com__chain_8h.html#a0983b70df0d560f35537acc24ecc0d0d", null ],
|
||||
[ "fpc_com_chain_t", "fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de", null ],
|
||||
[ "fpc_com_chain_dir_t", "fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005", [
|
||||
[ "FPC_COM_CHAIN_TX", "fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005afe8870bc644ab21ffad73d3045febd4d", null ],
|
||||
[ "FPC_COM_CHAIN_RX", "fpc__com__chain_8h.html#aed3b93f1297ab69d5bd87603d4d00005aa50bc934637a1ceea907810ccdd36e1c", null ]
|
||||
] ]
|
||||
];
|
||||
@ -1,8 +0,0 @@
|
||||
<map id="inc/fpc_com_chain.h" name="inc/fpc_com_chain.h">
|
||||
<area shape="rect" id="node2" href="$fpc__com__link_8h.html" title="Communication link interface. " alt="" coords="7,80,138,107"/>
|
||||
<area shape="rect" id="node5" href="$fpc__com__transport_8h.html" title="Communication transport interface. " alt="" coords="162,80,325,107"/>
|
||||
<area shape="rect" id="node6" href="$fpc__hcp_8h.html" title="Host Communication Protocol interface. " alt="" coords="349,80,449,107"/>
|
||||
<area shape="rect" id="node3" href="$fpc__com__link_8c.html" title="Communication link layer implementation. " alt="" coords="5,155,137,181"/>
|
||||
<area shape="rect" id="node4" href="$fpc__com__transport_8c.html" title="Communication transport layer implementation. " alt="" coords="162,155,325,181"/>
|
||||
<area shape="rect" id="node7" href="$fpc__hcp_8c.html" title="Host Communication Protocol implementation. " alt="" coords="349,155,450,181"/>
|
||||
</map>
|
||||
@ -1 +0,0 @@
|
||||
1da3230b9ede79419647e0f9db2fcf4a
|
||||
@ -1,101 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
|
||||
-->
|
||||
<!-- Title: inc/fpc_com_chain.h Pages: 1 -->
|
||||
<svg width="342pt" height="140pt"
|
||||
viewBox="0.00 0.00 341.50 140.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 136)">
|
||||
<title>inc/fpc_com_chain.h</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-136 337.5,-136 337.5,4 -4,4"/>
|
||||
<!-- Node1 -->
|
||||
<g id="node1" class="node"><title>Node1</title>
|
||||
<polygon fill="#bfbfbf" stroke="black" points="125,-112.5 125,-131.5 232,-131.5 232,-112.5 125,-112.5"/>
|
||||
<text text-anchor="middle" x="178.5" y="-119.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc/fpc_com_chain.h</text>
|
||||
</g>
|
||||
<!-- Node2 -->
|
||||
<g id="node2" class="node"><title>Node2</title>
|
||||
<g id="a_node2"><a xlink:href="fpc__com__link_8h.html" target="_top" xlink:title="Communication link interface. ">
|
||||
<polygon fill="white" stroke="black" points="1.5,-56.5 1.5,-75.5 99.5,-75.5 99.5,-56.5 1.5,-56.5"/>
|
||||
<text text-anchor="middle" x="50.5" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc/fpc_com_link.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node2 -->
|
||||
<g id="edge1" class="edge"><title>Node1->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M148.877,-108.503C124.881,-98.3795 91.716,-84.388 70.6871,-75.5164"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="147.644,-111.781 158.218,-112.444 150.365,-105.332 147.644,-111.781"/>
|
||||
</g>
|
||||
<!-- Node5 -->
|
||||
<g id="node5" class="node"><title>Node5</title>
|
||||
<g id="a_node5"><a xlink:href="fpc__com__transport_8h.html" target="_top" xlink:title="Communication transport interface. ">
|
||||
<polygon fill="white" stroke="black" points="117.5,-56.5 117.5,-75.5 239.5,-75.5 239.5,-56.5 117.5,-56.5"/>
|
||||
<text text-anchor="middle" x="178.5" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc/fpc_com_transport.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node5 -->
|
||||
<g id="edge4" class="edge"><title>Node1->Node5</title>
|
||||
<path fill="none" stroke="midnightblue" d="M178.5,-101.805C178.5,-92.9102 178.5,-82.7798 178.5,-75.7511"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="175,-102.083 178.5,-112.083 182,-102.083 175,-102.083"/>
|
||||
</g>
|
||||
<!-- Node6 -->
|
||||
<g id="node6" class="node"><title>Node6</title>
|
||||
<g id="a_node6"><a xlink:href="fpc__hcp_8h.html" target="_top" xlink:title="Host Communication Protocol interface. ">
|
||||
<polygon fill="white" stroke="black" points="258,-56.5 258,-75.5 333,-75.5 333,-56.5 258,-56.5"/>
|
||||
<text text-anchor="middle" x="295.5" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc/fpc_hcp.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node6 -->
|
||||
<g id="edge6" class="edge"><title>Node1->Node6</title>
|
||||
<path fill="none" stroke="midnightblue" d="M206.164,-108.232C228.049,-98.1312 257.997,-84.3091 277.048,-75.5164"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="204.652,-105.075 197.039,-112.444 207.585,-111.431 204.652,-105.075"/>
|
||||
</g>
|
||||
<!-- Node3 -->
|
||||
<g id="node3" class="node"><title>Node3</title>
|
||||
<g id="a_node3"><a xlink:href="fpc__com__link_8c.html" target="_top" xlink:title="Communication link layer implementation. ">
|
||||
<polygon fill="white" stroke="black" points="0,-0.5 0,-19.5 99,-19.5 99,-0.5 0,-0.5"/>
|
||||
<text text-anchor="middle" x="49.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">src/fpc_com_link.c</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node2->Node3 -->
|
||||
<g id="edge2" class="edge"><title>Node2->Node3</title>
|
||||
<path fill="none" stroke="midnightblue" d="M50.1445,-45.8045C49.9798,-36.9102 49.7922,-26.7798 49.6621,-19.7511"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="46.6502,-46.1495 50.3349,-56.083 53.649,-46.0199 46.6502,-46.1495"/>
|
||||
</g>
|
||||
<!-- Node4 -->
|
||||
<g id="node4" class="node"><title>Node4</title>
|
||||
<g id="a_node4"><a xlink:href="fpc__com__transport_8c.html" target="_top" xlink:title="Communication transport layer implementation. ">
|
||||
<polygon fill="white" stroke="black" points="117.5,-0.5 117.5,-19.5 239.5,-19.5 239.5,-0.5 117.5,-0.5"/>
|
||||
<text text-anchor="middle" x="178.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">src/fpc_com_transport.c</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node2->Node4 -->
|
||||
<g id="edge3" class="edge"><title>Node2->Node4</title>
|
||||
<path fill="none" stroke="midnightblue" d="M80.1226,-52.503C104.119,-42.3795 137.284,-28.388 158.313,-19.5164"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="78.6352,-49.3317 70.782,-56.4435 81.3561,-55.7813 78.6352,-49.3317"/>
|
||||
</g>
|
||||
<!-- Node5->Node4 -->
|
||||
<g id="edge5" class="edge"><title>Node5->Node4</title>
|
||||
<path fill="none" stroke="midnightblue" d="M178.5,-45.8045C178.5,-36.9102 178.5,-26.7798 178.5,-19.7511"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="175,-46.083 178.5,-56.083 182,-46.083 175,-46.083"/>
|
||||
</g>
|
||||
<!-- Node7 -->
|
||||
<g id="node7" class="node"><title>Node7</title>
|
||||
<g id="a_node7"><a xlink:href="fpc__hcp_8c.html" target="_top" xlink:title="Host Communication Protocol implementation. ">
|
||||
<polygon fill="white" stroke="black" points="257.5,-0.5 257.5,-19.5 333.5,-19.5 333.5,-0.5 257.5,-0.5"/>
|
||||
<text text-anchor="middle" x="295.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">src/fpc_hcp.c</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node6->Node7 -->
|
||||
<g id="edge7" class="edge"><title>Node6->Node7</title>
|
||||
<path fill="none" stroke="midnightblue" d="M295.5,-45.8045C295.5,-36.9102 295.5,-26.7798 295.5,-19.7511"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="292,-46.083 295.5,-56.083 299,-46.083 292,-46.083"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.7 KiB |
@ -1,5 +0,0 @@
|
||||
<map id="inc/fpc_com_chain.h" name="inc/fpc_com_chain.h">
|
||||
<area shape="rect" id="node3" href="$fpc__com__result_8h.html" title="Communication result type definitions. " alt="" coords="24,80,147,107"/>
|
||||
<area shape="rect" id="node4" href="$fpc__hcp__common_8h.html" title="Host Communication Protocol common type definitions. " alt="" coords="331,80,467,107"/>
|
||||
<area shape="rect" id="node6" href="$fpc__com__packets_8h.html" title="Communication packet type definitions. " alt="" coords="171,80,307,107"/>
|
||||
</map>
|
||||
@ -1 +0,0 @@
|
||||
f3463291a698aa7de197e31a9e7ef155
|
||||
@ -1,92 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
|
||||
-->
|
||||
<!-- Title: inc/fpc_com_chain.h Pages: 1 -->
|
||||
<svg width="354pt" height="140pt"
|
||||
viewBox="0.00 0.00 353.98 140.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 136)">
|
||||
<title>inc/fpc_com_chain.h</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-136 349.98,-136 349.98,4 -4,4"/>
|
||||
<!-- Node1 -->
|
||||
<g id="node1" class="node"><title>Node1</title>
|
||||
<polygon fill="#bfbfbf" stroke="black" points="63.4799,-112.5 63.4799,-131.5 170.48,-131.5 170.48,-112.5 63.4799,-112.5"/>
|
||||
<text text-anchor="middle" x="116.98" y="-119.5" font-family="Helvetica,sans-Serif" font-size="10.00">inc/fpc_com_chain.h</text>
|
||||
</g>
|
||||
<!-- Node2 -->
|
||||
<g id="node2" class="node"><title>Node2</title>
|
||||
<polygon fill="white" stroke="#bfbfbf" points="92.4799,-0.5 92.4799,-19.5 141.48,-19.5 141.48,-0.5 92.4799,-0.5"/>
|
||||
<text text-anchor="middle" x="116.98" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">stdint.h</text>
|
||||
</g>
|
||||
<!-- Node1->Node2 -->
|
||||
<g id="edge1" class="edge"><title>Node1->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M63.3021,-112.844C41.4095,-106.587 18.1815,-95.5315 4.9799,-76 -16.8395,-43.7186 42.2178,-25.3548 82.645,-16.8597"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="83.3345,-20.2912 92.4611,-14.9101 81.9708,-13.4253 83.3345,-20.2912"/>
|
||||
</g>
|
||||
<!-- Node3 -->
|
||||
<g id="node3" class="node"><title>Node3</title>
|
||||
<g id="a_node3"><a xlink:href="fpc__com__result_8h.html" target="_top" xlink:title="Communication result type definitions. ">
|
||||
<polygon fill="white" stroke="black" points="13.9799,-56.5 13.9799,-75.5 105.98,-75.5 105.98,-56.5 13.9799,-56.5"/>
|
||||
<text text-anchor="middle" x="59.9799" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_com_result.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node3 -->
|
||||
<g id="edge2" class="edge"><title>Node1->Node3</title>
|
||||
<path fill="none" stroke="midnightblue" d="M107.822,-112.324C99.4784,-104.42 86.9475,-92.5482 76.803,-82.9377"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="78.9712,-80.1705 69.3046,-75.8339 74.157,-85.2522 78.9712,-80.1705"/>
|
||||
</g>
|
||||
<!-- Node4 -->
|
||||
<g id="node4" class="node"><title>Node4</title>
|
||||
<g id="a_node4"><a xlink:href="fpc__hcp__common_8h.html" target="_top" xlink:title="Host Communication Protocol common type definitions. ">
|
||||
<polygon fill="white" stroke="black" points="243.98,-56.5 243.98,-75.5 345.98,-75.5 345.98,-56.5 243.98,-56.5"/>
|
||||
<text text-anchor="middle" x="294.98" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_hcp_common.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node4 -->
|
||||
<g id="edge4" class="edge"><title>Node1->Node4</title>
|
||||
<path fill="none" stroke="midnightblue" d="M145.185,-112.444C175.39,-103.28 223.491,-88.6876 257.009,-78.5192"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="258.354,-81.7688 266.907,-75.5164 256.322,-75.0703 258.354,-81.7688"/>
|
||||
</g>
|
||||
<!-- Node6 -->
|
||||
<g id="node6" class="node"><title>Node6</title>
|
||||
<g id="a_node6"><a xlink:href="fpc__com__packets_8h.html" target="_top" xlink:title="Communication packet type definitions. ">
|
||||
<polygon fill="white" stroke="black" points="123.98,-56.5 123.98,-75.5 225.98,-75.5 225.98,-56.5 123.98,-56.5"/>
|
||||
<text text-anchor="middle" x="174.98" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">fpc_com_packets.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node6 -->
|
||||
<g id="edge7" class="edge"><title>Node1->Node6</title>
|
||||
<path fill="none" stroke="midnightblue" d="M126.299,-112.324C134.872,-104.341 147.792,-92.3128 158.168,-82.6529"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="160.558,-85.2098 165.492,-75.8339 155.788,-80.0865 160.558,-85.2098"/>
|
||||
</g>
|
||||
<!-- Node3->Node2 -->
|
||||
<g id="edge3" class="edge"><title>Node3->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M69.1379,-56.324C77.4814,-48.4196 90.0123,-36.5482 100.157,-26.9377"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="102.803,-29.2522 107.655,-19.8339 97.9886,-24.1705 102.803,-29.2522"/>
|
||||
</g>
|
||||
<!-- Node4->Node2 -->
|
||||
<g id="edge5" class="edge"><title>Node4->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M266.775,-56.4435C235.504,-46.9567 185.051,-31.6507 151.458,-21.4595"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="152.199,-18.0269 141.613,-18.473 150.166,-24.7254 152.199,-18.0269"/>
|
||||
</g>
|
||||
<!-- Node5 -->
|
||||
<g id="node5" class="node"><title>Node5</title>
|
||||
<polygon fill="white" stroke="#bfbfbf" points="266.98,-0.5 266.98,-19.5 322.98,-19.5 322.98,-0.5 266.98,-0.5"/>
|
||||
<text text-anchor="middle" x="294.98" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">stdbool.h</text>
|
||||
</g>
|
||||
<!-- Node4->Node5 -->
|
||||
<g id="edge6" class="edge"><title>Node4->Node5</title>
|
||||
<path fill="none" stroke="midnightblue" d="M294.98,-56.083C294.98,-49.0059 294.98,-38.8611 294.98,-29.9865"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="298.48,-29.751 294.98,-19.7511 291.48,-29.7511 298.48,-29.751"/>
|
||||
</g>
|
||||
<!-- Node6->Node2 -->
|
||||
<g id="edge8" class="edge"><title>Node6->Node2</title>
|
||||
<path fill="none" stroke="midnightblue" d="M165.661,-56.324C157.087,-48.3414 144.168,-36.3128 133.792,-26.6529"/>
|
||||
<polygon fill="midnightblue" stroke="midnightblue" points="136.172,-24.0865 126.468,-19.8339 131.402,-29.2098 136.172,-24.0865"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.5 KiB |
@ -1,235 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.11"/>
|
||||
<title>Host Communication Protocol: src/fpc_com_link.c File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Host Communication Protocol
|
||||
 <span id="projectnumber">2.0</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.11 -->
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>Globals</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('fpc__com__link_8c.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#func-members">Functions</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">fpc_com_link.c File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>Communication link layer implementation.
|
||||
<a href="#details">More...</a></p>
|
||||
<div class="textblock"><code>#include <string.h></code><br />
|
||||
<code>#include <stdlib.h></code><br />
|
||||
<code>#include "<a class="el" href="fpc__com__link_8h_source.html">fpc_com_link.h</a>"</code><br />
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
Include dependency graph for fpc_com_link.c:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="fpc__com__link_8c__incl.svg" width="551" height="336"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p><a href="fpc__com__link_8c_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
||||
Functions</h2></td></tr>
|
||||
<tr class="memitem:a43a8a308255ea41e7b7cdefd63a90d14"><td class="memItemLeft" align="right" valign="top"><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__link_8c.html#a43a8a308255ea41e7b7cdefd63a90d14">fpc_com_link_transmit</a> (<a class="el" href="fpc__com__packets_8h.html#af6fc3a46c87f1ad2a452eb822f2a0942">fpc_com_packet_link_t</a> *packet, <a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a> *chain)</td></tr>
|
||||
<tr class="memdesc:a43a8a308255ea41e7b7cdefd63a90d14"><td class="mdescLeft"> </td><td class="mdescRight">Sends a packet over the physical link in blocking mode. <a href="#a43a8a308255ea41e7b7cdefd63a90d14">More...</a><br /></td></tr>
|
||||
<tr class="separator:a43a8a308255ea41e7b7cdefd63a90d14"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ae64b80cd91fbfe44abc06dc52eacf739"><td class="memItemLeft" align="right" valign="top"><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__link_8c.html#ae64b80cd91fbfe44abc06dc52eacf739">fpc_com_link_receive</a> (<a class="el" href="fpc__com__packets_8h.html#af6fc3a46c87f1ad2a452eb822f2a0942">fpc_com_packet_link_t</a> *packet, <a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a> *chain)</td></tr>
|
||||
<tr class="memdesc:ae64b80cd91fbfe44abc06dc52eacf739"><td class="mdescLeft"> </td><td class="mdescRight">Receives a packet from the physical link. <a href="#ae64b80cd91fbfe44abc06dc52eacf739">More...</a><br /></td></tr>
|
||||
<tr class="separator:ae64b80cd91fbfe44abc06dc52eacf739"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a3e60e21a5ac4ad4881e4929de2f3c2f4"><td class="memItemLeft" align="right" valign="top">uint16_t </td><td class="memItemRight" valign="bottom"><a class="el" href="fpc__com__link_8c.html#a3e60e21a5ac4ad4881e4929de2f3c2f4">fpc_com_link_get_overhead</a> (uint16_t *offset)</td></tr>
|
||||
<tr class="memdesc:a3e60e21a5ac4ad4881e4929de2f3c2f4"><td class="mdescLeft"> </td><td class="mdescRight">Returns the overhead of the layer. <a href="#a3e60e21a5ac4ad4881e4929de2f3c2f4">More...</a><br /></td></tr>
|
||||
<tr class="separator:a3e60e21a5ac4ad4881e4929de2f3c2f4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Communication link layer implementation. </p>
|
||||
|
||||
<p>Definition in file <a class="el" href="fpc__com__link_8c_source.html">fpc_com_link.c</a>.</p>
|
||||
</div><h2 class="groupheader">Function Documentation</h2>
|
||||
<a class="anchor" id="a3e60e21a5ac4ad4881e4929de2f3c2f4"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">uint16_t fpc_com_link_get_overhead </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">uint16_t * </td>
|
||||
<td class="paramname"><em>offset</em></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Returns the overhead of the layer. </p>
|
||||
<dl class="params"><dt>Parameters</dt><dd>
|
||||
<table class="params">
|
||||
<tr><td class="paramdir">[out]</td><td class="paramname">offset</td><td>The offset to the packet data. </td></tr>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>Overhead size in bytes. </dd></dl>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__link_8c_source.html#l00126">126</a> of file <a class="el" href="fpc__com__link_8c_source.html">fpc_com_link.c</a>.</p>
|
||||
|
||||
<p>References <a class="el" href="fpc__com__packets_8h_source.html#l00063">fpc_com_packet_link::channel</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00069">fpc_com_packet_link::crc</a>, and <a class="el" href="fpc__com__packets_8h_source.html#l00065">fpc_com_packet_link::size</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="ae64b80cd91fbfe44abc06dc52eacf739"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> fpc_com_link_receive </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"><a class="el" href="fpc__com__packets_8h.html#af6fc3a46c87f1ad2a452eb822f2a0942">fpc_com_packet_link_t</a> * </td>
|
||||
<td class="paramname"><em>packet</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype"><a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a> * </td>
|
||||
<td class="paramname"><em>chain</em> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Receives a packet from the physical link. </p>
|
||||
<dl class="params"><dt>Parameters</dt><dd>
|
||||
<table class="params">
|
||||
<tr><td class="paramdir">[in,out]</td><td class="paramname">packet</td><td>Packet to populate. </td></tr>
|
||||
<tr><td class="paramdir">[in]</td><td class="paramname">chain</td><td>The communication chain to use. </td></tr>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> </dd></dl>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__link_8c_source.html#l00073">73</a> of file <a class="el" href="fpc__com__link_8c_source.html">fpc_com_link.c</a>.</p>
|
||||
|
||||
<p>References <a class="el" href="fpc__com__packets_8h_source.html#l00063">fpc_com_packet_link::channel</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00069">fpc_com_packet_link::crc</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00066">fpc_com_chain::crc_calc</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00067">fpc_com_packet_link::data</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00032">FPC_COM_ACK</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00151">FPC_COM_CHAIN_RX</a>, <a class="el" href="fpc__com__result_8h_source.html#l00035">FPC_COM_RESULT_INVALID_ARGUMENT</a>, <a class="el" href="fpc__com__result_8h_source.html#l00037">FPC_COM_RESULT_IO_ERROR</a>, <a class="el" href="fpc__com__result_8h_source.html#l00033">FPC_COM_RESULT_OK</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00121">fpc_com_chain::phy_mtu_buffer</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00119">fpc_com_chain::phy_mtu_size</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00116">fpc_com_chain::phy_rx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00125">fpc_com_chain::phy_timeout_rx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00123">fpc_com_chain::phy_timeout_tx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00113">fpc_com_chain::phy_tx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00137">fpc_com_chain::session</a>, and <a class="el" href="fpc__com__packets_8h_source.html#l00065">fpc_com_packet_link::size</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="anchor" id="a43a8a308255ea41e7b7cdefd63a90d14"></a>
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> fpc_com_link_transmit </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype"><a class="el" href="fpc__com__packets_8h.html#af6fc3a46c87f1ad2a452eb822f2a0942">fpc_com_packet_link_t</a> * </td>
|
||||
<td class="paramname"><em>packet</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype"><a class="el" href="fpc__com__chain_8h.html#a1530dd4e8729e5f546a96abc5ac0a6de">fpc_com_chain_t</a> * </td>
|
||||
<td class="paramname"><em>chain</em> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Sends a packet over the physical link in blocking mode. </p>
|
||||
<dl class="params"><dt>Parameters</dt><dd>
|
||||
<table class="params">
|
||||
<tr><td class="paramdir">[in]</td><td class="paramname">packet</td><td>Packet to transmit. </td></tr>
|
||||
<tr><td class="paramdir">[in]</td><td class="paramname">chain</td><td>The communication chain to use. </td></tr>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="fpc__com__result_8h.html#a49b1f9a24f677d396227ea645494070a">fpc_com_result_t</a> </dd></dl>
|
||||
|
||||
<p>Definition at line <a class="el" href="fpc__com__link_8c_source.html#l00027">27</a> of file <a class="el" href="fpc__com__link_8c_source.html">fpc_com_link.c</a>.</p>
|
||||
|
||||
<p>References <a class="el" href="fpc__com__packets_8h_source.html#l00063">fpc_com_packet_link::channel</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00069">fpc_com_packet_link::crc</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00066">fpc_com_chain::crc_calc</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00067">fpc_com_packet_link::data</a>, <a class="el" href="fpc__com__packets_8h_source.html#l00032">FPC_COM_ACK</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00150">FPC_COM_CHAIN_TX</a>, <a class="el" href="fpc__com__link_8c_source.html#l00126">fpc_com_link_get_overhead()</a>, <a class="el" href="fpc__com__result_8h_source.html#l00035">FPC_COM_RESULT_INVALID_ARGUMENT</a>, <a class="el" href="fpc__com__result_8h_source.html#l00037">FPC_COM_RESULT_IO_ERROR</a>, <a class="el" href="fpc__com__result_8h_source.html#l00033">FPC_COM_RESULT_OK</a>, <a class="el" href="fpc__com__result_8h_source.html#l00038">FPC_COM_RESULT_TIMEOUT</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00121">fpc_com_chain::phy_mtu_buffer</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00116">fpc_com_chain::phy_rx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00125">fpc_com_chain::phy_timeout_rx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00123">fpc_com_chain::phy_timeout_tx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00113">fpc_com_chain::phy_tx</a>, <a class="el" href="fpc__com__chain_8h_source.html#l00137">fpc_com_chain::session</a>, and <a class="el" href="fpc__com__packets_8h_source.html#l00065">fpc_com_packet_link::size</a>.</p>
|
||||
|
||||
<p><div class="dynheader">
|
||||
Here is the call graph for this function:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="fpc__com__link_8c_a43a8a308255ea41e7b7cdefd63a90d14_cgraph.svg" width="396" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="fpc__com__link_8c.html">fpc_com_link.c</a></li>
|
||||
<li class="footer">Generated on Tue Mar 24 2020 11:09:44 for Host Communication Protocol by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||