123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- #ifndef ANTFS_H__
- #define ANTFS_H__
- #include <stdint.h>
- #include <stdbool.h>
- #include "defines.h"
- #include "sdk_config.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define ANTFS_VERSION_MAJOR 1u
- #define ANTFS_VERSION_MINOR 0
- #define ANTFS_VERSION_ITERATION 0
- #define ANTFS_VERSION_TYPE 'R'
- #define ANTFS_VERSION_SPEC '0.AK'
- #define ANTFS_DIR_STRUCT_VERSION 1u
- #define ANTFS_VERSION_DATE 20090522u
- #define ANTFS_LINK_FREQ 50u
- #define ANTFS_CHANNEL_TYPE CHANNEL_TYPE_MASTER
- #define ANTFS_AUTH_STRING_MAX 255u
- #define ANTFS_PASSKEY_SIZE 16u
- #define ANTFS_FRIENDLY_NAME_MAX 16u
- #define ANTFS_REMOTE_FRIENDLY_NAME_MAX 16u
- #define BEACON_PERIOD_SHIFT 0x00
- #define BEACON_PERIOD_MASK (0x07u << BEACON_PERIOD_SHIFT)
- #define BEACON_PERIOD_0_5_HZ (0x00 << BEACON_PERIOD_SHIFT)
- #define BEACON_PERIOD_1_HZ (0x01u << BEACON_PERIOD_SHIFT)
- #define BEACON_PERIOD_2_HZ (0x02u << BEACON_PERIOD_SHIFT)
- #define BEACON_PERIOD_4_HZ (0x03u << BEACON_PERIOD_SHIFT)
- #define BEACON_PERIOD_8_HZ (0x04u << BEACON_PERIOD_SHIFT)
- #define PAIRING_AVAILABLE_FLAG_SHIFT 0x03u
- #define PAIRING_AVAILABLE_FLAG_MASK (0x01u << PAIRING_AVAILABLE_FLAG_SHIFT)
- #define UPLOAD_ENABLED_FLAG_SHIFT 0x04u
- #define UPLOAD_ENABLED_FLAG_MASK (0x01u << UPLOAD_ENABLED_FLAG_SHIFT)
- #define DATA_AVAILABLE_FLAG_SHIFT 0x05u
- #define DATA_AVAILABLE_FLAG_MASK (0x01u << DATA_AVAILABLE_FLAG_SHIFT)
- #if ANTFS_ENABLED
- #if ANTFS_CONFIG_AUTH_TYPE_PAIRING_ENABLED
- #define ANTFS_PAIRING_BIT PAIRING_AVAILABLE_FLAG_MASK
- #else
- #define ANTFS_PAIRING_BIT 0x00u
- #endif
- #if ANTFS_CONFIG_UPLOAD_ENABLED
- #define ANTFS_UPLOAD_BIT UPLOAD_ENABLED_FLAG_MASK
- #else
- #define ANTFS_UPLOAD_BIT 0x00u
- #endif
- #define ANTFS_DEFAULT_BEACON (ANTFS_CONFIG_BEACON_STATUS_PERIOD | ANTFS_UPLOAD_BIT | ANTFS_PAIRING_BIT | DATA_AVAILABLE_FLAG_MASK)
- #endif
- #define RESPONSE_MESSAGE_OK 0x00u
- #define RESPONSE_MESSAGE_NOT_EXIST 0x01u
- #define RESPONSE_MESSAGE_NOT_AVAILABLE 0x02u
- #define RESPONSE_INVALID_OPERATION 0x04u
- #define RESPONSE_MESSAGE_NOT_READY 0x03u
- #define RESPONSE_INVALID_CRC 0x05u
- #define RESPONSE_MESSAGE_NOT_ENOUGH_SPACE 0x03u
- #define RESPONSE_MESSAGE_UPLOAD_NOT_READY 0x05u
- #define RESPONSE_MESSAGE_FAIL 0x01u
- #define ANTFS_DIR_READ_MASK 0x80u
- #define ANTFS_DIR_WRITE_MASK 0x40u
- #define ANTFS_DIR_ERASE_MASK 0x20u
- #define ANTFS_DIR_ARCHIVE_MASK 0x10u
- #define ANTFS_DIR_APPEND_MASK 0x08u
- #define ANTFS_MAX_FILE_SIZE 0xFFFFFFFFu
- #define ANTFS_BURST_BLOCK_SIZE 16u
- typedef union
- {
- uint32_t status;
- struct
- {
- uint8_t link_period : 3;
- bool is_pairing_enabled : 1;
- bool is_upload_enabled : 1;
- bool is_data_available : 1;
- uint8_t reserved : 2;
- } parameters;
- } antfs_beacon_status_byte1_t;
- typedef enum
- {
- ANTFS_STATE_OFF,
- ANTFS_STATE_INIT,
- ANTFS_STATE_LINK,
- ANTFS_STATE_AUTH,
- ANTFS_STATE_TRANS
- } antfs_state_t;
- typedef enum
- {
- ANTFS_LINK_SUBSTATE_NONE
- } antfs_link_substate_t;
- typedef enum
- {
- ANTFS_AUTH_SUBSTATE_NONE,
- ANTFS_AUTH_SUBSTATE_PAIR,
- ANTFS_AUTH_SUBSTATE_PASSKEY,
- ANTFS_AUTH_SUBSTATE_ACCEPT,
- ANTFS_AUTH_SUBSTATE_REJECT
- } antfs_authenticate_substate_t;
- typedef enum
- {
- ANTFS_TRANS_SUBSTATE_NONE,
- ANTFS_TRANS_SUBSTATE_VERIFY_CRC,
- ANTFS_TRANS_SUBSTATE_DOWNLOADING,
- ANTFS_TRANS_SUBSTATE_UPLOAD_WAIT_FOR_DATA,
- ANTFS_TRANS_SUBSTATE_UPLOADING,
- ANTFS_TRANS_SUBSTATE_UPLOAD_RESUME
- } antfs_transport_substate_t;
- typedef enum
- {
- ANTFS_EVENT_PAIRING_REQUEST = 0xB0,
- ANTFS_EVENT_PAIRING_TIMEOUT = 0xB1,
- ANTFS_EVENT_OPEN_COMPLETE = 0xB2,
- ANTFS_EVENT_CLOSE_COMPLETE = 0xB4,
- ANTFS_EVENT_LINK = 0xB6,
- ANTFS_EVENT_AUTH = 0xB7,
- ANTFS_EVENT_TRANS = 0xB8,
- ANTFS_EVENT_DOWNLOAD_REQUEST = 0xB9,
- ANTFS_EVENT_DOWNLOAD_REQUEST_DATA = 0xBA,
- ANTFS_EVENT_DOWNLOAD_START = 0xBB,
- ANTFS_EVENT_DOWNLOAD_COMPLETE = 0xBC,
- ANTFS_EVENT_DOWNLOAD_FAIL = 0xBD,
- ANTFS_EVENT_UPLOAD_REQUEST = 0xBE,
- ANTFS_EVENT_UPLOAD_DATA = 0xBF,
- ANTFS_EVENT_UPLOAD_START = 0xC0,
- ANTFS_EVENT_UPLOAD_COMPLETE = 0xC1,
- ANTFS_EVENT_UPLOAD_FAIL = 0xC2,
- ANTFS_EVENT_ERASE_REQUEST = 0xC3
- } antfs_event_t;
- typedef struct
- {
- antfs_event_t event;
- uint16_t file_index;
- uint32_t offset;
- uint32_t bytes;
- uint16_t crc;
- uint8_t data[8];
- } antfs_event_return_t;
- typedef struct
- {
- uint32_t client_serial_number;
- uint16_t beacon_device_type;
- uint16_t beacon_device_manufacturing_id;
- uint8_t beacon_frequency;
- antfs_beacon_status_byte1_t beacon_status_byte1;
- const uint8_t * p_pass_key;
- const uint8_t * p_remote_friendly_name;
- } antfs_params_t;
- typedef struct
- {
- uint8_t version;
- uint8_t length;
- uint8_t time_format;
- uint8_t reserved01;
- uint8_t reserved02;
- uint8_t reserved03;
- uint8_t reserved04;
- uint8_t reserved05;
- uint32_t system_time;
- uint32_t date;
- } antfs_dir_header_t;
- typedef struct
- {
- uint16_t data_file_index;
- uint8_t file_data_type;
- uint8_t user_defined1;
- uint16_t user_defined2;
- uint8_t user_flags;
- uint8_t general_flags;
- uint32_t file_size_in_bytes;
- uint32_t date;
- } antfs_dir_struct_t;
- typedef struct
- {
- ulong_union_t file_size;
- uint32_t max_file_size;
- ulong_union_t max_burst_block_size;
- ushort_union_t file_index;
- uint16_t file_crc;
- } antfs_request_info_t;
- typedef void(*antfs_burst_wait_handler_t)(void);
- void antfs_init(const antfs_params_t * const p_params,
- antfs_burst_wait_handler_t burst_wait_handler);
- const char * antfs_hostname_get(void);
- bool antfs_pairing_resp_transmit(bool accept);
- void antfs_download_req_resp_prepare(uint8_t response,
- const antfs_request_info_t * const p_request_info);
- uint32_t antfs_input_data_download(uint16_t index,
- uint32_t offset,
- uint32_t num_bytes,
- const uint8_t * const p_message);
- bool antfs_upload_req_resp_transmit(uint8_t response,
- const antfs_request_info_t * const p_request_info);
- bool antfs_upload_data_resp_transmit(bool data_upload_success);
- void antfs_erase_req_resp_transmit(uint8_t response);
- bool antfs_event_extract(antfs_event_return_t * const p_event);
- void antfs_message_process(uint8_t * p_message);
- void antfs_channel_setup(void);
- #ifdef __cplusplus
- }
- #endif
- #endif
|