The MCR20A Wireless UART application functions as an wireless UART bridge between two (one-to-one) or several (one to many) boards. The application can be used with both a TERM, or with software that is capable of opening a serial port and writing to or reading from it. The characters sent or received are not necessarily ASCII printable characters.

Dependencies:   fsl_phy_mcr20a fsl_smac mbed-rtos mbed

Fork of mcr20_wireless_uart by Freescale

By default, the application uses broadcast addresses for OTA communication. This way, the application can be directly downloaded and run without any user intervention. The following use case assumes no changes have been done to the project.

  • Two (or more) MCR20A platforms (plugged into the FRDM-K64F Freescale Freedom Development platform) have to be connected to the PC using the mini/micro-USB cables.
  • The code must be downloaded on the platforms via CMSIS-DAP (or other means).
  • After that, two or more TERM applications must be opened, and the serial ports must be configured with the same baud rate as the one in the project (default baud rate is 115200). Other necessary serial configurations are 8 bit, no parity, and 1 stop bit.
  • To start the setup, each platform must be reset, and one of the (user) push buttons found on the MCR20A platform must be pressed. The user can press any of the non-reset buttons on the FRDM-K64F Freescale Freedom Development platform as well. *This initiates the state machine of the application so user can start.

Documentation

SMAC Demo Applications User Guide

Files at this revision

API Documentation at this revision

Comitter:
cotigac
Date:
Sun Mar 15 06:08:30 2015 +0000
Parent:
15:990a8b5664e1
Child:
17:52cfd7db8da3
Commit message:
Minor updates to compile also online

Changed in this revision

