BLE Nano Code.Tested with Integrated mDot code

Dependencies:   BLE_API mbed nRF51822

Fork of eco_Labs_ble_Client by Happiest

Committer:
jinu
Date:
Thu Dec 15 06:26:45 2016 +0000
Revision:
33:17b8c186eb07
Parent:
25:96044c55f844
Child:
34:d146cdbffd91
array size corrected

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 11:b8e687d97537 29 #define SPI_TX_EMPTY_DATA 0xFF
jinu 15:67fbed00edf2 30
jinu 11:b8e687d97537 31 /******************************************************************************/
jinu 11:b8e687d97537 32 /* Extern Variable/functions */
jinu 11:b8e687d97537 33 /******************************************************************************/
jinu 11:b8e687d97537 34 extern bool toggle_led_flag;
jinu 11:b8e687d97537 35 extern void spi_rx_Data_Callback(uint8_t *rx_data, uint8_t len);
jinu 15:67fbed00edf2 36
jinu 11:b8e687d97537 37 /******************************************************************************/
jinu 11:b8e687d97537 38 /* Static Variables */
jinu 11:b8e687d97537 39 /******************************************************************************/
jinu 11:b8e687d97537 40 DigitalOut led2(LED1);
jinu 11:b8e687d97537 41 SPISlave device(P0_9, P0_11,P0_8, P0_10); // mosi, miso, sclk, ssel
jinu 25:96044c55f844 42
jinu 15:67fbed00edf2 43
jinu 11:b8e687d97537 44 static spi_data_ready_callback_t spi_data_ready_cb;
jinu 15:67fbed00edf2 45
jinu 11:b8e687d97537 46 uint8_t spi_tx_buf[SPI_TX_BUF_SIZE];
jinu 11:b8e687d97537 47 uint8_t spi_tx_ptr;
jinu 11:b8e687d97537 48 uint8_t spi_bytes_to_send;
jinu 16:79b149aae10a 49
jinu 11:b8e687d97537 50 /******************************************************************************/
jinu 11:b8e687d97537 51 /* Global Functions */
jinu 11:b8e687d97537 52 /******************************************************************************/
jinu 11:b8e687d97537 53 /**
jinu 11:b8e687d97537 54 * @brief Initializes the Nano BLE SPI slave buffer init
jinu 11:b8e687d97537 55 * @param None
jinu 11:b8e687d97537 56 * @retval None
jinu 11:b8e687d97537 57 */
jinu 11:b8e687d97537 58 void spi_buf_init(void)
jinu 11:b8e687d97537 59 {
jinu 11:b8e687d97537 60 spi_tx_ptr = 0;
jinu 11:b8e687d97537 61 spi_bytes_to_send = 0;
jinu 11:b8e687d97537 62 memset(spi_tx_buf, SPI_TX_EMPTY_DATA, SPI_TX_BUF_SIZE);
jinu 11:b8e687d97537 63 }
jinu 15:67fbed00edf2 64
jinu 11:b8e687d97537 65 /**
jinu 11:b8e687d97537 66 * @brief Receive data from Master
jinu 11:b8e687d97537 67 * @param
jinu 11:b8e687d97537 68 * @retval
jinu 11:b8e687d97537 69 */
jinu 11:b8e687d97537 70 void spi_slave_rx_data(void)
jinu 11:b8e687d97537 71 {
jinu 33:17b8c186eb07 72 uint8_t rx_buf[SPI_TX_BUF_SIZE];
jinu 11:b8e687d97537 73 uint8_t byte_cnt = 0;
jinu 11:b8e687d97537 74 uint8_t send_ptr = 0;
jinu 11:b8e687d97537 75
jinu 11:b8e687d97537 76 device.reply(0xFF);
jinu 11:b8e687d97537 77 while(1)
jinu 11:b8e687d97537 78 {
jinu 11:b8e687d97537 79 if(device.receive())
jinu 11:b8e687d97537 80 {
jinu 11:b8e687d97537 81 rx_buf[byte_cnt] = device.read();
jinu 11:b8e687d97537 82
jinu 11:b8e687d97537 83 if (spi_bytes_to_send > 0) {
jinu 11:b8e687d97537 84 //device.reply(rx_buf[byte_cnt]);
jinu 12:c7a8a7fe76fd 85 device.reply(spi_tx_buf[send_ptr++]);
jinu 15:67fbed00edf2 86 // if (spi_tx_ptr++ > SPI_TX_BUF_SIZE) {
jinu 15:67fbed00edf2 87 // spi_tx_ptr= 0;
jinu 15:67fbed00edf2 88 // }
jinu 11:b8e687d97537 89 spi_bytes_to_send--;
jinu 12:c7a8a7fe76fd 90 if(spi_bytes_to_send ==0)
jinu 12:c7a8a7fe76fd 91 {
jinu 12:c7a8a7fe76fd 92 send_ptr = 0;
jinu 16:79b149aae10a 93 /*read compleated*/
jinu 12:c7a8a7fe76fd 94 }
jinu 11:b8e687d97537 95 } else {
jinu 12:c7a8a7fe76fd 96 device.reply(SPI_TX_EMPTY_DATA);
jinu 11:b8e687d97537 97 }
jinu 11:b8e687d97537 98
jinu 11:b8e687d97537 99 if ((byte_cnt >= 4) && (rx_buf[byte_cnt] == BLE_EOT_CMD)) {
jinu 11:b8e687d97537 100 /* Check for End of Frame to make sure complete packet has been received */
jinu 11:b8e687d97537 101 spi_data_ready_cb(rx_buf, byte_cnt);
jinu 11:b8e687d97537 102 byte_cnt = 0;
jinu 11:b8e687d97537 103 }
jinu 11:b8e687d97537 104 byte_cnt++;
jinu 11:b8e687d97537 105 }
jinu 11:b8e687d97537 106 }
jinu 11:b8e687d97537 107 }
jinu 15:67fbed00edf2 108
jinu 11:b8e687d97537 109 /**
jinu 11:b8e687d97537 110 * @brief Send data to Master
jinu 11:b8e687d97537 111 * @param
jinu 11:b8e687d97537 112 * @retval
jinu 11:b8e687d97537 113 */
jinu 11:b8e687d97537 114 void spi_slave_tx_data(uint8_t *tx_buf, uint8_t len)
jinu 11:b8e687d97537 115 {
jinu 12:c7a8a7fe76fd 116 spi_tx_ptr = 0;
jinu 25:96044c55f844 117 spi_bytes_to_send = 0;
jinu 11:b8e687d97537 118 /* Copy the buffer into local buffer */
jinu 11:b8e687d97537 119 memcpy(&spi_tx_buf[spi_tx_ptr], tx_buf, len);
jinu 11:b8e687d97537 120 spi_bytes_to_send += len;
jinu 11:b8e687d97537 121 spi_tx_ptr += len;
jinu 11:b8e687d97537 122 if (spi_tx_ptr > SPI_TX_BUF_SIZE) {
jinu 11:b8e687d97537 123 spi_tx_ptr = 0;
jinu 11:b8e687d97537 124 }
jinu 12:c7a8a7fe76fd 125
jinu 11:b8e687d97537 126 }
jinu 15:67fbed00edf2 127
jinu 11:b8e687d97537 128 /**
jinu 11:b8e687d97537 129 * @brief Function used to register spi data receive callback
jinu 11:b8e687d97537 130 * @param none
jinu 11:b8e687d97537 131 * @retval none
jinu 11:b8e687d97537 132 */
jinu 11:b8e687d97537 133 void spi_data_rx_cb_register(spi_data_ready_callback_t data_rx_callback)
jinu 11:b8e687d97537 134 {
jinu 11:b8e687d97537 135 spi_data_ready_cb = data_rx_callback;
jinu 11:b8e687d97537 136 }
jinu 11:b8e687d97537 137 /******************************************************************************/
jinu 11:b8e687d97537 138 /* END OF FILE */
jinu 15:67fbed00edf2 139 /******************************************************************************/