
BLE Nano Code.Tested with Integrated mDot code
Dependencies: BLE_API mbed nRF51822
Fork of eco_Labs_ble_Client by
spi_slave.cpp
- Committer:
- jinu
- Date:
- 2016-10-11
- Revision:
- 15:67fbed00edf2
- Parent:
- 12:c7a8a7fe76fd
- Child:
- 16:79b149aae10a
File content as of revision 15:67fbed00edf2:
/** ****************************************************************************** * @file ble_uart.cpp * @author Happiesstminds Firmware Team * @version v1.0 * @date 4-Oct-2016 * @brief * ****************************************************************************** * @attention * * ****************************************************************************** */ /******************************************************************************/ /* Include Files*/ /******************************************************************************/ #include "mbed.h" #include "spi_slave.h" #include "ble_types.h" #include "ble_msg_handler.h" /******************************************************************************/ /* Local Defines */ /******************************************************************************/ #define SPI_DUMMY_BYTE 0x00 #define SPI_TX_BUF_SIZE 64 #define SPI_TX_EMPTY_DATA 0xFF /******************************************************************************/ /* Extern Variable/functions */ /******************************************************************************/ extern bool toggle_led_flag; extern void spi_rx_Data_Callback(uint8_t *rx_data, uint8_t len); /******************************************************************************/ /* Static Variables */ /******************************************************************************/ DigitalOut led2(LED1); SPISlave device(P0_9, P0_11,P0_8, P0_10); // mosi, miso, sclk, ssel DigitalOut spi_rqst(P0_28); DigitalOut spi_rdy(P0_29); static spi_data_ready_callback_t spi_data_ready_cb; uint8_t spi_tx_buf[SPI_TX_BUF_SIZE]; uint8_t spi_tx_ptr; uint8_t spi_bytes_to_send; /******************************************************************************/ /* Global Functions */ /******************************************************************************/ /** * @brief Enable Interrupt line * @param None * @retval None */ void enable_interrupt_line(bool status ) { if(status) { spi_rqst =1; spi_rdy =1; } else { spi_rqst =0; spi_rdy =0; } } /** * @brief Initializes the Nano BLE SPI slave buffer init * @param None * @retval None */ void spi_buf_init(void) { spi_tx_ptr = 0; spi_bytes_to_send = 0; memset(spi_tx_buf, SPI_TX_EMPTY_DATA, SPI_TX_BUF_SIZE); } /** * @brief Receive data from Master * @param * @retval */ void spi_slave_rx_data(void) { uint8_t rx_buf[20]; uint8_t byte_cnt = 0; uint8_t send_ptr = 0; device.reply(0xFF); while(1) { if(device.receive()) { rx_buf[byte_cnt] = device.read(); if (spi_bytes_to_send > 0) { //device.reply(rx_buf[byte_cnt]); device.reply(spi_tx_buf[send_ptr++]); // if (spi_tx_ptr++ > SPI_TX_BUF_SIZE) { // spi_tx_ptr= 0; // } // send_ptr++; spi_bytes_to_send--; if(spi_bytes_to_send ==0) { send_ptr = 0; enable_interrupt_line(false); } } else { device.reply(SPI_TX_EMPTY_DATA); } if ((byte_cnt >= 4) && (rx_buf[byte_cnt] == BLE_EOT_CMD)) { /* Check for End of Frame to make sure complete packet has been received */ spi_data_ready_cb(rx_buf, byte_cnt); byte_cnt = 0; } byte_cnt++; } } } /** * @brief Send data to Master * @param * @retval */ void spi_slave_tx_data(uint8_t *tx_buf, uint8_t len) { spi_tx_ptr = 0; spi_bytes_to_send = 0; /* TODO: make the GPIO line high */ enable_interrupt_line(true); /* Copy the buffer into local buffer */ memcpy(&spi_tx_buf[spi_tx_ptr], tx_buf, len); spi_bytes_to_send += len; spi_tx_ptr += len; if (spi_tx_ptr > SPI_TX_BUF_SIZE) { spi_tx_ptr = 0; } } /** * @brief Function used to register spi data receive callback * @param none * @retval none */ void spi_data_rx_cb_register(spi_data_ready_callback_t data_rx_callback) { spi_data_ready_cb = data_rx_callback; } void init_interrupt_line(void ) { spi_rqst =0; spi_rdy =0; } /******************************************************************************/ /* END OF FILE */ /******************************************************************************/