1 /* ****************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
24 * This file contains common utility functions to manage the CA msg
25 * fragmentation and reassemebly.
28 #ifndef CA_FRAGMENTATION_H_
29 #define CA_FRAGMENTATION_H_
35 * @var MAX_DATA_LENGTH_SUPPORTED
36 * @brief From the adapter level, this is the maximum data length is supported
37 * for the data transmission.
39 #define MAX_DATA_LENGTH_SUPPORTED 4095
42 * @var NUMBER_OF_BITS_TO_IDENTIFY_DATA
43 * @brief The number of bits allocated to represent data length in header.
45 #define NUMBER_OF_BITS_TO_IDENTIFY_DATA 12
48 * @var NUMBER_OF_BITS_IN_CA_HEADER
49 * @brief The length of the header in bits.
51 #define NUMBER_OF_BITS_IN_CA_HEADER 15
54 * @var CA_HEADER_LENGTH
55 * @brief The length of the header in bytes.
57 #define CA_HEADER_LENGTH 2
60 * @var CA_SUPPORTED_BLE_MTU_SIZE
61 * @brief The MTU supported for BLE adapter
63 #define CA_SUPPORTED_BLE_MTU_SIZE 20
67 * @var PLATFORM_IDENTIFIER_BIT
68 * @brief Reserved bit to differentiating the platform. Currently not in use.
70 #define PLATFORM_IDENTIFIER_BIT 1
73 * @var CA_SUPPORTED_EDR_MTU_SIZE
74 * @brief The MTU supported from Tizen platform for EDR adapter.
76 #define CA_SUPPORTED_EDR_MTU_SIZE 512
80 * @var PLATFORM_IDENTIFIER_BIT
81 * @brief Reserved bit to differentiating the platform. Currently not in use.
83 #define PLATFORM_IDENTIFIER_BIT 0
86 * @var CA_SUPPORTED_EDR_MTU_SIZE
87 * @brief The MTU supported from Android platform for EDR adapter.
89 #define CA_SUPPORTED_EDR_MTU_SIZE 200
93 * @var PLATFORM_IDENTIFIER_BIT
94 * @brief Reserved bit to differentiating the platform. Currently not in use.
96 #define PLATFORM_IDENTIFIER_BIT 0
99 * @var CA_SUPPORTED_EDR_MTU_SIZE
100 * @brief The MTU supported from Arduino platform for EDR adapter.
102 #define CA_SUPPORTED_EDR_MTU_SIZE 200
104 #else //Other Platforms
106 * @var PLATFORM_IDENTIFIER_BIT
107 * @brief Reserved bit to differentiating the platform. Currently not in use.
109 #define PLATFORM_IDENTIFIER_BIT 0
112 * @var CA_SUPPORTED_EDR_MTU_SIZE
113 * @brief The MTU supported for EDR adapter
115 #define CA_SUPPORTED_EDR_MTU_SIZE 200
120 * @var HEADER_VERSION
121 * @brief Current Header version.
123 #define HEADER_VERSION 1
130 /*****************************************************************
131 * @file The CA Header format
132 * @brief CA Header will be defined by 2 bytes of Header.
133 * First two bits : Header version(Currently Its not being used)
134 * Third bit and fourth bit: Reserved bits for future use.
135 * 5th to 16th bit : 12 bits to provide the length of the data.
136 *****************************************************************/
139 * @fn CAGenerateHeader
140 * @brief This function is used to generate the CA specific header to
141 * maintain the fragmentation logic. The header structure
142 * explained above will be formed and returned to the caller.
144 * @param[in,out] header Pointer to the octet array that will contain
145 * the generated header.
146 * @param[in] length The total length of the data. The length will
147 * be embedded in bits 5-16 of the header,
148 * meaning the maximum overall length of the
149 * data to be fragmented can be no more than 4096
152 * @return @c CA_STATUS_OK on success. One of the @c CA_STATUS_FAILED or
153 * other error values on error.
154 * @retval @c CA_STATUS_OK Successful
155 * @retval @c CA_STATUS_INVALID_PARAM Invalid input arguments
156 * @retval @c CA_STATUS_FAILED Operation failed
158 CAResult_t CAGenerateHeader(char *header, uint32_t length);
162 * @brief This function is used to parse the header in the receiver
163 * end. This function will provide the information of the total
164 * length of the data which has been fragmented.
166 * @param[in] header Pointer to the octet array data which contains the
167 * header information. Note that pointer should
168 * point to two bytes of data header which needs to
171 * @return Overall length of the data to be reassembled, or 0 on
174 uint32_t CAParseHeader(const char *header);
180 #endif /* CA_FRAGMENTATION_H_ */