
BLE Nano Code.Tested with Integrated mDot code
Dependencies: BLE_API mbed nRF51822
Fork of eco_Labs_ble_Client by
spi_slave.cpp@25:96044c55f844, 2016-10-23 (annotated)
- 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?
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 | 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 | /******************************************************************************/ |