Repo for COM_MNG_TMTC_SIMPLE for integration with adf

Dependencies:   mbed-rtos mbed

Fork of COM_MNG_TMTC_SIMPLE by Shreesha S

adf.h

Committer:
shekhar
Date:
2015-12-31
Revision:
8:d1951bbdcdd8
Parent:
7:4e744637b2e8
Child:
9:9dbd59a6cc30

File content as of revision 8:d1951bbdcdd8:

//without reset feature , with state checks.

//Adding following algo for reset feature
//1. Check for reset flag, if true then
//2. Modify values of the relevant flags
//3. Attach the new pointer to head_pointer of the class
//4. Ensure the values are modified.
//in restart_adf write 2 times writing and transmitting and detach-attach ticker

#include<iostream>
//#include"mbed.h"
#define ADF_IRQ PTA14
#define SPI_MOSI PTE1
#define SPI_MISO PTE3
#define SPI_CLK PTE2
#define SPI_CS_ADF PTA15


#include"stdio.h" // remove on adding "mbed.h"
FILE *fp;
//replace with          spi.write(buffer_112[i]);\

//modified : if(sent_tmfrom_SDcard){\
    }else{\
        snd_tm.transmit_data(buffer_112,&last_buffer);\
    }\
    //took this from write_data and put to  check
// commented IRQ
//commented send_TM_FROM_SDCARD in "sdcread.h"
//commented initiate
// deleted spi.write from write_data



//Serial gPC( USBTX, USBRX );
//gPC.baud(1200);
//InterruptIn IRQ(ADF_IRQ);
//Ticker ticker;
//SPI spi(PTE1, PTE3, PTE2);
//DigitalOut gCS_ADF(SPI_CS_ADF);
unsigned int Adf_data_counter=0;
unsigned char status =0;
unsigned int cmd_err_cnt=0;
unsigned int state_err_cnt=0;
unsigned int miso_err_cnt=0;
unsigned int hw_reset_err_cnt=0;
bool bcn_flag=0;
bool bbram_flag=0;

bool stop_transmission=false;
bool sent_tmfrom_SDcard;
bool loop_on;
bool ADF_off;
bool buffer_state;
uint8_t signal = 0x00;
uint8_t bbram_buffer[66]={0x19,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0xF4,0xC2,0x10,0xC0,0x00,0x30,0x31,0x07,0x00,0x01,0x00,0x7F,0x00,0x0B,0x37,0x00,0x00,0x40,0x0C,0x00,0x05,0x00,0x00,0x18,0x12,0x34,0x56,0x10,0x10,0xC4,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00};
uint8_t Adf_data[100]={};       //Data to be transmitted
//uint8_t buffer_112[112];
//int initialise_card();
//int disk_initialize();


//void transmitdata(){       // copy the data to be transmitted to bufer_112
//    for(int i=0;i<112;i++){
//        buffer_112[i]=Adf_data[Adf_data_counter];
//        if(100==Adf_data_counter){
//            Adf_data_counter++;
//            stop_transmission= true;
//            break;
//        }
//     }
//}

#define bbram_write {\
    gCS_ADF=0;\
    spi.write(0xB0);\
    wait_us(300);\
    gCS_ADF=1;\
    gCS_ADF=0;\
    for(int i=0;i<66;i++){\
        spi.write(bbram_buffer[i]);\
    }\
    gCS_ADF=1;\
}
//------------------------------------------------------------------------
// state checking functions
//bool assrt_phy_off( int, int, int);
//bool assrt_phy_on( int,int,int);
//bool assrt_phy_tx(int,int,int);

#define START_ADDRESS 0x020;
#define MISO_PIN PTE3
/**************Defining Counter Limits**************/
#define THRS 20
#define STATE_ERR_THRS 20
#define PHY_OFF_EXEC_TIME 300
#define PHY_ON_EXEC_TIME 300
#define PHY_TX_EXEC_TIME 600
/******DEFINING COMMANDS*********/
#define CMD_HW_RESET 0xC8
#define CMD_PHY_ON 0xB1
#define CMD_PHY_OFF 0xB0
#define CMD_PHY_TX 0xB5
#define CMD_CONFIG_DEV 0xBB

#define check_status {\
    unsigned char stat=0;\
    gCS_ADF=0;\
    spi.write(0xFF);\
    stat = spi.write(0xFF);\
    gCS_ADF=1;\
    status = stat;\
}

// all three arguments are int
#define assrt_phy_off(return_this) {\
    int cmd_err_cnt = 0;\
    int spi_err_cnt = 0;\
    int state_err_cnt = 0;\
    for(int i = 0 ; i < 40 ;i++){\
        check_status;\
        if(status == 0xB1){\
            return_this = 0;\
            break;\
        }\
        else if(cmd_err_cnt>THRS||spi_err_cnt>THRS){\
            return_this = 1;\
            break;\
        }\
        else if(state_err_cnt>STATE_ERR_THRS){\
            return_this = 1;\
            break;\
        }\
        else if( (status & 0xA0) == 0xA0 ){\
            gCS_ADF=0;\
            spi.write(CMD_PHY_OFF);\
            gCS_ADF=1;\
            wait_us(PHY_OFF_EXEC_TIME);\
            state_err_cnt++;\
        }\
        else if(status&0x80==0x00){\
            wait_ms(5);\
            spi_err_cnt++;\
        }\
        else {\
            wait_ms(1);\
            cmd_err_cnt++;\
        }\
    }\
}




