+/**
+ * Stores the information of the Data to be sent from the queues.
+ *
+ * This structure will be pushed to the sender/receiver queue for
+ * processing.
+ */
+typedef struct
+{
+ /// Remote endpoint contains the information of remote device.
+ CAEndpoint_t *remoteEndpoint;
+
+ /// Data to be transmitted over LE transport.
+ uint8_t *data;
+
+ /// Length of the data being transmitted.
+ uint32_t dataLen;
+
+ /// Sender information list
+ u_arraylist_t * senderInfo;
+} CALEData_t;
+
+/**
+ * This will be used to notify device status changes to the LE adapter layer.
+ * @param[in] adapter_state State of the adapter.
+ */
+typedef void (*CALEDeviceStateChangedCallback)(CAAdapterState_t adapter_state);
+
+/**
+ * This will be used to notify device connection state changes to the LE adapter layer.
+ * @param[in] adapter Transport type information.
+ * @param[in] remoteAddress Endpoint object from which the connection status is changed.
+ * @param[in] connected State of connection.
+ */
+typedef void (*CALEConnectionStateChangedCallback)(CATransportAdapter_t adapter,
+ const char *remoteAddress, bool connected);
+
+/**
+ * Notify the adapter layer that a packet was received from the GATT
+ * peer.
+ *
+ * @param[in] remoteAddress Remote endpoint Address.
+ * @param[in] data Data received.
+ * @param[in] dataLength Length of the data received.
+ * @param[in] sentLength Length of the data sent.
+ *
+ * @return ::CA_STATUS_OK or Appropriate error code.
+ * @retval ::CA_STATUS_OK Successful.
+ * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
+ * @retval ::CA_STATUS_FAILED Operation failed.
+ */
+typedef CAResult_t (*CABLEDataReceivedCallback)(const char *remoteAddress,
+ const uint8_t *data,
+ uint32_t dataLength,
+ uint32_t *sentLength);
+
+/**
+ * Initialize the LE adapter layer. This will be invoked from the CA
+ * layer.
+ *
+ * @param[in] threadPool Thread pool handle
+ * @return ::CA_STATUS_OK or Appropriate error code
+ * @retval ::CA_STATUS_OK Successful
+ * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments
+ * @retval ::CA_STATUS_FAILED Operation failed
+ */
+CAResult_t CAInitializeLEAdapter(const ca_thread_pool_t threadPool);
+
+/**
+ * Start the LE adapter layer.
+ *
+ * This function will be invoked from the CA layer when the LE
+ * "network" is selected via @c CASelectNetwork(). It gives an
+ * opportunity for LE adapter implementations to perform operations
+ * before starting a GATT client or server. Most LE adapter
+ * implementations will simply implement this function as no-op.
+ *
+ * @return ::CA_STATUS_OK or Appropriate error code
+ */
+CAResult_t CAStartLEAdapter();