Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed
Fork of ICE by
BLE/src/ble_spi.cpp@259:341f04be325e, 2016-10-24 (annotated)
- Committer:
- davidjhoward
- Date:
- Mon Oct 24 21:08:15 2016 +0000
- Revision:
- 259:341f04be325e
- Parent:
- 249:68ed571e0002
- Parent:
- 258:150f5a76162d
Commit updated BLE module and add new messages
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| davidjhoward | 258:150f5a76162d | 1 | /** |
| davidjhoward | 258:150f5a76162d | 2 | ****************************************************************************** |
| davidjhoward | 258:150f5a76162d | 3 | * @file ble_uart.cpp |
| davidjhoward | 258:150f5a76162d | 4 | * @author Happiesstminds Firmware Team |
| davidjhoward | 258:150f5a76162d | 5 | * @version v1.0 |
| davidjhoward | 258:150f5a76162d | 6 | * @date 4-Oct-2016 |
| davidjhoward | 258:150f5a76162d | 7 | * @brief |
| davidjhoward | 258:150f5a76162d | 8 | * |
| davidjhoward | 258:150f5a76162d | 9 | ****************************************************************************** |
| davidjhoward | 258:150f5a76162d | 10 | * @attention |
| davidjhoward | 258:150f5a76162d | 11 | * |
| davidjhoward | 258:150f5a76162d | 12 | * |
| davidjhoward | 258:150f5a76162d | 13 | ****************************************************************************** |
| davidjhoward | 258:150f5a76162d | 14 | */ |
| davidjhoward | 258:150f5a76162d | 15 | |
| davidjhoward | 258:150f5a76162d | 16 | /******************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 17 | /* Include Files*/ |
| davidjhoward | 258:150f5a76162d | 18 | /******************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 19 | #include "mbed.h" |
| davidjhoward | 258:150f5a76162d | 20 | #include "ble_msg_handler.h" |
| davidjhoward | 258:150f5a76162d | 21 | /******************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 22 | /* Local Defines */ |
| davidjhoward | 258:150f5a76162d | 23 | /******************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 24 | SPI spimaster(SPI1_MOSI, SPI1_MISO, SPI1_SCK); |
| davidjhoward | 258:150f5a76162d | 25 | DigitalOut cs(SPI1_CS); |
| davidjhoward | 258:150f5a76162d | 26 | |
| davidjhoward | 258:150f5a76162d | 27 | /******************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 28 | /* Global Functions */ |
| davidjhoward | 258:150f5a76162d | 29 | /******************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 30 | /***************************************************************************** |
| davidjhoward | 258:150f5a76162d | 31 | * Function: InitSpiMaster() |
| davidjhoward | 258:150f5a76162d | 32 | * Description: InitSpiMaster |
| davidjhoward | 258:150f5a76162d | 33 | * |
| davidjhoward | 258:150f5a76162d | 34 | * @param None |
| davidjhoward | 258:150f5a76162d | 35 | * @return none |
| davidjhoward | 258:150f5a76162d | 36 | *****************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 37 | uint8_t InitSpiMaster(void) |
| davidjhoward | 258:150f5a76162d | 38 | { |
| davidjhoward | 258:150f5a76162d | 39 | uint8_t status = SUCCESS; |
| davidjhoward | 258:150f5a76162d | 40 | // Chip must be deselected |
| davidjhoward | 258:150f5a76162d | 41 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 42 | // Setup the spi for 8 bit data, high steady state clock, |
| davidjhoward | 258:150f5a76162d | 43 | // second edge capture, with a 1MHz clock rate |
| davidjhoward | 258:150f5a76162d | 44 | spimaster.format(8, 0); |
| davidjhoward | 258:150f5a76162d | 45 | // spimaster.frequency(1000000); |
| davidjhoward | 258:150f5a76162d | 46 | spimaster.frequency(1000000); |
| davidjhoward | 258:150f5a76162d | 47 | return status; |
| davidjhoward | 258:150f5a76162d | 48 | } |
| davidjhoward | 258:150f5a76162d | 49 | |
| davidjhoward | 258:150f5a76162d | 50 | /***************************************************************************** |
| davidjhoward | 258:150f5a76162d | 51 | * Function: WriteSpiData() |
| davidjhoward | 258:150f5a76162d | 52 | * Description: WriteSpiData |
| davidjhoward | 258:150f5a76162d | 53 | * |
| davidjhoward | 258:150f5a76162d | 54 | * @param pointer to buffer |
| davidjhoward | 258:150f5a76162d | 55 | * @param length |
| davidjhoward | 258:150f5a76162d | 56 | * @return none |
| davidjhoward | 258:150f5a76162d | 57 | *****************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 58 | uint8_t WriteSpiData(uint8_t * p_buffer, uint16_t length) |
| davidjhoward | 258:150f5a76162d | 59 | { |
| davidjhoward | 258:150f5a76162d | 60 | uint8_t i; |
| davidjhoward | 258:150f5a76162d | 61 | uint8_t status = SUCCESS; |
| davidjhoward | 258:150f5a76162d | 62 | int response[20]; //need to be removed |
| davidjhoward | 258:150f5a76162d | 63 | // Select the device by seting chip select low |
| davidjhoward | 258:150f5a76162d | 64 | |
| davidjhoward | 258:150f5a76162d | 65 | for(i=0;i<length;i++) |
| davidjhoward | 258:150f5a76162d | 66 | { |
| davidjhoward | 258:150f5a76162d | 67 | cs = 0; |
| davidjhoward | 258:150f5a76162d | 68 | response[i] = spimaster.write(p_buffer[i]); |
| davidjhoward | 258:150f5a76162d | 69 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 70 | wait_ms(5); |
| davidjhoward | 258:150f5a76162d | 71 | } |
| davidjhoward | 258:150f5a76162d | 72 | |
| davidjhoward | 258:150f5a76162d | 73 | return status; |
| davidjhoward | 258:150f5a76162d | 74 | } |
| davidjhoward | 258:150f5a76162d | 75 | |
| davidjhoward | 258:150f5a76162d | 76 | /***************************************************************************** |
| davidjhoward | 258:150f5a76162d | 77 | * Function: ReadSpiData() |
| davidjhoward | 258:150f5a76162d | 78 | * Description: ReadSpiData |
| davidjhoward | 258:150f5a76162d | 79 | * |
| davidjhoward | 258:150f5a76162d | 80 | * @param pointer to rx_buf |
| davidjhoward | 258:150f5a76162d | 81 | * @return none |
| davidjhoward | 258:150f5a76162d | 82 | *****************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 83 | uint8_t ReadSpiData(uint8_t *rx_buf) |
| davidjhoward | 258:150f5a76162d | 84 | { |
| davidjhoward | 258:150f5a76162d | 85 | uint8_t msg_len; |
| davidjhoward | 258:150f5a76162d | 86 | int i; |
| davidjhoward | 258:150f5a76162d | 87 | |
| davidjhoward | 258:150f5a76162d | 88 | // Dummy read to get first garbage value |
| davidjhoward | 258:150f5a76162d | 89 | cs = 0; |
| davidjhoward | 258:150f5a76162d | 90 | rx_buf[0] = spimaster.write(0xFF); |
| davidjhoward | 258:150f5a76162d | 91 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 92 | wait_ms(5); |
| davidjhoward | 258:150f5a76162d | 93 | |
| davidjhoward | 258:150f5a76162d | 94 | cs = 0; |
| davidjhoward | 258:150f5a76162d | 95 | rx_buf[1] = spimaster.write(0xFF); |
| davidjhoward | 258:150f5a76162d | 96 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 97 | wait_ms(5); |
| davidjhoward | 258:150f5a76162d | 98 | |
| davidjhoward | 258:150f5a76162d | 99 | cs = 0; |
| davidjhoward | 258:150f5a76162d | 100 | rx_buf[2] = spimaster.write(0xFF); |
| davidjhoward | 258:150f5a76162d | 101 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 102 | wait_ms(5); |
| davidjhoward | 258:150f5a76162d | 103 | |
| davidjhoward | 258:150f5a76162d | 104 | cs = 0; |
| davidjhoward | 258:150f5a76162d | 105 | rx_buf[3] = spimaster.write(0xFF); |
| davidjhoward | 258:150f5a76162d | 106 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 107 | wait_ms(5); |
| davidjhoward | 258:150f5a76162d | 108 | |
| davidjhoward | 258:150f5a76162d | 109 | msg_len = rx_buf[3]; |
| davidjhoward | 258:150f5a76162d | 110 | |
| davidjhoward | 258:150f5a76162d | 111 | for(i = 4; i < msg_len; i++) |
| davidjhoward | 258:150f5a76162d | 112 | { |
| davidjhoward | 258:150f5a76162d | 113 | cs = 0; |
| davidjhoward | 258:150f5a76162d | 114 | rx_buf[i] = spimaster.write(0xFF); |
| davidjhoward | 258:150f5a76162d | 115 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 116 | wait_ms(5); |
| davidjhoward | 258:150f5a76162d | 117 | } |
| davidjhoward | 258:150f5a76162d | 118 | return (msg_len); |
| davidjhoward | 258:150f5a76162d | 119 | |
| davidjhoward | 258:150f5a76162d | 120 | } |
| davidjhoward | 258:150f5a76162d | 121 | |
| davidjhoward | 258:150f5a76162d | 122 | /***************************************************************************** |
| davidjhoward | 258:150f5a76162d | 123 | * Function: PollBLEEvents() |
| davidjhoward | 258:150f5a76162d | 124 | * Description: Polls for BLE events |
| davidjhoward | 258:150f5a76162d | 125 | * @param pointer to rx_buf |
| davidjhoward | 258:150f5a76162d | 126 | * @return none |
| davidjhoward | 258:150f5a76162d | 127 | *****************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 128 | |
| davidjhoward | 258:150f5a76162d | 129 | uint8_t PollBLEEvents(uint8_t *rx_buf) |
| davidjhoward | 258:150f5a76162d | 130 | { |
| davidjhoward | 258:150f5a76162d | 131 | uint8_t i =0; |
| davidjhoward | 258:150f5a76162d | 132 | uint8_t msg_len; |
| davidjhoward | 258:150f5a76162d | 133 | |
| davidjhoward | 258:150f5a76162d | 134 | cs = 0; |
| davidjhoward | 258:150f5a76162d | 135 | rx_buf[0] = spimaster.write(0xAA); |
| davidjhoward | 258:150f5a76162d | 136 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 137 | wait_ms(5); |
| davidjhoward | 258:150f5a76162d | 138 | |
| davidjhoward | 258:150f5a76162d | 139 | if(rx_buf[0]==0x01) |
| davidjhoward | 258:150f5a76162d | 140 | { |
| davidjhoward | 258:150f5a76162d | 141 | cs = 0; |
| davidjhoward | 258:150f5a76162d | 142 | rx_buf[1] = spimaster.write(0xAA); |
| davidjhoward | 258:150f5a76162d | 143 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 144 | wait_ms(5); |
| davidjhoward | 258:150f5a76162d | 145 | cs = 0; |
| davidjhoward | 258:150f5a76162d | 146 | rx_buf[2] = spimaster.write(0xAA); |
| davidjhoward | 258:150f5a76162d | 147 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 148 | wait_ms(5); |
| davidjhoward | 258:150f5a76162d | 149 | |
| davidjhoward | 258:150f5a76162d | 150 | msg_len = rx_buf[2]; |
| davidjhoward | 258:150f5a76162d | 151 | for(i = 3; i < msg_len; i++) |
| davidjhoward | 258:150f5a76162d | 152 | { |
| davidjhoward | 258:150f5a76162d | 153 | cs = 0; |
| davidjhoward | 258:150f5a76162d | 154 | rx_buf[i] = spimaster.write(0xFF); |
| davidjhoward | 258:150f5a76162d | 155 | cs = 1; |
| davidjhoward | 258:150f5a76162d | 156 | wait_ms(5); |
| davidjhoward | 258:150f5a76162d | 157 | } |
| davidjhoward | 258:150f5a76162d | 158 | |
| davidjhoward | 258:150f5a76162d | 159 | ProcessBleRxEvents(rx_buf,rx_buf[2]); |
| davidjhoward | 258:150f5a76162d | 160 | } |
| davidjhoward | 258:150f5a76162d | 161 | return rx_buf[0]; |
| davidjhoward | 258:150f5a76162d | 162 | } |
| davidjhoward | 258:150f5a76162d | 163 | /******************************************************************************/ |
| davidjhoward | 258:150f5a76162d | 164 | /* END OF FILE */ |
| davidjhoward | 258:150f5a76162d | 165 | /******************************************************************************/ |