#define initial_adf_check {\
            bbram_flag=1;\
}

//bool hardware_reset(int bcn_call){
//    for(int i= 0; i < 20 ; i++){
//        gCS_ADF=0;
//        spi.write(CMD_HW_RESET);
//        gCS_ADF=1;
//        wait_ms(2);// Typically 1 ms
//        int count=0;
//        int temp_return = 0;
//        while(count<10 && miso_err_cnt<10){
//            if(MISO_PIN){
//                assrt_phy_off(temp_return);
//                if(!temp_return){
//                    return 0;
//                }
//                count++;
//            }
//            else{
//                wait_us(50);
//                miso_err_cnt++;
//            }
//        }
//    }
//    return 1;
//}
//for reseting the transmission call assert function after b5 and b1. after b1 assert_phi_on and after b5 assert_phi_tx.
//----------------------------------------------------------------------------
//
//# define initiate {\
//    gCS_ADF=0;\
//    spi.write(0xFF);\
//    spi.write(0xFF);\
//    gCS_ADF=1;\
//    gCS_ADF=0;\
//    spi.write(0x08);\
//    spi.write(0x14);\
//    spi.write(0xFF);\
//    gCS_ADF=1;\
//    gCS_ADF=0;\
//    spi.write(0x08);\
//    spi.write(0x15);\
//    spi.write(0xFF);\
//    gCS_ADF=1;\
//    gCS_ADF=0;\
//    spi.write(0x09);\
//    spi.write(0x24);\
//    spi.write(0x20);\
//    gCS_ADF=1;\
//    gCS_ADF=0;\
//    spi.write(0x09);\
//    spi.write(0x37);\
//    spi.write(0xE0);\
//    gCS_ADF=1;\
//    gCS_ADF=0;\
//    spi.write(0x09);\
//    spi.write(0x36);\
//    spi.write(0x70);\
//    gCS_ADF=1;\
//    gCS_ADF=0;\
//    spi.write(0x09);\
//    spi.write(0x39);\
//    spi.write(0x10);\
//    gCS_ADF=1;\
//}


#define write_data {\
    if(buffer_state){\
        for(unsigned char i=0; i<112;i++){\
            fprintf(fp,"0x%02X,",buffer_112[i]);\
        }\
    }\
    else\
    {\
        for(unsigned char i=0; i<112;i++){\
            fprintf(fp,"0x%02X,",buffer_112[i]);\
        }\
    }\
    buffer_state = !buffer_state;\
}
//void send_tm_from_SD_card(){
//    }
//
//void check(){
//    if(IRQ){
//        if(!ADF_off){
//                snd_tm.transmit_data(buffer_112,&last_buffer);
//                write_data;
//         }
//         else{
 //           ticker.detach();
 //           gCS_ADF=0;
//            spi.write(0xB1);
//            gCS_ADF=1;
//            gPC.puts("transmission done\r\n");
//            loop_on=false;
 //        }
 //   }
//}
//
//#define send_data {\
//    gCS_ADF=0;\
//    spi.write(0xBB);\
//    gCS_ADF=1;\
//    gCS_ADF=0;\
//    spi.write(0xFF);\
//    spi.write(0xFF);\
//    gCS_ADF=1;\
//    if(sent_tmfrom_SDcard){\
//        send_tm_from_SD_card();\
//    }else{\
//        transmitdata();\
//    }\
//    write_data;\
//    if(sent_tmfrom_SDcard){\
//        send_tm_from_SD_card();\
//    }else{\
//        transmitdata();\
//    }\
//    write_data;\
//    if(sent_tmfrom_SDcard){\
//        send_tm_from_SD_card();\
//    }else{\
//        transmitdata();\
//    }\
//    gCS_ADF=0;\
//    spi.write(0xB1);\
//    gCS_ADF=1;\
//    wait_us(300);\
//    gCS_ADF=0;\
//    spi.write(0xFF);\
//    spi.write(0xFF);\
//    gCS_ADF=1;\
//    gCS_ADF=0;\
//    spi.write(0xB5);\
//    gCS_ADF=1;\
//    wait_us(300);\
//    gCS_ADF=0;\
//    spi.write(0xFF);\
//    spi.write(0xFF);\
//    gCS_ADF=1;\
//    ticker.attach_us(&check,32000);\
//}

#define send_data {\
        snd_tm.transmit_data(buffer_112,&last_buffer);\
    write_data;\
        snd_tm.transmit_data(buffer_112,&last_buffer);\
    write_data;\
    while(loop_on)\
    {\
        if(!last_buffer && !snd_tm.reset_adf){\
                snd_tm.transmit_data(buffer_112,&last_buffer);\
                write_data;\
         }else if(snd_tm.reset_adf && !last_buffer){\
            restart_adf;snd_tm.reset_adf=false;\
         }\
         else if(last_buffer){\
            loop_on=false;\
         }\
    }\
}
#define restart_adf
void adf_not_SDcard(){
    buffer_state = true;
    last_buffer = false;
    loop_on = true;
    ADF_off = false;
    sent_tmfrom_SDcard = false;

 //   signal = COM_MNG_TMTC_SIGNAL_ADF_NSD;
 //   initial_adf_check;
 //   initiate;
    send_data;
//    gPC.puts("Inside adf transmission\r\n");
//    ADF_non_responsive_timeout.attach(&ADF_non_responsive_fun, 10);

}