RF_Drivers_Atmel/driverAtmelRFInterface.c Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverAtmelRFInterface.h Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverAtmelRFInterface_c.txt Show annotated file Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverAtmelRFInterface_h.txt Show annotated file Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverDebug.c Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverDebug.h Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverDebug_c.txt Show annotated file Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverDebug_h.txt Show annotated file Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverRFPhy.c Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverRFPhy.h Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverRFPhy_c.txt Show annotated file Show diff for this revision Revisions of this file
RF_Drivers_Atmel/driverRFPhy_h.txt Show annotated file Show diff for this revision Revisions of this file
RF_Drivers_Atmel/low_level_RF.cpp Show diff for this revision Revisions of this file
RF_Drivers_Atmel/low_level_RF.h Show diff for this revision Revisions of this file
RF_Drivers_Atmel/low_level_RF_cpp.txt Show annotated file Show diff for this revision Revisions of this file
RF_Drivers_Atmel/low_level_RF_h.txt Show annotated file Show diff for this revision Revisions of this file
RF_Drivers_Freescale/PhyDebug.c Show annotated file Show diff for this revision Revisions of this file
RF_Drivers_Freescale/PhyDebug.h Show annotated file Show diff for this revision Revisions of this file
RF_Drivers_Freescale/PhyTime.c Show annotated file Show diff for this revision Revisions of this file
--- a/RF_Drivers_Atmel/driverAtmelRFInterface.c	Sun Mar 15 00:56:28 2015 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,952 +0,0 @@
-/*
- * driverAtmelRFInterface.c
- *
- *  Created on: 14 July 2014
- *      Author: mBed Team
- */
-
-#include "arm_hal_interrupt.h"
-#include "arm_hal_phy.h"
-#include "driverRFPhy.h"
-#include "driverAtmelRFInterface.h"
-#include "low_level_RF.h"
-
-#include <stdio.h>
-
-void (*app_rf_settings_cb)(void) = 0;
-static uint8_t rf_part_num = 0;
-static uint8_t rf_irq_port = 0;
-static uint8_t rf_irq_pin = 0;
-static uint8_t rf_slp_tr_port = 0;
-static uint8_t rf_slp_tr_pin = 0;
-static uint8_t rf_reset_port = 0;
-static uint8_t rf_reset_pin = 0;
-static uint8_t rf_spi_if = 0;
-static uint8_t rf_spi_cs = 0;
-static uint8_t rf_spi_cs_port = 0;
-static uint8_t rf_spi_cs_pin = 0;
-static uint8_t rf_spi_port = 0;
-static uint8_t rf_spi_mosi_pin = 0;
-static uint8_t rf_spi_miso_pin = 0;
-static uint8_t rf_spi_sclk_pin = 0;
-static uint8_t rf_rx_lqi;
-static int8_t rf_rx_rssi;
-/*TODO: RSSI Base value setting*/
-static int8_t rf_rssi_base_val = -91;
-static uint8_t phy_timers_enabled = 0;
-
-/*
- * \brief Delay function for RF interface.
- *
- * \param ticks Number of delay ticks
- *
- * \return none
- */
-void rf_if_delay_function(uint16_t ticks)
-{
-    while(ticks--);
-}
-
-/*
- * \brief Function initialises the RF timer for ACK wait and calibration.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_timer_init(void)
-{
-    /*  TODO   */
-}
-
-/*
- * \brief Function starts the ACK wait timeout.
- *
- * \param slots Given slots, resolution 50us
- *
- * \return none
- */
-void rf_if_ack_wait_timer_start(uint16_t slots)
-{
-    /*  TODO   */
-}
-
-/*
- * \brief Function starts the calibration interval.
- *
- * \param slots Given slots, resolution 50us
- *
- * \return none
- */
-void rf_if_calibration_timer_start(uint32_t slots)
-{
-    /*  TODO   */
-}
-
-/*
- * \brief Function stops the ACK wait timeout.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_ack_wait_timer_stop(void)
-{
-    phy_timers_enabled &= ~PHY_ACK_WAIT_TIMER;
-}
-
-/*
- * \brief Function is a call back for ACK wait timeout.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_ack_wait_timer_interrupt(void)
-{
-    /*  TODO   */
-}
-
-/*
- * \brief Function is a call back for calibration interval timer.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_calibration_timer_interrupt(void)
-{
-    /*  TODO   */
-}
-
-/*
- * \brief Function sets SLP_TR pin high in RF interface.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_slp_tr_pin_high(void)
-{
-      RF_SLP_TR_Set(1);
-}
-
-/*
- * \brief Function sets SLP_TR pin low in RF interface.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_slp_tr_pin_low(void)
-{
-    RF_SLP_TR_Set(0);   
-}
-
-/*
- * \brief Function returns peripheral ID for SPI interface.
- *
- * \param none
- *
- * \return peripheral ID
- */
-uint8_t rf_if_get_rf_spi_periph(uint8_t spi_interface)
-{
-    uint8_t ret_val = 19 + spi_interface;
-    return ret_val;
-}
-
-/*
- * \brief Function returns interrupt number for I/O port.
- *
- * \param none
- *
- * \return interrupt number
- */
-uint8_t rf_if_get_rf_irq_number(uint8_t port)
-{
-    /*  not needed in mBed  */
-}
-
-
-/*
- * \brief Function enables RF irq pin interrupts in RF interface.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_enable_irq(void)
-{
-    /*  not needed in mBed  */
-}
-
-
-/*
- * \brief Function initialises RF interrupt pin in RF interface.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_init_irq_delete(void)
-{
-    RF_IRQ_Init();  
-}
-
-/*
- * \brief Function initialises the SPI interface for RF.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_spi_init(void)
-{
-    /*  not needed in mBed  */
-}
-
-/*
- * \brief Function initialises SLP_TR pin in RF interface.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_init_slp_tr_pin(void)
-{
-    /*Chip select*/
-      //RF_SLP_TR_Set(0);       // moved to reset function
-}
-
-/*
- * \brief Function returns peripheral ID for I/O port.
- *
- * \param none
- *
- * \return peripheral ID
- */
-uint8_t rf_if_get_port_peripheral_id(uint8_t port)
-{
-    uint8_t ret_val = 9 + port;
-    return ret_val;
-}
-
-/*
- * \brief Function initialises I/O pins for RF interface.
- *
- * \param none
- *
- * \return peripheral ID
- */
-void rf_if_init_spi_pins(void)
-{
-    /*  not needed in mBed  */
-}
-
-/*
- * \brief Function reads data from the given RF SRAM address.
- *
- * \param ptr Read pointer
- * \param sram_address Read address in SRAM
- * \param len Length of the read
- *
- * \return none
- */
-void rf_if_read_payload(uint8_t *ptr, uint8_t sram_address, uint8_t len)
-{
-    uint8_t i;
-
-      RF_CS_Set(0);
-    spi_exchange(0x20);
-    spi_exchange(sram_address);
-    for(i=0; i<len; i++)
-        *ptr++ = spi_exchange(0);
-
-    /*Read LQI and RSSI in variable*/
-    rf_rx_lqi = spi_exchange(0);
-    rf_rx_rssi = (rf_rssi_base_val + spi_exchange(0));
-      RF_CS_Set(1);
-}
-
-/*
- * \brief Function polls while the SPI chip select is active.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_spi_poll_chip_select(void)
-{
-    RF_CS_while_active();   
-}
-
-void rf_if_set_bit(uint8_t addr, uint8_t bit, uint8_t bit_mask)
-{
-    uint8_t reg = rf_if_read_register(addr);
-    reg &= ~bit_mask;
-    reg |= bit;
-    rf_if_write_register(addr, reg);
-}
-
-/*
- * \brief Function clears bit(s) in given RF register.
- *
- * \param addr Address of the register to clear
- * \param bit Bit(s) to clear
- *
- * \return none
- */
-void rf_if_clear_bit(uint8_t addr, uint8_t bit)
-{
-    uint8_t reg = rf_if_read_register(addr);
-    reg &= ~bit;
-    rf_if_write_register(addr, reg);
-}
-
-/*
- * \brief Function writes register in RF.
- *
- * \param addr Address on the RF
- * \param data Written data
- *
- * \return none
- */
-void rf_if_write_register(uint8_t addr, uint8_t data)
-{
-    uint8_t cmd = 0xC0;
-    arm_enter_critical();
-
-      spi_write(cmd | addr, data);
-
-    arm_exit_critical();
-}
-
-/*
- * \brief Function reads RF register.
- *
- * \param addr Address on the RF
- *
- * \return Read data
- */
-uint8_t rf_if_read_register(uint8_t addr)
-{
-    uint8_t cmd = 0x80;
-    uint8_t data;
-    arm_enter_critical();
-
-      data = spi_read(cmd | addr);
-    arm_exit_critical();
-    return data;
-}
-
-/*
- * \brief Function resets the RF.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_reset_radio(void)
-{    
-    /* Reset and init RF_CS - chip select  */
-      RF_RST_Set(1);
-    rf_if_delay_function(65000);
-    RF_RST_Set(0);
-    rf_if_delay_function(65000);
-      /* Set default states */
-      RF_CS_Set(1);
-      RF_SLP_TR_Set(0);
-    rf_if_delay_function(65000);
-    RF_RST_Set(1);
-    rf_if_delay_function(65000);    
-
-      /*Initialise RF interrupt pin*/
-    RF_IRQ_Init();
-}
-
-/*
- * \brief Function enables the Front end usage.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_enable_pa_ext(void)
-{
-    /*Set PA_EXT_EN to enable controlling of external front end*/
-    rf_if_set_bit(TRX_CTRL_1, PA_EXT_EN, PA_EXT_EN);
-}
-
-/*
- * \brief Function disables the Front end usage.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_disable_pa_ext(void)
-{
-    /*Clear PA_EXT_EN to disable controlling of external front end*/
-    rf_if_clear_bit(TRX_CTRL_1, PA_EXT_EN);
-}
-
-/*
- * \brief Function enables the Antenna diversity usage.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_enable_ant_div(void)
-{
-    /*Set ANT_EXT_SW_EN to enable controlling of antenna diversity*/
-    rf_if_set_bit(ANT_DIV, ANT_EXT_SW_EN, ANT_EXT_SW_EN);
-}
-
-/*
- * \brief Function disables the Antenna diversity usage.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_disable_ant_div(void)
-{
-    rf_if_clear_bit(ANT_DIV, ANT_EXT_SW_EN);
-}
-
-/*
- * \brief Function sets the SLP TR pin.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_enable_slptr(void)
-{
-      RF_SLP_TR_Set(1);
-}
-
-/*
- * \brief Function clears the SLP TR pin.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_disable_slptr(void)
-{
-      RF_SLP_TR_Set(0);
-}
-
-/*
- * \brief Function writes the antenna diversity settings.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_write_antenna_diversity_settings(void)
-{
-    /*Recommended setting of PDT_THRES is 3 when antenna diversity is used*/
-    rf_if_set_bit(RX_CTRL, 0x03, 0x0f);
-    rf_if_write_register(ANT_DIV, ANT_DIV_EN | ANT_EXT_SW_EN | ANT_CTRL_DEFAULT);
-}
-
-/*
- * \brief Function writes the TX output power register.
- *
- * \param value Given register value
- *
- * \return none
- */
-void rf_if_write_set_tx_power_register(uint8_t value)
-{
-    rf_if_write_register(PHY_TX_PWR, value);
-}
-
-/*
- * \brief Function writes the RPC register.
- *
- * \param value Given register value
- *
- * \return none
- */
-void rf_if_write_set_trx_rpc_register(uint8_t value)
-{
-    rf_if_write_register(TRX_RPC, value);
-}
-
-/*
- * \brief Function returns the RF part number.
- *
- * \param none
- *
- * \return part number
- */
-uint8_t rf_if_read_part_num_delete(void)
-{
-    return rf_if_read_register(PART_NUM);
-}
-
-/*
- * \brief Function writes the RF settings and initialises SPI interface.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_write_rf_settings(void)
-{
-    int ret;
-    
-    /* unslotted mode - max. frame & csma retries = 0 */
-  rf_if_write_register(XAH_CTRL_0,0);
-    if (rf_if_read_register(XAH_CTRL_0) != 0) {
-      printf("Error: XAH_CTRL_0 reg. incorrect!\r\n"); 
-        //while(1);
-    }    
-    
-    /* TX_AUTO_CRC On - IRQ_Mask_Mode = 0 - IRQ_Polarity = 0 (Pin IRQ is active high) */
-    rf_if_write_register(TRX_CTRL_1, 0x20);
-    if (rf_if_read_register(TRX_CTRL_1) != 0x20) {
-      printf("Error: TRX_CTRL_1 reg. incorrect!\r\n"); 
-        //while(1);
-    }
-    
-  /*CCA Mode - Carrier sense OR energy above threshold. Channel list is set separately*/
-    rf_if_write_register(PHY_CC_CCA, 0x05);
-    if (rf_if_read_register(PHY_CC_CCA) != 0x05) {
-      printf("Error: PHY_CC_CCA reg. incorrect!\r\n"); 
-        //while(1);
-    }  
-    
-  /*Read transceiver PART_NUM*/
-  rf_part_num = rf_if_read_register(PART_NUM);
-
-  /*Sub-GHz RF settings*/
-  if(rf_part_num == PART_AT86RF212)
-  {
-      /*GC_TX_OFFS mode-dependent setting - OQPSK*/
-      rf_if_write_register(RF_CTRL_0, 0x32);
-    
-          if(rf_if_read_register(VERSION_NUM) == VERSION_AT86RF212B)
-      {
-          /*TX Output Power setting - 0 dBm North American Band*/
-          rf_if_write_register(PHY_TX_PWR, 0x03);
-      }
-      else
-      {
-          /*TX Output Power setting - 0 dBm North American Band*/
-          rf_if_write_register(PHY_TX_PWR, 0x24);
-      }
-
-      /*PHY Mode: IEEE 802.15.4-2006/2011 - OQPSK-SIN-250*/
-      rf_if_write_register(TRX_CTRL_2, OQPSK_SIN_250);
-      rf_rssi_base_val = -98;
-    }
-    /*2.4GHz RF settings*/
-    else if (rf_part_num == PART_AT86RF233)
-    {
-      printf("Part detected: ATMEL AT86RF233\r\n");    
-       /*PHY Mode: IEEE 802.15.4 - Data Rate 250 kb/s*/
-       rf_if_write_register(TRX_CTRL_2, 0);
-       rf_rssi_base_val = -91;
-    } else {
-        // other module not yet defined
-        printf("Error: RF Part Unknown!\r\n");             
-    }
-}
-
-
-/*
- * \brief Function checks the channel availability
- *
- * \param none
- *
- * \return 1 Channel clear
- * \return 0 Channel not clear
- */
-uint8_t rf_if_check_cca(void)
-{
-    uint8_t retval = 0;
-    if(rf_if_read_register(TRX_STATUS) & CCA_STATUS)
-    {
-        retval = 1;
-    }
-    return retval;
-}
-
-/*
- * \brief Function checks if the CRC is valid in received frame
- *
- * \param none
- *
- * \return 1 CRC ok
- * \return 0 CRC failed
- */
-uint8_t rf_if_check_crc(void)
-{
-    uint8_t retval = 0;
-    if(rf_if_read_register(PHY_RSSI) & CRC_VALID)
-    {
-        retval = 1;
-    }
-    return retval;
-}
-
-/*
- * \brief Function returns the RF state
- *
- * \param none
- *
- * \return RF state
- */
-uint8_t rf_if_read_trx_state(void)
-{
-    return rf_if_read_register(TRX_STATUS) & 0x1F;
-}
-
-/*
- * \brief Function reads data from RF SRAM.
- *
- * \param ptr Read pointer
- * \param len Length of the read
- *
- * \return none
- */
-void rf_if_read_packet(uint8_t *ptr, uint8_t len)
-{
-    if(rf_part_num == PART_AT86RF231 || rf_part_num == PART_AT86RF212)
-        rf_if_read_payload(ptr, 0, len);
-    else if(rf_part_num == PART_AT86RF233)
-        rf_if_read_payload(ptr, 1, len);
-}
-
-/*
- * \brief Function writes RF short address registers
- *
- * \param short_address Given short address
- *
- * \return none
- */
-void rf_if_write_short_addr_registers(uint8_t *short_address)
-{
-    rf_if_write_register(SHORT_ADDR_1, *short_address++);
-    rf_if_write_register(SHORT_ADDR_0, *short_address);
-}
-
-/*
- * \brief Function sets the frame pending in ACK message
- *
- * \param state Given frame pending state
- *
- * \return none
- */
-void rf_if_ack_pending_ctrl(uint8_t state)
-{
-    arm_enter_critical();
-    if(state)
-    {
-        rf_if_set_bit(CSMA_SEED_1, (1 << AACK_SET_PD), (1 << AACK_SET_PD));
-    }
-    else
-    {
-        rf_if_clear_bit(CSMA_SEED_1, (1 << AACK_SET_PD));
-    }
-    arm_exit_critical();
-}
-
-/*
- * \brief Function returns the state of frame pending control
- *
- * \param none
- *
- * \return Frame pending state
- */
-uint8_t rf_if_last_acked_pending(void)
-{
-    uint8_t last_acked_data_pending;
-
-    if(rf_if_read_register(CSMA_SEED_1) & 0x20)
-        last_acked_data_pending = 1;
-    else
-        last_acked_data_pending = 0;
-
-    return last_acked_data_pending;
-}
-
-/*
- * \brief Function calibrates the RF part.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_calibration(void)
-{
-    rf_if_set_bit(FTN_CTRL, FTN_START, FTN_START);
-    /*Wait while calibration is running*/
-    while(rf_if_read_register(FTN_CTRL) & FTN_START);
-}
-
-/*
- * \brief Function writes RF PAN Id registers
- *
- * \param pan_id Given PAN Id
- *
- * \return none
- */
-void rf_if_write_pan_id_registers(uint8_t *pan_id)
-{
-    rf_if_write_register(PAN_ID_1, *pan_id++);
-    rf_if_write_register(PAN_ID_0, *pan_id);
-}
-
-/*
- * \brief Function writes RF IEEE Address registers
- *
- * \param address Given IEEE Address
- *
- * \return none
- */
-void rf_if_write_ieee_addr_registers(uint8_t *address)
-{
-    uint8_t i;
-    uint8_t temp = IEEE_ADDR_0;
-
-    for(i=0; i<8; i++)
-        rf_if_write_register(temp++, address[7-i]);
-}
-
-/*
- * \brief Function writes data in RF frame buffer.
- *
- * \param ptr Pointer to data
- * \param length Pointer to length
- *
- * \return none
- */
-void rf_if_write_frame_buffer(uint8_t *ptr, uint8_t length)
-{
-    uint8_t i;
-    uint8_t cmd = 0x60;
-
-      RF_CS_Set(0);
-    spi_exchange(cmd);
-    spi_exchange(length + 2);
-    for(i=0; i<length; i++)
-        spi_exchange(*ptr++);
-
-    rf_if_delay_function(10);   
-      RF_CS_Set(1);
-}
-
-/*
- * \brief Function returns 8-bit random value.
- *
- * \param none
- *
- * \return random value
- */
-uint8_t rf_if_read_rnd(void)
-{
-    uint8_t temp;
-
-    temp = ((rf_if_read_register(PHY_RSSI)>>5) << 6);
-    temp |= ((rf_if_read_register(PHY_RSSI)>>5) << 4);
-    temp |= ((rf_if_read_register(PHY_RSSI)>>5) << 2);
-    temp |= ((rf_if_read_register(PHY_RSSI)>>5));
-    return temp;
-}
-
-/*
- * \brief Function changes the state of the RF.
- *
- * \param trx_state Given RF state
- *
- * \return none
- */
-void rf_if_change_trx_state(rf_trx_states_t trx_state)
-{
-    arm_enter_critical();
-    rf_if_write_register(TRX_STATE, trx_state);
-    /*Wait while not in desired state*/
-    rf_poll_trx_state_change(trx_state);
-    arm_exit_critical();
-}
-
-/*
- * \brief Function enables the TX END interrupt
- *
- * \param none
- *
- * \return none
- */
-void rf_if_enable_tx_end_interrupt(void)
-{
-    rf_if_set_bit(IRQ_MASK, TRX_END, 0x08);
-}
-
-/*
- * \brief Function enables the RX END interrupt
- *
- * \param none
- *
- * \return none
- */
-void rf_if_enable_rx_end_interrupt(void)
-{
-    rf_if_set_bit(IRQ_MASK, TRX_END, 0x08);
-}
-
-/*
- * \brief Function enables the RX START interrupt
- *
- * \param none
- *
- * \return none
- */
-void rf_if_enable_rx_start_interrupt(void)
-{
-    rf_if_set_bit(IRQ_MASK, RX_START, 0x04);
-}
-
-/*
- * \brief Function enables the CCA ED interrupt
- *
- * \param none
- *
- * \return none
- */
-void rf_if_enable_cca_ed_done_interrupt(void)
-{
-    rf_if_set_bit(IRQ_MASK, CCA_ED_DONE, 0x10);
-}
-
-/*
- * \brief Function starts the CCA process
- *
- * \param none
- *
- * \return none
- */
-void rf_if_start_cca_process(void)
-{
-    rf_if_set_bit(PHY_CC_CCA, CCA_REQUEST, 0x80);
-}
-
-/*
- * \brief Function returns the length of the received packet
- *
- * \param none
- *
- * \return packet length
- */
-uint8_t rf_if_read_received_frame_length(void)
-{
-    uint8_t length;
-
-      RF_CS_Set(0);
-    spi_exchange(0x20);
-    length = spi_exchange(0);
-      RF_CS_Set(1);
-    return length;
-}
-
-/*
- * \brief Function returns the LQI of the received packet
- *
- * \param none
- *
- * \return packet LQI
- */
-uint8_t rf_if_read_lqi(void)
-{
-    return rf_rx_lqi;
-}
-
-/*
- * \brief Function returns the RSSI of the received packet
- *
- * \param none
- *
- * \return packet RSSI
- */
-int8_t rf_if_read_rssi(void)
-{
-    return rf_rx_rssi;
-}
-
-/*
- * \brief Function sets the RF channel field
- *
- * \param Given channel
- *
- * \return none
- */
-void rf_if_set_channel_register(uint8_t channel)
-{
-    rf_if_set_bit(PHY_CC_CCA, channel, 0x1f);
-}
-
-/*
- * \brief Function returns the pointer to RF interrupt handler
- *
- * \param none
- *
- * \return RF interrupt handler function
- */
-void (*rf_if_get_rf_interrupt_function())(void)
-{
-    return rf_if_interrupt_handler;
-}
-
-/*
- * \brief Function is a RF interrupt vector. End of frame in RX and TX are handled here as well as CCA process interrupt.
- *
- * \param none
- *
- * \return none
- */
-void rf_if_interrupt_handler(void)
-{
-    uint8_t irq_status;
-
-    /*Read interrupt flag*/
-    irq_status = rf_if_read_register(IRQ_STATUS);
-
-    /*Disable interrupt on RF*/
-    rf_if_clear_bit(IRQ_MASK, irq_status);
-    /*RX start interrupt*/
-    if(irq_status & RX_START)
-    {
-    }
-    /*Address matching interrupt*/
-    if(irq_status & AMI)
-    {
-    }
-    if(irq_status & TRX_UR)
-    {
-    }
-    /*Frame end interrupt (RX and TX)*/
-    if(irq_status & TRX_END)
-    {
-        /*TX done interrupt*/
-        if(rf_if_read_trx_state() == PLL_ON || rf_if_read_trx_state() == TX_ARET_ON)
-        {
-            rf_handle_tx_end();
-        }
-        /*Frame received interrupt*/
-        else
-        {
-            rf_handle_rx_end();
-        }
-    }
-    if(irq_status & CCA_ED_DONE)
-    {
-        rf_handle_cca_ed_done();
-    }
-}
-
--- a/RF_Drivers_Atmel/driverAtmelRFInterface.h	Sun Mar 15 00:56:28 2015 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,194 +0,0 @@
-/*
- * driverAtmelRFInterface.h
- *
- *  Created on: 14 July 2014
- *      Author: mBed Team
- */
-
-#ifndef DRIVERRFINTERFACE_H_
-#define DRIVERRFINTERFACE_H_
-
-
-/*Delay between transfers(bytes) (32*DLYBCT)/MCK -> (32*6/120MHz=1.6us)*/
-#define SPI_DLYBCT  6
-/*Delay before SPCK DLYBS/MCK -> 140/120MHz=1.16us)*/
-#define SPI_DLYBS   140
-/*Serial clock baud rate MCK/SCBR -> 120MHz/18=6.7MHz)*/
-#define SPI_SCBR    18
-
-#define PHY_ACK_WAIT_TICK_VAL 185
-#define PHY_CALIBRATION_TICK_VAL 185
-#define PHY_ACK_WAIT_TIMER  1
-#define PHY_CALIBRATION_TIMER   2
-
-/*Supported transceivers*/
-#define PART_AT86RF231      0x03
-#define PART_AT86RF212      0x07
-#define PART_AT86RF233      0x0B
-#define VERSION_AT86RF212   0x01
-#define VERSION_AT86RF212B  0x03
-
-/*RF Configuration Registers*/
-#define TRX_STATUS      0x01
-#define TRX_STATE       0x02
-#define TRX_CTRL_0      0x03
-#define TRX_CTRL_1      0x04
-#define PHY_TX_PWR      0x05
-#define PHY_RSSI        0x06
-#define PHY_ED_LEVEL    0x07
-#define PHY_CC_CCA      0x08
-#define RX_CTRL         0x0A
-#define SFD_VALUE       0x0B
-#define TRX_CTRL_2      0x0C
-#define ANT_DIV         0x0D
-#define IRQ_MASK        0x0E
-#define IRQ_STATUS      0x0F
-#define VREG_CTRL       0x10
-#define BATMON          0x11
-#define XOSC_CTRL       0x12
-#define CC_CTRL_0       0x13
-#define CC_CTRL_1       0x14
-#define RX_SYN          0x15
-#define TRX_RPC         0x16
-#define RF_CTRL_0       0x16
-#define XAH_CTRL_1      0x17
-#define FTN_CTRL        0x18
-#define PLL_CF          0x1A
-#define PLL_DCU         0x1B
-#define PART_NUM        0x1C
-#define VERSION_NUM     0x1D
-#define MAN_ID_0        0x1E
-#define MAN_ID_1        0x1F
-#define SHORT_ADDR_0    0x20
-#define SHORT_ADDR_1    0x21
-#define PAN_ID_0        0x22
-#define PAN_ID_1        0x23
-#define IEEE_ADDR_0     0x24
-#define IEEE_ADDR_1     0x25
-#define IEEE_ADDR_2     0x26
-#define IEEE_ADDR_3     0x27
-#define IEEE_ADDR_4     0x28
-#define IEEE_ADDR_5     0x29
-#define IEEE_ADDR_6     0x2A
-#define IEEE_ADDR_7     0x2B
-#define XAH_CTRL_0      0x2C
-#define CSMA_SEED_0     0x2D
-#define CSMA_SEED_1     0x2E
-#define CSMA_BE         0x2F
-
-/* CSMA_SEED_1*/
-#define AACK_FVN_MODE1          7
-#define AACK_FVN_MODE0          6
-#define AACK_SET_PD             5
-#define AACK_DIS_ACK            4
-#define AACK_I_AM_COORD         3
-#define CSMA_SEED_12            2
-#define CSMA_SEED_11            1
-#define CSMA_SEED_10            0
-
-/*TRX_STATUS bits*/
-#define CCA_STATUS  0x40
-#define CCA_DONE    0x80
-
-/*PHY_CC_CCA bits*/
-#define CCA_REQUEST 0x80
-#define CCA_MODE_1 0x20
-#define CCA_MODE_3 0x60
-
-/*IRQ_MASK bits*/
-#define RX_START 0x04
-#define TRX_END 0x08
-#define CCA_ED_DONE 0x10
-#define AMI 0x20
-#define TRX_UR 0x40
-
-/*ANT_DIV bits*/
-#define ANT_DIV_EN      0x08
-#define ANT_EXT_SW_EN   0x04
-#define ANT_CTRL_DEFAULT    0x03
-
-/*TRX_CTRL_1 bits*/
-#define PA_EXT_EN       0x80
-
-/*FTN_CTRL bits*/
-#define FTN_START       0x80
-
-/*PHY_RSSI bits*/
-#define CRC_VALID   0x80
-
-/*AT86RF212 PHY Modes*/
-#define BPSK_20                     0x00
-#define BPSK_40                     0x04
-#define BPSK_40_ALT                 0x14
-#define OQPSK_SIN_RC_100            0x08
-#define OQPSK_SIN_RC_200            0x09
-#define OQPSK_RC_100                0x18
-#define OQPSK_RC_200                0x19
-#define OQPSK_SIN_250               0x0c
-#define OQPSK_SIN_500               0x0d
-#define OQPSK_SIN_500_ALT           0x0f
-#define OQPSK_RC_250                0x1c
-#define OQPSK_RC_500                0x1d
-#define OQPSK_RC_500_ALT            0x1f
-#define OQPSK_SIN_RC_400_SCR_ON     0x2A
-#define OQPSK_SIN_RC_400_SCR_OFF    0x0A
-#define OQPSK_RC_400_SCR_ON         0x3A
-#define OQPSK_RC_400_SCR_OFF        0x1A
-#define OQPSK_SIN_1000_SCR_ON       0x2E
-#define OQPSK_SIN_1000_SCR_OFF      0x0E
-#define OQPSK_RC_1000_SCR_ON        0x3E
-#define OQPSK_RC_1000_SCR_OFF       0x1E
-
-extern void rf_if_delay_function(uint16_t ticks);
-extern uint8_t rf_if_read_rnd(void);
-extern void rf_if_calibration_timer_start(uint32_t slots);
-extern void rf_if_interrupt_handler(void);
-extern void (*rf_if_get_rf_interrupt_function())(void);
-extern void rf_if_calibration_timer_interrupt(void);
-extern void rf_if_timer_init(void);
-extern void rf_if_ack_wait_timer_start(uint16_t slots);
-extern void rf_if_ack_wait_timer_stop(void);
-extern void rf_if_ack_wait_timer_interrupt(void);
-extern int8_t rf_if_set_rf_irq_pin(uint8_t port, uint8_t pin);
-extern int8_t rf_if_set_slp_tr_pin(uint8_t port, uint8_t pin);
-extern int8_t rf_if_set_reset_pin(uint8_t port, uint8_t pin);
-extern int8_t rf_if_set_spi_interface(uint8_t spi_interface, uint8_t cs_device);
-extern uint8_t rf_if_spi_exchange(uint8_t spi_if, uint8_t out);
-extern void rf_if_ack_pending_ctrl(uint8_t state);
-extern void rf_if_calibration(void);
-extern uint8_t rf_if_read_register(uint8_t addr);
-extern void rf_if_set_bit(uint8_t addr, uint8_t bit, uint8_t bit_mask);
-extern void rf_if_clear_bit(uint8_t addr, uint8_t bit);
-extern void rf_if_write_register(uint8_t addr, uint8_t data);
-extern void rf_if_reset_radio(void);
-extern void rf_if_enable_pa_ext(void);
-extern void rf_if_disable_pa_ext(void);
-extern void rf_if_enable_ant_div(void);
-extern void rf_if_disable_ant_div(void);
-extern void rf_if_enable_slptr(void);
-extern void rf_if_disable_slptr(void);
-extern void rf_if_write_antenna_diversity_settings(void);
-extern void rf_if_write_set_tx_power_register(uint8_t value);
-extern void rf_if_write_set_trx_rpc_register(uint8_t value);
-extern void rf_if_write_rf_settings(void);
-extern uint8_t rf_if_check_cca(void);
-extern uint8_t rf_if_check_crc(void);
-extern uint8_t rf_if_read_trx_state(void);
-extern void rf_if_read_packet(uint8_t *ptr, uint8_t len);
-extern void rf_if_write_short_addr_registers(uint8_t *short_address);
-extern uint8_t rf_if_last_acked_pending(void);
-extern void rf_if_write_pan_id_registers(uint8_t *pan_id);
-extern void rf_if_write_ieee_addr_registers(uint8_t *address);
-extern void rf_if_write_frame_buffer(uint8_t *ptr, uint8_t length);
-extern void rf_if_change_trx_state(rf_trx_states_t trx_state);
-extern void rf_if_enable_tx_end_interrupt(void);
-extern void rf_if_enable_rx_end_interrupt(void);
-extern void rf_if_enable_rx_start_interrupt(void);
-extern void rf_if_enable_cca_ed_done_interrupt(void);
-extern void rf_if_start_cca_process(void);
-extern uint8_t rf_if_read_received_frame_length(void);
-extern uint8_t rf_if_read_lqi(void);
-extern int8_t rf_if_read_rssi(void);
-extern void rf_if_set_channel_register(uint8_t channel);
-
-#endif /* DRIVERRFINTERFACE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RF_Drivers_Atmel/driverAtmelRFInterface_c.txt	Sun Mar 15 06:08:30 2015 +0000
@@ -0,0 +1,952 @@
+/*
+ * driverAtmelRFInterface.c
+ *
+ *  Created on: 14 July 2014
+ *      Author: mBed Team
+ */
+
+#include "arm_hal_interrupt.h"
+#include "arm_hal_phy.h"
+#include "driverRFPhy.h"
+#include "driverAtmelRFInterface.h"
+#include "low_level_RF.h"
+
+#include <stdio.h>
+
+void (*app_rf_settings_cb)(void) = 0;
+static uint8_t rf_part_num = 0;
+static uint8_t rf_irq_port = 0;
+static uint8_t rf_irq_pin = 0;
+static uint8_t rf_slp_tr_port = 0;
+static uint8_t rf_slp_tr_pin = 0;
+static uint8_t rf_reset_port = 0;
+static uint8_t rf_reset_pin = 0;
+static uint8_t rf_spi_if = 0;
+static uint8_t rf_spi_cs = 0;
+static uint8_t rf_spi_cs_port = 0;
+static uint8_t rf_spi_cs_pin = 0;
+static uint8_t rf_spi_port = 0;
+static uint8_t rf_spi_mosi_pin = 0;
+static uint8_t rf_spi_miso_pin = 0;
+static uint8_t rf_spi_sclk_pin = 0;
+static uint8_t rf_rx_lqi;
+static int8_t rf_rx_rssi;
+/*TODO: RSSI Base value setting*/
+static int8_t rf_rssi_base_val = -91;
+static uint8_t phy_timers_enabled = 0;
+
+/*
+ * \brief Delay function for RF interface.
+ *
+ * \param ticks Number of delay ticks
+ *
+ * \return none
+ */
+void rf_if_delay_function(uint16_t ticks)
+{
+    while(ticks--);
+}
+
+/*
+ * \brief Function initialises the RF timer for ACK wait and calibration.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_timer_init(void)
+{
+    /*  TODO   */
+}
+
+/*
+ * \brief Function starts the ACK wait timeout.
+ *
+ * \param slots Given slots, resolution 50us
+ *
+ * \return none
+ */
+void rf_if_ack_wait_timer_start(uint16_t slots)
+{
+    /*  TODO   */
+}
+
+/*
+ * \brief Function starts the calibration interval.
+ *
+ * \param slots Given slots, resolution 50us
+ *
+ * \return none
+ */
+void rf_if_calibration_timer_start(uint32_t slots)
+{
+    /*  TODO   */
+}
+
+/*
+ * \brief Function stops the ACK wait timeout.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_ack_wait_timer_stop(void)
+{
+    phy_timers_enabled &= ~PHY_ACK_WAIT_TIMER;
+}
+
+/*
+ * \brief Function is a call back for ACK wait timeout.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_ack_wait_timer_interrupt(void)
+{
+    /*  TODO   */
+}
+
+/*
+ * \brief Function is a call back for calibration interval timer.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_calibration_timer_interrupt(void)
+{
+    /*  TODO   */
+}
+
+/*
+ * \brief Function sets SLP_TR pin high in RF interface.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_slp_tr_pin_high(void)
+{
+      RF_SLP_TR_Set(1);
+}
+
+/*
+ * \brief Function sets SLP_TR pin low in RF interface.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_slp_tr_pin_low(void)
+{
+    RF_SLP_TR_Set(0);   
+}
+
+/*
+ * \brief Function returns peripheral ID for SPI interface.
+ *
+ * \param none
+ *
+ * \return peripheral ID
+ */
+uint8_t rf_if_get_rf_spi_periph(uint8_t spi_interface)
+{
+    uint8_t ret_val = 19 + spi_interface;
+    return ret_val;
+}
+
+/*
+ * \brief Function returns interrupt number for I/O port.
+ *
+ * \param none
+ *
+ * \return interrupt number
+ */
+uint8_t rf_if_get_rf_irq_number(uint8_t port)
+{
+    /*  not needed in mBed  */
+}
+
+
+/*
+ * \brief Function enables RF irq pin interrupts in RF interface.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_enable_irq(void)
+{
+    /*  not needed in mBed  */
+}
+
+
+/*
+ * \brief Function initialises RF interrupt pin in RF interface.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_init_irq_delete(void)
+{
+    RF_IRQ_Init();  
+}
+
+/*
+ * \brief Function initialises the SPI interface for RF.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_spi_init(void)
+{
+    /*  not needed in mBed  */
+}
+
+/*
+ * \brief Function initialises SLP_TR pin in RF interface.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_init_slp_tr_pin(void)
+{
+    /*Chip select*/
+      //RF_SLP_TR_Set(0);       // moved to reset function
+}
+
+/*
+ * \brief Function returns peripheral ID for I/O port.
+ *
+ * \param none
+ *
+ * \return peripheral ID
+ */
+uint8_t rf_if_get_port_peripheral_id(uint8_t port)
+{
+    uint8_t ret_val = 9 + port;
+    return ret_val;
+}
+
+/*
+ * \brief Function initialises I/O pins for RF interface.
+ *
+ * \param none
+ *
+ * \return peripheral ID
+ */
+void rf_if_init_spi_pins(void)
+{
+    /*  not needed in mBed  */
+}
+
+/*
+ * \brief Function reads data from the given RF SRAM address.
+ *
+ * \param ptr Read pointer
+ * \param sram_address Read address in SRAM
+ * \param len Length of the read
+ *
+ * \return none
+ */
+void rf_if_read_payload(uint8_t *ptr, uint8_t sram_address, uint8_t len)
+{
+    uint8_t i;
+
+      RF_CS_Set(0);
+    spi_exchange(0x20);
+    spi_exchange(sram_address);
+    for(i=0; i<len; i++)
+        *ptr++ = spi_exchange(0);
+
+    /*Read LQI and RSSI in variable*/
+    rf_rx_lqi = spi_exchange(0);
+    rf_rx_rssi = (rf_rssi_base_val + spi_exchange(0));
+      RF_CS_Set(1);
+}
+
+/*
+ * \brief Function polls while the SPI chip select is active.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_spi_poll_chip_select(void)
+{
+    RF_CS_while_active();   
+}
+
+void rf_if_set_bit(uint8_t addr, uint8_t bit, uint8_t bit_mask)
+{
+    uint8_t reg = rf_if_read_register(addr);
+    reg &= ~bit_mask;
+    reg |= bit;
+    rf_if_write_register(addr, reg);
+}
+
+/*
+ * \brief Function clears bit(s) in given RF register.
+ *
+ * \param addr Address of the register to clear
+ * \param bit Bit(s) to clear
+ *
+ * \return none
+ */
+void rf_if_clear_bit(uint8_t addr, uint8_t bit)
+{
+    uint8_t reg = rf_if_read_register(addr);
+    reg &= ~bit;
+    rf_if_write_register(addr, reg);
+}
+
+/*
+ * \brief Function writes register in RF.
+ *
+ * \param addr Address on the RF
+ * \param data Written data
+ *
+ * \return none
+ */
+void rf_if_write_register(uint8_t addr, uint8_t data)
+{
+    uint8_t cmd = 0xC0;
+    arm_enter_critical();
+
+      spi_write(cmd | addr, data);
+
+    arm_exit_critical();
+}
+
+/*
+ * \brief Function reads RF register.
+ *
+ * \param addr Address on the RF
+ *
+ * \return Read data
+ */
+uint8_t rf_if_read_register(uint8_t addr)
+{
+    uint8_t cmd = 0x80;
+    uint8_t data;
+    arm_enter_critical();
+
+      data = spi_read(cmd | addr);
+    arm_exit_critical();
+    return data;
+}
+
+/*
+ * \brief Function resets the RF.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_reset_radio(void)
+{    
+    /* Reset and init RF_CS - chip select  */
+      RF_RST_Set(1);
+    rf_if_delay_function(65000);
+    RF_RST_Set(0);
+    rf_if_delay_function(65000);
+      /* Set default states */
+      RF_CS_Set(1);
+      RF_SLP_TR_Set(0);
+    rf_if_delay_function(65000);
+    RF_RST_Set(1);
+    rf_if_delay_function(65000);    
+
+      /*Initialise RF interrupt pin*/
+    RF_IRQ_Init();
+}
+
+/*
+ * \brief Function enables the Front end usage.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_enable_pa_ext(void)
+{
+    /*Set PA_EXT_EN to enable controlling of external front end*/
+    rf_if_set_bit(TRX_CTRL_1, PA_EXT_EN, PA_EXT_EN);
+}
+
+/*
+ * \brief Function disables the Front end usage.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_disable_pa_ext(void)
+{
+    /*Clear PA_EXT_EN to disable controlling of external front end*/
+    rf_if_clear_bit(TRX_CTRL_1, PA_EXT_EN);
+}
+
+/*
+ * \brief Function enables the Antenna diversity usage.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_enable_ant_div(void)
+{
+    /*Set ANT_EXT_SW_EN to enable controlling of antenna diversity*/
+    rf_if_set_bit(ANT_DIV, ANT_EXT_SW_EN, ANT_EXT_SW_EN);
+}
+
+/*
+ * \brief Function disables the Antenna diversity usage.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_disable_ant_div(void)
+{
+    rf_if_clear_bit(ANT_DIV, ANT_EXT_SW_EN);
+}
+
+/*
+ * \brief Function sets the SLP TR pin.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_enable_slptr(void)
+{
+      RF_SLP_TR_Set(1);
+}
+
+/*
+ * \brief Function clears the SLP TR pin.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_disable_slptr(void)
+{
+      RF_SLP_TR_Set(0);
+}
+
+/*
+ * \brief Function writes the antenna diversity settings.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_write_antenna_diversity_settings(void)
+{
+    /*Recommended setting of PDT_THRES is 3 when antenna diversity is used*/
+    rf_if_set_bit(RX_CTRL, 0x03, 0x0f);
+    rf_if_write_register(ANT_DIV, ANT_DIV_EN | ANT_EXT_SW_EN | ANT_CTRL_DEFAULT);
+}
+
+/*
+ * \brief Function writes the TX output power register.
+ *
+ * \param value Given register value
+ *
+ * \return none
+ */
+void rf_if_write_set_tx_power_register(uint8_t value)
+{
+    rf_if_write_register(PHY_TX_PWR, value);
+}
+
+/*
+ * \brief Function writes the RPC register.
+ *
+ * \param value Given register value
+ *
+ * \return none
+ */
+void rf_if_write_set_trx_rpc_register(uint8_t value)
+{
+    rf_if_write_register(TRX_RPC, value);
+}
+
+/*
+ * \brief Function returns the RF part number.
+ *
+ * \param none
+ *
+ * \return part number
+ */
+uint8_t rf_if_read_part_num_delete(void)
+{
+    return rf_if_read_register(PART_NUM);
+}
+
+/*
+ * \brief Function writes the RF settings and initialises SPI interface.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_write_rf_settings(void)
+{
+    int ret;
+    
+    /* unslotted mode - max. frame & csma retries = 0 */
+  rf_if_write_register(XAH_CTRL_0,0);
+    if (rf_if_read_register(XAH_CTRL_0) != 0) {
+      printf("Error: XAH_CTRL_0 reg. incorrect!\r\n"); 
+        //while(1);
+    }    
+    
+    /* TX_AUTO_CRC On - IRQ_Mask_Mode = 0 - IRQ_Polarity = 0 (Pin IRQ is active high) */
+    rf_if_write_register(TRX_CTRL_1, 0x20);
+    if (rf_if_read_register(TRX_CTRL_1) != 0x20) {
+      printf("Error: TRX_CTRL_1 reg. incorrect!\r\n"); 
+        //while(1);
+    }
+    
+  /*CCA Mode - Carrier sense OR energy above threshold. Channel list is set separately*/
+    rf_if_write_register(PHY_CC_CCA, 0x05);
+    if (rf_if_read_register(PHY_CC_CCA) != 0x05) {
+      printf("Error: PHY_CC_CCA reg. incorrect!\r\n"); 
+        //while(1);
+    }  
+    
+  /*Read transceiver PART_NUM*/
+  rf_part_num = rf_if_read_register(PART_NUM);
+
+  /*Sub-GHz RF settings*/
+  if(rf_part_num == PART_AT86RF212)
+  {
+      /*GC_TX_OFFS mode-dependent setting - OQPSK*/
+      rf_if_write_register(RF_CTRL_0, 0x32);
+    
+          if(rf_if_read_register(VERSION_NUM) == VERSION_AT86RF212B)
+      {
+          /*TX Output Power setting - 0 dBm North American Band*/
+          rf_if_write_register(PHY_TX_PWR, 0x03);
+      }
+      else
+      {
+          /*TX Output Power setting - 0 dBm North American Band*/
+          rf_if_write_register(PHY_TX_PWR, 0x24);
+      }
+
+      /*PHY Mode: IEEE 802.15.4-2006/2011 - OQPSK-SIN-250*/
+      rf_if_write_register(TRX_CTRL_2, OQPSK_SIN_250);
+      rf_rssi_base_val = -98;
+    }
+    /*2.4GHz RF settings*/
+    else if (rf_part_num == PART_AT86RF233)
+    {
+      printf("Part detected: ATMEL AT86RF233\r\n");    
+       /*PHY Mode: IEEE 802.15.4 - Data Rate 250 kb/s*/
+       rf_if_write_register(TRX_CTRL_2, 0);
+       rf_rssi_base_val = -91;
+    } else {
+        // other module not yet defined
+        printf("Error: RF Part Unknown!\r\n");             
+    }
+}
+
+
+/*
+ * \brief Function checks the channel availability
+ *
+ * \param none
+ *
+ * \return 1 Channel clear
+ * \return 0 Channel not clear
+ */
+uint8_t rf_if_check_cca(void)
+{
+    uint8_t retval = 0;
+    if(rf_if_read_register(TRX_STATUS) & CCA_STATUS)
+    {
+        retval = 1;
+    }
+    return retval;
+}
+
+/*
+ * \brief Function checks if the CRC is valid in received frame
+ *
+ * \param none
+ *
+ * \return 1 CRC ok
+ * \return 0 CRC failed
+ */
+uint8_t rf_if_check_crc(void)
+{
+    uint8_t retval = 0;
+    if(rf_if_read_register(PHY_RSSI) & CRC_VALID)
+    {
+        retval = 1;
+    }
+    return retval;
+}
+
+/*
+ * \brief Function returns the RF state
+ *
+ * \param none
+ *
+ * \return RF state
+ */
+uint8_t rf_if_read_trx_state(void)
+{
+    return rf_if_read_register(TRX_STATUS) & 0x1F;
+}
+
+/*
+ * \brief Function reads data from RF SRAM.
+ *
+ * \param ptr Read pointer
+ * \param len Length of the read
+ *
+ * \return none
+ */
+void rf_if_read_packet(uint8_t *ptr, uint8_t len)
+{
+    if(rf_part_num == PART_AT86RF231 || rf_part_num == PART_AT86RF212)
+        rf_if_read_payload(ptr, 0, len);
+    else if(rf_part_num == PART_AT86RF233)
+        rf_if_read_payload(ptr, 1, len);
+}
+
+/*
+ * \brief Function writes RF short address registers
+ *
+ * \param short_address Given short address
+ *
+ * \return none
+ */
+void rf_if_write_short_addr_registers(uint8_t *short_address)
+{
+    rf_if_write_register(SHORT_ADDR_1, *short_address++);
+    rf_if_write_register(SHORT_ADDR_0, *short_address);
+}
+
+/*
+ * \brief Function sets the frame pending in ACK message
+ *
+ * \param state Given frame pending state
+ *
+ * \return none
+ */
+void rf_if_ack_pending_ctrl(uint8_t state)
+{
+    arm_enter_critical();
+    if(state)
+    {
+        rf_if_set_bit(CSMA_SEED_1, (1 << AACK_SET_PD), (1 << AACK_SET_PD));
+    }
+    else
+    {
+        rf_if_clear_bit(CSMA_SEED_1, (1 << AACK_SET_PD));
+    }
+    arm_exit_critical();
+}
+
+/*
+ * \brief Function returns the state of frame pending control
+ *
+ * \param none
+ *
+ * \return Frame pending state
+ */
+uint8_t rf_if_last_acked_pending(void)
+{
+    uint8_t last_acked_data_pending;
+
+    if(rf_if_read_register(CSMA_SEED_1) & 0x20)
+        last_acked_data_pending = 1;
+    else
+        last_acked_data_pending = 0;
+
+    return last_acked_data_pending;
+}
+
+/*
+ * \brief Function calibrates the RF part.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_calibration(void)
+{
+    rf_if_set_bit(FTN_CTRL, FTN_START, FTN_START);
+    /*Wait while calibration is running*/
+    while(rf_if_read_register(FTN_CTRL) & FTN_START);
+}
+
+/*
+ * \brief Function writes RF PAN Id registers
+ *
+ * \param pan_id Given PAN Id
+ *
+ * \return none
+ */
+void rf_if_write_pan_id_registers(uint8_t *pan_id)
+{
+    rf_if_write_register(PAN_ID_1, *pan_id++);
+    rf_if_write_register(PAN_ID_0, *pan_id);
+}
+
+/*
+ * \brief Function writes RF IEEE Address registers
+ *
+ * \param address Given IEEE Address
+ *
+ * \return none
+ */
+void rf_if_write_ieee_addr_registers(uint8_t *address)
+{
+    uint8_t i;
+    uint8_t temp = IEEE_ADDR_0;
+
+    for(i=0; i<8; i++)
+        rf_if_write_register(temp++, address[7-i]);
+}
+
+/*
+ * \brief Function writes data in RF frame buffer.
+ *
+ * \param ptr Pointer to data
+ * \param length Pointer to length
+ *
+ * \return none
+ */
+void rf_if_write_frame_buffer(uint8_t *ptr, uint8_t length)
+{
+    uint8_t i;
+    uint8_t cmd = 0x60;
+
+      RF_CS_Set(0);
+    spi_exchange(cmd);
+    spi_exchange(length + 2);
+    for(i=0; i<length; i++)
+        spi_exchange(*ptr++);
+
+    rf_if_delay_function(10);   
+      RF_CS_Set(1);
+}
+
+/*
+ * \brief Function returns 8-bit random value.
+ *
+ * \param none
+ *
+ * \return random value
+ */
+uint8_t rf_if_read_rnd(void)
+{
+    uint8_t temp;
+
+    temp = ((rf_if_read_register(PHY_RSSI)>>5) << 6);
+    temp |= ((rf_if_read_register(PHY_RSSI)>>5) << 4);
+    temp |= ((rf_if_read_register(PHY_RSSI)>>5) << 2);
+    temp |= ((rf_if_read_register(PHY_RSSI)>>5));
+    return temp;
+}
+
+/*
+ * \brief Function changes the state of the RF.
+ *
+ * \param trx_state Given RF state
+ *
+ * \return none
+ */
+void rf_if_change_trx_state(rf_trx_states_t trx_state)
+{
+    arm_enter_critical();
+    rf_if_write_register(TRX_STATE, trx_state);
+    /*Wait while not in desired state*/
+    rf_poll_trx_state_change(trx_state);
+    arm_exit_critical();
+}
+
+/*
+ * \brief Function enables the TX END interrupt
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_enable_tx_end_interrupt(void)
+{
+    rf_if_set_bit(IRQ_MASK, TRX_END, 0x08);
+}
+
+/*
+ * \brief Function enables the RX END interrupt
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_enable_rx_end_interrupt(void)
+{
+    rf_if_set_bit(IRQ_MASK, TRX_END, 0x08);
+}
+
+/*
+ * \brief Function enables the RX START interrupt
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_enable_rx_start_interrupt(void)
+{
+    rf_if_set_bit(IRQ_MASK, RX_START, 0x04);
+}
+
+/*
+ * \brief Function enables the CCA ED interrupt
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_enable_cca_ed_done_interrupt(void)
+{
+    rf_if_set_bit(IRQ_MASK, CCA_ED_DONE, 0x10);
+}
+
+/*
+ * \brief Function starts the CCA process
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_start_cca_process(void)
+{
+    rf_if_set_bit(PHY_CC_CCA, CCA_REQUEST, 0x80);
+}
+
+/*
+ * \brief Function returns the length of the received packet
+ *
+ * \param none
+ *
+ * \return packet length
+ */
+uint8_t rf_if_read_received_frame_length(void)
+{
+    uint8_t length;
+
+      RF_CS_Set(0);
+    spi_exchange(0x20);
+    length = spi_exchange(0);
+      RF_CS_Set(1);
+    return length;
+}
+
+/*
+ * \brief Function returns the LQI of the received packet
+ *
+ * \param none
+ *
+ * \return packet LQI
+ */
+uint8_t rf_if_read_lqi(void)
+{
+    return rf_rx_lqi;
+}
+
+/*
+ * \brief Function returns the RSSI of the received packet
+ *
+ * \param none
+ *
+ * \return packet RSSI
+ */
+int8_t rf_if_read_rssi(void)
+{
+    return rf_rx_rssi;
+}
+
+/*
+ * \brief Function sets the RF channel field
+ *
+ * \param Given channel
+ *
+ * \return none
+ */
+void rf_if_set_channel_register(uint8_t channel)
+{
+    rf_if_set_bit(PHY_CC_CCA, channel, 0x1f);
+}
+
+/*
+ * \brief Function returns the pointer to RF interrupt handler
+ *
+ * \param none
+ *
+ * \return RF interrupt handler function
+ */
+void (*rf_if_get_rf_interrupt_function())(void)
+{
+    return rf_if_interrupt_handler;
+}
+
+/*
+ * \brief Function is a RF interrupt vector. End of frame in RX and TX are handled here as well as CCA process interrupt.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_if_interrupt_handler(void)
+{
+    uint8_t irq_status;
+
+    /*Read interrupt flag*/
+    irq_status = rf_if_read_register(IRQ_STATUS);
+
+    /*Disable interrupt on RF*/
+    rf_if_clear_bit(IRQ_MASK, irq_status);
+    /*RX start interrupt*/
+    if(irq_status & RX_START)
+    {
+    }
+    /*Address matching interrupt*/
+    if(irq_status & AMI)
+    {
+    }
+    if(irq_status & TRX_UR)
+    {
+    }
+    /*Frame end interrupt (RX and TX)*/
+    if(irq_status & TRX_END)
+    {
+        /*TX done interrupt*/
+        if(rf_if_read_trx_state() == PLL_ON || rf_if_read_trx_state() == TX_ARET_ON)
+        {
+            rf_handle_tx_end();
+        }
+        /*Frame received interrupt*/
+        else
+        {
+            rf_handle_rx_end();
+        }
+    }
+    if(irq_status & CCA_ED_DONE)
+    {
+        rf_handle_cca_ed_done();
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RF_Drivers_Atmel/driverAtmelRFInterface_h.txt	Sun Mar 15 06:08:30 2015 +0000
@@ -0,0 +1,194 @@
+/*
+ * driverAtmelRFInterface.h
+ *
+ *  Created on: 14 July 2014
+ *      Author: mBed Team
+ */
+
+#ifndef DRIVERRFINTERFACE_H_
+#define DRIVERRFINTERFACE_H_
+
+
+/*Delay between transfers(bytes) (32*DLYBCT)/MCK -> (32*6/120MHz=1.6us)*/
+#define SPI_DLYBCT  6
+/*Delay before SPCK DLYBS/MCK -> 140/120MHz=1.16us)*/
+#define SPI_DLYBS   140
+/*Serial clock baud rate MCK/SCBR -> 120MHz/18=6.7MHz)*/
+#define SPI_SCBR    18
+
+#define PHY_ACK_WAIT_TICK_VAL 185
+#define PHY_CALIBRATION_TICK_VAL 185
+#define PHY_ACK_WAIT_TIMER  1
+#define PHY_CALIBRATION_TIMER   2
+
+/*Supported transceivers*/
+#define PART_AT86RF231      0x03
+#define PART_AT86RF212      0x07
+#define PART_AT86RF233      0x0B
+#define VERSION_AT86RF212   0x01
+#define VERSION_AT86RF212B  0x03
+
+/*RF Configuration Registers*/
+#define TRX_STATUS      0x01
+#define TRX_STATE       0x02
+#define TRX_CTRL_0      0x03
+#define TRX_CTRL_1      0x04
+#define PHY_TX_PWR      0x05
+#define PHY_RSSI        0x06
+#define PHY_ED_LEVEL    0x07
+#define PHY_CC_CCA      0x08
+#define RX_CTRL         0x0A
+#define SFD_VALUE       0x0B
+#define TRX_CTRL_2      0x0C
+#define ANT_DIV         0x0D
+#define IRQ_MASK        0x0E
+#define IRQ_STATUS      0x0F
+#define VREG_CTRL       0x10
+#define BATMON          0x11
+#define XOSC_CTRL       0x12
+#define CC_CTRL_0       0x13
+#define CC_CTRL_1       0x14
+#define RX_SYN          0x15
+#define TRX_RPC         0x16
+#define RF_CTRL_0       0x16
+#define XAH_CTRL_1      0x17
+#define FTN_CTRL        0x18
+#define PLL_CF          0x1A
+#define PLL_DCU         0x1B
+#define PART_NUM        0x1C
+#define VERSION_NUM     0x1D
+#define MAN_ID_0        0x1E
+#define MAN_ID_1        0x1F
+#define SHORT_ADDR_0    0x20
+#define SHORT_ADDR_1    0x21
+#define PAN_ID_0        0x22
+#define PAN_ID_1        0x23
+#define IEEE_ADDR_0     0x24
+#define IEEE_ADDR_1     0x25
+#define IEEE_ADDR_2     0x26
+#define IEEE_ADDR_3     0x27
+#define IEEE_ADDR_4     0x28
+#define IEEE_ADDR_5     0x29
+#define IEEE_ADDR_6     0x2A
+#define IEEE_ADDR_7     0x2B
+#define XAH_CTRL_0      0x2C
+#define CSMA_SEED_0     0x2D
+#define CSMA_SEED_1     0x2E
+#define CSMA_BE         0x2F
+
+/* CSMA_SEED_1*/
+#define AACK_FVN_MODE1          7
+#define AACK_FVN_MODE0          6
+#define AACK_SET_PD             5
+#define AACK_DIS_ACK            4
+#define AACK_I_AM_COORD         3
+#define CSMA_SEED_12            2
+#define CSMA_SEED_11            1
+#define CSMA_SEED_10            0
+
+/*TRX_STATUS bits*/
+#define CCA_STATUS  0x40
+#define CCA_DONE    0x80
+
+/*PHY_CC_CCA bits*/
+#define CCA_REQUEST 0x80
+#define CCA_MODE_1 0x20
+#define CCA_MODE_3 0x60
+
+/*IRQ_MASK bits*/
+#define RX_START 0x04
+#define TRX_END 0x08
+#define CCA_ED_DONE 0x10
+#define AMI 0x20
+#define TRX_UR 0x40
+
+/*ANT_DIV bits*/
+#define ANT_DIV_EN      0x08
+#define ANT_EXT_SW_EN   0x04
+#define ANT_CTRL_DEFAULT    0x03
+
+/*TRX_CTRL_1 bits*/
+#define PA_EXT_EN       0x80
+
+/*FTN_CTRL bits*/
+#define FTN_START       0x80
+
+/*PHY_RSSI bits*/
+#define CRC_VALID   0x80
+
+/*AT86RF212 PHY Modes*/
+#define BPSK_20                     0x00
+#define BPSK_40                     0x04
+#define BPSK_40_ALT                 0x14
+#define OQPSK_SIN_RC_100            0x08
+#define OQPSK_SIN_RC_200            0x09
+#define OQPSK_RC_100                0x18
+#define OQPSK_RC_200                0x19
+#define OQPSK_SIN_250               0x0c
+#define OQPSK_SIN_500               0x0d
+#define OQPSK_SIN_500_ALT           0x0f
+#define OQPSK_RC_250                0x1c
+#define OQPSK_RC_500                0x1d
+#define OQPSK_RC_500_ALT            0x1f
+#define OQPSK_SIN_RC_400_SCR_ON     0x2A
+#define OQPSK_SIN_RC_400_SCR_OFF    0x0A
+#define OQPSK_RC_400_SCR_ON         0x3A
+#define OQPSK_RC_400_SCR_OFF        0x1A
+#define OQPSK_SIN_1000_SCR_ON       0x2E
+#define OQPSK_SIN_1000_SCR_OFF      0x0E
+#define OQPSK_RC_1000_SCR_ON        0x3E
+#define OQPSK_RC_1000_SCR_OFF       0x1E
+
+extern void rf_if_delay_function(uint16_t ticks);
+extern uint8_t rf_if_read_rnd(void);
+extern void rf_if_calibration_timer_start(uint32_t slots);
+extern void rf_if_interrupt_handler(void);
+extern void (*rf_if_get_rf_interrupt_function())(void);
+extern void rf_if_calibration_timer_interrupt(void);
+extern void rf_if_timer_init(void);
+extern void rf_if_ack_wait_timer_start(uint16_t slots);
+extern void rf_if_ack_wait_timer_stop(void);
+extern void rf_if_ack_wait_timer_interrupt(void);
+extern int8_t rf_if_set_rf_irq_pin(uint8_t port, uint8_t pin);
+extern int8_t rf_if_set_slp_tr_pin(uint8_t port, uint8_t pin);
+extern int8_t rf_if_set_reset_pin(uint8_t port, uint8_t pin);
+extern int8_t rf_if_set_spi_interface(uint8_t spi_interface, uint8_t cs_device);
+extern uint8_t rf_if_spi_exchange(uint8_t spi_if, uint8_t out);
+extern void rf_if_ack_pending_ctrl(uint8_t state);
+extern void rf_if_calibration(void);
+extern uint8_t rf_if_read_register(uint8_t addr);
+extern void rf_if_set_bit(uint8_t addr, uint8_t bit, uint8_t bit_mask);
+extern void rf_if_clear_bit(uint8_t addr, uint8_t bit);
+extern void rf_if_write_register(uint8_t addr, uint8_t data);
+extern void rf_if_reset_radio(void);
+extern void rf_if_enable_pa_ext(void);
+extern void rf_if_disable_pa_ext(void);
+extern void rf_if_enable_ant_div(void);
+extern void rf_if_disable_ant_div(void);
+extern void rf_if_enable_slptr(void);
+extern void rf_if_disable_slptr(void);
+extern void rf_if_write_antenna_diversity_settings(void);
+extern void rf_if_write_set_tx_power_register(uint8_t value);
+extern void rf_if_write_set_trx_rpc_register(uint8_t value);
+extern void rf_if_write_rf_settings(void);
+extern uint8_t rf_if_check_cca(void);
+extern uint8_t rf_if_check_crc(void);
+extern uint8_t rf_if_read_trx_state(void);
+extern void rf_if_read_packet(uint8_t *ptr, uint8_t len);
+extern void rf_if_write_short_addr_registers(uint8_t *short_address);
+extern uint8_t rf_if_last_acked_pending(void);
+extern void rf_if_write_pan_id_registers(uint8_t *pan_id);
+extern void rf_if_write_ieee_addr_registers(uint8_t *address);
+extern void rf_if_write_frame_buffer(uint8_t *ptr, uint8_t length);
+extern void rf_if_change_trx_state(rf_trx_states_t trx_state);
+extern void rf_if_enable_tx_end_interrupt(void);
+extern void rf_if_enable_rx_end_interrupt(void);
+extern void rf_if_enable_rx_start_interrupt(void);
+extern void rf_if_enable_cca_ed_done_interrupt(void);
+extern void rf_if_start_cca_process(void);
+extern uint8_t rf_if_read_received_frame_length(void);
+extern uint8_t rf_if_read_lqi(void);
+extern int8_t rf_if_read_rssi(void);
+extern void rf_if_set_channel_register(uint8_t channel);
+
+#endif /* DRIVERRFINTERFACE_H_ */
--- a/RF_Drivers_Atmel/driverDebug.c	Sun Mar 15 00:56:28 2015 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,265 +0,0 @@
-//#include "system_event.h"
-//#include <string.h>
-//#include "pl_types.h"
-//#include "pcer_low_level.h"
-//#include "pio_low_level.h"
-#include "driverDebug.h"
-//#include "uart_low_level.h"
-//#include "usart_low_level.h"
-//#include "SAMxxBoardDefinitions.h"
-//#include "arm_hal_interrupt.h"
-#include <stdio.h>
-
-#define debug printf
-
-
-/**
-  * Send string to debug port.
-  *
-  * \param str String pointer. Have to end by zero ('\0')
-  *
-  */
-#if 0
-void debug_send1(uint8_t *str)
-{
-    while(*str)
-    {
-        if (debug_put(*str) == 0)
-        {
-            str++;
-        }
-        else return;
-    }
-}
-#endif
-
-/**
-  * Send constant string to debug port.
-  *
-  * \param str Constant string pointer.
-  *
-  */
-#if 0
-void debug_send_const(prog_uint8_t *str)
-{
-    while(*str)
-    {
-        //if (debug_put(*str) == 0)
-        if (printf(str) == 0)
-        {
-            str++;
-        }
-        else return;
-    }
-}
-#endif
-
-/*
- * \brief Help round function.
- *
- * \param value Divident
- * \param divider Divisor
- *
- * \return Quotient
- */
-uint32_t debug_round(uint32_t value, uint32_t divider)
-{
-    uint32_t tmp = value;
-    value *= 10;
-    value /= divider;
-    tmp = value;
-    while(tmp > 10)
-        tmp -= 10;
-    if(((tmp & 0x0000000f) > 4) && ((tmp & 0x0000000f) < 10))
-        value += 10;
-    if(tmp != 10)
-        value -= tmp;
-    value /= 10;
-    return value;
-}
-
-/**
- * Print a number to the debug port.
- *
- * \param width string maximum length
- * \param base base number (16 for hex, 10 for decimal etc.)
- * \param n number value
- *
- * \return pointer to the formatted string
- */
-void debug_integer(uint8_t width, uint8_t base, int16_t n)
-{
-  uint8_t bfr[8];
-  uint8_t *ptr = bfr;
-  uint8_t ctr = 0;
-
-  if (width > 7) width = 7;
-
-  ptr += width;
-  *ptr-- = 0;
-
-  if (base == 16)
-  {
-      do
-      {
-          *ptr = n & 0x0F;
-          if (*ptr < 10) *ptr += '0';
-          else *ptr += ('A'-10);
-          ptr--;
-          n >>= 4;
-          ctr++;
-      }while((ctr & 1) || (ctr < width));
-  }
-  else
-  {
-      uint8_t negative = 0;
-      if (n < 0)
-      { negative = 1;
-        n = -n;
-      }
-      ctr++;
-      do
-      {
-        *ptr-- = (n % 10) + '0';
-        n /= 10;
-        ctr++;
-      }while ((ctr < width) && n);
-      if (negative)
-      {
-        *ptr-- = '-';
-      }
-      else
-      {
-        *ptr-- = ' ';
-      }
-  }
-  ptr++;
-  //debug_send(ptr);
-    debug(ptr);
-}
-
-/**
-  * Print data array in HEX format. Bytes are separated with colon.
-  *
-  * \param ptr Pointer to 8-bit data array.
-  * \param len Amount of printed bytes
-  *
-  */
-void printf_array(uint8_t *ptr , uint16_t len)
-{
-    uint16_t i;
-    for(i=0; i<len; i++)
-    {
-        if(i)
-        {
-            if(i%16== 0)
-            {
-                debug("\r\n");
-                if(len > 64)
-                {
-                    uint8_t x =254;
-                    while(x--);
-                }
-            }
-            else
-            {
-                debug(":");
-            }
-        }
-        debug_hex(*ptr++);
-    }
-    debug("\r\n");
-}
-
-/**
- * Print a IPv6 address.
- *
- * \param addr_ptr pointer to ipv6 address
- *
- */
-void printf_ipv6_address(uint8_t *addr_ptr)
-{
-    if(addr_ptr)
-    {
-        uint8_t i, d_colon = 0;
-        uint16_t current_value = 0, last_value = 0;
-
-        for(i=0; i< 16;i += 2)
-        {
-            current_value =  (*addr_ptr++ << 8);
-            current_value += *addr_ptr++;
-
-            if(i == 0)
-            {
-                last_value = current_value;
-                debug_hex(current_value >> 8);
-                debug_hex(current_value );
-                debug(":");
-            }
-            else
-            {
-                if(current_value == 0)
-                {
-                    if(i== 14)
-                    {
-                        debug(":");
-                        //debug_put('0');
-                        debug("0");
-                    }
-                    else
-                    {
-                        if(last_value == 0)
-                        {
-                            if(d_colon == 0)
-                            {
-                                d_colon=1;
-                            }
-                        }
-                        else
-                        {
-                            if(d_colon == 2)
-                            {
-                                //debug_put('0');
-                                debug("0");
-                                debug(":");
-                            }
-                        }
-                    }
-                }
-                else
-                {
-                    if(last_value == 0)
-                    {
-                        if(d_colon == 1)
-                        {
-                            debug(":");
-                            d_colon = 2;
-                        }
-                        else
-                        {
-                            //debug_put('0');
-                            debug("0");
-                            debug(":");
-                        }
-                    }
-                    if(current_value > 0x00ff)
-                    {
-                        debug_hex(current_value >> 8);
-                    }
-                    debug_hex(current_value );
-                    if(i< 14)
-                    {
-                        debug(":");
-                    }
-                }
-                last_value = current_value;
-            }
-        }
-    }
-    else
-    {
-        debug("Address Print: pointer NULL");
-    }
-    debug("\r\n");
-}
-
--- a/RF_Drivers_Atmel/driverDebug.h	Sun Mar 15 00:56:28 2015 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
- * driverDebug.h
- *
- *  Created on: 21 May 2014
- *      Author: jarpas01
- */
-#ifndef DRIVERDEBUG_H_
-#define DRIVERDEBUG_H_
-
-#include "stdint.h"
-
-//typedef  unsigned char const prog_uint8_t;
-
-extern void debug_integer(uint8_t width, uint8_t base, int16_t n);
-extern int16_t debug_get(void);
-extern int8_t debug_put(uint8_t byte);
-extern void debug_send(uint8_t *str);
-//extern void debug_send_const(prog_uint8_t *str);
-extern void printf_array(uint8_t *ptr , uint16_t len);
-extern void printf_string(uint8_t *ptr , uint16_t len);
-extern void printf_ipv6_address(uint8_t *addr_ptr);
-extern int8_t debug_init(uint32_t speed, uint8_t io_conf);
-extern void debug_interrupt_handler(void);
-extern uint32_t debug_round(uint32_t value, uint32_t divider);
-
-/**
-  * Macro for printing a constant string to the debug port.
-  *
-  * \param y pointer to the string
-  *
-  */
-//#define debug(y) debug_send_const(y);
-/**
-  * Macro for printing a 8-bit variable in HEX format to the debug port.
-  *
-  * \param y 8-bit variable
-  *
-  */
-#define debug_hex(y) debug_integer(2, 16, y)
-
-/**
-  * Macro for printing a 8/16-bit variable in integer format to the debug port.
-  *
-  * \param y 8/16-bit variable
-  *
-  */
-#define debug_int(y) debug_integer(6, 10, y)
-
-
-#endif /* DRIVERDEBUG_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RF_Drivers_Atmel/driverDebug_c.txt	Sun Mar 15 06:08:30 2015 +0000
@@ -0,0 +1,265 @@
+//#include "system_event.h"
+//#include <string.h>
+//#include "pl_types.h"
+//#include "pcer_low_level.h"
+//#include "pio_low_level.h"
+#include "driverDebug.h"
+//#include "uart_low_level.h"
+//#include "usart_low_level.h"
+//#include "SAMxxBoardDefinitions.h"
+//#include "arm_hal_interrupt.h"
+#include <stdio.h>
+
+#define debug printf
+
+
+/**
+  * Send string to debug port.
+  *
+  * \param str String pointer. Have to end by zero ('\0')
+  *
+  */
+#if 0
+void debug_send1(uint8_t *str)
+{
+    while(*str)
+    {
+        if (debug_put(*str) == 0)
+        {
+            str++;
+        }
+        else return;
+    }
+}
+#endif
+
+/**
+  * Send constant string to debug port.
+  *
+  * \param str Constant string pointer.
+  *
+  */
+#if 0
+void debug_send_const(prog_uint8_t *str)
+{
+    while(*str)
+    {
+        //if (debug_put(*str) == 0)
+        if (printf(str) == 0)
+        {
+            str++;
+        }
+        else return;
+    }
+}
+#endif
+
+/*
+ * \brief Help round function.
+ *
+ * \param value Divident
+ * \param divider Divisor
+ *
+ * \return Quotient
+ */
+uint32_t debug_round(uint32_t value, uint32_t divider)
+{
+    uint32_t tmp = value;
+    value *= 10;
+    value /= divider;
+    tmp = value;
+    while(tmp > 10)
+        tmp -= 10;
+    if(((tmp & 0x0000000f) > 4) && ((tmp & 0x0000000f) < 10))
+        value += 10;
+    if(tmp != 10)
+        value -= tmp;
+    value /= 10;
+    return value;
+}
+
+/**
+ * Print a number to the debug port.
+ *
+ * \param width string maximum length
+ * \param base base number (16 for hex, 10 for decimal etc.)
+ * \param n number value
+ *
+ * \return pointer to the formatted string
+ */
+void debug_integer(uint8_t width, uint8_t base, int16_t n)
+{
+  uint8_t bfr[8];
+  uint8_t *ptr = bfr;
+  uint8_t ctr = 0;
+
+  if (width > 7) width = 7;
+
+  ptr += width;
+  *ptr-- = 0;
+
+  if (base == 16)
+  {
+      do
+      {
+          *ptr = n & 0x0F;
+          if (*ptr < 10) *ptr += '0';
+          else *ptr += ('A'-10);
+          ptr--;
+          n >>= 4;
+          ctr++;
+      }while((ctr & 1) || (ctr < width));
+  }
+  else
+  {
+      uint8_t negative = 0;
+      if (n < 0)
+      { negative = 1;
+        n = -n;
+      }
+      ctr++;
+      do
+      {
+        *ptr-- = (n % 10) + '0';
+        n /= 10;
+        ctr++;
+      }while ((ctr < width) && n);
+      if (negative)
+      {
+        *ptr-- = '-';
+      }
+      else
+      {
+        *ptr-- = ' ';
+      }
+  }
+  ptr++;
+  //debug_send(ptr);
+    debug(ptr);
+}
+
+/**
+  * Print data array in HEX format. Bytes are separated with colon.
+  *
+  * \param ptr Pointer to 8-bit data array.
+  * \param len Amount of printed bytes
+  *
+  */
+void printf_array(uint8_t *ptr , uint16_t len)
+{
+    uint16_t i;
+    for(i=0; i<len; i++)
+    {
+        if(i)
+        {
+            if(i%16== 0)
+            {
+                debug("\r\n");
+                if(len > 64)
+                {
+                    uint8_t x =254;
+                    while(x--);
+                }
+            }
+            else
+            {
+                debug(":");
+            }
+        }
+        debug_hex(*ptr++);
+    }
+    debug("\r\n");
+}
+
+/**
+ * Print a IPv6 address.
+ *
+ * \param addr_ptr pointer to ipv6 address
+ *
+ */
+void printf_ipv6_address(uint8_t *addr_ptr)
+{
+    if(addr_ptr)
+    {
+        uint8_t i, d_colon = 0;
+        uint16_t current_value = 0, last_value = 0;
+
+        for(i=0; i< 16;i += 2)
+        {
+            current_value =  (*addr_ptr++ << 8);
+            current_value += *addr_ptr++;
+
+            if(i == 0)
+            {
+                last_value = current_value;
+                debug_hex(current_value >> 8);
+                debug_hex(current_value );
+                debug(":");
+            }
+            else
+            {
+                if(current_value == 0)
+                {
+                    if(i== 14)
+                    {
+                        debug(":");
+                        //debug_put('0');
+                        debug("0");
+                    }
+                    else
+                    {
+                        if(last_value == 0)
+                        {
+                            if(d_colon == 0)
+                            {
+                                d_colon=1;
+                            }
+                        }
+                        else
+                        {
+                            if(d_colon == 2)
+                            {
+                                //debug_put('0');
+                                debug("0");
+                                debug(":");
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    if(last_value == 0)
+                    {
+                        if(d_colon == 1)
+                        {
+                            debug(":");
+                            d_colon = 2;
+                        }
+                        else
+                        {
+                            //debug_put('0');
+                            debug("0");
+                            debug(":");
+                        }
+                    }
+                    if(current_value > 0x00ff)
+                    {
+                        debug_hex(current_value >> 8);
+                    }
+                    debug_hex(current_value );
+                    if(i< 14)
+                    {
+                        debug(":");
+                    }
+                }
+                last_value = current_value;
+            }
+        }
+    }
+    else
+    {
+        debug("Address Print: pointer NULL");
+    }
+    debug("\r\n");
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RF_Drivers_Atmel/driverDebug_h.txt	Sun Mar 15 06:08:30 2015 +0000
@@ -0,0 +1,50 @@
+/*
+ * driverDebug.h
+ *
+ *  Created on: 21 May 2014
+ *      Author: jarpas01
+ */
+#ifndef DRIVERDEBUG_H_
+#define DRIVERDEBUG_H_
+
+#include "stdint.h"
+
+//typedef  unsigned char const prog_uint8_t;
+
+extern void debug_integer(uint8_t width, uint8_t base, int16_t n);
+extern int16_t debug_get(void);
+extern int8_t debug_put(uint8_t byte);
+extern void debug_send(uint8_t *str);
+//extern void debug_send_const(prog_uint8_t *str);
+extern void printf_array(uint8_t *ptr , uint16_t len);
+extern void printf_string(uint8_t *ptr , uint16_t len);
+extern void printf_ipv6_address(uint8_t *addr_ptr);
+extern int8_t debug_init(uint32_t speed, uint8_t io_conf);
+extern void debug_interrupt_handler(void);
+extern uint32_t debug_round(uint32_t value, uint32_t divider);
+
+/**
+  * Macro for printing a constant string to the debug port.
+  *
+  * \param y pointer to the string
+  *
+  */
+//#define debug(y) debug_send_const(y);
+/**
+  * Macro for printing a 8-bit variable in HEX format to the debug port.
+  *
+  * \param y 8-bit variable
+  *
+  */
+#define debug_hex(y) debug_integer(2, 16, y)
+
+/**
+  * Macro for printing a 8/16-bit variable in integer format to the debug port.
+  *
+  * \param y 8/16-bit variable
+  *
+  */
+#define debug_int(y) debug_integer(6, 10, y)
+
+
+#endif /* DRIVERDEBUG_H_ */
--- a/RF_Drivers_Atmel/driverRFPhy.c	Sun Mar 15 00:56:28 2015 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1237 +0,0 @@
-/*
- * driverRFPhy.c
- *
- *  Created on: 14 July 2014
- *      Author: mBed team
- */
-#include "arm_hal_interrupt.h"
-#include "arm_hal_phy.h"
-#include "driverRFPhy.h"
-#include "driverAtmelRFInterface.h"
-#include <string.h>
-
-#include <stdio.h>
-
-#include "options.h"
-
-/*RF receive buffer*/
-static uint8_t rf_buffer[RF_BUFFER_SIZE];
-/*RF ACK receive buffer*/
-static uint8_t ack_rx_buf[5];
-/*ACK wait duration changes depending on data rate*/
-static uint16_t rf_ack_wait_duration = RF_ACK_WAIT_TIMEOUT;
-
-static uint8_t radio_tx_power = 0x07;
-static uint8_t rf_channel;
-static uint8_t rf_tuned = 1;
-static uint8_t radio_rpc_value = 0xef;
-static uint8_t rf_use_front_end = 0;
-static uint8_t rf_use_antenna_diversity = 0;
-static uint8_t rf_csd_port = 0;
-static uint8_t rf_csd_pin = 0;
-static uint8_t rf_cps_port = 0;
-static uint8_t rf_cps_pin = 0;
-static uint8_t tx_sequence = 0xff;
-static uint8_t need_ack = 0;
-static uint8_t rf_rx_mode = 0;
-static uint8_t rf_flags = 0;
-static uint8_t rf_rnd_rssi = 0;
-static int8_t rf_radio_driver_id = -1;
-static phy_device_driver_s device_driver;
-static uint8_t atmel_MAC[8];
-static phy_device_channel_info_s channel_info;
-static uint8_t mac_tx_handle = 0;
-
-/*
- * \brief Function sets given RF flag on.
- *
- * \param x Given RF flag
- *
- * \return none
- */
-void rf_flags_set(uint8_t x)
-{
-    rf_flags |= x;
-}
-
-/*
- * \brief Function clears given RF flag on.
- *
- * \param x Given RF flag
- *
- * \return none
- */
-void rf_flags_clear(uint8_t x)
-{
-    rf_flags &= ~x;
-}
-
-/*
- * \brief Function checks if given RF flag is on.
- *
- * \param x Given RF flag
- *
- * \return states of the given flags
- */
-uint8_t rf_flags_check(uint8_t x)
-{
-    return (rf_flags & x);
-}
-
-/*
- * \brief Function clears all RF flags.
- *
- * \param none
- *
- * \return none
- */
-void rf_flags_reset(void)
-{
-    rf_flags = 0;
-}
-
-/*
- * \brief Function sets CPS and CSD pins of the Front end.
- *
- * \param none
- *
- * \return none
- */
-void rf_front_end_rx_lna(void)
-{
-        /* not supported in this version  */
-}
-
-/*
- * \brief Function clears CPS and CSD pins of the Front end.
- *
- * \param none
- *
- * \return none
- */
-void rf_front_end_sleep(void)
-{
-        /* not supported in this version  */
-}
-
-/*
- * \brief Function initialises and registers the RF driver.
- *
- * \param none
- *
- * \return rf_radio_driver_id Driver ID given by NET library
- */
-int8_t rf_device_register(void)
-{
-    rf_init();
-    /*Set pointer to MAC address*/
-    device_driver.PHY_MAC = atmel_MAC;
-    device_driver.driver_description = "ATMEL_MAC";
-#if PHY_LINK_15_4_2_4GHZ_TYPE
-      /*Number of channels in PHY*/
-        channel_info.channel_count = 16;
-        /*Channel mask 26-11*/
-        channel_info.channel_mask = 0x07FFF800;
-        /*Type of RF PHY is SubGHz*/
-        device_driver.link_type = PHY_LINK_15_4_2_4GHZ_TYPE;
-        device_driver.link_channel_info = &channel_info;
-#else
-        /*Number of channels in PHY*/
-    channel_info.channel_count = 11;
-    /*Channel mask 0-10*/
-    channel_info.channel_mask = 0x000007ff;
-    /*Type of RF PHY is SubGHz*/
-    device_driver.link_type = PHY_LINK_15_4_SUBGHZ_TYPE;
-    device_driver.link_channel_info = &channel_info;
-#endif
-   /*Maximum size of payload is 127*/
-    device_driver.phy_MTU = 127;
-    /*No header in PHY*/
-    device_driver.phy_header_length = 0;
-    /*No tail in PHY*/
-    device_driver.phy_tail_length = 0;
-    /*Set address write function*/
-    device_driver.phy_xx_address_write = &rf_address_write;
-    /*Set RF extension function*/
-    device_driver.phy_xx_extension = &rf_extension;
-    /*Set RF state control function*/
-    device_driver.phy_xx_state_control = &rf_interface_state_control;
-    /*Set transmit function*/
-    device_driver.phy_xx_tx = &rf_start_cca;
-    printf("RF Device Registration...");
-    /*Register device driver*/
-    rf_radio_driver_id = arm_net_phy_register(&device_driver);
-    printf("OK\r\n");   
-    return rf_radio_driver_id;
-}
-
-/*
- * \brief Function returns the generated 8-bit random value for seeding Pseudo-random generator. This value was generated by reading noise from RF channel in RF initialisation.
- *
- * \param none
- *
- * \return random RSSI value
- */
-int8_t rf_read_random(void)
-{
-    return rf_rnd_rssi;
-}
-
-/*
- * \brief Function is a call back for ACK wait timeout.
- *
- * \param none
- *
- * \return none
- */
-void rf_ack_wait_timer_interrupt(void)
-{
-    arm_enter_critical();
-    /*Force PLL state*/
-    rf_if_change_trx_state(FORCE_PLL_ON);
-    rf_poll_trx_state_change(PLL_ON);
-    /*Start receiver in RX_AACK_ON state*/
-    rf_rx_mode = 0;
-    rf_flags_clear(RFF_RX);
-    rf_receive();
-    arm_exit_critical();
-}
-
-/*
- * \brief Function is a call back for calibration interval timer.
- *
- * \param none
- *
- * \return none
- */
-void rf_calibration_timer_interrupt(void)
-{
-    /*Calibrate RF*/
-    rf_calibration_cb();
-    /*Start new calibration timeout*/
-    rf_calibration_timer_start(RF_CALIBRATION_INTERVAL);
-}
-
-/*
- * \brief Function initialises the RF timer for ACK wait and calibration.
- *
- * \param none
- *
- * \return none
- */
-void rf_timer_init(void)
-{
-    rf_if_timer_init();
-}
-
-/*
- * \brief Function starts the ACK wait timeout.
- *
- * \param slots Given slots, resolution 50us
- *
- * \return none
- */
-void rf_ack_wait_timer_start(uint16_t slots)
-{
-    rf_if_ack_wait_timer_start(slots);
-}
-
-/*
- * \brief Function starts the calibration interval.
- *
- * \param slots Given slots, resolution 50us
- *
- * \return none
- */
-void rf_calibration_timer_start(uint32_t slots)
-{
-    rf_if_calibration_timer_start(slots);
-}
-
-/*
- * \brief Function stops the ACK wait timeout.
- *
- * \param none
- *
- * \return none
- */
-void rf_ack_wait_timer_stop(void)
-{
-    rf_if_ack_wait_timer_stop();
-}
-
-/*
- * \brief Function reads the MAC address array.
- *
- * \param ptr Pointer to read array
- *
- * \return none
- */
-void rf_read_mac_address(uint8_t *ptr)
-{
-    memcpy(ptr, atmel_MAC, 8);
-}
-
-/*
- * \brief Function sets the MAC address array.
- *
- * \param ptr Pointer to given MAC address array
- *
- * \return none
- */
-void rf_set_mac_address(const uint8_t *ptr)
-{
-    memcpy(atmel_MAC,ptr,8);
-}
-
-/*
- * \brief Function writes various RF settings in startup.
- *
- * \param none
- *
- * \return none
- */
-void rf_write_settings(void)
-{
-    int i, j = 0;
-    
-    arm_enter_critical();
-  
-  //printf("RF Write Settings: 1\r\n"); 
-    rf_if_write_rf_settings();
- 
-  //printf("RF Write Settings: 2\r\n");
-    /*Set output power*/
-    rf_if_write_set_tx_power_register(radio_tx_power);
- 
-  //printf("RF Write Settings: 3\r\n");
-    /*Set RPC register*/
-    rf_if_write_set_trx_rpc_register(radio_rpc_value);
- 
-  //printf("RF Write Settings: 4\r\n");
-    /*Initialise Front end*/
-    if(rf_use_front_end)
-    {
-        printf("RF Front End used\r\n");
-        rf_if_enable_pa_ext();
-                /*  not supported in this version  */    
-    }
-  
-  //printf("RF Write Settings: 5\r\n");  
-    /*Initialise Antenna Diversity*/
-    if(rf_use_antenna_diversity) {
-        printf("RF Antenna diversity\r\n");
-        rf_if_write_antenna_diversity_settings();
-    }    
-  
-  printf("RF Write Settings: 7\r\n");
-    arm_exit_critical();
-   printf("RF Write Settings End\r\n");
-}
-
-/*
- * \brief Function writes 16-bit address in RF address filter.
- *
- * \param short_address Given short address
- *
- * \return none
- */
-void rf_set_short_adr(uint8_t * short_address)
-{
-    uint8_t rf_off_flag = 0;
-    arm_enter_critical();
-    /*Wake up RF if sleeping*/
-    if(rf_if_read_trx_state() == 0x00 || rf_if_read_trx_state() == 0x1F)
-    {
-        rf_if_disable_slptr();
-        rf_off_flag = 1;
-        rf_poll_trx_state_change(TRX_OFF);
-    }
-    /*Write address filter registers*/
-    rf_if_write_short_addr_registers(short_address);
-    /*RF back to sleep*/
-    if(rf_off_flag)
-        rf_if_enable_slptr();
-    arm_exit_critical();
-}
-
-/*
- * \brief Function writes PAN Id in RF PAN Id filter.
- *
- * \param pan_id Given PAN Id
- *
- * \return none
- */
-void rf_set_pan_id(uint8_t *pan_id)
-{
-    uint8_t rf_off_flag = 0;
-
-    arm_enter_critical();
-    /*Wake up RF if sleeping*/
-    if(rf_if_read_trx_state() == 0x00 || rf_if_read_trx_state() == 0x1F)
-    {
-        rf_if_disable_slptr();
-        rf_off_flag = 1;
-        rf_poll_trx_state_change(TRX_OFF);
-    }
-    /*Write address filter registers*/
-    rf_if_write_pan_id_registers(pan_id);
-    /*RF back to sleep*/
-    if(rf_off_flag)
-        rf_if_enable_slptr();
-    arm_exit_critical();
-}
-
-/*
- * \brief Function writes 64-bit address in RF address filter.
- *
- * \param address Given 64-bit address
- *
- * \return none
- */
-void rf_set_address(uint8_t *address)
-{
-    uint8_t rf_off_flag = 0;
-
-    arm_enter_critical();
-    /*Wake up RF if sleeping*/
-    if(rf_if_read_trx_state() == 0x00 || rf_if_read_trx_state() == 0x1F)
-    {
-        rf_if_disable_slptr();
-        rf_off_flag = 1;
-        rf_poll_trx_state_change(TRX_OFF);
-    }
-    /*Write address filter registers*/
-    rf_if_write_ieee_addr_registers(address);
-    /*RF back to sleep*/
-    if(rf_off_flag)
-        rf_if_enable_slptr();
-
-    arm_exit_critical();
-}
-
-/*
- * \brief Function sets the RF channel.
- *
- * \param ch New channel
- *
- * \return none
- */
-void rf_channel_set(uint8_t ch)
-{
-    arm_enter_critical();
-    rf_channel = ch;
-    if(ch < 0x1f)
-        rf_if_set_channel_register(ch);
-    arm_exit_critical();
-}
-
-
-/*
- * \brief Function initialises the radio driver and resets the radio.
- *
- * \param none
- *
- * \return none
- */
-void rf_init(void)
-{
-   printf("RF Init Start\r\n");
-    /*Initialise timers*/
-    rf_timer_init();                //TODO
-    rf_channel = RF_DEFAULT_CHANNEL;
-   printf("RF Reset\r\n");  
-    /*Reset RF module*/
-    rf_if_reset_radio();
-   printf("RF Write Settings\r\n"); 
-    /*Write RF settings*/
-    rf_write_settings();
-   printf("RF Init PHY Mode\r\n"); 
-    /*Initialise PHY mode*/
-    rf_init_phy_mode();
-    /*Clear RF flags*/
-    rf_flags_reset();
-    /*Set RF in TRX OFF state*/
-    rf_if_change_trx_state(TRX_OFF);
-    /*Set RF in PLL_ON state*/
-    rf_if_change_trx_state(PLL_ON);
-    /*Start receiver*/
-    rf_receive();
-    /*Read random variable. This will be used when seeding pseudo-random generator*/
-    rf_rnd_rssi = rf_if_read_rnd();
-    /*Start RF calibration timer*/
-    rf_calibration_timer_start(RF_CALIBRATION_INTERVAL);  //ACA!
-        printf("RF Init End\r\n");
-}
-
-/**
- * \brief Function gets called when MAC is setting radio off.
- *
- * \param none
- *
- * \return none
- */
-void rf_off(void)
-{
-    if(rf_flags_check(RFF_ON))
-    {
-        rf_cca_abort();
-        uint16_t while_counter = 0;
-        /*Wait while receiving*/
-        while(rf_if_read_trx_state() == BUSY_RX_AACK || rf_if_read_trx_state() == BUSY_RX)
-        {
-            while_counter++;
-            if(while_counter == 0xffff)
-                break;
-        }
-        /*RF state change: RX_AACK_ON->PLL_ON->TRX_OFF->SLEEP*/
-        if(rf_if_read_trx_state() == RX_AACK_ON)
-        {
-            rf_if_change_trx_state(PLL_ON);
-        }
-        rf_if_change_trx_state(TRX_OFF);
-        rf_if_enable_slptr();
-        rf_flags_clear(~RFF_ON);
-        /*Front end in sleep*/
-        if(rf_use_front_end)
-        {
-            rf_if_disable_pa_ext();
-            rf_front_end_sleep();
-        }
-        /*Disable Antenna Diversity*/
-        if(rf_use_antenna_diversity)
-            rf_if_disable_ant_div();
-    }
-}
-
-/*
- * \brief Function polls the RF state until it has changed to desired state.
- *
- * \param trx_state RF state
- *
- * \return none
- */
-void rf_poll_trx_state_change(rf_trx_states_t trx_state)
-{
-    uint16_t while_counter = 0;
-    arm_enter_critical();
-
-    if(trx_state != RF_TX_START)
-    {
-        if(trx_state == FORCE_PLL_ON)
-            trx_state = PLL_ON;
-        else if(trx_state == FORCE_TRX_OFF)
-            trx_state = TRX_OFF;
-
-        while(rf_if_read_trx_state() != trx_state)
-        {
-            while_counter++;
-            if(while_counter == 0x1ff)
-                break;
-        }
-    }
-    arm_exit_critical();
-}
-
-/*
- * \brief Function starts the CCA process before starting data transmission and copies the data to RF TX FIFO.
- *
- * \param data_ptr Pointer to TX data
- * \param data_length Length of the TX data
- * \param tx_handle Handle to transmission
- * \return 0 Success
- * \return -1 Busy
- */
-int8_t rf_start_cca(uint8_t *data_ptr, uint16_t data_length, uint8_t tx_handle)
-{
-    /*Check if transmitter is busy*/
-    if((rf_if_read_trx_state() == BUSY_RX_AACK) || (rf_if_read_trx_state() == BUSY_RX))
-    {
-        /*Return busy*/
-        return -1;
-    }
-    else
-    {
-        arm_enter_critical();
-        /*Check if transmitted data needs to be acked*/
-        if(*data_ptr & 0x20)
-            need_ack = 1;
-        else
-            need_ack = 0;
-        /*Store the sequence number for ACK handling*/
-        tx_sequence = *(data_ptr + 2);
-        /*Set radio in RX state to read channel*/
-        rf_receive();
-        /*Write TX FIFO*/
-        rf_if_write_frame_buffer(data_ptr, (uint8_t)data_length);
-        rf_flags_set(RFF_CCA);
-        /*Start CCA process*/
-        rf_if_enable_cca_ed_done_interrupt();
-        rf_if_start_cca_process();
-        /*Store TX handle*/
-        mac_tx_handle = tx_handle;
-        arm_exit_critical();
-    }
-
-    /*Return success*/
-    return 0;
-}
-
-/*
- * \brief Function aborts CCA process.
- *
- * \param none
- *
- * \return none
- */
-void rf_cca_abort(void)
-{
-    /*Clear RFF_CCA RF flag*/
-    rf_flags_clear(RFF_CCA);
-}
-
-
-
-/*
- * \brief Function starts the transmission of the frame.
- *
- * \param none
- *
- * \return none
- */
-void rf_start_tx(void)
-{
-    /*Only start transmitting from RX state*/
-    uint8_t trx_state = rf_if_read_trx_state();
-    if((trx_state != RX_AACK_ON) && (trx_state != RX_ON))
-    {
-        arm_net_phy_tx_done(rf_radio_driver_id, mac_tx_handle, PHY_LINK_CCA_FAIL, 1, 1);
-    }
-    else
-    {
-        /*RF state change: ->PLL_ON->RF_TX_START*/
-        rf_if_change_trx_state(FORCE_PLL_ON);
-        rf_flags_clear(RFF_RX);
-        rf_if_enable_tx_end_interrupt();
-        rf_flags_set(RFF_TX);
-        rf_if_change_trx_state(RF_TX_START);
-    }
-}
-
-/*
- * \brief Function sets the RF in RX state.
- *
- * \param none
- *
- * \return none
- */
-void rf_receive(void)
-{
-    uint16_t while_counter = 0;
-    if(rf_flags_check(RFF_ON) == 0)
-    {
-        rf_on();
-    }
-    /*If not yet in RX state set it*/
-    if(rf_flags_check(RFF_RX) == 0)
-    {
-        arm_enter_critical();
-        /*Wait while receiving data*/
-        while((rf_if_read_trx_state() == BUSY_RX) || (rf_if_read_trx_state() == BUSY_RX_AACK))
-        {
-            while_counter++;
-            if(while_counter == 0xffff)
-            {
-                break;
-            }
-        }
-        /*Wake up from sleep state*/
-        if(rf_if_read_trx_state() == 0x00 || rf_if_read_trx_state() == 0x1f)
-        {
-            rf_if_disable_slptr();
-            rf_poll_trx_state_change(TRX_OFF);
-        }
-
-        rf_if_change_trx_state(PLL_ON);
-        /*ACK is always received in RX_ON state to bypass address filters*/
-        if(rf_rx_mode)
-        {
-            rf_rx_mode = 0;
-            rf_if_change_trx_state(RX_ON);
-        }
-        else
-        {
-            rf_if_change_trx_state(RX_AACK_ON);
-            /*If calibration timer was unable to calibrate the RF, run calibration now*/
-            if(!rf_tuned)
-            {
-                /*Start calibration. This can be done in states TRX_OFF, PLL_ON or in any receive state*/
-                rf_if_calibration();
-                /*RF is tuned now*/
-                rf_tuned = 1;
-            }
-        }
-        rf_channel_set(rf_channel);
-        rf_flags_set(RFF_RX);
-        rf_if_enable_rx_end_interrupt();
-        /*Enable LNA if Front end used*/
-        if(rf_use_front_end)
-            rf_front_end_rx_lna();
-        arm_exit_critical();
-    }
-    /*Stop the running CCA process*/
-    if(rf_flags_check(RFF_CCA))
-        rf_cca_abort();
-}
-
-/*
- * \brief Function calibrates the radio.
- *
- * \param none
- *
- * \return none
- */
-void rf_calibration_cb(void)
-{
-    /*clear tuned flag to start tuning in rf_receive*/
-    rf_tuned = 0;
-    /*If RF is in default receive state, start calibration*/
-    if(rf_if_read_trx_state() == RX_AACK_ON)
-    {
-        arm_enter_critical();
-        /*Set RF in PLL_ON state*/
-        rf_if_change_trx_state(PLL_ON);
-        /*Set RF in TRX_OFF state to start PLL tuning*/
-        rf_if_change_trx_state(TRX_OFF);
-        /*Set RF in RX_ON state to calibrate*/
-        rf_if_change_trx_state(RX_ON);
-        /*Calibrate FTN*/
-        rf_if_calibration();
-        /*RF is tuned now*/
-        rf_tuned = 1;
-        /*Back to default receive state*/
-        rf_flags_clear(RFF_RX);
-        rf_receive();
-        arm_exit_critical();
-    }
-}
-
-/*
- * \brief Function sets RF_ON flag when radio is powered.
- *
- * \param none
- *
- * \return none
- */
-void rf_on(void)
-{
-    /*Set RFF_ON flag*/
-    if(rf_flags_check(RFF_ON) == 0)
-    {
-        rf_flags_set(RFF_ON);
-        /*Wake up Front end*/
-        if(rf_use_front_end)
-        {
-            /*Set PA_EXT_EN to enable controlling of external front end*/
-            rf_if_enable_pa_ext();
-            rf_front_end_rx_lna();
-        }
-        /*Enable Antenna diversity*/
-        if(rf_use_antenna_diversity)
-            /*Set ANT_EXT_SW_EN to enable controlling of antenna diversity*/
-            rf_if_enable_ant_div();
-    }
-}
-
-/*
- * \brief Function handles the received ACK frame.
- *
- * \param seq_number Sequence number of received ACK
- * \param data_pending Pending bit state in received ACK
- *
- * \return none
- */
-void rf_handle_ack(uint8_t seq_number, uint8_t data_pending)
-{
-    phy_link_tx_status_e phy_status;
-    arm_enter_critical();
-    /*Received ACK sequence must be equal with transmitted packet sequence*/
-    if(tx_sequence == seq_number)
-    {
-        rf_ack_wait_timer_stop();
-        /*When data pending bit in ACK frame is set, inform NET library*/
-        if(data_pending)
-            phy_status =    PHY_LINK_TX_DONE_PENDING;
-        else
-            phy_status = PHY_LINK_TX_DONE;
-        /*Call PHY TX Done API*/
-        arm_net_phy_tx_done(rf_radio_driver_id, mac_tx_handle,phy_status, 1, 1);
-    }
-    arm_exit_critical();
-}
-
-/*
- * \brief Function is a call back for RX end interrupt.
- *
- * \param none
- *
- * \return none
- */
-void rf_handle_rx_end(void)
-{
-    uint8_t rf_lqi;
-
-    /*Frame received interrupt*/
-    if(rf_flags_check(RFF_RX))
-    {
-        /*Check CRC_valid bit*/
-        if(rf_if_check_crc())
-        {
-            uint8_t *rf_rx_ptr;
-            uint8_t receiving_ack = 0;
-            /*Read length*/
-            uint8_t len = rf_if_read_received_frame_length();
-            /*Not ACK frame*/
-            if(len > 5)
-            {
-                rf_rx_ptr = rf_buffer;
-            }
-            /*ACK received*/
-            else
-            {
-                /*Read ACK in static ACK buffer*/
-                receiving_ack = 1;
-                rf_rx_ptr = ack_rx_buf;
-            }
-            /*Check the length is valid*/
-            if(len > 1 && len < RF_BUFFER_SIZE)
-            {
-                /*Read received packet*/
-                rf_if_read_packet(rf_rx_ptr, len);
-                /*Get LQI*/
-                rf_lqi = rf_if_read_lqi();
-                /*Handle received ACK*/
-                if(receiving_ack && ((ack_rx_buf[0] & 0x07) == 0x02))
-                {
-                    uint8_t pending = 0;
-                    /*Check if data is pending*/
-                    if ((ack_rx_buf[0] & 0x10))
-                    {
-                        pending=1;
-                    }
-                    /*Send sequence number in ACK handler*/
-                    rf_handle_ack(ack_rx_buf[2], pending);
-                }
-                /*Handle received data*/
-                else if(rf_if_read_trx_state() != RX_ON && rf_if_read_trx_state() != BUSY_RX)
-                {
-                    arm_net_phy_rx(rf_buffer,len - 2, rf_lqi, rf_radio_driver_id);
-                }
-            }
-        }
-    }
-    /*Start receiver*/
-    rf_flags_clear(RFF_RX);
-    rf_receive();
-}
-
-/*
- * \brief Function is called when MAC is shutting down the radio.
- *
- * \param none
- *
- * \return none
- */
-void rf_shutdown(void)
-{
-    /*Call RF OFF*/
-    rf_off();
-    /*Clear RF flags*/
-    rf_flags_reset();
-}
-
-/*
- * \brief Function is a call back for TX end interrupt.
- *
- * \param none
- *
- * \return none
- */
-void rf_handle_tx_end(void)
-{
-    phy_link_tx_status_e phy_status = PHY_LINK_TX_SUCCESS;
-
-    rf_rx_mode = 0;
-    /*If ACK is needed for this transmission*/
-    if(need_ack && rf_flags_check(RFF_TX))
-    {
-        rf_ack_wait_timer_start(rf_ack_wait_duration);
-        rf_rx_mode = 1;
-    }
-    rf_flags_clear(RFF_RX);
-    /*Start receiver*/
-    rf_receive();
-
-    /*Call PHY TX Done API*/
-    arm_net_phy_tx_done(rf_radio_driver_id, mac_tx_handle, phy_status, 1, 1);
-}
-
-/*
- * \brief Function is a call back for CCA ED done interrupt.
- *
- * \param none
- *
- * \return none
- */
-void rf_handle_cca_ed_done(void)
-{
-    rf_flags_clear(RFF_CCA);
-    /*Check the result of CCA process*/
-    if(rf_if_check_cca())
-    {
-        rf_start_tx();
-    }
-    else
-    {
-        /*Send CCA fail notification*/
-        arm_net_phy_tx_done(rf_radio_driver_id, mac_tx_handle, PHY_LINK_CCA_FAIL, 1, 1);
-    }
-}
-
-/*
- * \brief Function sets the TX power variable.
- *
- * \param power TX power setting
- *
- * \return 0 Success
- * \return -1 Fail
- */
-int8_t rf_tx_power_set(uint8_t power)
-{
-    int8_t ret_val = -1;
-    if(power < 16)
-    {
-        radio_tx_power = power;
-        ret_val = 0;
-    }
-    return ret_val;
-}
-
-/*
- * \brief Function returns the TX power variable.
- *
- * \param none
- *
- * \return radio_tx_power TX power variable
- */
-uint8_t rf_tx_power_get(void)
-{
-  return radio_tx_power;
-}
-
-/*
- * \brief Function sets the RF RPC variable.
- *
- * \param rpc_value RPC setting
- *
- * \return 0 Success
- */
-int8_t rf_rpc_set(uint8_t rpc_value)
-{
-    int8_t ret_val = -1;
-    radio_rpc_value = rpc_value;
-    ret_val = 0;
-    return ret_val;
-}
-
-/*
- * \brief Function enables the usage of Front end.
- *
- * \param none
- *
- * \return 0 Success
- */
-int8_t rf_enable_pa(void)
-{
-    int8_t ret_val = 0;
-    rf_use_front_end = 1;
-    return ret_val;
-}
-
-/*
- * \brief Function enables the usage of Antenna diversity.
- *
- * \param none
- *
- * \return 0 Success
- */
-int8_t rf_enable_antenna_diversity(void)
-{
-    int8_t ret_val = 0;
-    rf_use_antenna_diversity = 1;
-    return ret_val;
-}
-
-/*
- * \brief Function defines the CSD pin of the Front end.
- *
- * \param port CSD port
- * \param port CSD pin
- *
- * \return 0 Success
- */
-int8_t rf_set_csd_pin(uint8_t port, uint8_t pin)
-{
-    int8_t ret_val = -1;
-
-    rf_csd_port = port;
-    rf_csd_pin = pin;
-    ret_val = 0;
-
-    return ret_val;
-}
-
-/*
- * \brief Function defines the CPS pin of the Front end.
- *
- * \param port CPS port
- * \param port CPS pin
- *
- * \return 0 Success
- */
-int8_t rf_set_cps_pin(uint8_t port, uint8_t pin)
-{
-    int8_t ret_val = -1;
-
-    rf_cps_port = port;
-    rf_cps_pin = pin;
-    ret_val = 0;
-
-    return ret_val;
-}
-
-/*
- * \brief Function gives the control of RF states to MAC.
- *
- * \param new_state RF state
- * \param rf_channel RF channel
- *
- * \return 0 Success
- */
-static int8_t rf_interface_state_control(phy_interface_state_e new_state, uint8_t rf_channel)
-{
-    int8_t ret_val = 0;
-    switch (new_state)
-    {
-        /*Reset PHY driver and set to idle*/
-        case PHY_INTERFACE_RESET:
-            break;
-        /*Disable PHY Interface driver*/
-        case PHY_INTERFACE_DOWN:
-            rf_shutdown();
-            break;
-        /*Enable PHY Interface driver*/
-        case PHY_INTERFACE_UP:
-            rf_channel_set(rf_channel);
-            rf_receive();
-            break;
-        /*Enable wireless interface ED scan mode*/
-        case PHY_INTERFACE_RX_ENERGY_STATE:
-            break;
-    }
-    return ret_val;
-}
-
-/*
- * \brief Function controls the ACK pending, channel setting and energy detection.
- *
- * \param extension_type Type of control
- * \param data_ptr Data from NET library
- *
- * \return 0 Success
- */
-static int8_t rf_extension(phy_extension_type_e extension_type, uint8_t *data_ptr)
-{
-    switch (extension_type)
-    {
-        /*Control MAC pending bit for Indirect data transmission*/
-        case PHY_EXTENSION_CTRL_PENDING_BIT:
-            if(*data_ptr)
-            {
-                rf_if_ack_pending_ctrl(1);
-            }
-            else
-            {
-                rf_if_ack_pending_ctrl(0);
-            }
-            break;
-        /*Return frame pending status*/
-        case PHY_EXTENSION_READ_LAST_ACK_PENDING_STATUS:
-            *data_ptr = rf_if_last_acked_pending();
-            break;
-        /*Set channel*/
-        case PHY_EXTENSION_SET_CHANNEL:
-            break;
-        /*Read energy on the channel*/
-        case PHY_EXTENSION_READ_CHANNEL_ENERGY:
-            break;
-        /*Read status of the link*/
-        case PHY_EXTENSION_READ_LINK_STATUS:
-            break;
-    }
-    return 0;
-}
-
-/*
- * \brief Function sets the addresses to RF address filters.
- *
- * \param address_type Type of address
- * \param address_ptr Pointer to given address
- *
- * \return 0 Success
- */
-static int8_t rf_address_write(phy_address_type_e address_type, uint8_t *address_ptr)
-{
-    int8_t ret_val = 0;
-    switch (address_type)
-    {
-        /*Set 48-bit address*/
-        case PHY_MAC_48BIT:
-            break;
-            /*Set 64-bit address*/
-        case PHY_MAC_64BIT:
-            rf_set_address(address_ptr);
-            break;
-        /*Set 16-bit address*/
-        case PHY_MAC_16BIT:
-            rf_set_short_adr(address_ptr);
-            break;
-        /*Set PAN Id*/
-        case PHY_MAC_PANID:
-            rf_set_pan_id(address_ptr);
-            break;
-    }
-    return ret_val;
-}
-
-/*
- * \brief Function initialises the ACK wait time and returns the used PHY mode.
- *
- * \param none
- *
- * \return tmp Used PHY mode
- */
-uint8_t rf_init_phy_mode(void)
-{
-    uint8_t tmp;
-    /*Read used PHY Mode*/
-    tmp = rf_if_read_register(TRX_CTRL_2);
-    /*Set ACK wait time for used data rate*/
-    if((tmp & 0x1f) == 0x00)
-    {
-        rf_ack_wait_duration = 938;
-        tmp = BPSK_20;
-    }
-    else if((tmp & 0x1f) == 0x04)
-    {
-        rf_ack_wait_duration = 469;
-        tmp = BPSK_40;
-    }
-    else if((tmp & 0x1f) == 0x14)
-    {
-        rf_ack_wait_duration = 469;
-        tmp = BPSK_40_ALT;
-    }
-    else if((tmp & 0x1f) == 0x08)
-    {
-        rf_ack_wait_duration = 100;
-        tmp = OQPSK_SIN_RC_100;
-    }
-    else if((tmp & 0x1f) == 0x09)
-    {
-        rf_ack_wait_duration = 50;
-        tmp = OQPSK_SIN_RC_200;
-    }
-    else if((tmp & 0x1f) == 0x18)
-    {
-        rf_ack_wait_duration = 100;
-        tmp = OQPSK_RC_100;
-    }
-    else if((tmp & 0x1f) == 0x19)
-    {
-        rf_ack_wait_duration = 50;
-        tmp = OQPSK_RC_200;
-    }
-    else if((tmp & 0x1f) == 0x0c)
-    {
-        rf_ack_wait_duration = 50;
-        tmp = OQPSK_SIN_250;
-    }
-    else if((tmp & 0x1f) == 0x0d)
-    {
-        rf_ack_wait_duration = 25;
-        tmp = OQPSK_SIN_500;
-    }
-    else if((tmp & 0x1f) == 0x0f)
-    {
-        rf_ack_wait_duration = 25;
-        tmp = OQPSK_SIN_500_ALT;
-    }
-    else if((tmp & 0x1f) == 0x1c)
-    {
-        rf_ack_wait_duration = 50;
-        tmp = OQPSK_RC_250;
-    }
-    else if((tmp & 0x1f) == 0x1d)
-    {
-        rf_ack_wait_duration = 25;
-        tmp = OQPSK_RC_500;
-    }
-    else if((tmp & 0x1f) == 0x1f)
-    {
-        rf_ack_wait_duration = 25;
-        tmp = OQPSK_RC_500_ALT;
-    }
-    else if((tmp & 0x3f) == 0x2A)
-    {
-        rf_ack_wait_duration = 25;
-        tmp = OQPSK_SIN_RC_400_SCR_ON;
-    }
-    else if((tmp & 0x3f) == 0x0A)
-    {
-        rf_ack_wait_duration = 25;
-        tmp = OQPSK_SIN_RC_400_SCR_OFF;
-    }
-    else if((tmp & 0x3f) == 0x3A)
-    {
-        rf_ack_wait_duration = 25;
-        tmp = OQPSK_RC_400_SCR_ON;
-    }
-    else if((tmp & 0x3f) == 0x1A)
-    {
-        rf_ack_wait_duration = 25;
-        tmp = OQPSK_RC_400_SCR_OFF;
-    }
-    else if((tmp & 0x3f) == 0x2E)
-    {
-        rf_ack_wait_duration = 13;
-        tmp = OQPSK_SIN_1000_SCR_ON;
-    }
-    else if((tmp & 0x3f) == 0x0E)
-    {
-        rf_ack_wait_duration = 13;
-        tmp = OQPSK_SIN_1000_SCR_OFF;
-    }
-    else if((tmp & 0x3f) == 0x3E)
-    {
-        rf_ack_wait_duration = 13;
-        tmp = OQPSK_RC_1000_SCR_ON;
-    }
-    else if((tmp & 0x3f) == 0x1E)
-    {
-        rf_ack_wait_duration = 13;
-        tmp = OQPSK_RC_1000_SCR_OFF;
-    }
-    return tmp;
-}
-
--- a/RF_Drivers_Atmel/driverRFPhy.h	Sun Mar 15 00:56:28 2015 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * driverRFPhy.h
- *
- *  Created on: 14 July 2014
- *      Author: mBed Team
- */
-
-#ifndef DRIVERRFPHY_H_
-#define DRIVERRFPHY_H_
-
-#include "arm_hal_phy.h"    
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*Run calibration every 5 minutes*/
-#define RF_CALIBRATION_INTERVAL 6000000
-/*Wait ACK for 2.5ms*/
-#define RF_ACK_WAIT_TIMEOUT 50
-
-#define RF_BUFFER_SIZE 128
-#define RF_DEFAULT_CHANNEL  11
-
-/*Radio RX and TX state definitions*/
-#define RFF_ON 0x01
-#define RFF_RX 0x02
-#define RFF_TX 0x04
-#define RFF_CCA 0x08
-
-/*Atmel RF states*/
-typedef enum
-{
-    NOP = 0x00,
-    BUSY_RX = 0x01,
-    RF_TX_START = 0x02,
-    FORCE_TRX_OFF = 0x03,
-    FORCE_PLL_ON = 0x04,
-    RX_ON = 0x06,
-    TRX_OFF = 0x08,
-    PLL_ON = 0x09,
-    BUSY_RX_AACK = 0x11,
-    SLEEP = 0x0F,
-    RX_AACK_ON = 0x16,
-    TX_ARET_ON = 0x19
-}rf_trx_states_t;
-
-extern void rf_ack_wait_timer_start(uint16_t slots);
-extern void rf_ack_wait_timer_stop(void);
-extern void rf_handle_cca_ed_done(void);
-extern void rf_handle_tx_end(void);
-extern void rf_handle_rx_end(void);
-extern void rf_on(void);
-extern void rf_receive(void);
-extern void rf_poll_trx_state_change(rf_trx_states_t trx_state);
-extern void rf_init(void);
-extern void rf_set_mac_address(const uint8_t *ptr);
-extern int8_t rf_device_register(void);
-extern int8_t rf_start_cca(uint8_t *data_ptr, uint16_t data_length, uint8_t tx_handle);
-extern void rf_cca_abort(void);
-extern void rf_read_mac_address(uint8_t *ptr);
-extern int8_t rf_read_random(void);
-extern void rf_calibration_cb(void);
-extern uint8_t rf_init_phy_mode(void);
-extern void rf_ack_wait_timer_interrupt(void);
-extern void rf_calibration_timer_interrupt(void);
-extern void rf_calibration_timer_start(uint32_t slots);
-extern void rf_front_end_rx_lna(void);
-extern void rf_front_end_sleep(void);
-static int8_t rf_interface_state_control(phy_interface_state_e new_state, uint8_t rf_channel);
-static int8_t rf_extension(phy_extension_type_e extension_type,uint8_t *data_ptr);
-static int8_t rf_address_write(phy_address_type_e address_type,uint8_t *address_ptr);
-
- #ifdef __cplusplus
-}
-#endif
-#endif /* DRIVERRFPHY_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RF_Drivers_Atmel/driverRFPhy_c.txt	Sun Mar 15 06:08:30 2015 +0000
@@ -0,0 +1,1237 @@
+/*
+ * driverRFPhy.c
+ *
+ *  Created on: 14 July 2014
+ *      Author: mBed team
+ */
+#include "arm_hal_interrupt.h"
+#include "arm_hal_phy.h"
+#include "driverRFPhy.h"
+#include "driverAtmelRFInterface.h"
+#include <string.h>
+
+#include <stdio.h>
+
+#include "options.h"
+
+/*RF receive buffer*/
+static uint8_t rf_buffer[RF_BUFFER_SIZE];
+/*RF ACK receive buffer*/
+static uint8_t ack_rx_buf[5];
+/*ACK wait duration changes depending on data rate*/
+static uint16_t rf_ack_wait_duration = RF_ACK_WAIT_TIMEOUT;
+
+static uint8_t radio_tx_power = 0x07;
+static uint8_t rf_channel;
+static uint8_t rf_tuned = 1;
+static uint8_t radio_rpc_value = 0xef;
+static uint8_t rf_use_front_end = 0;
+static uint8_t rf_use_antenna_diversity = 0;
+static uint8_t rf_csd_port = 0;
+static uint8_t rf_csd_pin = 0;
+static uint8_t rf_cps_port = 0;
+static uint8_t rf_cps_pin = 0;
+static uint8_t tx_sequence = 0xff;
+static uint8_t need_ack = 0;
+static uint8_t rf_rx_mode = 0;
+static uint8_t rf_flags = 0;
+static uint8_t rf_rnd_rssi = 0;
+static int8_t rf_radio_driver_id = -1;
+static phy_device_driver_s device_driver;
+static uint8_t atmel_MAC[8];
+static phy_device_channel_info_s channel_info;
+static uint8_t mac_tx_handle = 0;
+
+/*
+ * \brief Function sets given RF flag on.
+ *
+ * \param x Given RF flag
+ *
+ * \return none
+ */
+void rf_flags_set(uint8_t x)
+{
+    rf_flags |= x;
+}
+
+/*
+ * \brief Function clears given RF flag on.
+ *
+ * \param x Given RF flag
+ *
+ * \return none
+ */
+void rf_flags_clear(uint8_t x)
+{
+    rf_flags &= ~x;
+}
+
+/*
+ * \brief Function checks if given RF flag is on.
+ *
+ * \param x Given RF flag
+ *
+ * \return states of the given flags
+ */
+uint8_t rf_flags_check(uint8_t x)
+{
+    return (rf_flags & x);
+}
+
+/*
+ * \brief Function clears all RF flags.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_flags_reset(void)
+{
+    rf_flags = 0;
+}
+
+/*
+ * \brief Function sets CPS and CSD pins of the Front end.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_front_end_rx_lna(void)
+{
+        /* not supported in this version  */
+}
+
+/*
+ * \brief Function clears CPS and CSD pins of the Front end.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_front_end_sleep(void)
+{
+        /* not supported in this version  */
+}
+
+/*
+ * \brief Function initialises and registers the RF driver.
+ *
+ * \param none
+ *
+ * \return rf_radio_driver_id Driver ID given by NET library
+ */
+int8_t rf_device_register(void)
+{
+    rf_init();
+    /*Set pointer to MAC address*/
+    device_driver.PHY_MAC = atmel_MAC;
+    device_driver.driver_description = "ATMEL_MAC";
+#if PHY_LINK_15_4_2_4GHZ_TYPE
+      /*Number of channels in PHY*/
+        channel_info.channel_count = 16;
+        /*Channel mask 26-11*/
+        channel_info.channel_mask = 0x07FFF800;
+        /*Type of RF PHY is SubGHz*/
+        device_driver.link_type = PHY_LINK_15_4_2_4GHZ_TYPE;
+        device_driver.link_channel_info = &channel_info;
+#else
+        /*Number of channels in PHY*/
+    channel_info.channel_count = 11;
+    /*Channel mask 0-10*/
+    channel_info.channel_mask = 0x000007ff;
+    /*Type of RF PHY is SubGHz*/
+    device_driver.link_type = PHY_LINK_15_4_SUBGHZ_TYPE;
+    device_driver.link_channel_info = &channel_info;
+#endif
+   /*Maximum size of payload is 127*/
+    device_driver.phy_MTU = 127;
+    /*No header in PHY*/
+    device_driver.phy_header_length = 0;
+    /*No tail in PHY*/
+    device_driver.phy_tail_length = 0;
+    /*Set address write function*/
+    device_driver.phy_xx_address_write = &rf_address_write;
+    /*Set RF extension function*/
+    device_driver.phy_xx_extension = &rf_extension;
+    /*Set RF state control function*/
+    device_driver.phy_xx_state_control = &rf_interface_state_control;
+    /*Set transmit function*/
+    device_driver.phy_xx_tx = &rf_start_cca;
+    printf("RF Device Registration...");
+    /*Register device driver*/
+    rf_radio_driver_id = arm_net_phy_register(&device_driver);
+    printf("OK\r\n");   
+    return rf_radio_driver_id;
+}
+
+/*
+ * \brief Function returns the generated 8-bit random value for seeding Pseudo-random generator. This value was generated by reading noise from RF channel in RF initialisation.
+ *
+ * \param none
+ *
+ * \return random RSSI value
+ */
+int8_t rf_read_random(void)
+{
+    return rf_rnd_rssi;
+}
+
+/*
+ * \brief Function is a call back for ACK wait timeout.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_ack_wait_timer_interrupt(void)
+{
+    arm_enter_critical();
+    /*Force PLL state*/
+    rf_if_change_trx_state(FORCE_PLL_ON);
+    rf_poll_trx_state_change(PLL_ON);
+    /*Start receiver in RX_AACK_ON state*/
+    rf_rx_mode = 0;
+    rf_flags_clear(RFF_RX);
+    rf_receive();
+    arm_exit_critical();
+}
+
+/*
+ * \brief Function is a call back for calibration interval timer.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_calibration_timer_interrupt(void)
+{
+    /*Calibrate RF*/
+    rf_calibration_cb();
+    /*Start new calibration timeout*/
+    rf_calibration_timer_start(RF_CALIBRATION_INTERVAL);
+}
+
+/*
+ * \brief Function initialises the RF timer for ACK wait and calibration.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_timer_init(void)
+{
+    rf_if_timer_init();
+}
+
+/*
+ * \brief Function starts the ACK wait timeout.
+ *
+ * \param slots Given slots, resolution 50us
+ *
+ * \return none
+ */
+void rf_ack_wait_timer_start(uint16_t slots)
+{
+    rf_if_ack_wait_timer_start(slots);
+}
+
+/*
+ * \brief Function starts the calibration interval.
+ *
+ * \param slots Given slots, resolution 50us
+ *
+ * \return none
+ */
+void rf_calibration_timer_start(uint32_t slots)
+{
+    rf_if_calibration_timer_start(slots);
+}
+
+/*
+ * \brief Function stops the ACK wait timeout.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_ack_wait_timer_stop(void)
+{
+    rf_if_ack_wait_timer_stop();
+}
+
+/*
+ * \brief Function reads the MAC address array.
+ *
+ * \param ptr Pointer to read array
+ *
+ * \return none
+ */
+void rf_read_mac_address(uint8_t *ptr)
+{
+    memcpy(ptr, atmel_MAC, 8);
+}
+
+/*
+ * \brief Function sets the MAC address array.
+ *
+ * \param ptr Pointer to given MAC address array
+ *
+ * \return none
+ */
+void rf_set_mac_address(const uint8_t *ptr)
+{
+    memcpy(atmel_MAC,ptr,8);
+}
+
+/*
+ * \brief Function writes various RF settings in startup.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_write_settings(void)
+{
+    int i, j = 0;
+    
+    arm_enter_critical();
+  
+  //printf("RF Write Settings: 1\r\n"); 
+    rf_if_write_rf_settings();
+ 
+  //printf("RF Write Settings: 2\r\n");
+    /*Set output power*/
+    rf_if_write_set_tx_power_register(radio_tx_power);
+ 
+  //printf("RF Write Settings: 3\r\n");
+    /*Set RPC register*/
+    rf_if_write_set_trx_rpc_register(radio_rpc_value);
+ 
+  //printf("RF Write Settings: 4\r\n");
+    /*Initialise Front end*/
+    if(rf_use_front_end)
+    {
+        printf("RF Front End used\r\n");
+        rf_if_enable_pa_ext();
+                /*  not supported in this version  */    
+    }
+  
+  //printf("RF Write Settings: 5\r\n");  
+    /*Initialise Antenna Diversity*/
+    if(rf_use_antenna_diversity) {
+        printf("RF Antenna diversity\r\n");
+        rf_if_write_antenna_diversity_settings();
+    }    
+  
+  printf("RF Write Settings: 7\r\n");
+    arm_exit_critical();
+   printf("RF Write Settings End\r\n");
+}
+
+/*
+ * \brief Function writes 16-bit address in RF address filter.
+ *
+ * \param short_address Given short address
+ *
+ * \return none
+ */
+void rf_set_short_adr(uint8_t * short_address)
+{
+    uint8_t rf_off_flag = 0;
+    arm_enter_critical();
+    /*Wake up RF if sleeping*/
+    if(rf_if_read_trx_state() == 0x00 || rf_if_read_trx_state() == 0x1F)
+    {
+        rf_if_disable_slptr();
+        rf_off_flag = 1;
+        rf_poll_trx_state_change(TRX_OFF);
+    }
+    /*Write address filter registers*/
+    rf_if_write_short_addr_registers(short_address);
+    /*RF back to sleep*/
+    if(rf_off_flag)
+        rf_if_enable_slptr();
+    arm_exit_critical();
+}
+
+/*
+ * \brief Function writes PAN Id in RF PAN Id filter.
+ *
+ * \param pan_id Given PAN Id
+ *
+ * \return none
+ */
+void rf_set_pan_id(uint8_t *pan_id)
+{
+    uint8_t rf_off_flag = 0;
+
+    arm_enter_critical();
+    /*Wake up RF if sleeping*/
+    if(rf_if_read_trx_state() == 0x00 || rf_if_read_trx_state() == 0x1F)
+    {
+        rf_if_disable_slptr();
+        rf_off_flag = 1;
+        rf_poll_trx_state_change(TRX_OFF);
+    }
+    /*Write address filter registers*/
+    rf_if_write_pan_id_registers(pan_id);
+    /*RF back to sleep*/
+    if(rf_off_flag)
+        rf_if_enable_slptr();
+    arm_exit_critical();
+}
+
+/*
+ * \brief Function writes 64-bit address in RF address filter.
+ *
+ * \param address Given 64-bit address
+ *
+ * \return none
+ */
+void rf_set_address(uint8_t *address)
+{
+    uint8_t rf_off_flag = 0;
+
+    arm_enter_critical();
+    /*Wake up RF if sleeping*/
+    if(rf_if_read_trx_state() == 0x00 || rf_if_read_trx_state() == 0x1F)
+    {
+        rf_if_disable_slptr();
+        rf_off_flag = 1;
+        rf_poll_trx_state_change(TRX_OFF);
+    }
+    /*Write address filter registers*/
+    rf_if_write_ieee_addr_registers(address);
+    /*RF back to sleep*/
+    if(rf_off_flag)
+        rf_if_enable_slptr();
+
+    arm_exit_critical();
+}
+
+/*
+ * \brief Function sets the RF channel.
+ *
+ * \param ch New channel
+ *
+ * \return none
+ */
+void rf_channel_set(uint8_t ch)
+{
+    arm_enter_critical();
+    rf_channel = ch;
+    if(ch < 0x1f)
+        rf_if_set_channel_register(ch);
+    arm_exit_critical();
+}
+
+
+/*
+ * \brief Function initialises the radio driver and resets the radio.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_init(void)
+{
+   printf("RF Init Start\r\n");
+    /*Initialise timers*/
+    rf_timer_init();                //TODO
+    rf_channel = RF_DEFAULT_CHANNEL;
+   printf("RF Reset\r\n");  
+    /*Reset RF module*/
+    rf_if_reset_radio();
+   printf("RF Write Settings\r\n"); 
+    /*Write RF settings*/
+    rf_write_settings();
+   printf("RF Init PHY Mode\r\n"); 
+    /*Initialise PHY mode*/
+    rf_init_phy_mode();
+    /*Clear RF flags*/
+    rf_flags_reset();
+    /*Set RF in TRX OFF state*/
+    rf_if_change_trx_state(TRX_OFF);
+    /*Set RF in PLL_ON state*/
+    rf_if_change_trx_state(PLL_ON);
+    /*Start receiver*/
+    rf_receive();
+    /*Read random variable. This will be used when seeding pseudo-random generator*/
+    rf_rnd_rssi = rf_if_read_rnd();
+    /*Start RF calibration timer*/
+    rf_calibration_timer_start(RF_CALIBRATION_INTERVAL);  //ACA!
+        printf("RF Init End\r\n");
+}
+
+/**
+ * \brief Function gets called when MAC is setting radio off.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_off(void)
+{
+    if(rf_flags_check(RFF_ON))
+    {
+        rf_cca_abort();
+        uint16_t while_counter = 0;
+        /*Wait while receiving*/
+        while(rf_if_read_trx_state() == BUSY_RX_AACK || rf_if_read_trx_state() == BUSY_RX)
+        {
+            while_counter++;
+            if(while_counter == 0xffff)
+                break;
+        }
+        /*RF state change: RX_AACK_ON->PLL_ON->TRX_OFF->SLEEP*/
+        if(rf_if_read_trx_state() == RX_AACK_ON)
+        {
+            rf_if_change_trx_state(PLL_ON);
+        }
+        rf_if_change_trx_state(TRX_OFF);
+        rf_if_enable_slptr();
+        rf_flags_clear(~RFF_ON);
+        /*Front end in sleep*/
+        if(rf_use_front_end)
+        {
+            rf_if_disable_pa_ext();
+            rf_front_end_sleep();
+        }
+        /*Disable Antenna Diversity*/
+        if(rf_use_antenna_diversity)
+            rf_if_disable_ant_div();
+    }
+}
+
+/*
+ * \brief Function polls the RF state until it has changed to desired state.
+ *
+ * \param trx_state RF state
+ *
+ * \return none
+ */
+void rf_poll_trx_state_change(rf_trx_states_t trx_state)
+{
+    uint16_t while_counter = 0;
+    arm_enter_critical();
+
+    if(trx_state != RF_TX_START)
+    {
+        if(trx_state == FORCE_PLL_ON)
+            trx_state = PLL_ON;
+        else if(trx_state == FORCE_TRX_OFF)
+            trx_state = TRX_OFF;
+
+        while(rf_if_read_trx_state() != trx_state)
+        {
+            while_counter++;
+            if(while_counter == 0x1ff)
+                break;
+        }
+    }
+    arm_exit_critical();
+}
+
+/*
+ * \brief Function starts the CCA process before starting data transmission and copies the data to RF TX FIFO.
+ *
+ * \param data_ptr Pointer to TX data
+ * \param data_length Length of the TX data
+ * \param tx_handle Handle to transmission
+ * \return 0 Success
+ * \return -1 Busy
+ */
+int8_t rf_start_cca(uint8_t *data_ptr, uint16_t data_length, uint8_t tx_handle)
+{
+    /*Check if transmitter is busy*/
+    if((rf_if_read_trx_state() == BUSY_RX_AACK) || (rf_if_read_trx_state() == BUSY_RX))
+    {
+        /*Return busy*/
+        return -1;
+    }
+    else
+    {
+        arm_enter_critical();
+        /*Check if transmitted data needs to be acked*/
+        if(*data_ptr & 0x20)
+            need_ack = 1;
+        else
+            need_ack = 0;
+        /*Store the sequence number for ACK handling*/
+        tx_sequence = *(data_ptr + 2);
+        /*Set radio in RX state to read channel*/
+        rf_receive();
+        /*Write TX FIFO*/
+        rf_if_write_frame_buffer(data_ptr, (uint8_t)data_length);
+        rf_flags_set(RFF_CCA);
+        /*Start CCA process*/
+        rf_if_enable_cca_ed_done_interrupt();
+        rf_if_start_cca_process();
+        /*Store TX handle*/
+        mac_tx_handle = tx_handle;
+        arm_exit_critical();
+    }
+
+    /*Return success*/
+    return 0;
+}
+
+/*
+ * \brief Function aborts CCA process.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_cca_abort(void)
+{
+    /*Clear RFF_CCA RF flag*/
+    rf_flags_clear(RFF_CCA);
+}
+
+
+
+/*
+ * \brief Function starts the transmission of the frame.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_start_tx(void)
+{
+    /*Only start transmitting from RX state*/
+    uint8_t trx_state = rf_if_read_trx_state();
+    if((trx_state != RX_AACK_ON) && (trx_state != RX_ON))
+    {
+        arm_net_phy_tx_done(rf_radio_driver_id, mac_tx_handle, PHY_LINK_CCA_FAIL, 1, 1);
+    }
+    else
+    {
+        /*RF state change: ->PLL_ON->RF_TX_START*/
+        rf_if_change_trx_state(FORCE_PLL_ON);
+        rf_flags_clear(RFF_RX);
+        rf_if_enable_tx_end_interrupt();
+        rf_flags_set(RFF_TX);
+        rf_if_change_trx_state(RF_TX_START);
+    }
+}
+
+/*
+ * \brief Function sets the RF in RX state.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_receive(void)
+{
+    uint16_t while_counter = 0;
+    if(rf_flags_check(RFF_ON) == 0)
+    {
+        rf_on();
+    }
+    /*If not yet in RX state set it*/
+    if(rf_flags_check(RFF_RX) == 0)
+    {
+        arm_enter_critical();
+        /*Wait while receiving data*/
+        while((rf_if_read_trx_state() == BUSY_RX) || (rf_if_read_trx_state() == BUSY_RX_AACK))
+        {
+            while_counter++;
+            if(while_counter == 0xffff)
+            {
+                break;
+            }
+        }
+        /*Wake up from sleep state*/
+        if(rf_if_read_trx_state() == 0x00 || rf_if_read_trx_state() == 0x1f)
+        {
+            rf_if_disable_slptr();
+            rf_poll_trx_state_change(TRX_OFF);
+        }
+
+        rf_if_change_trx_state(PLL_ON);
+        /*ACK is always received in RX_ON state to bypass address filters*/
+        if(rf_rx_mode)
+        {
+            rf_rx_mode = 0;
+            rf_if_change_trx_state(RX_ON);
+        }
+        else
+        {
+            rf_if_change_trx_state(RX_AACK_ON);
+            /*If calibration timer was unable to calibrate the RF, run calibration now*/
+            if(!rf_tuned)
+            {
+                /*Start calibration. This can be done in states TRX_OFF, PLL_ON or in any receive state*/
+                rf_if_calibration();
+                /*RF is tuned now*/
+                rf_tuned = 1;
+            }
+        }
+        rf_channel_set(rf_channel);
+        rf_flags_set(RFF_RX);
+        rf_if_enable_rx_end_interrupt();
+        /*Enable LNA if Front end used*/
+        if(rf_use_front_end)
+            rf_front_end_rx_lna();
+        arm_exit_critical();
+    }
+    /*Stop the running CCA process*/
+    if(rf_flags_check(RFF_CCA))
+        rf_cca_abort();
+}
+
+/*
+ * \brief Function calibrates the radio.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_calibration_cb(void)
+{
+    /*clear tuned flag to start tuning in rf_receive*/
+    rf_tuned = 0;
+    /*If RF is in default receive state, start calibration*/
+    if(rf_if_read_trx_state() == RX_AACK_ON)
+    {
+        arm_enter_critical();
+        /*Set RF in PLL_ON state*/
+        rf_if_change_trx_state(PLL_ON);
+        /*Set RF in TRX_OFF state to start PLL tuning*/
+        rf_if_change_trx_state(TRX_OFF);
+        /*Set RF in RX_ON state to calibrate*/
+        rf_if_change_trx_state(RX_ON);
+        /*Calibrate FTN*/
+        rf_if_calibration();
+        /*RF is tuned now*/
+        rf_tuned = 1;
+        /*Back to default receive state*/
+        rf_flags_clear(RFF_RX);
+        rf_receive();
+        arm_exit_critical();
+    }
+}
+
+/*
+ * \brief Function sets RF_ON flag when radio is powered.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_on(void)
+{
+    /*Set RFF_ON flag*/
+    if(rf_flags_check(RFF_ON) == 0)
+    {
+        rf_flags_set(RFF_ON);
+        /*Wake up Front end*/
+        if(rf_use_front_end)
+        {
+            /*Set PA_EXT_EN to enable controlling of external front end*/
+            rf_if_enable_pa_ext();
+            rf_front_end_rx_lna();
+        }
+        /*Enable Antenna diversity*/
+        if(rf_use_antenna_diversity)
+            /*Set ANT_EXT_SW_EN to enable controlling of antenna diversity*/
+            rf_if_enable_ant_div();
+    }
+}
+
+/*
+ * \brief Function handles the received ACK frame.
+ *
+ * \param seq_number Sequence number of received ACK
+ * \param data_pending Pending bit state in received ACK
+ *
+ * \return none
+ */
+void rf_handle_ack(uint8_t seq_number, uint8_t data_pending)
+{
+    phy_link_tx_status_e phy_status;
+    arm_enter_critical();
+    /*Received ACK sequence must be equal with transmitted packet sequence*/
+    if(tx_sequence == seq_number)
+    {
+        rf_ack_wait_timer_stop();
+        /*When data pending bit in ACK frame is set, inform NET library*/
+        if(data_pending)
+            phy_status =    PHY_LINK_TX_DONE_PENDING;
+        else
+            phy_status = PHY_LINK_TX_DONE;
+        /*Call PHY TX Done API*/
+        arm_net_phy_tx_done(rf_radio_driver_id, mac_tx_handle,phy_status, 1, 1);
+    }
+    arm_exit_critical();
+}
+
+/*
+ * \brief Function is a call back for RX end interrupt.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_handle_rx_end(void)
+{
+    uint8_t rf_lqi;
+
+    /*Frame received interrupt*/
+    if(rf_flags_check(RFF_RX))
+    {
+        /*Check CRC_valid bit*/
+        if(rf_if_check_crc())
+        {
+            uint8_t *rf_rx_ptr;
+            uint8_t receiving_ack = 0;
+            /*Read length*/
+            uint8_t len = rf_if_read_received_frame_length();
+            /*Not ACK frame*/
+            if(len > 5)
+            {
+                rf_rx_ptr = rf_buffer;
+            }
+            /*ACK received*/
+            else
+            {
+                /*Read ACK in static ACK buffer*/
+                receiving_ack = 1;
+                rf_rx_ptr = ack_rx_buf;
+            }
+            /*Check the length is valid*/
+            if(len > 1 && len < RF_BUFFER_SIZE)
+            {
+                /*Read received packet*/
+                rf_if_read_packet(rf_rx_ptr, len);
+                /*Get LQI*/
+                rf_lqi = rf_if_read_lqi();
+                /*Handle received ACK*/
+                if(receiving_ack && ((ack_rx_buf[0] & 0x07) == 0x02))
+                {
+                    uint8_t pending = 0;
+                    /*Check if data is pending*/
+                    if ((ack_rx_buf[0] & 0x10))
+                    {
+                        pending=1;
+                    }
+                    /*Send sequence number in ACK handler*/
+                    rf_handle_ack(ack_rx_buf[2], pending);
+                }
+                /*Handle received data*/
+                else if(rf_if_read_trx_state() != RX_ON && rf_if_read_trx_state() != BUSY_RX)
+                {
+                    arm_net_phy_rx(rf_buffer,len - 2, rf_lqi, rf_radio_driver_id);
+                }
+            }
+        }
+    }
+    /*Start receiver*/
+    rf_flags_clear(RFF_RX);
+    rf_receive();
+}
+
+/*
+ * \brief Function is called when MAC is shutting down the radio.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_shutdown(void)
+{
+    /*Call RF OFF*/
+    rf_off();
+    /*Clear RF flags*/
+    rf_flags_reset();
+}
+
+/*
+ * \brief Function is a call back for TX end interrupt.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_handle_tx_end(void)
+{
+    phy_link_tx_status_e phy_status = PHY_LINK_TX_SUCCESS;
+
+    rf_rx_mode = 0;
+    /*If ACK is needed for this transmission*/
+    if(need_ack && rf_flags_check(RFF_TX))
+    {
+        rf_ack_wait_timer_start(rf_ack_wait_duration);
+        rf_rx_mode = 1;
+    }
+    rf_flags_clear(RFF_RX);
+    /*Start receiver*/
+    rf_receive();
+
+    /*Call PHY TX Done API*/
+    arm_net_phy_tx_done(rf_radio_driver_id, mac_tx_handle, phy_status, 1, 1);
+}
+
+/*
+ * \brief Function is a call back for CCA ED done interrupt.
+ *
+ * \param none
+ *
+ * \return none
+ */
+void rf_handle_cca_ed_done(void)
+{
+    rf_flags_clear(RFF_CCA);
+    /*Check the result of CCA process*/
+    if(rf_if_check_cca())
+    {
+        rf_start_tx();
+    }
+    else
+    {
+        /*Send CCA fail notification*/
+        arm_net_phy_tx_done(rf_radio_driver_id, mac_tx_handle, PHY_LINK_CCA_FAIL, 1, 1);
+    }
+}
+
+/*
+ * \brief Function sets the TX power variable.
+ *
+ * \param power TX power setting
+ *
+ * \return 0 Success
+ * \return -1 Fail
+ */
+int8_t rf_tx_power_set(uint8_t power)
+{
+    int8_t ret_val = -1;
+    if(power < 16)
+    {
+        radio_tx_power = power;
+        ret_val = 0;
+    }
+    return ret_val;
+}
+
+/*
+ * \brief Function returns the TX power variable.
+ *
+ * \param none
+ *
+ * \return radio_tx_power TX power variable
+ */
+uint8_t rf_tx_power_get(void)
+{
+  return radio_tx_power;
+}
+
+/*
+ * \brief Function sets the RF RPC variable.
+ *
+ * \param rpc_value RPC setting
+ *
+ * \return 0 Success
+ */
+int8_t rf_rpc_set(uint8_t rpc_value)
+{
+    int8_t ret_val = -1;
+    radio_rpc_value = rpc_value;
+    ret_val = 0;
+    return ret_val;
+}
+
+/*
+ * \brief Function enables the usage of Front end.
+ *
+ * \param none
+ *
+ * \return 0 Success
+ */
+int8_t rf_enable_pa(void)
+{
+    int8_t ret_val = 0;
+    rf_use_front_end = 1;
+    return ret_val;
+}
+
+/*
+ * \brief Function enables the usage of Antenna diversity.
+ *
+ * \param none
+ *
+ * \return 0 Success
+ */
+int8_t rf_enable_antenna_diversity(void)
+{
+    int8_t ret_val = 0;
+    rf_use_antenna_diversity = 1;
+    return ret_val;
+}
+
+/*
+ * \brief Function defines the CSD pin of the Front end.
+ *
+ * \param port CSD port
+ * \param port CSD pin
+ *
+ * \return 0 Success
+ */
+int8_t rf_set_csd_pin(uint8_t port, uint8_t pin)
+{
+    int8_t ret_val = -1;
+
+    rf_csd_port = port;
+    rf_csd_pin = pin;
+    ret_val = 0;
+
+    return ret_val;
+}
+
+/*
+ * \brief Function defines the CPS pin of the Front end.
+ *
+ * \param port CPS port
+ * \param port CPS pin
+ *
+ * \return 0 Success
+ */
+int8_t rf_set_cps_pin(uint8_t port, uint8_t pin)
+{
+    int8_t ret_val = -1;
+
+    rf_cps_port = port;
+    rf_cps_pin = pin;
+    ret_val = 0;
+
+    return ret_val;
+}
+
+/*
+ * \brief Function gives the control of RF states to MAC.
+ *
+ * \param new_state RF state
+ * \param rf_channel RF channel
+ *
+ * \return 0 Success
+ */
+static int8_t rf_interface_state_control(phy_interface_state_e new_state, uint8_t rf_channel)
+{
+    int8_t ret_val = 0;
+    switch (new_state)
+    {
+        /*Reset PHY driver and set to idle*/
+        case PHY_INTERFACE_RESET:
+            break;
+        /*Disable PHY Interface driver*/
+        case PHY_INTERFACE_DOWN:
+            rf_shutdown();
+            break;
+        /*Enable PHY Interface driver*/
+        case PHY_INTERFACE_UP:
+            rf_channel_set(rf_channel);
+            rf_receive();
+            break;
+        /*Enable wireless interface ED scan mode*/
+        case PHY_INTERFACE_RX_ENERGY_STATE:
+            break;
+    }
+    return ret_val;
+}
+
+/*
+ * \brief Function controls the ACK pending, channel setting and energy detection.
+ *
+ * \param extension_type Type of control
+ * \param data_ptr Data from NET library
+ *
+ * \return 0 Success
+ */
+static int8_t rf_extension(phy_extension_type_e extension_type, uint8_t *data_ptr)
+{
+    switch (extension_type)
+    {
+        /*Control MAC pending bit for Indirect data transmission*/
+        case PHY_EXTENSION_CTRL_PENDING_BIT:
+            if(*data_ptr)
+            {
+                rf_if_ack_pending_ctrl(1);
+            }
+            else
+            {
+                rf_if_ack_pending_ctrl(0);
+            }
+            break;
+        /*Return frame pending status*/
+        case PHY_EXTENSION_READ_LAST_ACK_PENDING_STATUS:
+            *data_ptr = rf_if_last_acked_pending();
+            break;
+        /*Set channel*/
+        case PHY_EXTENSION_SET_CHANNEL:
+            break;
+        /*Read energy on the channel*/
+        case PHY_EXTENSION_READ_CHANNEL_ENERGY:
+            break;
+        /*Read status of the link*/
+        case PHY_EXTENSION_READ_LINK_STATUS:
+            break;
+    }
+    return 0;
+}
+
+/*
+ * \brief Function sets the addresses to RF address filters.
+ *
+ * \param address_type Type of address
+ * \param address_ptr Pointer to given address
+ *
+ * \return 0 Success
+ */
+static int8_t rf_address_write(phy_address_type_e address_type, uint8_t *address_ptr)
+{
+    int8_t ret_val = 0;
+    switch (address_type)
+    {
+        /*Set 48-bit address*/
+        case PHY_MAC_48BIT:
+            break;
+            /*Set 64-bit address*/
+        case PHY_MAC_64BIT:
+            rf_set_address(address_ptr);
+            break;
+        /*Set 16-bit address*/
+        case PHY_MAC_16BIT:
+            rf_set_short_adr(address_ptr);
+            break;
+        /*Set PAN Id*/
+        case PHY_MAC_PANID:
+            rf_set_pan_id(address_ptr);
+            break;
+    }
+    return ret_val;
+}
+
+/*
+ * \brief Function initialises the ACK wait time and returns the used PHY mode.
+ *
+ * \param none
+ *
+ * \return tmp Used PHY mode
+ */
+uint8_t rf_init_phy_mode(void)
+{
+    uint8_t tmp;
+    /*Read used PHY Mode*/
+    tmp = rf_if_read_register(TRX_CTRL_2);
+    /*Set ACK wait time for used data rate*/
+    if((tmp & 0x1f) == 0x00)
+    {
+        rf_ack_wait_duration = 938;
+        tmp = BPSK_20;
+    }
+    else if((tmp & 0x1f) == 0x04)
+    {
+        rf_ack_wait_duration = 469;
+        tmp = BPSK_40;
+    }
+    else if((tmp & 0x1f) == 0x14)
+    {
+        rf_ack_wait_duration = 469;
+        tmp = BPSK_40_ALT;
+    }
+    else if((tmp & 0x1f) == 0x08)
+    {
+        rf_ack_wait_duration = 100;
+        tmp = OQPSK_SIN_RC_100;
+    }
+    else if((tmp & 0x1f) == 0x09)
+    {
+        rf_ack_wait_duration = 50;
+        tmp = OQPSK_SIN_RC_200;
+    }
+    else if((tmp & 0x1f) == 0x18)
+    {
+        rf_ack_wait_duration = 100;
+        tmp = OQPSK_RC_100;
+    }
+    else if((tmp & 0x1f) == 0x19)
+    {
+        rf_ack_wait_duration = 50;
+        tmp = OQPSK_RC_200;
+    }
+    else if((tmp & 0x1f) == 0x0c)
+    {
+        rf_ack_wait_duration = 50;
+        tmp = OQPSK_SIN_250;
+    }
+    else if((tmp & 0x1f) == 0x0d)
+    {
+        rf_ack_wait_duration = 25;
+        tmp = OQPSK_SIN_500;
+    }
+    else if((tmp & 0x1f) == 0x0f)
+    {
+        rf_ack_wait_duration = 25;
+        tmp = OQPSK_SIN_500_ALT;
+    }
+    else if((tmp & 0x1f) == 0x1c)
+    {
+        rf_ack_wait_duration = 50;
+        tmp = OQPSK_RC_250;
+    }
+    else if((tmp & 0x1f) == 0x1d)
+    {
+        rf_ack_wait_duration = 25;
+        tmp = OQPSK_RC_500;
+    }
+    else if((tmp & 0x1f) == 0x1f)
+    {
+        rf_ack_wait_duration = 25;
+        tmp = OQPSK_RC_500_ALT;
+    }
+    else if((tmp & 0x3f) == 0x2A)
+    {
+        rf_ack_wait_duration = 25;
+        tmp = OQPSK_SIN_RC_400_SCR_ON;
+    }
+    else if((tmp & 0x3f) == 0x0A)
+    {
+        rf_ack_wait_duration = 25;
+        tmp = OQPSK_SIN_RC_400_SCR_OFF;
+    }
+    else if((tmp & 0x3f) == 0x3A)
+    {
+        rf_ack_wait_duration = 25;
+        tmp = OQPSK_RC_400_SCR_ON;
+    }
+    else if((tmp & 0x3f) == 0x1A)
+    {
+        rf_ack_wait_duration = 25;
+        tmp = OQPSK_RC_400_SCR_OFF;
+    }
+    else if((tmp & 0x3f) == 0x2E)
+    {
+        rf_ack_wait_duration = 13;
+        tmp = OQPSK_SIN_1000_SCR_ON;
+    }
+    else if((tmp & 0x3f) == 0x0E)
+    {
+        rf_ack_wait_duration = 13;
+        tmp = OQPSK_SIN_1000_SCR_OFF;
+    }
+    else if((tmp & 0x3f) == 0x3E)
+    {
+        rf_ack_wait_duration = 13;
+        tmp = OQPSK_RC_1000_SCR_ON;
+    }
+    else if((tmp & 0x3f) == 0x1E)
+    {
+        rf_ack_wait_duration = 13;
+        tmp = OQPSK_RC_1000_SCR_OFF;
+    }
+    return tmp;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RF_Drivers_Atmel/driverRFPhy_h.txt	Sun Mar 15 06:08:30 2015 +0000
@@ -0,0 +1,77 @@
+/*
+ * driverRFPhy.h
+ *
+ *  Created on: 14 July 2014
+ *      Author: mBed Team
+ */
+
+#ifndef DRIVERRFPHY_H_
+#define DRIVERRFPHY_H_
+
+#include "arm_hal_phy.h"    
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*Run calibration every 5 minutes*/
+#define RF_CALIBRATION_INTERVAL 6000000
+/*Wait ACK for 2.5ms*/
+#define RF_ACK_WAIT_TIMEOUT 50
+
+#define RF_BUFFER_SIZE 128
+#define RF_DEFAULT_CHANNEL  11
+
+/*Radio RX and TX state definitions*/
+#define RFF_ON 0x01
+#define RFF_RX 0x02
+#define RFF_TX 0x04
+#define RFF_CCA 0x08
+
+/*Atmel RF states*/
+typedef enum
+{
+    NOP = 0x00,
+    BUSY_RX = 0x01,
+    RF_TX_START = 0x02,
+    FORCE_TRX_OFF = 0x03,
+    FORCE_PLL_ON = 0x04,
+    RX_ON = 0x06,
+    TRX_OFF = 0x08,
+    PLL_ON = 0x09,
+    BUSY_RX_AACK = 0x11,
+    SLEEP = 0x0F,
+    RX_AACK_ON = 0x16,
+    TX_ARET_ON = 0x19
+}rf_trx_states_t;
+
+extern void rf_ack_wait_timer_start(uint16_t slots);
+extern void rf_ack_wait_timer_stop(void);
+extern void rf_handle_cca_ed_done(void);
+extern void rf_handle_tx_end(void);
+extern void rf_handle_rx_end(void);
+extern void rf_on(void);
+extern void rf_receive(void);
+extern void rf_poll_trx_state_change(rf_trx_states_t trx_state);
+extern void rf_init(void);
+extern void rf_set_mac_address(const uint8_t *ptr);
+extern int8_t rf_device_register(void);
+extern int8_t rf_start_cca(uint8_t *data_ptr, uint16_t data_length, uint8_t tx_handle);
+extern void rf_cca_abort(void);
+extern void rf_read_mac_address(uint8_t *ptr);
+extern int8_t rf_read_random(void);
+extern void rf_calibration_cb(void);
+extern uint8_t rf_init_phy_mode(void);
+extern void rf_ack_wait_timer_interrupt(void);
+extern void rf_calibration_timer_interrupt(void);
+extern void rf_calibration_timer_start(uint32_t slots);
+extern void rf_front_end_rx_lna(void);
+extern void rf_front_end_sleep(void);
+static int8_t rf_interface_state_control(phy_interface_state_e new_state, uint8_t rf_channel);
+static int8_t rf_extension(phy_extension_type_e extension_type,uint8_t *data_ptr);
+static int8_t rf_address_write(phy_address_type_e address_type,uint8_t *address_ptr);
+
+ #ifdef __cplusplus
+}
+#endif
+#endif /* DRIVERRFPHY_H_ */
--- a/RF_Drivers_Atmel/low_level_RF.cpp	Sun Mar 15 00:56:28 2015 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/* this file needs customization 
-   according the target hardware
-*/
-
-
-#include "mbed.h"
-
-extern "C" void rf_if_interrupt_handler(void);
-
-#if defined(TARGET_K64F)
-SPI spi(PTD2, PTD3, PTD1);
-#elif defined(TARGET_NUCLEO_F401RE)
-SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK);
-#else
-  "SPI not defined for this platform"
-#endif
-
-DigitalOut RF_CS(D10);
-DigitalOut RF_RST(D5);
-DigitalOut RF_SLP_TR(D7);
-InterruptIn RF_IRQ(D9);
-
-     
-extern "C" void RF_IRQ_Init(void) {
-    
-    RF_IRQ.rise(&rf_if_interrupt_handler);
-}
-
-extern "C" void RF_RST_Set(int state) {
-    RF_RST = state;
-}
-
-extern "C" void RF_SLP_TR_Set(int state) {
-    RF_SLP_TR = state;
-}
-
-extern "C" void RF_CS_while_active(void) {
-    
-    while(!RF_CS);
-}
-
-
-extern "C" int spi_read(char addr) {
-    
-  // Select the device by seting chip select low
-  RF_CS = 0;
-  // Write the reg. address
-  spi.write(addr);
-  // write a dummy value to read the reg. value
-  int val = spi.write(0x00);
-  // Deselect the device
-  RF_CS = 1;
-  return val;
-} 
-
-extern "C" void spi_write(char addr, char val) {
-    
-  // Select the device by seting chip select low
-  RF_CS = 0;
-  // Write the reg. address
-  spi.write(addr);
-  // write the value to the addresses register
-  spi.write(val);
-  // Deselect the device
-  RF_CS = 1;
-}
-
-extern "C" void RF_CS_Set(int state) {
-    RF_CS = state;
-}
-
-extern "C" int spi_exchange(char value) {
-    
-  // write the value
-  int val = spi.write(value);
-    return val;
-}
--- a/RF_Drivers_Atmel/low_level_RF.h	Sun Mar 15 00:56:28 2015 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-#ifndef LOW_LEVEL_RF_H
-#define LOW_LEVEL_RF_H
-
-
-void spi_write(char addr, char val);
-int spi_read(char addr);
-void RF_RST_Set(int state);
-void RF_SLP_TR_Set(int state);
-void RF_CS_while_active(void);
-void RF_CS_Set(int state);
-int spi_exchange(char data);
-void RF_IRQ_Init(void);
-
-#endif  // LOW_LEVEL_RF_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RF_Drivers_Atmel/low_level_RF_cpp.txt	Sun Mar 15 06:08:30 2015 +0000
@@ -0,0 +1,77 @@
+/* this file needs customization 
+   according the target hardware
+*/
+
+
+#include "mbed.h"
+
+extern "C" void rf_if_interrupt_handler(void);
+
+#if defined(TARGET_K64F)
+SPI spi(PTD2, PTD3, PTD1);
+#elif defined(TARGET_NUCLEO_F401RE)
+SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK);
+#else
+  "SPI not defined for this platform"
+#endif
+
+DigitalOut RF_CS(D10);
+DigitalOut RF_RST(D5);
+DigitalOut RF_SLP_TR(D7);
+InterruptIn RF_IRQ(D9);
+
+     
+extern "C" void RF_IRQ_Init(void) {
+    
+    RF_IRQ.rise(&rf_if_interrupt_handler);
+}
+
+extern "C" void RF_RST_Set(int state) {
+    RF_RST = state;
+}
+
+extern "C" void RF_SLP_TR_Set(int state) {
+    RF_SLP_TR = state;
+}
+
+extern "C" void RF_CS_while_active(void) {
+    
+    while(!RF_CS);
+}
+
+
+extern "C" int spi_read(char addr) {
+    
+  // Select the device by seting chip select low
+  RF_CS = 0;
+  // Write the reg. address
+  spi.write(addr);
+  // write a dummy value to read the reg. value
+  int val = spi.write(0x00);
+  // Deselect the device
+  RF_CS = 1;
+  return val;
+} 
+
+extern "C" void spi_write(char addr, char val) {
+    
+  // Select the device by seting chip select low
+  RF_CS = 0;
+  // Write the reg. address
+  spi.write(addr);
+  // write the value to the addresses register
+  spi.write(val);
+  // Deselect the device
+  RF_CS = 1;
+}
+
+extern "C" void RF_CS_Set(int state) {
+    RF_CS = state;
+}
+
+extern "C" int spi_exchange(char value) {
+    
+  // write the value
+  int val = spi.write(value);
+    return val;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RF_Drivers_Atmel/low_level_RF_h.txt	Sun Mar 15 06:08:30 2015 +0000
@@ -0,0 +1,14 @@
+#ifndef LOW_LEVEL_RF_H
+#define LOW_LEVEL_RF_H
+
+
+void spi_write(char addr, char val);
+int spi_read(char addr);
+void RF_RST_Set(int state);
+void RF_SLP_TR_Set(int state);
+void RF_CS_while_active(void);
+void RF_CS_Set(int state);
+int spi_exchange(char data);
+void RF_IRQ_Init(void);
+
+#endif  // LOW_LEVEL_RF_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RF_Drivers_Freescale/PhyDebug.c	Sun Mar 15 06:08:30 2015 +0000
@@ -0,0 +1,137 @@
+/*!
+* Copyright (c) 2015, Freescale Semiconductor, Inc.
+* All rights reserved.
+*
+* \file PhyDebug.c
+* MCR20: PHY debug and logging functions
+*
+* Redistribution and use in source and binary forms, with or without modification,
+* are permitted provided that the following conditions are met:
+*
+* o Redistributions of source code must retain the above copyright notice, this list
+*   of conditions and the following disclaimer.
+*
+* o Redistributions in binary form must reproduce the above copyright notice, this
+*   list of conditions and the following disclaimer in the documentation and/or
+*   other materials provided with the distribution.
+*
+* o Neither the name of Freescale Semiconductor, Inc. nor the names of its
+*   contributors may be used to endorse or promote products derived from this
+*   software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+/************************************************************************************
+*************************************************************************************
+* Includes
+*************************************************************************************
+************************************************************************************/
+
+#include "EmbeddedTypes.h"
+//#include "PortConfig.h"
+#include "MCR20Drv.h"
+#include "MCR20Reg.h"
+#include "Phy.h"
+#include "PhyDebug.h"
+
+
+#ifdef MAC_PHY_DEBUG
+
+
+/************************************************************************************
+*************************************************************************************
+* Private memory declarations
+*************************************************************************************
+************************************************************************************/
+
+uint16_t nDebugIndex = 0, nDebugSize = DEBUG_LOG_ENTRIES * 4;
+uint8_t  nDebugStorage[DEBUG_LOG_ENTRIES * 4];
+
+
+/************************************************************************************
+*************************************************************************************
+* Public functions
+*************************************************************************************
+************************************************************************************/
+
+void PhyDebugLogTime(uint8_t item)
+{
+  uint32_t time;
+  nDebugStorage[nDebugIndex + 0] = item;
+  MCR20Drv_DirectAccessSPIMultiByteRead( (uint8_t) EVENT_TMR_LSB, (uint8_t *) &time, 3);
+  
+  nDebugStorage[nDebugIndex + 3] = (uint8_t) (time >> 0);
+  nDebugStorage[nDebugIndex + 2] = (uint8_t) (time >> 8);
+  nDebugStorage[nDebugIndex + 1] = (uint8_t) (time >> 16);
+  
+  nDebugIndex += 4;
+  if(nDebugIndex >= nDebugSize)
+  {
+    nDebugIndex = 0;
+  }
+}
+
+/***********************************************************************************/
+
+void PhyDebugLogParam1(uint8_t item, uint8_t param1)
+{
+  nDebugStorage[nDebugIndex + 0] = item;
+  nDebugStorage[nDebugIndex + 1] = param1;
+  nDebugStorage[nDebugIndex + 2] = 0;
+  nDebugStorage[nDebugIndex + 3] = 0;
+
+  nDebugIndex += 4;
+  if(nDebugIndex >= nDebugSize)
+  {
+    nDebugIndex = 0;
+  }
+}
+
+/***********************************************************************************/
+
+void PhyDebugLogParam2(uint8_t item, uint8_t param1, uint8_t param2)
+{
+  nDebugStorage[nDebugIndex + 0] = item;
+  nDebugStorage[nDebugIndex + 1] = param1;
+  nDebugStorage[nDebugIndex + 2] = param2;
+  nDebugStorage[nDebugIndex + 3] = 0;
+
+  nDebugIndex += 4;
+  if(nDebugIndex >= nDebugSize)
+  {
+    nDebugIndex = 0;
+  }
+}
+
+/***********************************************************************************/
+
+void PhyDebugLogParam3(uint8_t item, uint8_t param1, uint8_t param2, uint8_t param3)
+{
+  nDebugStorage[nDebugIndex + 0] = item;
+  nDebugStorage[nDebugIndex + 1] = param1;
+  nDebugStorage[nDebugIndex + 2] = param2;
+  nDebugStorage[nDebugIndex + 3] = param3;
+
+  nDebugIndex += 4;
+  if(nDebugIndex >= nDebugSize)
+  {
+    nDebugIndex = 0;
+  }
+}
+
+/***********************************************************************************/
+
+#endif /* MAC_PHY_DEBUG */
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RF_Drivers_Freescale/PhyDebug.h	Sun Mar 15 06:08:30 2015 +0000
@@ -0,0 +1,145 @@
+/*!
+* Copyright (c) 2015, Freescale Semiconductor, Inc.
+* All rights reserved.
+*
+* \file PhyDebug.h
+*
+* Redistribution and use in source and binary forms, with or without modification,
+* are permitted provided that the following conditions are met:
+*
+* o Redistributions of source code must retain the above copyright notice, this list
+*   of conditions and the following disclaimer.
+*
+* o Redistributions in binary form must reproduce the above copyright notice, this
+*   list of conditions and the following disclaimer in the documentation and/or
+*   other materials provided with the distribution.
+*
+* o Neither the name of Freescale Semiconductor, Inc. nor the names of its
+*   contributors may be used to endorse or promote products derived from this
+*   software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef _PHY_DEBUG_H_
+#define _PHY_DEBUG_H_
+
+
+/************************************************************************************
+*************************************************************************************
+* Includes
+*************************************************************************************
+************************************************************************************/
+//#include "MacPhyDebug.h"
+
+
+// a value of zero disables the logging of that event
+#define  PDBG_SET_EVENT_TRIGGER       0x01 // 2 parameters
+#define  PDBG_SET_EVENT_TIMEOUT       0x02 // 3 parameters
+#define  PDBG_DISABLE_EVENT_TIMEOUT   0x03
+#define  PDBG_READ_CLOCK              0x04
+#define  PDBG_INIT_EVENT_TIMER        0
+
+#define  PDBG_WTRMRK_VECT_INTERRUPT   0x06
+#define  PDBG_TIMERS_VECT_INTERRUPT   0x07
+#define  PDBG_TX_VECT_INTERRUPT       0x08
+#define  PDBG_RX_VECT_INTERRUPT       0x09
+
+#define  PDBG_CCA_CONFIRM_IDLE        0x0A
+#define  PDBG_CCA_CONFIRM_BUSY        0x0B
+#define  PDBG_DATA_CONFIRM            0x0C
+#define  PDBG_DATA_INDICATION         0x0D
+#define  PDBG_ED_CONFIRM              0x0E
+#define  PDBG_SYNC_LOSS_INDICATION    0x0F
+
+#define  PDBG_UNLOCK_IRQ              0x10
+#define  PDBG_WTRMARK_IRQ             0x11
+#define  PDBG_START_INDICATION        0x12
+#define  PDBG_TIMEOUT_INDICATION      0x13
+#define  PDBG_TMR1_IRQ                0x14
+#define  PDBG_TMR4_IRQ                0x15
+#define  PDBG_FILTER_FAIL_IRQ         0x16
+#define  PDBG_TX_IRQ                  0x17
+#define  PDBG_RX_IRQ                  0x18 // 1 parameter
+#define  PDBG_CCA_IRQ                 0x19
+#define  PDBG_SEQ_IRQ                 0x1A // 1 parameter
+
+#define  PDBG_PHY_INIT                0x20
+#define  PDBG_PHY_ABORT               0x21
+#define  PDBG_PP_SET_PROMISC          0
+#define  PDBG_PP_SET_PANID_PAN0       0x23
+#define  PDBG_PP_SET_SHORTADDR_PAN0   0x24
+#define  PDBG_PP_SET_LONGADDR_PAN0    0x25
+#define  PDBG_PP_SET_MACROLE_PAN0     0x26
+#define  PDBG_PP_ADD_INDIRECT         0x27 // 1 parameter
+#define  PDBG_PP_REMOVE_INDIRECT      0x28 // 1 parameter
+#define  PDBG_PP_READ_LATEST_INDEX    0x29 // 1 parameter
+
+#define  PDBG_DATA_REQUEST            0x30
+#define  PDBG_PLME_RX_REQUEST         0x31
+#define  PDBG_PLME_CCA_ED_REQUEST     0x32
+#define  PDBG_PLME_SET_CHAN_REQUEST   0x33
+#define  PDBG_PLME_SET_POWER_REQUEST  0x34
+#define  PDBG_PLME_WAIT_REQUEST       0x35
+
+#define  PDBG_PP_SET_PANID_PAN1       0x36
+#define  PDBG_PP_SET_SHORTADDR_PAN1   0x37
+#define  PDBG_PP_SET_LONGADDR_PAN1    0x38
+#define  PDBG_PP_SET_MACROLE_PAN1     0x39
+
+//simple events - without timestamp
+//*****  PDBG_MAC_FUNCTION_CALL       PDBG_SIMPLE_EVENT        // 3 parameters
+#define  PDBG_READ_FSM                PDBG_SIMPLE_EVENT + 0x01 // 1 parameter
+#define  PDBG_FILTER_FAIL_CODE        PDBG_SIMPLE_EVENT + 0x02 // 2 parameters
+
+
+#ifdef MAC_PHY_DEBUG
+
+#define  DEBUG_LOG_ENTRIES  768
+
+#define  PHY_DEBUG_LOG(item)                       if(PDBG_RESERVED_EVENT!=item){PhyDebugLogTime(item);}
+#define  PHY_DEBUG_LOG1(item,param)                if(PDBG_RESERVED_EVENT!=item){PhyDebugLogTime(PDBG_EXTENDED_EVENT | item);PhyDebugLogParam1(item,param);}
+#define  PHY_DEBUG_LOG2(item,param1,param2)        if(PDBG_RESERVED_EVENT!=item){PhyDebugLogTime(PDBG_EXTENDED_EVENT | item);PhyDebugLogParam2(item,param1,param2);}
+#define  PHY_DEBUG_LOG3(item,param1,param2,param3) if(PDBG_RESERVED_EVENT!=item){PhyDebugLogTime(PDBG_EXTENDED_EVENT | item);PhyDebugLogParam3(item,param1,param2,param3);}
+
+#define  PHY_DEBUG_LOG_SIMPLE1(item,param)                if(PDBG_RESERVED_EVENT!=item){PhyDebugLogParam1(item,param);}
+#define  PHY_DEBUG_LOG_SIMPLE2(item,param1,param2)        if(PDBG_RESERVED_EVENT!=item){PhyDebugLogParam2(item,param1,param2);}
+#define  PHY_DEBUG_LOG_SIMPLE3(item,param1,param2,param3) if(PDBG_RESERVED_EVENT!=item){PhyDebugLogParam3(item,param1,param2,param3);}
+
+void PhyUnexpectedTransceiverReset(void);
+
+void PhyDebugLogTime(uint8_t item);
+void PhyDebugLogParam1(uint8_t item, uint8_t param1);
+void PhyDebugLogParam2(uint8_t item, uint8_t param1, uint8_t param2);
+void PhyDebugLogParam3(uint8_t item, uint8_t param1, uint8_t param2, uint8_t param3);
+
+
+#else /* not def MAC_PHY_DEBUG */
+
+#define PhyUnexpectedTransceiverReset()
+
+#define  PHY_DEBUG_LOG(item)
+#define  PHY_DEBUG_LOG1(item,param)
+#define  PHY_DEBUG_LOG2(item,param1,param2)
+#define  PHY_DEBUG_LOG3(item,param1,param2,param3)
+
+#define  PHY_DEBUG_LOG_SIMPLE1(item,param)
+#define  PHY_DEBUG_LOG_SIMPLE2(item,param1,param2)
+#define  PHY_DEBUG_LOG_SIMPLE3(item,param1,param2,param3)
+
+#endif /* MAC_PHY_DEBUG */
+
+
+#endif /* _PHY_DEBUG_H_ */
+
+
+
--- a/RF_Drivers_Freescale/PhyTime.c	Sun Mar 15 00:56:28 2015 -0500
+++ b/RF_Drivers_Freescale/PhyTime.c	Sun Mar 15 06:08:30 2015 +0000
@@ -464,7 +464,7 @@
 
     gpfPhyTimeNotify = cb;
     gPhyTimerOverflow = 0;
-    FLib_MemSet( mPhyTimers, 0, sizeof(mPhyTimers) );
+    memset( mPhyTimers, 0, sizeof(mPhyTimers) );
 
     /* Schedule Overflow Calback */
     pNextEvent = &mPhyTimers[0];