BLE Nano Code.Tested with Integrated mDot code

Dependencies:   BLE_API mbed nRF51822

Fork of eco_Labs_ble_Client by Happiest

ble_msg_handler.cpp

Committer:
jinu
Date:
2016-12-16
Revision:
35:b2af2293635a
Parent:
34:d146cdbffd91

File content as of revision 35:b2af2293635a:

/**
  ******************************************************************************
  * @file    ble_msg_handler.cpp
  * @author  Happiesstminds Firmware Team
  * @version v1.0
  * @date    4-Oct-2016
  * @brief   
  *
  ******************************************************************************
  * @attention
  *  
  *
  ******************************************************************************
  */

/******************************************************************************/
/* Include Files*/
/******************************************************************************/
#include <string.h>
#include "mbed.h"
#include "BLE.h"
#include "ble_types.h"
#include "UARTService.h"
#include "ble_msg_handler.h"
#include "spi_slave.h"
/******************************************************************************/
/* extern function definations                                                */
/******************************************************************************/
extern void ble_data_rx_cb_register(ble_data_ready_callback_t data_rx_callback);
extern void spi_data_rx_cb_register(spi_data_ready_callback_t data_rx_callback);
extern eStatus_t ble_send_data(uint8_t *tx_buf, uint8_t length);
extern void ble_init(uint8_t *tx_buf, uint8_t length);
extern void spi_slave_tx_data(uint8_t *tx_buf, uint8_t len);

/******************************************************************************/
/* Global Variables                                                           */
/******************************************************************************/
extern bool init_success;
/******************************************************************************/
/* Static Variable Declarations */
/******************************************************************************/

/******************************************************************************/
/* Static Functions                                                           */
/******************************************************************************/
/**
 * @brief  BLE_UART data Receive Callback
 * @param  
 * @retval 
 */
static void ble_rx_Data_Callback(uint8_t *rx_data, uint8_t len)
{
    uint8_t send_buf[SPI_TX_BUF_SIZE];
             
    send_buf[0] = BLE_SOF_CMD;
    send_buf[1] = rx_data[0];       
    send_buf[2] = len+4;  
    memcpy(&send_buf[3], &rx_data[1], (len-1));
    send_buf[len + 3] = BLE_EOT_CMD;    
    spi_slave_tx_data(send_buf, (len + 4));
}


/**
 * @brief  SPI data Receive Callback
 * @param  
 * @retval 
 */
void spi_rx_Data_Callback(uint8_t *rx_data)
{    
    uint8_t tmp_buf[SPI_TX_BUF_SIZE];
    if(rx_data !=NULL)
    {         
        if (rx_data[1] == 0xFF) 
        {
            //Dummy send to clear buffer.
        } 
        else if (rx_data[1] == BLE_SOF_CMD) 
        {        
            switch (rx_data[2]) {
                case BLE_INIT_CMD:
                        if(init_success ==false)
                        {
                            memcpy(tmp_buf, &rx_data[4], rx_data[3]);                                   
                            ble_init(tmp_buf,rx_data[3]);
                            toggle_led();
                        }
                        
                    break;
                    
                case BLE_START_ADV_CMD:
                        // TODO: As of now Advertising is done from the ble_init
                    break;
                
                case BLE_SEND_DATA_CMD:
                    memcpy(tmp_buf, &rx_data[4], rx_data[3]);
                    ble_send_data(tmp_buf,rx_data[3]);
                    break;
                    
                case BLE_START_OF_FILE:
                    memcpy(tmp_buf, &rx_data[4], rx_data[3]);                
                    ble_send_data(tmp_buf, rx_data[3]);
                    break;
                    
                case BLE_END_OF_FILE:
                    memcpy(tmp_buf, &rx_data[4], rx_data[3]);
                    ble_send_data(tmp_buf, rx_data[3]);
                    break;
 
                case BLE_RESET_CMD:
                    
                    /*Performing system reset*/   
                    NVIC_SystemReset();
                    break;
                    
                default :
                    break;
                    
            }
        } else {
            // Invalid Packet received, ignore as of now
        }
    }    
}
/******************************************************************************/
/* Global Functions                                                           */
/******************************************************************************/
/**
 * @brief  Data Handler Init, register for the BLE & SPI callbacks
 * @param  
 * @retval 
 */
void ble_data_handler_init(void)
{
    ble_data_rx_cb_register(ble_rx_Data_Callback);
    spi_data_rx_cb_register(spi_rx_Data_Callback);
}

/******************************************************************************/
/* END OF FILE                                                                */
/******************************************************************************/