BLE Nano Code.Tested with Integrated mDot code

Dependencies:   BLE_API mbed nRF51822

Fork of eco_Labs_ble_Client by Happiest

Committer:
jinu
Date:
Tue Oct 11 09:49:14 2016 +0000
Revision:
15:67fbed00edf2
Parent:
12:c7a8a7fe76fd
Child:
16:79b149aae10a
BLE read tested

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jinu 11:b8e687d97537 1 /**
jinu 11:b8e687d97537 2 ******************************************************************************
jinu 11:b8e687d97537 3 * @file ble_uart.cpp
jinu 11:b8e687d97537 4 * @author Happiesstminds Firmware Team
jinu 11:b8e687d97537 5 * @version v1.0
jinu 11:b8e687d97537 6 * @date 4-Oct-2016
jinu 11:b8e687d97537 7 * @brief
jinu 11:b8e687d97537 8 *
jinu 11:b8e687d97537 9 ******************************************************************************
jinu 11:b8e687d97537 10 * @attention
jinu 11:b8e687d97537 11 *
jinu 11:b8e687d97537 12 *
jinu 11:b8e687d97537 13 ******************************************************************************
jinu 11:b8e687d97537 14 */
jinu 15:67fbed00edf2 15
jinu 11:b8e687d97537 16 /******************************************************************************/
jinu 11:b8e687d97537 17 /* Include Files*/
jinu 11:b8e687d97537 18 /******************************************************************************/
jinu 11:b8e687d97537 19 #include "mbed.h"
jinu 11:b8e687d97537 20 #include "spi_slave.h"
jinu 11:b8e687d97537 21 #include "ble_types.h"
jinu 11:b8e687d97537 22 #include "ble_msg_handler.h"
jinu 15:67fbed00edf2 23
jinu 15:67fbed00edf2 24
jinu 11:b8e687d97537 25 /******************************************************************************/
jinu 11:b8e687d97537 26 /* Local Defines */
jinu 11:b8e687d97537 27 /******************************************************************************/
jinu 11:b8e687d97537 28 #define SPI_DUMMY_BYTE 0x00
jinu 15:67fbed00edf2 29
jinu 11:b8e687d97537 30 #define SPI_TX_BUF_SIZE 64
jinu 11:b8e687d97537 31 #define SPI_TX_EMPTY_DATA 0xFF
jinu 15:67fbed00edf2 32
jinu 11:b8e687d97537 33 /******************************************************************************/
jinu 11:b8e687d97537 34 /* Extern Variable/functions */
jinu 11:b8e687d97537 35 /******************************************************************************/
jinu 11:b8e687d97537 36 extern bool toggle_led_flag;
jinu 11:b8e687d97537 37 extern void spi_rx_Data_Callback(uint8_t *rx_data, uint8_t len);
jinu 15:67fbed00edf2 38
jinu 11:b8e687d97537 39 /******************************************************************************/
jinu 11:b8e687d97537 40 /* Static Variables */
jinu 11:b8e687d97537 41 /******************************************************************************/
jinu 11:b8e687d97537 42 DigitalOut led2(LED1);
jinu 11:b8e687d97537 43 SPISlave device(P0_9, P0_11,P0_8, P0_10); // mosi, miso, sclk, ssel
jinu 11:b8e687d97537 44 DigitalOut spi_rqst(P0_28);
jinu 11:b8e687d97537 45 DigitalOut spi_rdy(P0_29);
jinu 15:67fbed00edf2 46
jinu 11:b8e687d97537 47 static spi_data_ready_callback_t spi_data_ready_cb;
jinu 15:67fbed00edf2 48
jinu 11:b8e687d97537 49 uint8_t spi_tx_buf[SPI_TX_BUF_SIZE];
jinu 11:b8e687d97537 50 uint8_t spi_tx_ptr;
jinu 11:b8e687d97537 51 uint8_t spi_bytes_to_send;
jinu 15:67fbed00edf2 52
jinu 11:b8e687d97537 53 /******************************************************************************/
jinu 11:b8e687d97537 54 /* Global Functions */
jinu 11:b8e687d97537 55 /******************************************************************************/
jinu 11:b8e687d97537 56 /**
jinu 11:b8e687d97537 57 * @brief Enable Interrupt line
jinu 11:b8e687d97537 58 * @param None
jinu 11:b8e687d97537 59 * @retval None
jinu 11:b8e687d97537 60 */
jinu 11:b8e687d97537 61 void enable_interrupt_line(bool status )
jinu 11:b8e687d97537 62 {
jinu 11:b8e687d97537 63 if(status)
jinu 11:b8e687d97537 64 {
jinu 11:b8e687d97537 65 spi_rqst =1;
jinu 11:b8e687d97537 66 spi_rdy =1;
jinu 11:b8e687d97537 67 }
jinu 11:b8e687d97537 68 else
jinu 11:b8e687d97537 69 {
jinu 11:b8e687d97537 70 spi_rqst =0;
jinu 11:b8e687d97537 71 spi_rdy =0;
jinu 11:b8e687d97537 72 }
jinu 11:b8e687d97537 73
jinu 11:b8e687d97537 74 }
jinu 11:b8e687d97537 75 /**
jinu 11:b8e687d97537 76 * @brief Initializes the Nano BLE SPI slave buffer init
jinu 11:b8e687d97537 77 * @param None
jinu 11:b8e687d97537 78 * @retval None
jinu 11:b8e687d97537 79 */
jinu 11:b8e687d97537 80 void spi_buf_init(void)
jinu 11:b8e687d97537 81 {
jinu 11:b8e687d97537 82 spi_tx_ptr = 0;
jinu 11:b8e687d97537 83 spi_bytes_to_send = 0;
jinu 11:b8e687d97537 84 memset(spi_tx_buf, SPI_TX_EMPTY_DATA, SPI_TX_BUF_SIZE);
jinu 11:b8e687d97537 85 }
jinu 15:67fbed00edf2 86
jinu 11:b8e687d97537 87 /**
jinu 11:b8e687d97537 88 * @brief Receive data from Master
jinu 11:b8e687d97537 89 * @param
jinu 11:b8e687d97537 90 * @retval
jinu 11:b8e687d97537 91 */
jinu 11:b8e687d97537 92 void spi_slave_rx_data(void)
jinu 11:b8e687d97537 93 {
jinu 11:b8e687d97537 94 uint8_t rx_buf[20];
jinu 11:b8e687d97537 95 uint8_t byte_cnt = 0;
jinu 11:b8e687d97537 96 uint8_t send_ptr = 0;
jinu 11:b8e687d97537 97
jinu 11:b8e687d97537 98 device.reply(0xFF);
jinu 11:b8e687d97537 99 while(1)
jinu 11:b8e687d97537 100 {
jinu 11:b8e687d97537 101 if(device.receive())
jinu 11:b8e687d97537 102 {
jinu 11:b8e687d97537 103 rx_buf[byte_cnt] = device.read();
jinu 11:b8e687d97537 104
jinu 11:b8e687d97537 105 if (spi_bytes_to_send > 0) {
jinu 11:b8e687d97537 106 //device.reply(rx_buf[byte_cnt]);
jinu 12:c7a8a7fe76fd 107 device.reply(spi_tx_buf[send_ptr++]);
jinu 15:67fbed00edf2 108 // if (spi_tx_ptr++ > SPI_TX_BUF_SIZE) {
jinu 15:67fbed00edf2 109 // spi_tx_ptr= 0;
jinu 15:67fbed00edf2 110 // }
jinu 15:67fbed00edf2 111 // send_ptr++;
jinu 11:b8e687d97537 112 spi_bytes_to_send--;
jinu 12:c7a8a7fe76fd 113 if(spi_bytes_to_send ==0)
jinu 12:c7a8a7fe76fd 114 {
jinu 12:c7a8a7fe76fd 115 send_ptr = 0;
jinu 12:c7a8a7fe76fd 116 enable_interrupt_line(false);
jinu 12:c7a8a7fe76fd 117 }
jinu 11:b8e687d97537 118 } else {
jinu 12:c7a8a7fe76fd 119 device.reply(SPI_TX_EMPTY_DATA);
jinu 11:b8e687d97537 120 }
jinu 11:b8e687d97537 121
jinu 11:b8e687d97537 122 if ((byte_cnt >= 4) && (rx_buf[byte_cnt] == BLE_EOT_CMD)) {
jinu 11:b8e687d97537 123 /* Check for End of Frame to make sure complete packet has been received */
jinu 11:b8e687d97537 124 spi_data_ready_cb(rx_buf, byte_cnt);
jinu 11:b8e687d97537 125 byte_cnt = 0;
jinu 11:b8e687d97537 126 }
jinu 11:b8e687d97537 127 byte_cnt++;
jinu 11:b8e687d97537 128 }
jinu 11:b8e687d97537 129 }
jinu 11:b8e687d97537 130 }
jinu 15:67fbed00edf2 131
jinu 11:b8e687d97537 132 /**
jinu 11:b8e687d97537 133 * @brief Send data to Master
jinu 11:b8e687d97537 134 * @param
jinu 11:b8e687d97537 135 * @retval
jinu 11:b8e687d97537 136 */
jinu 11:b8e687d97537 137 void spi_slave_tx_data(uint8_t *tx_buf, uint8_t len)
jinu 11:b8e687d97537 138 {
jinu 12:c7a8a7fe76fd 139 spi_tx_ptr = 0;
jinu 12:c7a8a7fe76fd 140 spi_bytes_to_send = 0;
jinu 12:c7a8a7fe76fd 141
jinu 11:b8e687d97537 142 /* TODO: make the GPIO line high */
jinu 12:c7a8a7fe76fd 143 enable_interrupt_line(true);
jinu 11:b8e687d97537 144
jinu 11:b8e687d97537 145 /* Copy the buffer into local buffer */
jinu 11:b8e687d97537 146 memcpy(&spi_tx_buf[spi_tx_ptr], tx_buf, len);
jinu 11:b8e687d97537 147 spi_bytes_to_send += len;
jinu 11:b8e687d97537 148 spi_tx_ptr += len;
jinu 11:b8e687d97537 149 if (spi_tx_ptr > SPI_TX_BUF_SIZE) {
jinu 11:b8e687d97537 150 spi_tx_ptr = 0;
jinu 11:b8e687d97537 151 }
jinu 12:c7a8a7fe76fd 152
jinu 11:b8e687d97537 153 }
jinu 15:67fbed00edf2 154
jinu 11:b8e687d97537 155 /**
jinu 11:b8e687d97537 156 * @brief Function used to register spi data receive callback
jinu 11:b8e687d97537 157 * @param none
jinu 11:b8e687d97537 158 * @retval none
jinu 11:b8e687d97537 159 */
jinu 11:b8e687d97537 160 void spi_data_rx_cb_register(spi_data_ready_callback_t data_rx_callback)
jinu 11:b8e687d97537 161 {
jinu 11:b8e687d97537 162 spi_data_ready_cb = data_rx_callback;
jinu 11:b8e687d97537 163 }
jinu 15:67fbed00edf2 164
jinu 15:67fbed00edf2 165
jinu 11:b8e687d97537 166 void init_interrupt_line(void )
jinu 11:b8e687d97537 167 {
jinu 11:b8e687d97537 168 spi_rqst =0;
jinu 11:b8e687d97537 169 spi_rdy =0;
jinu 11:b8e687d97537 170 }
jinu 15:67fbed00edf2 171
jinu 15:67fbed00edf2 172
jinu 11:b8e687d97537 173 /******************************************************************************/
jinu 11:b8e687d97537 174 /* END OF FILE */
jinu 15:67fbed00edf2 175 /******************************************************************************/