BLE Nano Code.Tested with Integrated mDot code

Dependencies:   BLE_API mbed nRF51822

Fork of eco_Labs_ble_Client by Happiest

Committer:
jinu
Date:
Sun Oct 23 14:41:49 2016 +0000
Revision:
25:96044c55f844
Parent:
16:79b149aae10a
Child:
33:17b8c186eb07
Code cleanup

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