added debugging

Fork of BLE_nRF8001 by RedBearLab

Revision:
0:075ea2812998
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BLE_nRF8001/utility/hal_aci_tl.h	Fri Oct 17 22:40:32 2014 +0800
@@ -0,0 +1,173 @@
+/* Copyright (c) 2014, Nordic Semiconductor ASA
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */ 
+
+/** @file
+ * @brief Interface for hal_aci_tl.
+ */
+ 
+/** @defgroup hal_aci_tl hal_aci_tl
+@{
+@ingroup hal
+ 
+@brief Module for the ACI Transport Layer interface
+@details This module is responsible for sending and receiving messages over the ACI interface of the nRF8001 chip.
+ The hal_aci_tl_send_cmd() can be called directly to send ACI commands.
+
+
+The RDYN line is hooked to an interrupt on the MCU when the level is low.
+The SPI master clocks in the interrupt context.
+The ACI Command is taken from the head of the command queue is sent over the SPI
+and the received ACI event is placed in the tail of the event queue.
+
+*/
+ 
+#ifndef HAL_ACI_TL_H__
+#define HAL_ACI_TL_H__
+
+#include "hal_platform.h"
+#include "aci.h"
+#include "boards.h"
+
+#ifndef HAL_ACI_MAX_LENGTH
+#define HAL_ACI_MAX_LENGTH 31
+#endif
+
+/************************************************************************/
+/* Unused nRF8001 pin                                                    */
+/************************************************************************/
+#define UNUSED          255
+
+/** Data type for ACI commands and events */
+typedef struct {
+  uint8_t status_byte;
+  uint8_t buffer[HAL_ACI_MAX_LENGTH+1];
+} _aci_packed_ hal_aci_data_t;
+
+ACI_ASSERT_SIZE(hal_aci_data_t, HAL_ACI_MAX_LENGTH + 2);
+
+/** Datatype for ACI pins and interface (polling/interrupt)*/
+typedef struct aci_pins_t
+{
+    uint8_t board_name;             //Optional : Use BOARD_DEFAULT if you do not know. See boards.h
+    DigitalInOut *reqn_pin;               //Required
+    DigitalInOut *rdyn_pin;               //Required
+    
+    DigitalInOut *reset_pin;              //Recommended but optional - Set it to UNUSED when not connected
+    DigitalInOut *active_pin;             //Optional - Set it to UNUSED when not connected
+    
+    bool    interface_is_interrupt; //Required - true = Uses interrupt on RDYN pin. false - Uses polling on RDYN pin
+    
+    uint8_t interrupt_number;       //Required when using interrupts, otherwise ignored
+} aci_pins_t;
+
+/** @brief ACI Transport Layer initialization.
+ *  @details
+ *  This function initializes the transport layer, including configuring the SPI, creating
+ *  message queues for Commands and Events and setting up interrupt if required.
+ *  @param a_pins Pins on the MCU used to connect to the nRF8001
+ *  @param bool True if debug printing should be enabled on the Serial.
+ */
+void hal_aci_tl_init(aci_pins_t *a_pins, bool debug);
+
+/** @brief Sends an ACI command to the radio.
+ *  @details
+ *  This function sends an ACI command to the radio. This queue up the message to send and 
+ *  lower the request line. When the device lowers the ready line, @ref m_aci_spi_transfer()
+ *  will send the data.
+ *  @param aci_buffer Pointer to the message to send.
+ *  @return True if the data was successfully queued for sending, 
+ *  false if there is no more space to store messages to send.
+ */
+bool hal_aci_tl_send(hal_aci_data_t *aci_buffer);
+
+/** @brief Process pending transactions.
+ *  @details 
+ *  The library code takes care of calling this function to check if the nRF8001 RDYN line indicates a
+ *  pending transaction. It will send a pending message if there is one and return any receive message
+ *  that was pending.
+ *  @return Points to data buffer for received data. Length byte in buffer is 0 if no data received.
+ */
+hal_aci_data_t * hal_aci_tl_poll_get(void);
+
+/** @brief Get an ACI event from the event queue
+ *  @details 
+ *  Call this function from the main context to get an event from the ACI event queue
+ *  This is called by lib_aci_event_get
+ */
+bool hal_aci_tl_event_get(hal_aci_data_t *p_aci_data);
+
+/** @brief Peek an ACI event from the event queue
+ *  @details
+ *  Call this function from the main context to peek an event from the ACI event queue.
+ *  This is called by lib_aci_event_peek
+ */
+bool hal_aci_tl_event_peek(hal_aci_data_t *p_aci_data);
+
+/** @brief Enable debug printing of all ACI commands sent and ACI events received
+ *  @details
+ *  when the enable parameter is true. The debug printing is enabled on the Serial.
+ *  When the enable parameter is false. The debug printing is disabled on the Serial.
+ *  By default the debug printing is disabled.
+ */
+void hal_aci_tl_debug_print(bool enable);
+
+
+/** @brief Pin reset the nRF8001
+ *  @details
+ *  The reset line of the nF8001 needs to kept low for 200 ns.
+ *  Redbearlab shield v1.1 and v2012.07 are exceptions as they
+ *  have a Power ON Reset circuit that works differently.
+ *  The function handles the exceptions based on the board_name in aci_pins_t
+ */
+void hal_aci_tl_pin_reset(void);
+
+/** @brief Return full status of transmit queue
+ *  @details
+ *
+ */
+ bool hal_aci_tl_rx_q_full(void);
+ 
+ /** @brief Return empty status of receive queue
+ *  @details
+ *
+ */
+ bool hal_aci_tl_rx_q_empty(void);
+
+/** @brief Return full status of receive queue
+ *  @details
+ *
+ */
+ bool hal_aci_tl_tx_q_full(void);
+ 
+ /** @brief Return empty status of transmit queue
+ *  @details
+ *
+ */
+ bool hal_aci_tl_tx_q_empty(void);
+
+/** @brief Flush the ACI command Queue and the ACI Event Queue
+ *  @details
+ *  Call this function in the main thread
+ */
+void hal_aci_tl_q_flush(void);
+
+#endif // HAL_ACI_TL_H__
+/** @} */