
BLE Nano Code.Tested with Integrated mDot code
Dependencies: BLE_API mbed nRF51822
Fork of eco_Labs_ble_Client by
spi_slave.cpp@33:17b8c186eb07, 2016-12-15 (annotated)
- 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?
User | Revision | Line number | New 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 | /******************************************************************************/ |